1418e350 by zhangmeng

世锦赛

1 parent c46d2134
...@@ -101,6 +101,12 @@ export const constantRoutes = [ ...@@ -101,6 +101,12 @@ export const constantRoutes = [
101 meta: {title: '舞蹈节'} 101 meta: {title: '舞蹈节'}
102 }, 102 },
103 { 103 {
104 path: 'operation',
105 component: () => import('@/viewsPc/about/operation'),
106 name: 'operation',
107 meta: {title: '操作手册'}
108 },
109 {
104 path: 'culture', 110 path: 'culture',
105 component: () => import('@/viewsPc/about/culture'), 111 component: () => import('@/viewsPc/about/culture'),
106 name: 'culture', 112 name: 'culture',
...@@ -211,7 +217,7 @@ export const constantRoutes = [ ...@@ -211,7 +217,7 @@ export const constantRoutes = [
211 name: 'personListHasKind', 217 name: 'personListHasKind',
212 meta: {title: '人员列表'} 218 meta: {title: '人员列表'}
213 } 219 }
214 220
215 ] 221 ]
216 }, 222 },
217 { 223 {
...@@ -680,7 +686,7 @@ export const constantRoutes = [ ...@@ -680,7 +686,7 @@ export const constantRoutes = [
680 name: 'payOk', 686 name: 'payOk',
681 meta: {title: '支付成功'} 687 meta: {title: '支付成功'}
682 }, 688 },
683 689
684 { 690 {
685 path: 'commitDone/:orderId', 691 path: 'commitDone/:orderId',
686 component: () => import('@/viewsPc/match/commitDone'), 692 component: () => import('@/viewsPc/match/commitDone'),
......
1 <template>
2 <div>
3 <div class="mt20"/>
4 <div class="box">
5 <el-card>
6 <el-row>
7 <el-col>
8 <div class="infoPart pd20">
9 <h3 class="leftboderTT">{{ language == 0 ? '操作手册' : 'The Manual' }}</h3>
10 <br>
11 <div style="padding-left: 30px">
12 <el-link v-for="v in fileList" :href="fillImgUrl(v.url)" :underline="false" class="link" target="_blank"
13 type="primary">
14 <span style="border-bottom: 1px solid var(--el-color-primary)">
15 {{ v.name }}
16 <el-icon style="margin-left: 10px;position: relative;bottom: -2px">
17 <Download/>
18 </el-icon>
19 </span>
20
21 </el-link>
22 </div>
23 <div class="content">
24 <div v-html="content"></div>
25 </div>
26
27 </div>
28 </el-col>
29 </el-row>
30 </el-card>
31
32 <div v-if="false" class="indexTitle">
33 <h3 class="leftboderTT">{{ language == 0 ? '联系我们' : 'CONTACT US' }}</h3>
34 </div>
35 <div v-if="false" class="mapBox mb20">
36 <div class="content">
37 <div v-for="(item,index) in contact" :class="index==0?'phone':index==1?'address':'email'">
38 <h4>{{ language == 1 ? item.ename : item.name }}</h4>
39 <p>{{ language == 0 ? item.value : item.evalue }}</p>
40 </div>
41 </div>
42 </div>
43 </div>
44
45 <div style="height: 50px"></div>
46 </div>
47 </template>
48
49 <script setup>
50 import {useStorage} from "@vueuse/core";
51 import {onMounted, ref} from "vue";
52 import {getppInfo} from "@/apiPc/match";
53 import {useRoute} from "vue-router";
54 import {fillImgUrl} from "/@/utils/ruoyi";
55
56 const route = useRoute()
57 const language = useStorage('language', 0)
58
59 const activeIndex = ref(0)
60 const content = ref('')
61 const fileList = ref([])
62
63 onMounted(() => {
64 if (route.query.activeIndex) {
65 activeIndex.value = route.query.activeIndex
66 }
67 getMenuList()
68 })
69 const getMenuList = () => {
70
71 getppInfo('10000005').then(res => {
72 if (language.value == 0) {
73 content.value = res.data.contextZh
74 fileList.value = JSON.parse(res.data.fileZh)
75 } else {
76 content.value = res.data.contextEh
77 fileList.value = JSON.parse(res.data.fileEn)
78 }
79 })
80 }
81
82 </script>
83
84 <style lang="scss" scoped>
85 .link {
86 font-size: 16px;
87 display: block;
88 margin-bottom: 10px;
89 }
90
91 .leftNav {
92 ul {
93 border-right: 2px solid #E5E5E5;
94 padding: 0 20px 0 0;
95 }
96
97 li {
98 margin: 30px 0;
99 padding: 10px;
100 text-align: right;
101 border-radius: 2px;
102 position: relative;
103 font-weight: 600;
104 text-transform: uppercase;
105 font-size: 18px;
106 cursor: pointer;
107 background: linear-gradient(90deg, rgba(134, 35, 252, 0.1), rgba(69, 61, 234, 0.1));
108 }
109
110 li::after {
111 content: '';
112 position: absolute;
113 background: #898989;
114 width: 8px;
115 height: 8px;
116 border-radius: 50%;
117 right: -29px;
118 border: 4px solid #fff;
119 outline: 2px solid #898989;
120 box-sizing: content-box;
121 top: 0;
122 bottom: 0;
123 margin: auto;
124 }
125
126 li.active {
127 color: #fff;
128 background: #000;
129
130 &::after {
131 outline: 2px solid #000;
132 background: #000;
133 }
134 }
135 }
136
137 .infoPart {
138 .leftboderTT {
139 font-size: 20px;
140 color: var(--el-color-primary);
141 }
142 }
143
144 .content {
145 margin: 20px 0 0;
146 text-indent: 2em;
147 line-height: 1.8;
148 font-weight: 400;
149 font-size: 16px;
150 color: #29343C;
151
152 img {
153 max-width: 100%;
154 margin: 20px auto;
155 display: block;
156 }
157
158 h4 {
159 text-indent: 0
160 }
161 }
162
163 .mapBox {
164 background: url("@/assets/zhinan/map.png") no-repeat right;
165 height: 375px;
166 background-size: cover;
167 padding: 1px;
168 position: relative;
169 display: flex;
170
171 .content {
172 background: #fff;
173 width: 60%;
174 left: 40px;
175 padding: 30px;
176 text-indent: 0;
177 line-height: 1;
178 position: absolute;
179 height: 90%;
180 top: 0;
181 bottom: 0;
182 margin: auto;
183 }
184
185 div {
186 padding-left: 60px;
187 }
188
189 .phone {
190 background: url("@/assets/dance/map01.png") no-repeat left;
191 background-size: 30px;
192 }
193
194 .address {
195 background: url("@/assets/dance/map02.png") no-repeat left;
196 background-size: 30px;
197 margin: 50px 0;
198 }
199
200 .email {
201 background: url("@/assets/dance/map03.png") no-repeat left;
202 background-size: 30px;
203 }
204
205 h4 {
206 margin: 0;
207 font-size: 16px;
208 color: #AAAAAA;
209 }
210
211 p {
212 margin: 13px 0 0;
213 }
214
215 }
216 </style>
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
6 <div class="bg-lineg">{{ language == 0 ? '酒店预约下单' : 'Hotel booking order' }}</div> 6 <div class="bg-lineg">{{ language == 0 ? '酒店预约下单' : 'Hotel booking order' }}</div>
7 </div> 7 </div>
8 <!-- {{room}}--> 8 <!-- {{room}}-->
9 <el-row class="pd20" :gutter="20"> 9 <el-row :gutter="20" class="pd20">
10 <el-col :lg="14"> 10 <el-col :lg="14">
11 <div class="border-info"> 11 <div class="border-info">
12 <h3>{{ hotelName }}</h3> 12 <h3>{{ hotelName }}</h3>
...@@ -24,51 +24,60 @@ ...@@ -24,51 +24,60 @@
24 <span v-show="room.addBedFlag=='1'"> | {{ language == 0 ? '允许加床' : 'Extra bed' }}</span> 24 <span v-show="room.addBedFlag=='1'"> | {{ language == 0 ? '允许加床' : 'Extra bed' }}</span>
25 </div> 25 </div>
26 </div> 26 </div>
27 27
28 <div class="leftboderTT">{{ language == 0 ? '预约信息' : 'Reservation information' }}</div> 28 <div class="leftboderTT">{{ language == 0 ? '预约信息' : 'Reservation information' }}</div>
29 <div class="border-rr mt20 pd20"> 29 <div class="border-rr mt20 pd20">
30 <el-form :model="form" :label-width="language == 0 ?'100':'160'" :rules="rules" ref="formRef"> 30 <el-form ref="formRef" :label-width="language == 0 ?'100':'160'" :model="form" :rules="rules">
31 <el-form-item :label="language==0?'入住日期':'Check-in&Check-out'" required> 31 <el-form-item :label="language==0?'入住日期':'Check-in&Check-out'" required>
32 <el-date-picker 32 <el-date-picker
33 @change="getDaysBetween"
34 v-model="rzRange" 33 v-model="rzRange"
35 type="daterange"
36 :disabled-date="disabledDateRZ"
37 :clearable="false" 34 :clearable="false"
35 :disabled-date="disabledDateRZ"
38 :placeholder="language==0?'选择日期':'Select date'" 36 :placeholder="language==0?'选择日期':'Select date'"
39 format="YYYY-MM-DD" 37 format="YYYY-MM-DD"
40 value-format="YYYY-MM-DD"/> 38 type="daterange"
41 <div class="tip" v-if="lform.hqStart">{{ language==0?'可订日期':'Available date' }}{{ lform.hqStart.slice(0, 10) }} ~ {{ lform.hqEnd.slice(0, 10) }}</div> 39 value-format="YYYY-MM-DD"
42 40 @change="getDaysBetween"/>
41 <div v-if="lform.hqStart" class="tip">{{
42 language == 0 ? '可订日期' : 'Available date'
43 }}{{ lform.hqStart.slice(0, 10) }} ~ {{ lform.hqEnd.slice(0, 10) }}
44 </div>
45
43 <!-- :picker-options="pickerOptions"--> 46 <!-- :picker-options="pickerOptions"-->
44 </el-form-item> 47 </el-form-item>
45 <el-form-item :label="language==0?'房间数':'Rooms'" required prop="roomNum"> 48 <el-form-item :label="language==0?'房间数':'Rooms'" prop="roomNum" required>
46 <el-input-number v-model="form.roomNum" :min="0" :max="canOrderNum" @change="changeRoomNum"/> 49 <el-input-number v-model="form.roomNum" :max="canOrderNum" :min="0" @change="changeRoomNum"/>
47 <div class="red ml20" v-if="rzRange?.[1]"> 50 <div v-if="rzRange?.[1]" class="red ml20">
48 <span v-if="language == 0">剩余房间数:{{ canOrderNum }}</span> 51 <span v-if="language == 0">剩余房间数:{{ canOrderNum }}</span>
49 <span v-else>{{ canOrderNum }} Remaining rooms</span> 52 <span v-else>{{ canOrderNum }} Remaining rooms</span>
50 </div> 53 </div>
51 <div class="tip" v-if="language==1">If you need to make a hotel reservation, please fill in the full names of all required persons when booking the hotel. (For two or more people, please use ',')</div> 54 <div v-if="language==1" class="tip">If you need to make a hotel reservation, please fill in the full
52 55 names of all required persons when booking the hotel.
56 <!-- (For two or more people, please use ',')-->
57 (For two people, please separate the names with a comma ',)
58 </div>
59
53 </el-form-item> 60 </el-form-item>
54 <el-form-item v-for="(n,index) in form.roomNum" :key="index" :label="language==1?`Room${index+1}`:`房间${index+1}`" required> 61 <el-form-item v-for="(n,index) in form.roomNum" :key="index"
55 <el-input v-model="rzUserArr[index]" :placeholder="language==0?'请完整填写该房间所有的入住人姓名,以“,”符号分隔':'please fill in the name of the actual check-in person'"/> 62 :label="language==1?`Room${index+1}`:`房间${index+1}`" required>
63 <el-input v-model="rzUserArr[index]"
64 :placeholder="language==0?'请完整填写该房间所有的入住人姓名,以“,”符号分隔':'please fill in the name of the actual check-in person'"/>
56 </el-form-item> 65 </el-form-item>
57 <el-form-item :label="language==0?'预计到店':'Expected check-in'" required> 66 <el-form-item :label="language==0?'预计到店':'Expected check-in'" required>
58 <el-select v-model="form.ddDate" 67 <el-select v-model="form.ddDate"
59 :placeholder="language==0?'请选择预计到店时间':'Please select the expected check-in time'"> 68 :placeholder="language==0?'请选择预计到店时间':'Please select the expected check-in time'">
60 <el-option 69 <el-option
61 v-for="item in ddDateArr" 70 v-for="item in ddDateArr"
62 :key="item.value" 71 :key="item.value"
63 :label="item.label" 72 :label="item.label"
64 :value="item.value" 73 :value="item.value"
65 /> 74 />
66 </el-select> 75 </el-select>
67 </el-form-item> 76 </el-form-item>
68 <el-form-item :label="language==0?'联系电话':'Contact phone'" required prop="phone"> 77 <el-form-item :label="language==0?'联系电话':'Contact phone'" prop="phone" required>
69 <el-input v-model="form.phone"/> 78 <el-input v-model="form.phone"/>
70 </el-form-item> 79 </el-form-item>
71 80
72 <div v-if="room.addBedFlag=='1'"> 81 <div v-if="room.addBedFlag=='1'">
73 <el-form-item :label="language==0?'是否加床':'Extra bed'" required> 82 <el-form-item :label="language==0?'是否加床':'Extra bed'" required>
74 <el-radio-group v-model="form.isAddbed" @change="changeAddBed"> 83 <el-radio-group v-model="form.isAddbed" @change="changeAddBed">
...@@ -77,12 +86,12 @@ ...@@ -77,12 +86,12 @@
77 </el-radio-group> 86 </el-radio-group>
78 </el-form-item> 87 </el-form-item>
79 <el-form-item v-if="form.isAddbed=='1'" :label="language==0?'加床张数':'Extra bed num'" required> 88 <el-form-item v-if="form.isAddbed=='1'" :label="language==0?'加床张数':'Extra bed num'" required>
80 <el-input-number v-model="form.addNum" :min="0" :max="form.roomNum" @change="changeBed"/> 89 <el-input-number v-model="form.addNum" :max="form.roomNum" :min="0" @change="changeBed"/>
81 90
82 <div class="tip" v-if="form.isAddbed=='1'">* 91 <div v-if="form.isAddbed=='1'" class="tip">*
83 <span v-if="language == 0">一个房间最多加一张床</span> 92 <span v-if="language == 0">一个房间最多加一张床</span>
84 <span v-else>A room can only add one bed</span> 93 <span v-else>A room can only add one bed</span>
85 </div> 94 </div>
86 </el-form-item> 95 </el-form-item>
87 </div> 96 </div>
88 </el-form> 97 </el-form>
...@@ -92,55 +101,62 @@ ...@@ -92,55 +101,62 @@
92 <div class="leftboderTT">{{ language == 0 ? '订单明细' : 'Order details' }}</div> 101 <div class="leftboderTT">{{ language == 0 ? '订单明细' : 'Order details' }}</div>
93 <div class="border-rr mt20 pd20 ccitemBox"> 102 <div class="border-rr mt20 pd20 ccitemBox">
94 <label> {{ language == 0 ? '房费' : 'Room fee' }} 103 <label> {{ language == 0 ? '房费' : 'Room fee' }}
95 <span class="fr" v-if="language==0">{{ 104 <span v-if="language==0" class="fr">{{
96 language == 0 ? '¥' : '$' 105 language == 0 ? '¥' : '$'
97 }}{{ (room.roomPrice * form.roomNum * choseRooms.length).toFixed(2) }}</span> 106 }}{{ (room.roomPrice * form.roomNum * choseRooms.length).toFixed(2) }}</span>
98 <span class="fr" v-else>{{ 107 <span v-else class="fr">{{
99 language == 0 ? '¥' : '$' 108 language == 0 ? '¥' : '$'
100 }}{{ (room.roomPriceEn * form.roomNum * choseRooms.length).toFixed(2) }}</span> 109 }}{{ (room.roomPriceEn * form.roomNum * choseRooms.length).toFixed(2) }}</span>
101 </label> 110 </label>
102 <div class="ccitem" v-for="(c, index) in choseRooms" :key="index" v-show="form.roomNum>0"> 111 <div v-for="(c, index) in choseRooms" v-show="form.roomNum>0" :key="index" class="ccitem">
103 {{ c }} 112 {{ c }}
104 <span v-if="language==0">{{ form.roomNum }}*{{ language == 0 ? '¥' : '$' }}{{ room.roomPrice }}</span> 113 <span v-if="language==0">{{ form.roomNum }}*{{ language == 0 ? '¥' : '$' }}{{ room.roomPrice }}</span>
105 <span v-else>{{ form.roomNum }}*{{ language == 0 ? '¥' : '$' }}{{ room.roomPriceEn }}</span> 114 <span v-else>{{ form.roomNum }}*{{ language == 0 ? '¥' : '$' }}{{ room.roomPriceEn }}</span>
106 </div> 115 </div>
107 116
108 <label v-if="form.isAddbed=='1'&&form.addNum>0">{{ language == 0 ? '加床费' : 'Extra bed fee' }} 117 <label v-if="form.isAddbed=='1'&&form.addNum>0">{{ language == 0 ? '加床费' : 'Extra bed fee' }}
109 <span class="fr" v-if="language==0">{{ 118 <span v-if="language==0" class="fr">{{
110 language == 0 ? '¥' : '$' 119 language == 0 ? '¥' : '$'
111 }}{{ (room.bedPrice * form.addNum * choseRooms.length).toFixed(2) }}</span> 120 }}{{ (room.bedPrice * form.addNum * choseRooms.length).toFixed(2) }}</span>
112 <span class="fr" v-else>{{ 121 <span v-else class="fr">{{
113 language == 0 ? '¥' : '$' 122 language == 0 ? '¥' : '$'
114 }}{{ (room.bedPriceEn * form.addNum * choseRooms.length).toFixed(2) }}</span> 123 }}{{ (room.bedPriceEn * form.addNum * choseRooms.length).toFixed(2) }}</span>
115 </label> 124 </label>
116 125
117 <div v-if="form.isAddbed=='1'&&form.addNum>0" class="ccitem" v-for="(c, index) in choseRooms" :key="index"> 126 <div v-for="(c, index) in choseRooms" v-if="form.isAddbed=='1'&&form.addNum>0" :key="index"
127 class="ccitem">
118 {{ c }} 128 {{ c }}
119 <span>{{ form.addNum }}*{{ language == 0 ? '¥' : '$' }}{{ language == 0 ?room.bedPrice:room.bedPriceEn}}</span> 129 <span>{{ form.addNum }}*{{
130 language == 0 ? '¥' : '$'
131 }}{{ language == 0 ? room.bedPrice : room.bedPriceEn }}</span>
120 </div> 132 </div>
121 133
122 <label>{{ language == 0 ? '共计' : 'Total' }}<span 134 <label>{{ language == 0 ? '共计' : 'Total' }}<span
123 class="fr bigMoney">{{ language == 0 ? '¥' : '$' }}{{ money }}</span></label> 135 class="fr bigMoney">{{ language == 0 ? '¥' : '$' }}{{ money }}</span></label>
124 136
125 </div> 137 </div>
126 </el-col> 138 </el-col>
127 </el-row> 139 </el-row>
128 </el-card> 140 </el-card>
129 141
130 <el-card class="mt30 mb30"> 142 <el-card class="mt30 mb30">
131 <el-row justify="space-between" align="middle"> 143 <el-row align="middle" justify="space-between">
132 <el-col :span="12"> 144 <el-col :span="12">
133 <label>{{ language == 0 ? '共计金额' : 'Total' }} 145 <label>{{ language == 0 ? '共计金额' : 'Total' }}
134 <span class=" text-warning"> {{ language == 0 ? '¥' : '$' }}<span class="bigMoney">{{ money }}</span></span> 146 <span class=" text-warning"> {{ language == 0 ? '¥' : '$' }}<span class="bigMoney">{{
147 money
148 }}</span></span>
135 </label> 149 </label>
136 </el-col> 150 </el-col>
137 <el-col :span="12" class="text-right"> 151 <el-col :span="12" class="text-right">
138 <el-button type="primary" class="btn-lineG w200px" size="large" round @click="submit">{{ language == 0 ?'确认付款':'Book Now' }}</el-button> 152 <el-button class="btn-lineG w200px" round size="large" type="primary" @click="submit">
153 {{ language == 0 ? '确认付款' : 'Book Now' }}
154 </el-button>
139 </el-col> 155 </el-col>
140 </el-row> 156 </el-row>
141 </el-card> 157 </el-card>
142 <div style="height: 60px;"></div> 158 <div style="height: 60px;"></div>
143 159
144 </div> 160 </div>
145 </div> 161 </div>
146 </template> 162 </template>
...@@ -151,8 +167,9 @@ import {ref, reactive, onMounted} from "vue"; ...@@ -151,8 +167,9 @@ import {ref, reactive, onMounted} from "vue";
151 import {useStorage} from "@vueuse/core/index"; 167 import {useStorage} from "@vueuse/core/index";
152 import {checkResidueRoom, getBaseInfoByActiveId, newsSubmitOrderHotel} from "@/apiPc/booking" 168 import {checkResidueRoom, getBaseInfoByActiveId, newsSubmitOrderHotel} from "@/apiPc/booking"
153 import dayjs from 'dayjs' 169 import dayjs from 'dayjs'
154 import {ElMessage,ElMessageBox} from "element-plus"; 170 import {ElMessage, ElMessageBox} from "element-plus";
155 import useUserStore from "@/store/modules/user"; 171 import useUserStore from "@/store/modules/user";
172
156 const user = useUserStore().user 173 const user = useUserStore().user
157 const language = useStorage('language', 0) 174 const language = useStorage('language', 0)
158 const router = useRouter() 175 const router = useRouter()
...@@ -165,8 +182,8 @@ const form = ref({ ...@@ -165,8 +182,8 @@ const form = ref({
165 isAddbed: '0', 182 isAddbed: '0',
166 roomNum: 0, 183 roomNum: 0,
167 addNum: 0, 184 addNum: 0,
168 ddDate:'14:00', 185 ddDate: '14:00',
169 phone: user?.phonenumber||'', 186 phone: user?.phonenumber || '',
170 }) 187 })
171 const rzRange = ref([]) 188 const rzRange = ref([])
172 const rzUserArr = ref([]) 189 const rzUserArr = ref([])
...@@ -255,7 +272,11 @@ const ddDateArr = ref([ ...@@ -255,7 +272,11 @@ const ddDateArr = ref([
255 } 272 }
256 ]) 273 ])
257 const rules = ref({ 274 const rules = ref({
258 phone: { required: true, message: language.value==0? '请输入联系电话':"Please enter a contact number", trigger: 'blur' } 275 phone: {
276 required: true,
277 message: language.value == 0 ? '请输入联系电话' : "Please enter a contact number",
278 trigger: 'blur'
279 }
259 }) 280 })
260 281
261 let usedays = 0 282 let usedays = 0
...@@ -265,15 +286,16 @@ onMounted(() => { ...@@ -265,15 +286,16 @@ onMounted(() => {
265 console.log(room.value) 286 console.log(room.value)
266 hotelName.value = route.query.hotelName 287 hotelName.value = route.query.hotelName
267 money.value = 0 288 money.value = 0
268 rzRange.value=[] 289 rzRange.value = []
269 rzRange.value=[route.query.start,route.query.end] 290 rzRange.value = [route.query.start, route.query.end]
270 initDays() 291 initDays()
271 getDaysBetween() 292 getDaysBetween()
272 // checkreRooms() 293 // checkreRooms()
273 }) 294 })
295
274 function initDays() { 296 function initDays() {
275 getBaseInfoByActiveId(route.params.cptId).then(res=>{ 297 getBaseInfoByActiveId(route.params.cptId).then(res => {
276 lform.value = res.data 298 lform.value = res.data
277 // if(lform.value.hqStart){ 299 // if(lform.value.hqStart){
278 // const today = dayjs() 300 // const today = dayjs()
279 // if(lform.value.hqStart.slice(0,10)<today.format('YYYY-MM-DD')){ 301 // if(lform.value.hqStart.slice(0,10)<today.format('YYYY-MM-DD')){
...@@ -283,22 +305,24 @@ function initDays() { ...@@ -283,22 +305,24 @@ function initDays() {
283 // getDaysBetween(rzRange.value) 305 // getDaysBetween(rzRange.value)
284 // } 306 // }
285 // console.log(rzRange.value,lform.value.hqStart) 307 // console.log(rzRange.value,lform.value.hqStart)
286 }).catch(err=>{ 308 }).catch(err => {
287 console.log(err) 309 console.log(err)
288 }) 310 })
289 } 311 }
312
290 function disabledDateRZ(date) { 313 function disabledDateRZ(date) {
291 //判读今天大与form.value.hqStart 314 //判读今天大与form.value.hqStart
292 if (lform.value.hqStart) { 315 if (lform.value.hqStart) {
293 const today = dayjs().format('YYYY-MM-DD') 316 const today = dayjs().format('YYYY-MM-DD')
294 if (lform.value.hqStart < today) { 317 if (lform.value.hqStart < today) {
295 return !((date.getTime() >= dayjs(today).valueOf())&&(date.getTime() <= dayjs(lform.value.hqEnd).valueOf())) 318 return !((date.getTime() >= dayjs(today).valueOf()) && (date.getTime() <= dayjs(lform.value.hqEnd).valueOf()))
296 } else { 319 } else {
297 return !((date.getTime() >= dayjs(lform.value.hqStart).valueOf())&&(date.getTime() <= dayjs(lform.value.hqEnd).valueOf())) 320 return !((date.getTime() >= dayjs(lform.value.hqStart).valueOf()) && (date.getTime() <= dayjs(lform.value.hqEnd).valueOf()))
298 } 321 }
299 } 322 }
300 // return true 323 // return true
301 } 324 }
325
302 function changeRoomNum(e) { 326 function changeRoomNum(e) {
303 if (form.value.addNum > e) { 327 if (form.value.addNum > e) {
304 form.value.addNum = e 328 form.value.addNum = e
...@@ -307,12 +331,14 @@ function changeRoomNum(e) { ...@@ -307,12 +331,14 @@ function changeRoomNum(e) {
307 rzUserArr.value.length = e 331 rzUserArr.value.length = e
308 countMoney() 332 countMoney()
309 } 333 }
334
310 function changeAddBed(e) { 335 function changeAddBed(e) {
311 if(e=='0'){ 336 if (e == '0') {
312 form.value.addNum = 0 337 form.value.addNum = 0
313 } 338 }
314 changeBed() 339 changeBed()
315 } 340 }
341
316 function changeBed() { 342 function changeBed() {
317 countMoney() 343 countMoney()
318 } 344 }
...@@ -332,28 +358,28 @@ function getDaysBetween(e) { ...@@ -332,28 +358,28 @@ function getDaysBetween(e) {
332 // console.log('入住时间arr', e, rzRange.value) 358 // console.log('入住时间arr', e, rzRange.value)
333 // console.log(e) 359 // console.log(e)
334 // console.log(Date.parse(rzRange.value[0])) 360 // console.log(Date.parse(rzRange.value[0]))
335 form.value.roomNum=0 361 form.value.roomNum = 0
336 var d1 = Date.parse(rzRange.value?rzRange.value[0]:null) 362 var d1 = Date.parse(rzRange.value ? rzRange.value[0] : null)
337 var d2 = Date.parse(rzRange.value?rzRange.value[1]:null) 363 var d2 = Date.parse(rzRange.value ? rzRange.value[1] : null)
338 if (d1 == d2) { 364 if (d1 == d2) {
339 usedays = 0 365 usedays = 0
340 ElMessage.error(language.value == 0 ? '入住时间跨度需大于一天' :'The duration of the stay must be more than one day.') 366 ElMessage.error(language.value == 0 ? '入住时间跨度需大于一天' : 'The duration of the stay must be more than one day.')
341 // console.trace() 367 // console.trace()
342 rzRange.value=[route.query.start,route.query.end] 368 rzRange.value = [route.query.start, route.query.end]
343 return 369 return
344 } else { 370 } else {
345 var days = (d2 - d1) / (1 * 24 * 60 * 60 * 1000); 371 var days = (d2 - d1) / (1 * 24 * 60 * 60 * 1000);
346 usedays = days 372 usedays = days
347 } 373 }
348 countMoney() 374 countMoney()
349 var startTime = getDate(rzRange.value?rzRange.value[0]:null); 375 var startTime = getDate(rzRange.value ? rzRange.value[0] : null);
350 var endTime = getDate(rzRange.value?rzRange.value[1]:null); 376 var endTime = getDate(rzRange.value ? rzRange.value[1] : null);
351 var dateArr = []; 377 var dateArr = [];
352 if (!startTime||!endTime)return; 378 if (!startTime || !endTime) return;
353 while ((endTime.getTime() - startTime.getTime()) > 0) { 379 while ((endTime.getTime() - startTime.getTime()) > 0) {
354 var year = startTime.getFullYear(); 380 var year = startTime.getFullYear();
355 var month = (startTime.getMonth() + 1).toString().length === 1 ? "0" + (parseInt(startTime.getMonth() 381 var month = (startTime.getMonth() + 1).toString().length === 1 ? "0" + (parseInt(startTime.getMonth()
356 .toString(), 10) + 1) : (startTime.getMonth() + 1); 382 .toString(), 10) + 1) : (startTime.getMonth() + 1);
357 var day = startTime.getDate().toString().length === 1 ? "0" + startTime.getDate() : startTime.getDate(); 383 var day = startTime.getDate().toString().length === 1 ? "0" + startTime.getDate() : startTime.getDate();
358 dateArr.push(year + "-" + month + "-" + day); 384 dateArr.push(year + "-" + month + "-" + day);
359 startTime.setDate(startTime.getDate() + 1); 385 startTime.setDate(startTime.getDate() + 1);
...@@ -379,45 +405,45 @@ function getDate(datestr) { ...@@ -379,45 +405,45 @@ function getDate(datestr) {
379 function countMoney() { 405 function countMoney() {
380 if (language.value == 0) { 406 if (language.value == 0) {
381 money.value = ((room.value.roomPrice * form.value.roomNum * usedays) + (room.value.bedPrice * form.value 407 money.value = ((room.value.roomPrice * form.value.roomNum * usedays) + (room.value.bedPrice * form.value
382 .addNum * usedays)).toFixed(2) 408 .addNum * usedays)).toFixed(2)
383 } else { 409 } else {
384 money.value = ((room.value.roomPriceEn * form.value.roomNum * usedays) + (room.value.bedPriceEn * form.value 410 money.value = ((room.value.roomPriceEn * form.value.roomNum * usedays) + (room.value.bedPriceEn * form.value
385 .addNum * usedays)).toFixed(2) 411 .addNum * usedays)).toFixed(2)
386 412
387 } 413 }
388 if (money.value == 'NaN') money.value=0.00 414 if (money.value == 'NaN') money.value = 0.00
389 } 415 }
390 416
391 function submit() { 417 function submit() {
392 if(!user){ 418 if (!user) {
393 useUserStore().setReLogin() 419 useUserStore().setReLogin()
394 return 420 return
395 } 421 }
396 if(!rzRange.value)return ElMessage.warning(language.value == 0 ? '请选择入住时间' : 'Please select check-in time') 422 if (!rzRange.value) return ElMessage.warning(language.value == 0 ? '请选择入住时间' : 'Please select check-in time')
397 if (usedays == 0) { 423 if (usedays == 0) {
398 ElMessage.warning(language.value == 0 ? '入住时间跨度需大于一天' : 'Check-in time must be greater than one day') 424 ElMessage.warning(language.value == 0 ? '入住时间跨度需大于一天' : 'Check-in time must be greater than one day')
399 return 425 return
400 } 426 }
401 if(form.value.roomNum==0){ 427 if (form.value.roomNum == 0) {
402 ElMessage.warning(language.value == 0 ? '请选择房间数量' : 'Please select the number of rooms') 428 ElMessage.warning(language.value == 0 ? '请选择房间数量' : 'Please select the number of rooms')
403 return 429 return
404 } 430 }
405 if(!form.value.phone){ 431 if (!form.value.phone) {
406 ElMessage.warning(language.value == 0 ? '请填写手机号' : 'Please fill in the phone number') 432 ElMessage.warning(language.value == 0 ? '请填写手机号' : 'Please fill in the phone number')
407 return 433 return
408 } 434 }
409 435
410 form.value.rzStart = rzRange.value[0] 436 form.value.rzStart = rzRange.value[0]
411 form.value.rzEnd = rzRange.value[1] 437 form.value.rzEnd = rzRange.value[1]
412 438
413 439
414 let arr = [] 440 let arr = []
415 for (var n of rzUserArr.value) { 441 for (var n of rzUserArr.value) {
416 if (n == '' || n == undefined) { 442 if (n == '' || n == undefined) {
417 443
418 // '请填写入住人信息' 444 // '请填写入住人信息'
419 ElMessage.warning(language.value == 0 ? '请填写入住人信息' : 'Please fill in the check-in information') 445 ElMessage.warning(language.value == 0 ? '请填写入住人信息' : 'Please fill in the check-in information')
420 446
421 return 447 return
422 } else { 448 } else {
423 arr.push(n) 449 arr.push(n)
...@@ -432,7 +458,7 @@ function submit() { ...@@ -432,7 +458,7 @@ function submit() {
432 form.value.roomPhoto = room.value.photo 458 form.value.roomPhoto = room.value.photo
433 var str = '' 459 var str = ''
434 var str2 = '' 460 var str2 = ''
435 if(language.value==0){ 461 if (language.value == 0) {
436 if (form.value.addNum && form.value.addNum > 0) { 462 if (form.value.addNum && form.value.addNum > 0) {
437 str = `加床${form.value.addNum}张` 463 str = `加床${form.value.addNum}张`
438 } else { 464 } else {
...@@ -446,7 +472,7 @@ function submit() { ...@@ -446,7 +472,7 @@ function submit() {
446 form.value.room = `${form.value.roomNum} 间 · ${usedays}晚 · ${str} · ${str2}` 472 form.value.room = `${form.value.roomNum} 间 · ${usedays}晚 · ${str} · ${str2}`
447 console.log(form.value.room) 473 console.log(form.value.room)
448 } 474 }
449 if(language.value==1){ 475 if (language.value == 1) {
450 if (form.value.addNum && form.value.addNum > 0) { 476 if (form.value.addNum && form.value.addNum > 0) {
451 str = `have ${form.value.addNum} extra bed` 477 str = `have ${form.value.addNum} extra bed`
452 } else { 478 } else {
...@@ -460,8 +486,8 @@ function submit() { ...@@ -460,8 +486,8 @@ function submit() {
460 form.value.room = `${form.value.roomNum} rooms · ${usedays} night·${str}·${str2}` 486 form.value.room = `${form.value.roomNum} rooms · ${usedays} night·${str}·${str2}`
461 console.log(form.value.room) 487 console.log(form.value.room)
462 } 488 }
463 489
464 490
465 // 提交确认 491 // 提交确认
466 ElMessageBox.confirm(language.value == 0 ? '确认提交订单吗?' : 'Confirm to submit the order?', { 492 ElMessageBox.confirm(language.value == 0 ? '确认提交订单吗?' : 'Confirm to submit the order?', {
467 confirmButtonText: language.value == 0 ? '确定' : 'Confirm', 493 confirmButtonText: language.value == 0 ? '确定' : 'Confirm',
...@@ -478,9 +504,9 @@ function submit() { ...@@ -478,9 +504,9 @@ function submit() {
478 router.push({ 504 router.push({
479 name: 'bookingPay', 505 name: 'bookingPay',
480 query: { 506 query: {
481 orderId:res.data.orderId, 507 orderId: res.data.orderId,
482 money:res.data.total, 508 money: res.data.total,
483 type:'hotel' 509 type: 'hotel'
484 } 510 }
485 }) 511 })
486 } 512 }
...@@ -491,7 +517,7 @@ function submit() { ...@@ -491,7 +517,7 @@ function submit() {
491 517
492 </script> 518 </script>
493 519
494 <style scoped lang="scss"> 520 <style lang="scss" scoped>
495 .bigMoney { 521 .bigMoney {
496 font-size: 36px !important; 522 font-size: 36px !important;
497 font-family: 'DIN Alternate'; 523 font-family: 'DIN Alternate';
...@@ -524,12 +550,12 @@ function submit() { ...@@ -524,12 +550,12 @@ function submit() {
524 550
525 .ccitemBox { 551 .ccitemBox {
526 overflow: auto; 552 overflow: auto;
527 553
528 label { 554 label {
529 margin: 10px 0; 555 margin: 10px 0;
530 display: block; 556 display: block;
531 min-height: 30px; 557 min-height: 30px;
532 558
533 span { 559 span {
534 color: #FF8124; 560 color: #FF8124;
535 font-family: DIN Alternate; 561 font-family: DIN Alternate;
...@@ -544,12 +570,12 @@ function submit() { ...@@ -544,12 +570,12 @@ function submit() {
544 font-size: 15px; 570 font-size: 15px;
545 color: #666; 571 color: #666;
546 margin: 5px 0 10px; 572 margin: 5px 0 10px;
547 573
548 label { 574 label {
549 font-size: 16px; 575 font-size: 16px;
550 color: #000; 576 color: #000;
551 } 577 }
552 578
553 span { 579 span {
554 font-size: 13px; 580 font-size: 13px;
555 } 581 }
...@@ -558,9 +584,16 @@ function submit() { ...@@ -558,9 +584,16 @@ function submit() {
558 .red { 584 .red {
559 color: #FF8124; 585 color: #FF8124;
560 } 586 }
561 .tip{font-size: 14px;color: #666;padding: 0 10px;} 587
588 .tip {
589 font-size: 14px;
590 color: #666;
591 padding: 0 10px;
592 }
562 593
563 @media screen and (max-width: 768px) { 594 @media screen and (max-width: 768px) {
564 .leftboderTT{margin: 30px 0 15px;} 595 .leftboderTT {
596 margin: 30px 0 15px;
597 }
565 } 598 }
566 </style> 599 </style>
......
1 <template> 1 <template>
2 <div> 2 <div>
3 <index-Ch v-if="language ==0" @pop="openMaster" @pickup="openPickup" @backNumber="openBackNumber" @schSearch="openSchSearch"/> 3 <index-Ch v-if="language ==0" @backNumber="openBackNumber" @pickup="openPickup" @pop="openMaster"
4 <index-En v-else @pop="openMaster" @pickup="openPickup" @backNumber="openBackNumber" @schSearch="openSchSearch"/> 4 @schSearch="openSchSearch"/>
5 <index-En v-else @backNumber="openBackNumber" @pickup="openPickup" @pop="openMaster" @schSearch="openSchSearch"/>
5 <div v-if="showgg" class="fixed_gg"> 6 <div v-if="showgg" class="fixed_gg">
6 <!--天气--> 7 <!--天气-->
7 <el-icon class="cclose" @click.stop="showgg=false"><circle-close /></el-icon> 8 <el-icon class="cclose" @click.stop="showgg=false">
9 <circle-close/>
10 </el-icon>
8 <div class="bg-lineg pd20"> 11 <div class="bg-lineg pd20">
9 <div class="smallToday" @click="popWeather"> 12 <div class="smallToday" @click="popWeather">
10 <div> 13 <div>
...@@ -15,13 +18,14 @@ ...@@ -15,13 +18,14 @@
15 <div> 18 <div>
16 <h3 v-if="language == 0">无锡</h3> 19 <h3 v-if="language == 0">无锡</h3>
17 <h3 v-else>WUXI</h3> 20 <h3 v-else>WUXI</h3>
18 <div class="wd_p">{{weatherObj.forecast[0]?.low.slice(2)}}~{{weatherObj.forecast[0]?.high.slice(2)}}</div> 21 <div class="wd_p">{{ weatherObj.forecast[0]?.low.slice(2) }}~{{ weatherObj.forecast[0]?.high.slice(2) }}
22 </div>
19 </div> 23 </div>
20 </div> 24 </div>
21 </div> 25 </div>
22 <el-dialog v-model="weatherdialog" width="540" :close-on-click-modal="true" 26 <el-dialog v-model="weatherdialog" :close-on-click-modal="true" style="--el-dialog-padding-primary:0;--el-dialog-border-radius:15px;
23 style="--el-dialog-padding-primary:0;--el-dialog-border-radius:15px; 27 --el-dialog-bg-color:transparent;overflow: hidden;"
24 --el-dialog-bg-color:transparent;overflow: hidden;"> 28 width="540">
25 <div class="bg-lineg pd20"> 29 <div class="bg-lineg pd20">
26 <div class="weatherbox"> 30 <div class="weatherbox">
27 <div class="today"> 31 <div class="today">
...@@ -30,9 +34,11 @@ ...@@ -30,9 +34,11 @@
30 <h1 v-else>WUXI</h1> 34 <h1 v-else>WUXI</h1>
31 </div> 35 </div>
32 <div> 36 <div>
33 <div class="wd">{{weatherObj.wendu}}°c</div> 37 <div class="wd">{{ weatherObj.wendu }}°c</div>
34 <div class="wd_p">{{weatherObj.forecast[0]?.low.slice(2)}}~{{weatherObj.forecast[0]?.high.slice(2)}}</div> 38 <div class="wd_p">
35 <div class="week">{{weatherObj.forecast[0]?.week}}</div> 39 {{ weatherObj.forecast[0]?.low.slice(2) }}~{{ weatherObj.forecast[0]?.high.slice(2) }}
40 </div>
41 <div class="week">{{ weatherObj.forecast[0]?.week }}</div>
36 </div> 42 </div>
37 <div> 43 <div>
38 <div class="type"> 44 <div class="type">
...@@ -45,22 +51,30 @@ ...@@ -45,22 +51,30 @@
45 <div class="type"> 51 <div class="type">
46 <weather-icon :type="n.type||n.wea" :width="32"/> 52 <weather-icon :type="n.type||n.wea" :width="32"/>
47 </div> 53 </div>
48 <div class="wd" v-if="n.low">{{n.low.slice(2,-1)}}/{{n.high.slice(2)}}</div> 54 <div v-if="n.low" class="wd">{{ n.low.slice(2, -1) }}/{{ n.high.slice(2) }}</div>
49 <div class="wd" v-if="n.tem_night">{{n.tem_night}}/{{n.tem_day}}</div> 55 <div v-if="n.tem_night" class="wd">{{ n.tem_night }}/{{ n.tem_day }}</div>
50 <div class="week" v-if="language==1"> 56 <div v-if="language==1" class="week">
51 {{n.week=='星期一'?'Mon':n.week=='星期二'?'Tue':n.week=='星期三'?'Wed':n.week=='星期四'?'Thu':n.week=='星期五'?'Fri':n.week=='星期六'?'Sat':n.week=='星期日'?'Sun':''}} 57 {{
58 n.week == '星期一' ? 'Mon' : n.week == '星期二' ? 'Tue' : n.week == '星期三' ? 'Wed' : n.week == '星期四' ? 'Thu' : n.week == '星期五' ? 'Fri' : n.week == '星期六' ? 'Sat' : n.week == '星期日' ? 'Sun' : ''
59 }}
52 </div> 60 </div>
53 <div class="week" v-else> 61 <div v-else class="week">
54 {{n.week}} 62 {{ n.week }}
55 </div> 63 </div>
56 <div class="date mt10" v-if="n.ymd">{{n.ymd.slice(5,10)}}</div> 64 <div v-if="n.ymd" class="date mt10">{{ n.ymd.slice(5, 10) }}</div>
57 <div class="date mt10" v-else>{{n.date.slice(5,10)}}</div> 65 <div v-else class="date mt10">{{ n.date.slice(5, 10) }}</div>
58 </li> 66 </li>
59 </ul> 67 </ul>
60 </div> 68 </div>
61 </div> 69 </div>
62 </el-dialog> 70 </el-dialog>
63 </div> 71 </div>
72
73 <div class="operation" @click="handelOperation">{{ language == 0 ? '操作手册' : 'GUIDELINE' }}
74 <el-icon>
75 <Download/>
76 </el-icon>
77 </div>
64 <dialog-master-class ref="masterClassRef"/> 78 <dialog-master-class ref="masterClassRef"/>
65 <pick-up ref="pickupRef"></pick-up> 79 <pick-up ref="pickupRef"></pick-up>
66 <back-number ref="backNumberRef"></back-number> 80 <back-number ref="backNumberRef"></back-number>
...@@ -81,72 +95,110 @@ import {useStorage} from "@vueuse/core/index"; ...@@ -81,72 +95,110 @@ import {useStorage} from "@vueuse/core/index";
81 import {ref} from "vue"; 95 import {ref} from "vue";
82 import {getWeather} from "@/apiPc/webSite"; 96 import {getWeather} from "@/apiPc/webSite";
83 import {getCurrentInstance} from "@vue/runtime-core"; 97 import {getCurrentInstance} from "@vue/runtime-core";
98 import {useRouter} from "vue-router";
99
84 const {proxy} = getCurrentInstance() 100 const {proxy} = getCurrentInstance()
85 const showgg = ref(false) 101 const showgg = ref(false)
86 102 const router = useRouter()
87 const language = useStorage('language', 0) 103 const language = useStorage('language', 0)
88 const weatherObj = ref({ 104 const weatherObj = ref({
89 forecast:[] 105 forecast: []
90 }) 106 })
91 const weatherdialog = ref(false) 107 const weatherdialog = ref(false)
108
92 // init() 109 // init()
93 function init(){ 110 function init() {
94 getWeather().then(res=>{ 111 getWeather().then(res => {
95 weatherObj.value = JSON.parse(res.data).data 112 weatherObj.value = JSON.parse(res.data).data
96 showgg.value = true 113 showgg.value = true
97 }).catch(err=>{ 114 }).catch(err => {
98 showgg.value = false 115 showgg.value = false
99 }) 116 })
100 } 117 }
118
101 const popWeather = () => { 119 const popWeather = () => {
102 weatherdialog.value = true 120 weatherdialog.value = true
103 } 121 }
104 const openMaster = (params) => { 122 const openMaster = (params) => {
105 console.log(params) 123 console.log(params)
106 var obj = { 124 var obj = {
107 title:'大师课申请', 125 title: '大师课申请',
108 cptId:params.cptId 126 cptId: params.cptId
109 } 127 }
110 proxy.$refs['masterClassRef'].open(obj) 128 proxy.$refs['masterClassRef'].open(obj)
111 } 129 }
112 130
113 const openPickup= (params) => { 131 const openPickup = (params) => {
114 console.log(params) 132 console.log(params)
115 const obj = { 133 const obj = {
116 title:'接送机服务', 134 title: '接送机服务',
117 cptId:params.cptId 135 cptId: params.cptId
118 } 136 }
119 proxy.$refs['pickupRef'].open(obj) 137 proxy.$refs['pickupRef'].open(obj)
120 } 138 }
121 const openBackNumber = (params) => { 139 const openBackNumber = (params) => {
122 console.log(params) 140 console.log(params)
123 const obj = { 141 const obj = {
124 title:'背号查询', 142 title: '背号查询',
125 cptId:params.cptId 143 cptId: params.cptId
126 } 144 }
127 proxy.$refs['backNumberRef'].open(obj) 145 proxy.$refs['backNumberRef'].open(obj)
128 } 146 }
129 const openSchSearch = (params) => { 147 const openSchSearch = (params) => {
130 console.log(params) 148 console.log(params)
131 const obj = { 149 const obj = {
132 title:'日程查询', 150 title: '日程查询',
133 cptId:params.cptId 151 cptId: params.cptId
134 } 152 }
135 proxy.$refs['schSearchRef'].open(obj) 153 proxy.$refs['schSearchRef'].open(obj)
136 } 154 }
155
156 function handelOperation() {
157 router.push('/about/operation')
158 }
137 </script> 159 </script>
138 160
139 <style scoped lang="scss"> 161 <style lang="scss" scoped>
140 .poCode{position: fixed;right: 0;top: 40%;background: #fff;padding: 10px 0 0;border-radius: 10px;overflow: hidden; 162 .poCode {
141 box-shadow: 0 2px 8px #aaa;z-index: 99;} 163 position: fixed;
164 right: 0;
165 top: 40%;
166 background: #fff;
167 padding: 10px 0 0;
168 border-radius: 10px;
169 overflow: hidden;
170 box-shadow: 0 2px 8px #aaa;
171 z-index: 99;
172 }
173
142 @media screen and (max-width: 768px) { 174 @media screen and (max-width: 768px) {
143 :deep(.zn-Box .zn-btn){margin-top: 10px;font-size: 14px} 175 :deep(.zn-Box .zn-btn) {
144 :deep(.bgbg){ padding: 3% 5% 0!important; 176 margin-top: 10px;
145 h1 {font-size: 22px;margin:20px 0 0;} 177 font-size: 14px
146 } 178 }
147 .fixed_gg{ 179 :deep(.bgbg) {
180 padding: 3% 5% 0 !important;
181
182 h1 {
183 font-size: 22px;
184 margin: 20px 0 0;
185 }
186 }
187 .fixed_gg {
148 transform: scale(0.7); 188 transform: scale(0.7);
149 transform-origin: right; 189 transform-origin: right;
150 } 190 }
151 } 191 }
192
193 .operation {
194 position: fixed;
195 right: 0;
196 top: 580px;
197 color: #fff;
198 background-color: rgba(0, 0, 0, 0.5);
199 backdrop-filter: blur(4px);
200 border-radius: 50px;
201 padding: 10px 20px;
202 cursor: pointer;
203 }
152 </style> 204 </style>
......
1 <template> 1 <template>
2 <el-dialog 2 <el-dialog
3 v-model="show" title="Visa Invitation Letter" append-to-body close-icon="CircleClose" center 3 v-model="show" append-to-body center close-icon="CircleClose" close-on-click-modal
4 close-on-click-modal destroy-on-close width="1100" 4 destroy-on-close title="Visa Invitation Letter" width="1100"
5 > 5 >
6 <el-descriptions border> 6 <el-descriptions border>
7 <el-descriptions-item label="No.">{{ form.id }}</el-descriptions-item> 7 <el-descriptions-item label="No.">{{ form.id }}</el-descriptions-item>
8 <el-descriptions-item label="Applicant Type">{{ form.remarks || form.applicatTypeName }}</el-descriptions-item> 8 <el-descriptions-item label="Applicant Type">{{ form.remarks || form.applicatTypeName }}</el-descriptions-item>
9 <el-descriptions-item label="Invitation Type">{{ form.invitationTypeName }}</el-descriptions-item> 9 <el-descriptions-item label="Invitation Type">{{ form.invitationTypeName }}</el-descriptions-item>
10 <!-- <el-descriptions-item label="Do you need a Chinese invitation?">{{--> 10 <!-- <el-descriptions-item label="Do you need a Chinese invitation?">{{-->
11 <!-- form.chinese == '1' ? 'YES' : 'No'--> 11 <!-- form.chinese == '1' ? 'YES' : 'No'-->
12 <!-- }}--> 12 <!-- }}-->
13 <!-- </el-descriptions-item>--> 13 <!-- </el-descriptions-item>-->
14 <el-descriptions-item label="MNA/Team Name">{{ form.nameEn }}</el-descriptions-item> 14 <el-descriptions-item label="MNA/Team Name">{{ form.nameEn }}</el-descriptions-item>
15 <el-descriptions-item label="MNA/Team Address">{{ form.associationAddress }}</el-descriptions-item> 15 <el-descriptions-item label="MNA/Team Address">{{ form.associationAddress }}</el-descriptions-item>
16 <el-descriptions-item label="Contact Email">{{ form.email }}</el-descriptions-item> 16 <el-descriptions-item label="Contact Email">{{ form.email }}</el-descriptions-item>
...@@ -25,7 +25,7 @@ ...@@ -25,7 +25,7 @@
25 </el-link> 25 </el-link>
26 </el-descriptions-item> 26 </el-descriptions-item>
27 <el-descriptions-item label="Proof of Employment"> 27 <el-descriptions-item label="Proof of Employment">
28 <el-link v-if="form.invitationFile" target="_blank" :href="fillImgUrl(form.invitationFile)" type="primary"> 28 <el-link v-if="form.invitationFile" :href="fillImgUrl(form.invitationFile)" target="_blank" type="primary">
29 proof of employment 29 proof of employment
30 </el-link> 30 </el-link>
31 </el-descriptions-item> 31 </el-descriptions-item>
...@@ -34,29 +34,31 @@ ...@@ -34,29 +34,31 @@
34 <!-- <el-divider></el-divider>--> 34 <!-- <el-divider></el-divider>-->
35 <br/> 35 <br/>
36 <el-table :data="visaList" border stripe> 36 <el-table :data="visaList" border stripe>
37 <el-table-column prop="passportCopy" label="Passport Copy"> 37 <el-table-column label="Passport Copy" prop="passportCopy">
38 <template #default="{row}"> 38 <template #default="{row}">
39 <el-image 39 <el-image
40 :src="fillImgUrl(row.passportCopy)" 40 :preview-src-list="[fillImgUrl(row.passportCopy)]"
41 :preview-src-list="[fillImgUrl(row.passportCopy)]" 41 :preview-teleported="true"
42 :preview-teleported="true" 42 :src="fillImgUrl(row.passportCopy)"
43 style="width: 50px;height: 70px" 43 style="width: 50px;height: 70px"
44 /> 44 />
45 </template> 45 </template>
46 </el-table-column> 46 </el-table-column>
47 <el-table-column label="position" align="center" prop="position"/> 47 <el-table-column align="center" label="Date ofEntrye" prop="entryDate"/>
48 <el-table-column label="lastName" align="center" prop="lastName"/> 48 <el-table-column align="center" label="Date ofDeparture" prop="departureDate"/>
49 <el-table-column label="firstName" align="center" prop="fristName"/> 49 <el-table-column align="center" label="position" prop="position"/>
50 <el-table-column prop="sex" label="Gender" align="center"> 50 <el-table-column align="center" label="lastName" prop="lastName"/>
51 <el-table-column align="center" label="firstName" prop="fristName"/>
52 <el-table-column align="center" label="Gender" prop="sex">
51 <template #default="{row}"> 53 <template #default="{row}">
52 {{ row.sex == '0' ? 'M' : 'F' }} 54 {{ row.sex == '0' ? 'M' : 'F' }}
53 </template> 55 </template>
54 </el-table-column> 56 </el-table-column>
55 <el-table-column label="nationality" align="center" prop="nationality"/> 57 <el-table-column align="center" label="nationality" prop="nationality"/>
56 <el-table-column label="birthday" align="center" prop="birthday"/> 58 <el-table-column align="center" label="birthday" prop="birthday"/>
57 <el-table-column label="Passport No." align="center" prop="passportNo"/> 59 <el-table-column align="center" label="Passport No." prop="passportNo"/>
58 <el-table-column label="DATE OF ISSUE" align="center" prop="issueDate"/> 60 <el-table-column align="center" label="DATE OF ISSUE" prop="issueDate"/>
59 <el-table-column label="DATE OF EXPIRY" align="center" prop="expiryDate"/> 61 <el-table-column align="center" label="DATE OF EXPIRY" prop="expiryDate"/>
60 </el-table> 62 </el-table>
61 </el-dialog> 63 </el-dialog>
62 64
...@@ -83,17 +85,17 @@ const visaList = ref([]) ...@@ -83,17 +85,17 @@ const visaList = ref([])
83 const open = (params) => { 85 const open = (params) => {
84 show.value = true 86 show.value = true
85 form.value = params 87 form.value = params
86 88
87 listVisaInfo({visaId: params.id}) 89 listVisaInfo({visaId: params.id})
88 .then((res) => { 90 .then((res) => {
89 visaList.value = res.rows 91 visaList.value = res.rows
90 }) 92 })
91 93
92 } 94 }
93 defineExpose({open}) 95 defineExpose({open})
94 96
95 </script> 97 </script>
96 98
97 <style scoped lang="scss"> 99 <style lang="scss" scoped>
98 100
99 </style> 101 </style>
......
...@@ -44,15 +44,17 @@ ...@@ -44,15 +44,17 @@
44 <el-option :label="language==0?'TE/PU(外办)邀请函':'TE/PU letter'" value="2"/> 44 <el-option :label="language==0?'TE/PU(外办)邀请函':'TE/PU letter'" value="2"/>
45 </el-select> 45 </el-select>
46 </el-form-item> 46 </el-form-item>
47 <el-form-item v-if="form.invitationType==2" label="Proof of Employment" prop="invitationFileArr" required> 47 <!-- <el-form-item v-if="form.invitationType==2" label="Proof of Employment" prop="invitationFileArr" required>-->
48 <div class="red">Proof of employment is required for TE/PU letter letters.</div> 48 <!-- <div class="red">Proof of employment is required for TE/PU letter letters.</div>-->
49 <div class="red"> 49 <!-- <div class="red">-->
50 This document must be issued by the invitee's association and must bear an official stamp or signature. 50 <!-- This document must be issued by the invitee's association and must bear an official stamp or signature.-->
51 </div> 51 <!-- </div>-->
52 <br/> 52 <!-- <br/>-->
53 <file-upload v-model="form.invitationFileArr" :button-text="language==0?'上传':'Upload'" :is-show-tip="false" 53 <!-- <file-upload v-model="form.invitationFileArr" :button-text="language==0?'上传':'Upload'" :is-show-tip="false"-->
54 :limit="1"></file-upload> 54 <!-- :limit="1"></file-upload>-->
55 </el-form-item> 55 <!-- </el-form-item>-->
56
57
56 <!-- <el-form-item :label="language==0?'是否需要中文邀请函':'Do you need a Chinese invitation?'" prop="chinese"--> 58 <!-- <el-form-item :label="language==0?'是否需要中文邀请函':'Do you need a Chinese invitation?'" prop="chinese"-->
57 <!-- required>--> 59 <!-- required>-->
58 <!-- <el-radio-group v-model="form.chinese">--> 60 <!-- <el-radio-group v-model="form.chinese">-->
...@@ -151,6 +153,40 @@ ...@@ -151,6 +153,40 @@
151 preview-teleported style="width: 60px;z-index: 999;"/> 153 preview-teleported style="width: 60px;z-index: 999;"/>
152 </template> 154 </template>
153 </el-table-column> 155 </el-table-column>
156 <el-table-column :label="language==0?'入境日期':'Date ofEntrye'" prop="" width="130px">
157 <template #header>
158 <div class="esp">
159 <span class="red">*</span>Date ofEntrye
160 </div>
161 </template>
162 <template #default="scope">
163 <el-date-picker
164 v-model="scope.row.entryDate"
165 format="YYYY-MM-DD"
166 placeholder="YYYY-MM-DD"
167 size="small"
168 style="width: 100%;" type="date"
169 value-format="YYYY-MM-DD"
170 />
171 </template>
172 </el-table-column>
173 <el-table-column :label="language==0?'离境日期':'Date ofDeparture'" prop="" width="130px">
174 <template #header>
175 <div class="esp">
176 <span class="red">*</span>Date ofDeparture
177 </div>
178 </template>
179 <template #default="scope">
180 <el-date-picker
181 v-model="scope.row.departureDate"
182 format="YYYY-MM-DD"
183 placeholder="YYYY-MM-DD"
184 size="small"
185 style="width: 100%;" type="date"
186 value-format="YYYY-MM-DD"
187 />
188 </template>
189 </el-table-column>
154 <el-table-column :label="'position'" min-width="100" prop="position"> 190 <el-table-column :label="'position'" min-width="100" prop="position">
155 <template #header> 191 <template #header>
156 <div class="esp"> 192 <div class="esp">
...@@ -244,10 +280,11 @@ ...@@ -244,10 +280,11 @@
244 </div> 280 </div>
245 </template> 281 </template>
246 <template #default="scope"> 282 <template #default="scope">
247 <el-date-picker v-model="scope.row.birthday" 283 <el-date-picker
248 format="YYYY-MM-DD" 284 v-model="scope.row.birthday"
249 placeholder="YYYY-MM-DD" size="small" 285 format="YYYY-MM-DD"
250 style="width: 100%;" type="date" value-format="YYYY-MM-DD" 286 placeholder="YYYY-MM-DD" size="small"
287 style="width: 100%;" type="date" value-format="YYYY-MM-DD"
251 /> 288 />
252 </template> 289 </template>
253 </el-table-column> 290 </el-table-column>
...@@ -306,10 +343,15 @@ ...@@ -306,10 +343,15 @@
306 </el-form-item> 343 </el-form-item>
307 <!-- 补充材料--> 344 <!-- 补充材料-->
308 <el-form-item :label="language==0?'补充材料':'Additional Documents'" prop="files"> 345 <el-form-item :label="language==0?'补充材料':'Additional Documents'" prop="files">
309 <file-upload v-model="form.files" :button-text="language==0?'上传':'Upload'" :is-show-tip="false" 346 <file-upload v-model="form.files" :button-text="language==0?'上传':'Upload'" :is-show-tip="false" :limit="1"/>
310 :limit="1"/> 347 </el-form-item>
348 <el-form-item>
349 <el-checkbox v-model="form.check" style="pointer-events: none"/>
350 <el-link style="margin-left: 5px" type="primary" @click="showCheck=!showCheck">{{
351 language == 0 ? '我确认所提供的资料是正确的' : 'I confirm that the information provided is correct'
352 }}
353 </el-link>
311 </el-form-item> 354 </el-form-item>
312
313 355
314 <div class="text-center"> 356 <div class="text-center">
315 <el-button :disabled="!cptId" class="btn-lineG" round size="large" type="primary" @click="submit"> 357 <el-button :disabled="!cptId" class="btn-lineG" round size="large" type="primary" @click="submit">
...@@ -318,6 +360,25 @@ ...@@ -318,6 +360,25 @@
318 </div> 360 </div>
319 </el-form> 361 </el-form>
320 </div> 362 </div>
363
364 <el-dialog
365 v-model="showCheck"
366 append-to-body center
367 class="pcloginpop"
368 destroy-on-close
369 style="min-width: 300px;max-width: 600px"
370 >
371 <p style="font-size: 16px">
372 Passport information has been auto-recognized.Please double-check carefully, as errors may occur.Edit if
373 necessary
374 before submission.
375 </p>
376 <br>
377 <p style="text-align: center">
378 <el-button type="primary" @click="handelSubmit">Confrm</el-button>
379 </p>
380 <br>
381 </el-dialog>
321 </el-dialog> 382 </el-dialog>
322 383
323 </template> 384 </template>
...@@ -357,6 +418,7 @@ const title = ref('') ...@@ -357,6 +418,7 @@ const title = ref('')
357 const countrys = ref([]) 418 const countrys = ref([])
358 const mnaList = ref([]) 419 const mnaList = ref([])
359 const cptId = ref('') 420 const cptId = ref('')
421 const showCheck = ref(false)
360 const rules = ref( 422 const rules = ref(
361 { 423 {
362 nationality: [{required: true, trigger: 'change', message: language.value == 0 ? '请选择' : 'Please choose'},], 424 nationality: [{required: true, trigger: 'change', message: language.value == 0 ? '请选择' : 'Please choose'},],
...@@ -367,6 +429,7 @@ const rules = ref( ...@@ -367,6 +429,7 @@ const rules = ref(
367 passportCopy: [{required: true, trigger: 'blur', message: language.value == 0 ? '请上传' : 'Please Upload'},], 429 passportCopy: [{required: true, trigger: 'blur', message: language.value == 0 ? '请上传' : 'Please Upload'},],
368 arrival: [{required: true, trigger: 'change', message: language.value == 0 ? '请选择' : 'Please choose'},], 430 arrival: [{required: true, trigger: 'change', message: language.value == 0 ? '请选择' : 'Please choose'},],
369 departure: [{required: true, trigger: 'change', message: language.value == 0 ? '请选择' : 'Please choose'},], 431 departure: [{required: true, trigger: 'change', message: language.value == 0 ? '请选择' : 'Please choose'},],
432 check: [{required: true, trigger: 'change', message: language.value == 0 ? '请选择' : 'Please choose'},],
370 }) 433 })
371 const open = (params) => { 434 const open = (params) => {
372 show.value = true 435 show.value = true
...@@ -442,8 +505,13 @@ function getMNAList() { ...@@ -442,8 +505,13 @@ function getMNAList() {
442 }) 505 })
443 } 506 }
444 507
445 const submit = () => { 508 function handelSubmit() {
446 console.log(form.value) 509 showCheck.value = false
510 form.value.check = true
511 }
512
513 const submit = async () => {
514 console.log(form.value.check)
447 if (form.value.email?.indexOf('@') == -1) { 515 if (form.value.email?.indexOf('@') == -1) {
448 ElMessage.warning(language.value == 0 ? '请填写正确的邮箱' : 'Invalid Emaill Address!') 516 ElMessage.warning(language.value == 0 ? '请填写正确的邮箱' : 'Invalid Emaill Address!')
449 return 517 return
...@@ -465,6 +533,14 @@ const submit = () => { ...@@ -465,6 +533,14 @@ const submit = () => {
465 ElMessage.warning(`Please specify ${row.fristName}'s position`) 533 ElMessage.warning(`Please specify ${row.fristName}'s position`)
466 return; 534 return;
467 } 535 }
536 if (!row.entryDate) {
537 ElMessage.warning(`Please specify Date ofEntrye position`)
538 return;
539 }
540 if (!row.departureDate) {
541 ElMessage.warning(`Please specify Date ofDeparture position`)
542 return;
543 }
468 } 544 }
469 545
470 if (form.value.files && Array.isArray(form.value.files)) { 546 if (form.value.files && Array.isArray(form.value.files)) {
...@@ -473,27 +549,33 @@ const submit = () => { ...@@ -473,27 +549,33 @@ const submit = () => {
473 if (form.value.invitationFileArr) { 549 if (form.value.invitationFileArr) {
474 form.value.invitationFile = JSON.stringify(form.value.invitationFileArr) 550 form.value.invitationFile = JSON.stringify(form.value.invitationFileArr)
475 } 551 }
476 552 await proxy.$refs.iformRef.validate()
553 if (!form.value.check) {
554 showCheck.value = true
555 return
556 }
557 await ElMessageBox.confirm(
558 language.value == 0 ? '请确认信息正确并提交吗?' : 'Please confirm that the information is correct and submit it',
559 language.value == 0 ? '提示' : 'Tips', {
560 confirmButtonText: language.value == 0 ? '确定' : 'Confirm',
561 cancelButtonText: language.value == 0 ? '取消' : 'Cancel',
562 type: 'warning'
563 }).then(() => {
564 form.value.cptId = cptId.value
565 addInvitation(form.value).then((res) => {
566 if (res.data == -200) {
567 ElMessage.error(language.value == 0 ? '邮箱验证码不正确' : 'Invalid email verification code')
568 } else {
569 ElMessage.success(language.value == 0 ? '提交成功' : 'Successfully!')
570 showR.value = true
571 emit('refresh')
572 }
573 })
574 })
477 proxy.$refs.iformRef.validate(valid => { 575 proxy.$refs.iformRef.validate(valid => {
478 if (valid) { 576 if (valid) {
479 ElMessageBox.confirm( 577
480 language.value == 0 ? '请确认信息正确并提交吗?' : 'Please confirm that the information is correct and submit it', 578
481 language.value == 0 ? '提示' : 'Tips', {
482 confirmButtonText: language.value == 0 ? '确定' : 'Confirm',
483 cancelButtonText: language.value == 0 ? '取消' : 'Cancel',
484 type: 'warning'
485 }).then(() => {
486 form.value.cptId = cptId.value
487 addInvitation(form.value).then((res) => {
488 if (res.data == -200) {
489 ElMessage.error(language.value == 0 ? '邮箱验证码不正确' : 'Invalid email verification code')
490 } else {
491 ElMessage.success(language.value == 0 ? '提交成功' : 'Successfully!')
492 showR.value = true
493 emit('refresh')
494 }
495 })
496 })
497 } 579 }
498 }) 580 })
499 } 581 }
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!