const defaultHeaders = { mode: 'no-cors', 'Sec-Fetch-Mode': 'no-cors' }; // const HOST = `http://202.103.68.144:890/service-CooperateSOA`; // debug: 0 const HOST = `https://p9axztuwd7x8a7.mycht.cn/service-CooperateSOA`; const index = new Vue({ el: '#app', computed: { isWideScreen() { return window.innerWidth >= 768; // Adjust the threshold as needed }, drawWidth() { return window.innerWidth < 768 ? Math.floor(window.innerWidth - 40) : 760; // Adjust the threshold as needed }, isEmptyData() { return this.feedbackItem.guide.length === 0 && this.feedbackItem.driver.length === 0 && this.feedbackItem.experience.length === 0 && this.feedbackItem.hotel.length === 0; }, }, data() { return { timer: null, error: false, errorMsg: '', webcode: 'ah', i18n: { title: ''}, param: {}, loading: false, cityListPage: true, resultPage: false, cityList: [], currentCity: {}, cityListOpen: false, feedbackCity: {}, isFilled: false, feedbackItemList: [], feedbackItem: { guide: [], driver: [], experience: [], hotel: [] }, tourGuideList: [], feedbackEvaluation: [], group: {}, showPhotos: false, signaturePad: null, debug: false, }; }, created() { console.clear(); console.log('invoke vue', typeof this); this.initData(); }, methods: { initData() { this.webcode = webList[hostname] || webList.default; for (const param of urlParams) { this.param[param[0]] = param[1]; } this.debug = this.param.debug || false; this.resultPage = !isEmpty(this.param.r); var urlPath = window.location.pathname.replace('/customerfeedback/', '').split('-'); // .filter(s => s); urlPath = urlPath.length >= 3 ? urlPath : window.location.pathname.replace('/customerfeedback/', '').split('/'); if (urlPath.length > 0 && isEmpty(this.param.g)) { this.param.g = urlPath[0]; this.param.v = urlPath[1]; this.param.l = urlPath[2] || 1; this.resultPage = !isEmpty(urlPath[3]); this.debug = !isEmpty(urlPath[4]); this.resultPage = !isEmpty(urlPath[4]) ? false : !isEmpty(urlPath[3]); } console.log(this.param); if (!(this.param.v && this.param.g)) { this.error = true; this.errorMsg = 'Invalid URL'; return false; } // console.log('resultPage', this.resultPage); this.i18n = lanCodeMapped[String(this.param.l)]; var that = this; Array.from(document.getElementsByTagName('h1')).forEach(function(ele){ ele.textContent = that.i18n.title; }); this.loading = true; // console.log('resultPage', this.loading); this.getCityList(); }, getCityList() { if (!(this.param.v && this.param.g)) { return false; } const that = this; get(`${HOST}/get_feedback_city`, { GRI_SN: that.param.g, VEI_SN: that.param.v, lgc: this.param.l }, { headers: { ...{} } }).then((res) => { that.loading = false; that.error = res.cityList.length === 0; that.errorMsg = 'No city found'; const mergeCity = groupBy(res.cityList, (ele) => (isEmpty(ele.tourGuideId) ? 'unknown' : ele.tourGuideId)); const mergeCityA = Object.keys(mergeCity).reduce((r, tgid) => { if (tgid !== 'unknown') { const uniqueCII_SN = mergeCity[tgid].map((v) => v.cii_sn).filter((v, i, a) => a.indexOf(v) === i); const uniqueCII_Name = mergeCity[tgid].map((v) => v.cityName).filter((v, i, a) => a.indexOf(v) === i); return r.concat( mergeCity[tgid].length > 1 ? [ { ...mergeCity[tgid][0], cii_sn: uniqueCII_SN.join('_'), cii_sn_arr: uniqueCII_SN, cityName: uniqueCII_Name.join(' & '), feedback_Filled: mergeCity[tgid].reduce((r, v) => r + v.feedback_Filled, 0) > 0, // cities: mergeCity[tgid], }, ] : mergeCity[tgid][0] ); } return r.concat(mergeCity[tgid]); }, []); // console.log(mergeCityA, that.error); that.cityList = mergeCityA; if (mergeCityA.length === 1) { that.selectCity(mergeCityA[0]); } }); }, selectCity(city) { window.scrollTo({ top: 100, behavior: 'smooth' }); this.cityListOpen = false; if (this.currentCity.cii_sn === city.cii_sn) { return false; } // this.cityListPage = false; this.feedbackEvaluation = []; this.loading = true; const _param = { GRI_SN: this.param.g, VEI_SN: this.param.v, // CITY_SN: city.cii_sn, lgc: this.param.l, }; const selectedCity = Object.assign({}, city, _param); // console.log(selectedCity); this.currentCity = selectedCity; this.feedbackItem.hotel = []; if (selectedCity.cii_sn_arr) { for (const iterator of selectedCity.cii_sn_arr) { this.getData(Object.assign({}, _param, { CITY_SN: iterator }), true); } } else { this.getData(Object.assign({}, _param, { CITY_SN: selectedCity.cii_sn })); } // setTimeout(() => { // if (this.feedbackItem.guide.length === 0 // && this.feedbackItem.driver.length === 0 // && this.feedbackItem.experience.length === 0 // && this.feedbackItem.hotel.length === 0 // ) { // this.error = true; // this.errorMsg = 'Data error.'; // return false; // } // }, 1000); }, initSignature() { var canvas = document.getElementById('signature-pad'); this.signaturePad = new SignaturePad(canvas, { backgroundColor: '#f8f8f8', penColor: 'rgb(50, 50, 50)', }); const ratio = Math.max(window.devicePixelRatio || 1, 1); canvas.width = canvas.offsetWidth * ratio; canvas.height = canvas.offsetHeight * ratio; canvas.getContext('2d').scale(ratio, ratio); this.signaturePad.clear(); // otherwise isEmpty() might return incorrect value }, clearSignature() { var data = this.signaturePad.toDataURL('image/svg+xml'); // console.log(data); this.signaturePad.clear(); }, getData(param, continually = false) { const that = this; get(`${HOST}/get_feedback_service_item`, param, { headers: { ...{} } }).then((res) => { that.loading = false; if (res.errcode !== 0) { if (continually === false) { that.error = true; that.errorMsg = 'Data error.'; } return false; } that.feedbackCity[`city_${res.feedbackEvaluation[0].feedback_cii_sn}`] = res; const itemGroup = groupBy(res.feedbackItemList, (ele) => ele.type); that.feedbackItem.guide = itemGroup.W ? itemGroup.W : []; that.feedbackItem.driver = itemGroup.Y ? itemGroup.Y.filter(ele => ele.Describe !== '') : []; let experience = []; if (itemGroup['7']) { experience = experience.concat(itemGroup['7']); } if (itemGroup.C) { experience = experience.concat(itemGroup.C); } if (itemGroup.G) { experience = experience.concat(itemGroup.G); } let hotel = []; if (itemGroup.A) { hotel = hotel.concat( itemGroup.A.map(function (ele) { var newEle = Object.assign({}, ele); newEle.Describe = `${ele.name} ${res.group[0].cityName}`; return newEle; }) ); that.currentCity[`city_${res.feedbackEvaluation[0].feedback_cii_sn}`] = hotel; } if (continually) { const mergeHotel = [].concat(that.feedbackItem.hotel, hotel); that.feedbackItem.experience = [].concat(experience, mergeHotel); that.feedbackItem.hotel = mergeHotel; } else { that.feedbackItem.experience = [].concat(experience, hotel); } that.feedbackItemList = res.feedbackItemList; that.tourGuideList = res.tourGuideList; that.feedbackEvaluation = [].concat(that.feedbackEvaluation, res.feedbackEvaluation); that.group = res.group[0]; // 已经填写过了 // that.isFilled = !isEmpty(res.feedbackEvaluation[0].signatureDataUrl); that.isFilled = that.currentCity.feedback_Filled || !isEmpty(res.feedbackEvaluation[0].signatureDataUrl); that.cityListPage = that.debug ? false : that.resultPage ? false : that.isFilled; if (that.resultPage || that.isFilled) { // that.signaturePad.fromDataURL(that.feedbackEvaluation.signatureDataUrl); } else { setTimeout(() => { that.initSignature(); }, 100); } if (that.debug) { setTimeout(() => { that.initSignature(); }, 100); } that.showPhotos = res.group[0].inTheEnd; // alert("Thank you for completing the Feedback Evaluation. Once submitted the tour guide would not be able to view your comments. "); }); }, submitForm() { const that = this; event.preventDefault(); if (that.signaturePad && that.signaturePad.isEmpty()) { alert('Please provide a signature first.'); } else { that.loading = true; // var data = that.signaturePad.toDataURL(); // default: image/png var data = that.signaturePad.toDataURL('image/svg+xml'); var form = document.getElementById('myForm'); // Create a FormData instance var formData = new FormData(form); formData.append('signature', data); // Convert the FormData to a plain object var formValues = Array.from(formData.entries()).reduce((obj, [key, value]) => { obj[key] = value; return obj; }, {}); const citySNList = that.currentCity.cii_sn_arr || [that.currentCity.cii_sn]; for (const iterator of citySNList) { const rateArr = that.feedbackCity[`city_${iterator}`].feedbackItemList.map((ele) => { return { id: ele.id, name: ele.name, rate: formValues[`rate-${ele.type}-${ele.syc_sn}-${ele.sn}`] || 0 }; }); // Submit the form manually // console.log(formValues, rateArr); // continue; postForm( `${HOST}/save_feedback`, { EOI_SN: that.group.EOI_SN, GRI_SN: that.currentCity.GRI_SN, VEI_SN: that.currentCity.VEI_SN, // country_id:, // tour_guide_id: that.currentCity.tourGuideId, tour_guide_id: that.feedbackCity[`city_${iterator}`].feedbackEvaluation[0] ? that.feedbackCity[`city_${iterator}`].feedbackEvaluation[0].tourGuideId : undefined, city_sn: iterator, use_the_photos: formValues.photo_permission || -1, other_comments: formValues.comments, desired_next: formValues.desired_next, feedback_id: that.feedbackCity[`city_${iterator}`].feedbackEvaluation[0] ? that.feedbackCity[`city_${iterator}`].feedbackEvaluation[0].feedbackId : undefined, service_item_answer: JSON.stringify(rateArr), signature_data_url: formValues.signature, }, { headers: { ...{} } } ).then((res) => { that.loading = false; if (res.errcode == 0) { that.isFilled = true; that.cityListPage = true; that.currentCity = {}; } else { } }); } } }, cancel() { this.cityListPage = true; this.currentCity = {}; }, toggleCityList() { this.cityListOpen = !this.cityListOpen; }, }, });