Merge branch 'refs/heads/购票修改' into dev
Showing
4 changed files
with
137 additions
and
40 deletions
| ... | @@ -133,6 +133,12 @@ | ... | @@ -133,6 +133,12 @@ |
| 133 | form.extJson?.ticketDate?.ticketType == 1 ? '~' + dayjs(form?.extJson?.ticketDate?.ticketEnd).format('YYYY-MM-DD') : '' | 133 | form.extJson?.ticketDate?.ticketType == 1 ? '~' + dayjs(form?.extJson?.ticketDate?.ticketEnd).format('YYYY-MM-DD') : '' |
| 134 | }} | 134 | }} |
| 135 | </el-col> | 135 | </el-col> |
| 136 | <el-col v-if="form?.extJson?.ticketDate?.isCountSale==1"> | ||
| 137 | {{ | ||
| 138 | language == 0 ? `满${form?.extJson?.ticketDate.counts}人优惠` : `Discount for up to ${form?.extJson?.ticketDate.counts} people` | ||
| 139 | }}<span v-if="language == 0">{{ form?.extJson?.ticketDate.discount }}折</span> | ||
| 140 | <span v-else>{{ (10 - form?.extJson?.ticketDate.discount) * 10 + '%' }}off</span> | ||
| 141 | </el-col> | ||
| 136 | <!-- <el-col>--> | 142 | <!-- <el-col>--> |
| 137 | <!-- {{--> | 143 | <!-- {{--> |
| 138 | <!-- language == 0 ? '原价票' : 'Cost Ticket'--> | 144 | <!-- language == 0 ? '原价票' : 'Cost Ticket'--> | ... | ... |
| ... | @@ -104,6 +104,21 @@ | ... | @@ -104,6 +104,21 @@ |
| 104 | x {{ customerArr_b.length }} | 104 | x {{ customerArr_b.length }} |
| 105 | {{ languageFormat(language, "张", "tickets") }} | 105 | {{ languageFormat(language, "张", "tickets") }} |
| 106 | </div> | 106 | </div> |
| 107 | <div v-if="tickType.isCountSale == 1" style="border-top: 1px solid #dcdfe6;margin-top: 20px"> | ||
| 108 | <p>{{ | ||
| 109 | language == 0 ? `满${tickType.counts}人优惠` : `Discount for up to ${tickType.counts} people` | ||
| 110 | }}</p> | ||
| 111 | <div class="ticket"> | ||
| 112 | <div v-if="language==0" style="color: orange;font-weight: 600"> | ||
| 113 | {{ tickType.discount }}折 | ||
| 114 | </div> | ||
| 115 | <div v-else style="color: orange;font-weight: 600"> | ||
| 116 | {{ (10 - tickType.discount) * 10 + '%' }}off | ||
| 117 | </div> | ||
| 118 | </div> | ||
| 119 | </div> | ||
| 120 | |||
| 121 | |||
| 107 | </div> | 122 | </div> |
| 108 | <div class="detail_b"> | 123 | <div class="detail_b"> |
| 109 | <div class="sum_txt"> | 124 | <div class="sum_txt"> |
| ... | @@ -114,6 +129,13 @@ | ... | @@ -114,6 +129,13 @@ |
| 114 | {{ | 129 | {{ |
| 115 | language == 0 ? (price.total_cn * 1).toFixed(2) : (price.total_en * 1).toFixed(2) | 130 | language == 0 ? (price.total_cn * 1).toFixed(2) : (price.total_en * 1).toFixed(2) |
| 116 | }} | 131 | }} |
| 132 | |||
| 133 | <span v-if="tickType.isCountSale==1&&orderForm.message.length>=tickType.counts" class="total"> | ||
| 134 | {{ language == 0 ? "¥" : "€" }} | ||
| 135 | {{ | ||
| 136 | language == 0 ? (price.total_cnY * 1).toFixed(2) : (price.total_enY * 1).toFixed(2) | ||
| 137 | }} | ||
| 138 | </span> | ||
| 117 | </div> | 139 | </div> |
| 118 | </div> | 140 | </div> |
| 119 | </div> | 141 | </div> |
| ... | @@ -187,7 +209,9 @@ const orderForm = ref({ | ... | @@ -187,7 +209,9 @@ const orderForm = ref({ |
| 187 | }) | 209 | }) |
| 188 | const price = ref({ | 210 | const price = ref({ |
| 189 | total_en: 0, | 211 | total_en: 0, |
| 190 | total_cn: 0 | 212 | total_cn: 0, |
| 213 | total_enY: 0, | ||
| 214 | total_cnY: 0, | ||
| 191 | }) | 215 | }) |
| 192 | const tickType = ref({}) | 216 | const tickType = ref({}) |
| 193 | const matchType = ref({}) | 217 | const matchType = ref({}) |
| ... | @@ -195,21 +219,21 @@ const rules = ref({ | ... | @@ -195,21 +219,21 @@ const rules = ref({ |
| 195 | contacts: [ | 219 | contacts: [ |
| 196 | { | 220 | { |
| 197 | required: true, | 221 | required: true, |
| 198 | message: languageFormat(language, "请输入联系人", "Please enter the contact person"), | 222 | message: languageFormat(language.value, "请输入联系人", "Please enter the contact person"), |
| 199 | trigger: "blur" | 223 | trigger: "blur" |
| 200 | }, | 224 | }, |
| 201 | ], | 225 | ], |
| 202 | phone: [ | 226 | phone: [ |
| 203 | { | 227 | { |
| 204 | required: true, | 228 | required: true, |
| 205 | message: languageFormat(language, "请输入联系电话", "Please enter the contact phone number"), | 229 | message: languageFormat(language.value, "请输入联系电话", "Please enter the contact phone number"), |
| 206 | trigger: "blur" | 230 | trigger: "blur" |
| 207 | }, | 231 | }, |
| 208 | ], | 232 | ], |
| 209 | message: [ | 233 | message: [ |
| 210 | { | 234 | { |
| 211 | required: true, | 235 | required: true, |
| 212 | message: languageFormat(language, "请选择观众", "Please select the audience"), | 236 | message: languageFormat(language.value, "请选择观众", "Please select the audience"), |
| 213 | trigger: "blur" | 237 | trigger: "blur" |
| 214 | }, | 238 | }, |
| 215 | ], | 239 | ], |
| ... | @@ -235,17 +259,26 @@ function changeGroup(e) { | ... | @@ -235,17 +259,26 @@ function changeGroup(e) { |
| 235 | // 计算价格 | 259 | // 计算价格 |
| 236 | price.value = { | 260 | price.value = { |
| 237 | total_en: 0, | 261 | total_en: 0, |
| 238 | total_cn: 0 | 262 | total_cn: 0, |
| 263 | total_enY: 0, | ||
| 264 | total_cnY: 0, | ||
| 239 | } | 265 | } |
| 240 | orderForm.value.message.forEach(v => { | 266 | orderForm.value.message.forEach(v => { |
| 241 | if (v.discount) { | 267 | if (v.discount) { |
| 242 | price.value.total_cn += (tickType.value.rebatePrice * 1) | 268 | price.value.total_cnY = price.value.total_cn += (tickType.value.rebatePrice * 1) |
| 243 | price.value.total_en += (tickType.value.rebatePriceEn * 1) | 269 | price.value.total_enY = price.value.total_en += (tickType.value.rebatePriceEn * 1) |
| 270 | |||
| 244 | } else { | 271 | } else { |
| 245 | price.value.total_cn += (tickType.value.price * 1) | 272 | price.value.total_cnY = price.value.total_cn += (tickType.value.price * 1) |
| 246 | price.value.total_en += (tickType.value.priceEn * 1) | 273 | price.value.total_enY = price.value.total_en += (tickType.value.priceEn * 1) |
| 247 | } | 274 | } |
| 248 | }) | 275 | }) |
| 276 | |||
| 277 | // 计算购票优惠 | ||
| 278 | if (tickType.value.isCountSale == 1 && orderForm.value.message.length >= tickType.value.counts) { | ||
| 279 | price.value.total_cn = ((price.value.total_cn * (tickType.value.discount * 10)) / 100).toFixed(2) | ||
| 280 | price.value.total_en = ((price.value.total_en * (tickType.value.discount * 10)) / 100).toFixed(2) | ||
| 281 | } | ||
| 249 | } | 282 | } |
| 250 | console.log(orderForm.value.message) | 283 | console.log(orderForm.value.message) |
| 251 | 284 | ||
| ... | @@ -368,6 +401,12 @@ div { | ... | @@ -368,6 +401,12 @@ div { |
| 368 | box-sizing: border-box; | 401 | box-sizing: border-box; |
| 369 | } | 402 | } |
| 370 | 403 | ||
| 404 | .total { | ||
| 405 | color: #9f9c9c; | ||
| 406 | font-size: 20px; | ||
| 407 | text-decoration: line-through | ||
| 408 | } | ||
| 409 | |||
| 371 | .qrcode { | 410 | .qrcode { |
| 372 | width: 200px; | 411 | width: 200px; |
| 373 | height: 200px; | 412 | height: 200px; | ... | ... |
| ... | @@ -60,64 +60,94 @@ | ... | @@ -60,64 +60,94 @@ |
| 60 | </van-count-down> | 60 | </van-count-down> |
| 61 | </div> | 61 | </div> |
| 62 | <div v-else> | 62 | <div v-else> |
| 63 | <!-- 时间 --> | 63 | |
| 64 | <!-- 票档 --> | ||
| 64 | <div class="select_item_box"> | 65 | <div class="select_item_box"> |
| 65 | <div class="label"> | 66 | <div class="label"> |
| 66 | {{ triggerLanguage(language, "场次", "Session") }} | 67 | {{ triggerLanguage(language, "票档", "Tickets") }} : |
| 68 | </div> | ||
| 69 | <div v-if="matchForm.ticketLayout"> | ||
| 70 | <span style="color: #493ceb;cursor:pointer;font-weight:600;font-size: 14px" | ||
| 71 | @click="show=true"> <span style="color: red;font-size: 18px">*</span> | ||
| 72 | {{ | ||
| 73 | language == 0 ? '点击查看场馆布局' : 'View Venue Layout' | ||
| 74 | }} | ||
| 75 | </span> | ||
| 67 | </div> | 76 | </div> |
| 77 | </div> | ||
| 78 | <div class="select_item_box"> | ||
| 68 | <div class="select_item"> | 79 | <div class="select_item"> |
| 69 | <div | 80 | <div |
| 70 | v-for="(it, index) in tickList" | 81 | v-for="(it, index) in tickClass" |
| 71 | :key="index" | 82 | :key="index" |
| 72 | :class="[ | 83 | :class="[ |
| 73 | it.id == selectForm.id ? 'tagActive' : 'tag', | 84 | it.id == selectForm.latId ? 'tagActive' : 'tag', |
| 74 | it.isView==0?'forbid':'' | ||
| 75 | ]" | 85 | ]" |
| 76 | @click="selectTick(it)" | 86 | @click="select(it)" |
| 77 | > | 87 | > |
| 78 | {{ it.name }} <span v-if="it.ticketType==1" class="tao">{{ | 88 | {{ it.name }} |
| 79 | language == 0 ? '套票' : 'Package ticket' | ||
| 80 | }}</span> | ||
| 81 | </div> | 89 | </div> |
| 82 | </div> | 90 | </div> |
| 83 | </div> | 91 | </div> |
| 84 | <!-- 票档 --> | 92 | |
| 93 | <!-- 时间 --> | ||
| 85 | <div class="select_item_box"> | 94 | <div class="select_item_box"> |
| 86 | <div class="label"> | 95 | <div class="label"> |
| 87 | {{ triggerLanguage(language, "票档", "Tickets") }} | 96 | {{ triggerLanguage(language, "场次", "Session") }} : |
| 88 | </div> | 97 | </div> |
| 98 | </div> | ||
| 99 | <div class="select_item_box"> | ||
| 89 | <div class="select_item"> | 100 | <div class="select_item"> |
| 90 | <div | 101 | <div |
| 91 | v-for="(it, index) in tickClass" | 102 | v-for="(it, index) in tickList" |
| 92 | :key="index" | 103 | :key="index" |
| 93 | :class="[ | 104 | :class="[ |
| 94 | it.id == selectForm.latId ? 'tagActive' : 'tag', | 105 | it.id == selectForm.id ? 'tagActive' : 'tag', |
| 106 | it.isView==0?'forbid':'' | ||
| 95 | ]" | 107 | ]" |
| 96 | @click="select(it)" | 108 | @click="selectTick(it)" |
| 97 | > | 109 | > |
| 98 | {{ it.name }} | 110 | {{ it.name }} <span v-if="it.ticketType==1" class="tao">{{ |
| 111 | language == 0 ? '套票' : 'Package ticket' | ||
| 112 | }}</span> | ||
| 99 | </div> | 113 | </div> |
| 100 | </div> | 114 | </div> |
| 101 | </div> | 115 | </div> |
| 116 | |||
| 102 | <!-- 价格 --> | 117 | <!-- 价格 --> |
| 103 | <div class="select_item_box"> | 118 | <div class="select_item_box"> |
| 104 | <div class="label"> | 119 | <div class="label"> |
| 105 | {{ triggerLanguage(language, '价格', "Price") }} | 120 | {{ triggerLanguage(language, '价格', "Price") }} : |
| 106 | </div> | 121 | </div> |
| 122 | </div> | ||
| 123 | <div class="select_item_box"> | ||
| 107 | <div class="select_item"> | 124 | <div class="select_item"> |
| 108 | <div class="tagActive" style="min-width: 80px"> | 125 | <div class="tagActive" style="min-width: 80px"> |
| 109 | {{ language == 0 ? '¥' : '€' }} {{ language == 0 ? selectForm.price : selectForm.priceEn }} | 126 | {{ language == 0 ? '¥' : '€' }} {{ language == 0 ? selectForm.price : selectForm.priceEn }} |
| 110 | </div> | 127 | </div> |
| 111 | </div> | 128 | </div> |
| 112 | </div> | 129 | </div> |
| 130 | <!-- 购票备注--> | ||
| 131 | <div v-if="matchForm.ticketRemark" class="select_item_box"> | ||
| 132 | <div class="label"> | ||
| 133 | {{ | ||
| 134 | triggerLanguage(language, '购票备注', "Ticket Purchase Note") | ||
| 135 | }} : | ||
| 136 | </div> | ||
| 137 | </div> | ||
| 138 | <div v-if="matchForm.ticketRemark" class="select_item_box"> | ||
| 139 | <div class="select_item"> | ||
| 140 | {{ matchForm.ticketRemark }} | ||
| 141 | </div> | ||
| 142 | </div> | ||
| 113 | 143 | ||
| 114 | <div v-if="endTime<=0" class="btn" style="margin-left: 40px;opacity: 0.5;cursor: not-allowed;" | 144 | <div v-if="endTime<=0" class="btn" style="margin-left: 40px;opacity: 0.5;cursor: not-allowed;margin-top: 10px" |
| 115 | @click="toSelectClosed"> | 145 | @click="toSelectClosed"> |
| 116 | {{ | 146 | {{ |
| 117 | triggerLanguage(language, "售票结束", "Sale closed") | 147 | triggerLanguage(language, "售票结束", "Sale closed") |
| 118 | }} | 148 | }} |
| 119 | </div> | 149 | </div> |
| 120 | <div v-else class="btn" style="margin-left: 40px" @click="toSelectSeat()"> | 150 | <div v-else class="btn" style="margin-left: 40px;margin-top: 10px" @click="toSelectSeat()"> |
| 121 | {{ | 151 | {{ |
| 122 | triggerLanguage(language, "立即购票", "Buy tickets now") | 152 | triggerLanguage(language, "立即购票", "Buy tickets now") |
| 123 | }} | 153 | }} |
| ... | @@ -135,6 +165,12 @@ | ... | @@ -135,6 +165,12 @@ |
| 135 | </div> | 165 | </div> |
| 136 | <div v-show="active==1" class="rich_content" v-html="matchForm.ticketDes"/> | 166 | <div v-show="active==1" class="rich_content" v-html="matchForm.ticketDes"/> |
| 137 | <div v-show="active==2" class="rich_content" v-html="matchForm.ticketNotice"/> | 167 | <div v-show="active==2" class="rich_content" v-html="matchForm.ticketNotice"/> |
| 168 | |||
| 169 | <el-dialog v-model="show" title="" width="1000px"> | ||
| 170 | <div> | ||
| 171 | <img :src="fillImgUrl(matchForm.ticketLayout)" alt="" style="width: 100%"> | ||
| 172 | </div> | ||
| 173 | </el-dialog> | ||
| 138 | </div> | 174 | </div> |
| 139 | </div> | 175 | </div> |
| 140 | </template> | 176 | </template> |
| ... | @@ -157,6 +193,7 @@ const useStore = useUserStore() | ... | @@ -157,6 +193,7 @@ const useStore = useUserStore() |
| 157 | const user = computed(() => useUserStore().user) | 193 | const user = computed(() => useUserStore().user) |
| 158 | const route = useRoute(); | 194 | const route = useRoute(); |
| 159 | const router = useRouter(); | 195 | const router = useRouter(); |
| 196 | const show = ref(false) | ||
| 160 | const activeId = ref(route.params.activeId) | 197 | const activeId = ref(route.params.activeId) |
| 161 | const flag = ref(false) | 198 | const flag = ref(false) |
| 162 | const active = ref(1) | 199 | const active = ref(1) |
| ... | @@ -202,15 +239,21 @@ async function getTicketList() { | ... | @@ -202,15 +239,21 @@ async function getTicketList() { |
| 202 | 239 | ||
| 203 | // 根据票档获取场次 | 240 | // 根据票档获取场次 |
| 204 | async function getTicketListType() { | 241 | async function getTicketListType() { |
| 242 | let arr = [] | ||
| 205 | const res = await listApi({latId: selectForm.value.latId}) | 243 | const res = await listApi({latId: selectForm.value.latId}) |
| 206 | tickList.value = res.rows | 244 | tickList.value = res.rows |
| 207 | flag.value = tickList.value.some((item) => { | 245 | for (const v of res.rows) { |
| 208 | return item.isView == 0 | 246 | if (v.isView == 0) arr.push(v) |
| 209 | }) | 247 | } |
| 210 | tickList.value.forEach(v => { | 248 | for (const v of res.rows) { |
| 211 | if (flag.value && v.ticketType == 1) v.isView = 0 | 249 | if (arr.length > 0 && v.ticketType == 1) { |
| 212 | }) | 250 | for (const c of arr) { |
| 213 | 251 | if ((c.ticketStart >= v.ticketStart) && (c.ticketStart <= v.ticketEnd)) { | |
| 252 | v.isView = 0 | ||
| 253 | } | ||
| 254 | } | ||
| 255 | } | ||
| 256 | } | ||
| 214 | } | 257 | } |
| 215 | 258 | ||
| 216 | function select(v) { | 259 | function select(v) { |
| ... | @@ -314,7 +357,7 @@ function toSelectClosed() { | ... | @@ -314,7 +357,7 @@ function toSelectClosed() { |
| 314 | font-size: 28px; | 357 | font-size: 28px; |
| 315 | color: #000000; | 358 | color: #000000; |
| 316 | line-height: 1.6; | 359 | line-height: 1.6; |
| 317 | margin-bottom: 34px; | 360 | margin-bottom: 15px; |
| 318 | } | 361 | } |
| 319 | 362 | ||
| 320 | .time { | 363 | .time { |
| ... | @@ -330,12 +373,12 @@ function toSelectClosed() { | ... | @@ -330,12 +373,12 @@ function toSelectClosed() { |
| 330 | font-size: 16px; | 373 | font-size: 16px; |
| 331 | color: #000; | 374 | color: #000; |
| 332 | line-height: 24px; | 375 | line-height: 24px; |
| 333 | margin-bottom: 33px; | 376 | margin-bottom: 15px; |
| 334 | } | 377 | } |
| 335 | 378 | ||
| 336 | .select_item_box { | 379 | .select_item_box { |
| 337 | display: flex; | 380 | display: flex; |
| 338 | margin-bottom: 30px; | 381 | margin-bottom: 10px; |
| 339 | 382 | ||
| 340 | &:last-child { | 383 | &:last-child { |
| 341 | margin-bottom: 0; | 384 | margin-bottom: 0; |
| ... | @@ -468,9 +511,12 @@ function toSelectClosed() { | ... | @@ -468,9 +511,12 @@ function toSelectClosed() { |
| 468 | margin-right: 15px; | 511 | margin-right: 15px; |
| 469 | } | 512 | } |
| 470 | 513 | ||
| 471 | .info {padding: 0; | 514 | .info { |
| 515 | padding: 0; | ||
| 516 | |||
| 472 | .title { | 517 | .title { |
| 473 | font-size: 14px;margin: 0; | 518 | font-size: 14px; |
| 519 | margin: 0; | ||
| 474 | } | 520 | } |
| 475 | 521 | ||
| 476 | .time, .address, .label, .tip { | 522 | .time, .address, .label, .tip { |
| ... | @@ -501,7 +547,9 @@ function toSelectClosed() { | ... | @@ -501,7 +547,9 @@ function toSelectClosed() { |
| 501 | font-size: 12px; | 547 | font-size: 12px; |
| 502 | } | 548 | } |
| 503 | } | 549 | } |
| 504 | .btn {display: inline-block; | 550 | |
| 551 | .btn { | ||
| 552 | display: inline-block; | ||
| 505 | margin: 10px 0 0; | 553 | margin: 10px 0 0; |
| 506 | background: linear-gradient(270deg, #493ceb 0%, #8623fc 100%); | 554 | background: linear-gradient(270deg, #493ceb 0%, #8623fc 100%); |
| 507 | border-radius: 20px; | 555 | border-radius: 20px; | ... | ... |
| ... | @@ -38,6 +38,9 @@ | ... | @@ -38,6 +38,9 @@ |
| 38 | <span v-if="b.status == '7'" class="bg-danger">{{ | 38 | <span v-if="b.status == '7'" class="bg-danger">{{ |
| 39 | language == 0 ? '退款审核中' : 'Refund in review' | 39 | language == 0 ? '退款审核中' : 'Refund in review' |
| 40 | }}</span> | 40 | }}</span> |
| 41 | <span v-if="b.status == '-1'" class="bg-blue">{{ | ||
| 42 | language == 0 ? '已核销' : 'Completed' | ||
| 43 | }}</span> | ||
| 41 | </div> | 44 | </div> |
| 42 | 45 | ||
| 43 | <el-row align="middle" class="pd20 mt10" justify="space-between"> | 46 | <el-row align="middle" class="pd20 mt10" justify="space-between"> |
| ... | @@ -140,6 +143,7 @@ | ... | @@ -140,6 +143,7 @@ |
| 140 | <el-button v-if="b.viewStatus==5" class="mb10" plain round size="small" type="" @click="unsubscribe(b)"> | 143 | <el-button v-if="b.viewStatus==5" class="mb10" plain round size="small" type="" @click="unsubscribe(b)"> |
| 141 | {{ language == 0 ? '退订' : 'Unsubscribe' }} | 144 | {{ language == 0 ? '退订' : 'Unsubscribe' }} |
| 142 | </el-button> | 145 | </el-button> |
| 146 | |||
| 143 | </div> | 147 | </div> |
| 144 | </el-col> | 148 | </el-col> |
| 145 | </el-row> | 149 | </el-row> | ... | ... |
-
Please register or sign in to post a comment