You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

197 lines
16 KiB
HTML

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="0" />
<title>One Minute Feedback - Help Us Serve You Better</title>
<style>body{font-family:Arial,sans-serif;color:#333}.text-primary{color:#b43c1a}h3,h5,p{margin:.5em 0}.header-m{background:#ad1818;color:#fff;padding:.5em}.header-pc{height:90px!important;display:flex;align-items:center;justify-content:flex-start;background:#ad1818;color:#fff;padding:0 20px}.header-pc img{position:absolute;top:0;margin-right:20px;height:104px;width:auto;border-radius:0 0 3px 3px;background-color:#fff;box-shadow:1px 1px 10px 1px rgba(77,77,77,.7);-webkit-box-shadow:1px 1px 10px 1px rgba(77,77,77,.7);-moz-box-shadow:1px 1px 10px 1px rgba(77,77,77,.7)}.header-pc h1{margin:0;margin-left:240px}.form-container{width:100%;max-width:768px;margin:0 auto;margin-top:1.5em}form.form-container{counter-reset: hq;}form.form-container h4::before {counter-increment: hq; content: counter(hq) ". ";}.question{display:flex;flex-direction:column;align-items:start;margin-bottom:10px}.question h4{position:sticky;top:0;background-color:#fff;margin-top:0;padding-top:1.33em}.question-items{display:flex;flex-direction:column;align-items:start;margin-bottom: 10px;}.options{display:flex;flex-direction:column;align-items:start;}.options-row{flex-direction:row;justify-content:flex-end;align-items:baseline}.options-row-reverse{flex-direction:row-reverse;justify-content:flex-end;align-items:baseline}.radio-container{display:flex;align-items:center;margin-bottom:5px;margin-top: 5px;max-width: 140px;}.radio-container input[type=radio]{display:none}.radio-container label{margin-left:8px}.radio-container input[type=radio]:checked+.radio-label{background-color:#d54e21;color:#fff}.radio-label{display:inline-block;padding:5px 10px;border:1px solid #d54e21;border-radius:20px;transition:all .3s ease;font-size:14px}label.radio-label svg{vertical-align:text-bottom}.feedback{margin-top:10px}.feedback textarea{width:90%;padding:10px;resize:vertical;border:1px solid #d54e21;border-radius:5px}.form-btn{display:block;width:100%;padding:10px;margin-top:20px;border:none;border-radius:20px;cursor:pointer;transition:all .3s ease;background:0 0;border:1px solid #d54e21;color:#d54e21}.submit-btn{background-color:#d54e21;color:#fff}.submit-btn:hover{background-color:#b43c1a}.cancel-btn:hover{background-color:#00000011}.info-container{display:flex;flex-direction:column;justify-content:space-between;margin-bottom:10px}.info-item{margin-bottom:10px}.info-item p{color:#b43c1a}.signature-pad{border:1px solid #d54e21;border-radius:5px;z-index:10}.signature-container{display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start;flex-wrap:wrap}.button-container{margin-left:.5em;display:flex;flex-direction:column;justify-content:flex-start}.button{margin-top:1em;padding:10px;background-color:#d54e21;color:#fff;border:none;border-radius:5px;cursor:pointer}@media (min-width:768px){body{margin-left:0;margin-right:0;margin-top:0;padding-left:0;padding-right:0;padding-top:0}.question-items{width:100%;flex-direction:row;justify-content:space-between;align-items:baseline}.question-items h5{max-width: 8rem;}.question-items .options{flex:1 1 auto}.options{flex-direction:row;justify-content:flex-end;align-items: center;}.info-container{flex-direction:row}.info-item{flex:1;margin-right:10px;margin-bottom:0}.info-item:last-child{margin-right:0}.header-m{display:none}.signature-container{flex-direction:row}}@media (max-width:767px){.header-pc{display:none}}</style>
<style>
#result{text-align:center;padding:20px}.bi-check-circle-fill,.bi-exclamation-circle-fill,.bi-x-circle-fill{fill:#d54e21}.bi-x-circle-fill{fill:#d54e21}
</style>
<style>#loading-mask{width:100vw;height:100vh;background-color:#00000099;position:fixed;left:0;top:0;display:flex}.lds-facebook{display:inline-block;position:relative;width:80px;height:80px;margin:auto}.lds-facebook div{display:inline-block;position:absolute;left:8px;width:16px;background:#fff;animation:lds-facebook 1.2s cubic-bezier(0,.5,.5,1) infinite}.lds-facebook div:nth-child(1){left:8px;animation-delay:-.24s}.lds-facebook div:nth-child(2){left:32px;animation-delay:-.12s}.lds-facebook div:nth-child(3){left:56px;animation-delay:0}@keyframes lds-facebook{0%{top:8px;height:64px}100%,50%{top:24px;height:32px}}</style>
<style>.city-page{display:flex;flex-direction:column;align-items:center}.city-list{list-style-type:none;padding:0;width:260px;background-color:#fff;border-radius:5px;box-shadow:0 0 10px rgba(0,0,0,.1)}.city-list li{padding:20px;border-top:1px solid #d54e21;border-bottom:1px solid #d54e21;transition:background-color .3s;position:relative}.city-list li.active{color:#d54e21}.city-list li.filled::after{content:'✔';position:absolute;right:20px;color:#d54e21;transition:color .3s}.city-list li:hover{background-color:#d54e21;color:#fff}.city-list li.filled:hover::after{color:#fff}</style>
<style>.float-button{position:fixed;right:20px;bottom:120px;background-color:transparent;color:#d54e21;border:1px solid #d54e21;border-radius:50%;width:60px;height:60px;text-align:center;line-height:60px;font-size:24px;cursor:pointer;box-shadow:0 0 10px rgba(0,0,0,.1);z-index:1}.float-button:hover{background-color:#d54e21;color:#fff}.float-text{position:fixed;right:20px;bottom:190px;color:#d54e21;font-size:18px;text-align:right;z-index:-1;width: 100px;}.expand-list{list-style-type:none;position:fixed;right:20px;bottom:190px;width:260px;background-color:#fff;border-radius:5px;box-shadow:0 0 10px rgba(0,0,0,.1);padding:0;max-height:0;overflow:hidden;opacity:0;transition:max-height .5s ease,opacity .5s ease}.expand-list.open{max-height:500px;opacity:1;z-index: 99;}.expand-list li{padding:20px;border-bottom:1px solid #d54e21;transition:background-color .3s;position: relative;}.expand-list li:last-child{border-bottom:none}.expand-list li.active{color:#d54e21}.expand-list li.filled::after{content:'✔';position:absolute;right:20px;color:#d54e21;transition:color .3s}.expand-list li:hover{background-color:#d54e21;color:#fff}.expand-list li.filled:hover::after{color:#fff}</style>
<style>.star-rating{direction:rtl;display:inline-block}.star-rating input[type=radio]{display:none}.star-rating label{font-size:30px;color:#d3d3d3;cursor:pointer}.star-rating input[type=radio]:checked~label,.star-rating input[type=radio]~label.checked,.star-rating label:hover,.star-rating label:hover~label{color:#d54e21}.rate-meaning{display:inline-block;margin-left:15px;vertical-align:middle;color:#d54e21}</style>
<script src="./utils.js"></script>
<script src="./vue@2.js"></script>
<script src="./signature_pad.umd.min.js"></script>
</head>
<body>
<div id="app">
<div class="header-pc">
<a href="https://www.asiahighlights.com/" v-if="webcode=='ah'">
<img src="https://data.asiahighlights.com/pic/logo-ah.png" alt="Logo" width="130" height="104">
</a>
<a href="/" v-if="webcode=='gh'">
<img src="https://data.chinahighlights.com/image/aboutus/logo-gh.png" alt="Logo" width="130" height="104">
</a>
<!-- <h1>{{i18n.title}}</h1> -->
<h1></h1>
</div>
<div class="header-m">
<h1></h1>
</div>
<div class="form-container" id="main">
<div id="result" v-if="error || (!cityListPage && isEmptyData)">
<!-- <svg xmlns="http://www.w3.org/2000/svg" width="50" height="50" fill="currentColor" class="bi bi-x-circle-fill" viewBox="0 0 16 16">
<path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0zm-3.5-4.5a.5.5 0 0 0-.707 0L8 7.293 5.207 4.5a.5.5 0 0 0-.707.707L7.293 8l-2.793 2.793a.5.5 0 0 0 .707.707L8 8.707l2.793 2.793a.5.5 0 0 0 .707-.707L8.707 8l2.793-2.793a.5.5 0 0 0 0-.707z" />
</svg> -->
<svg xmlns="http://www.w3.org/2000/svg" width="50" height="50" fill="currentColor" class="bi bi-check-circle-fill" viewBox="0 0 16 16">
<path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0zm-3.97-3.03a.75.75 0 0 0-1.08.022L7.477 10.417 5.384 8.323A.75.75 0 0 0 4.303 9.7l2.693 2.677a.75.75 0 0 0 1.086-.02l5.17-5.85a.75.75 0 0 0-.02-1.107z" />
</svg>
<h2>No evaluation is required!</h2>
<!-- <p>{{errorMsg}}</p> -->
<button type="button" id="back0" class="form-btn cancel-btn" v-on:click="error=false;cityListPage=true;">Go Back</button>
</div>
<template v-else>
<div id="result" v-if="isFilled">
<svg xmlns="http://www.w3.org/2000/svg" width="50" height="50" fill="currentColor" class="bi bi-check-circle-fill" viewBox="0 0 16 16">
<path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0zm-3.97-3.03a.75.75 0 0 0-1.08.022L7.477 10.417 5.384 8.323A.75.75 0 0 0 4.303 9.7l2.693 2.677a.75.75 0 0 0 1.086-.02l5.17-5.85a.75.75 0 0 0-.02-1.107z" />
</svg>
<h2>Thank you for your feedback!</h2>
<!-- <p>All actions are done.</p> -->
</div>
<template v-if="cityListPage">
<h4 v-if="!isFilled">{{i18n.tips}}</h4>
<div class="city-page">
<ul class="city-list" v-for="(city, index) in cityList" v-bind:key="city.cityName" v-on:click="selectCity(city)">
<li v-bind:class="[city.feedback_Filled ? 'filled' : '', city.cii_sn === currentCity.cii_sn ? 'active' : '' ]">{{city.cityName}}</li>
</ul>
</div>
</template>
<template v-if="!cityListPage">
<!-- <h1>One Minute Feedback - Help Us Serve You Better</h1> -->
<!-- <p>Did you enjoy your stay in the <span class="text-primary">{{currentCity.cityName}}</span> area? Your honest feedback is appreciated to help us continually improve our service.</p> -->
<start-eva-text :city="currentCity.cityName" ></start-eva-text>
<div class="info-container">
<div class="info-item">
<h3>{{i18n.reference_no}}</h3>
<p id="referenceNo">{{group.groupNumber}}</p>
</div>
<div class="info-item">
<h3>{{i18n.guide_name}}</h3>
<p id="guideName">{{group.tourGuideName}}</p>
</div>
<div class="info-item">
<h3>{{i18n.city}}</h3>
<p id="city">{{currentCity.cityName}}</p>
</div>
</div>
<hr>
<p >{{i18n.tips}}</p>
<p v-if="!isWideScreen">Please rate by clicking the stars below.</p>
<form class="form-container" id="myForm" action="/sub" method="post" disabled>
<div class="question">
<h4>{{i18n.questions[0]}}</h4>
<div class="question-items" v-for="(q, qi) in feedbackItem.guide" v-bind:key="q.id">
<h5>{{q.Describe}}</h5>
<options-item v-if="isWideScreen" question="guide" si="1" v-bind:qitem="q" v-bind:qi="qi" v-bind:key="q.id" v-bind:disabled="resultPage"></options-item>
<options-item-star v-else question="guide" si="1" v-bind:qitem="q" v-bind:qi="qi" v-bind:key="q.id" v-bind:disabled="resultPage"></options-item-star>
</div>
</div>
<div class="question">
<h4>{{i18n.questions[1]}}</h4>
<div class="question-items" v-for="(q, qi) in feedbackItem.driver" v-bind:key="q.id">
<h5>{{q.Describe}}</h5>
<options-item v-if="isWideScreen" question="Driver" v-bind:qitem="q" v-bind:si="2" v-bind:qi="qi" v-bind:key="q.id" v-bind:disabled="resultPage"></options-item>
<options-item-star v-else question="Driver" v-bind:qitem="q" v-bind:si="2" v-bind:qi="qi" v-bind:key="q.id" v-bind:disabled="resultPage"></options-item>
</div>
</div>
<div class="question" v-if="feedbackItem.experience.length > 0">
<h4>{{i18n.questions[2]}}</h4>
<div class="question-items" v-for="(q, qi) in feedbackItem.experience" v-bind:key="q.id">
<h5>{{q.Describe}}</h5>
<options-item v-if="isWideScreen" question="Experience" v-bind:qitem="q" v-bind:si="3" v-bind:qi="qi" v-bind:key="q.id" v-bind:disabled="resultPage"></options-item>
<options-item-star v-else question="Experience" v-bind:qitem="q" v-bind:si="3" v-bind:qi="qi" v-bind:key="q.id" v-bind:disabled="resultPage"></options-item>
</div>
</div>
<div class="question ">
<h4>{{i18n.questions[3]}}</h4>
<judgment-item question="photo" v-bind:qitem="{id: 'photo_permission', rate: feedbackEvaluation[0].usePhotos}" si="photo" qi="photo" key="photo" v-bind:disabled="resultPage"></judgment-item>
</div>
<div class="feedback question">
<h4>{{i18n.questions[4]}}</h4>
<div v-if="resultPage">
<p v-for="eva in feedbackEvaluation" v-bind:key="eva.feedbackId">
{{eva.otherComments ? eva.otherComments : ''}}
</p>
</div>
<textarea v-else name="comments" rows="4" v-bind:value="feedbackEvaluation[0].otherComments" v-bind:disabled="resultPage"></textarea>
</div>
<div class="feedback question">
<h4>{{i18n.questions[5]}}
</h4>
<div v-if="resultPage">
<p v-for="eva in feedbackEvaluation" v-bind:key="eva.feedbackId">
{{eva.desired_next ? eva.desired_next : ''}}
</p></div>
<textarea v-else name="desired_next" rows="4" v-bind:value="feedbackEvaluation[0].desired_next" v-bind:disabled="resultPage"></textarea>
</div>
<div class="signature">
<h4>{{i18n.questions[6]}}</h4>
<div class="signature-container" v-if="!resultPage">
<canvas id="signature-pad" class="signature-pad" v-bind:style="{'width': drawWidth+'px', 'height':'200px'}" ></canvas>
<div class="button-container">
<button type="button" id="clear" class="button" v-on:click="clearSignature()">{{i18n.btns.clear}}</button>
</div>
</div>
<div v-else>
<img id="signature-img" v-bind:src="feedbackEvaluation[0].signatureDataUrl" v-bind:width="drawWidth" />
</div>
</div>
<template v-if="!resultPage">
<button type="button" id="submit_a" class="form-btn submit-btn" v-on:click="submitForm">{{i18n.btns.submit}}</button>
<button type="button" id="back" class="form-btn cancel-btn" v-on:click="cancel" v-if="cityList.length > 1">{{i18n.btns.cancel}}</button>
</template>
</form>
<template v-if="cityList.length > 1">
<span id="currentCity" class="float-text" v-show="!cityListOpen">{{currentCity.cityName}}</span>
<button class="float-button" v-on:click="toggleCityList" ></button>
<ul v-bind:class="['expand-list', cityListOpen ? 'open' : '']">
<li v-for="city in cityList" v-bind:key="city.cityName" v-on:click="selectCity(city)" v-bind:class="{'active': city.cii_sn === currentCity.cii_sn, 'filled': (city.feedback_Filled ? true : false)}">{{city.cityName}}</li>
</ul>
</template>
</template>
</template>
<div id="loading-mask" v-if="loading">
<div class="lds-facebook">
<div></div>
<div></div>
<div></div>
</div>
</div>
</div>
</div>
<script async>
var rnd = Math.random();
var script0 = document.createElement('script');
script0.src = './components.js?rnd=' + rnd;
document.head.appendChild(script0);
script0.onload = function() {
var script = document.createElement('script');
script.src = './index.js?rnd=' + rnd;
document.head.appendChild(script);
};
</script>
</body>
</html>