Merge branch 'order' into dev
Showing
25 changed files
with
1851 additions
and
106 deletions
| ... | @@ -278,4 +278,40 @@ li.el-select-dropdown__item { | ... | @@ -278,4 +278,40 @@ li.el-select-dropdown__item { |
| 278 | @media (max-width: 800px) { | 278 | @media (max-width: 800px) { |
| 279 | .box{width: 96%} | 279 | .box{width: 96%} |
| 280 | } | 280 | } |
| 281 | |||
| 282 | .hz-tag{ | ||
| 283 | border-radius: 13px; | ||
| 284 | height: 25px; | ||
| 285 | line-height: 25px; | ||
| 286 | font-size: 12px; | ||
| 287 | font-weight: 400; | ||
| 288 | padding: 0 15px; | ||
| 289 | } | ||
| 290 | .tag1{ | ||
| 291 | background: rgba(50, 177, 108, 0.2); | ||
| 292 | color:rgba(50, 177, 108, 1); | ||
| 293 | } | ||
| 294 | .tag2{ | ||
| 295 | background-color: rgba(243, 152, 0, 0.2); | ||
| 296 | color: #F39800; | ||
| 297 | } | ||
| 298 | .tag3{ | ||
| 299 | background-color: rgba(0, 160, 233, 0.2); | ||
| 300 | color: #00A0E9; | ||
| 301 | } | ||
| 302 | .tag4{ | ||
| 303 | background-color: rgba(247, 64, 166, 0.2); | ||
| 304 | color: #F740A6; | ||
| 305 | } | ||
| 306 | .hz-row{ | ||
| 307 | font-size: 14px; | ||
| 308 | font-weight: 400; | ||
| 309 | color: #929AA0; | ||
| 310 | margin-bottom: 16px; | ||
| 311 | |||
| 312 | } | ||
| 313 | .sign{ | ||
| 314 | color: #493CEB; | ||
| 315 | } | ||
| 316 | |||
| 281 | </style> | 317 | </style> | ... | ... |
| ... | @@ -207,3 +207,116 @@ export function delAddress(ids) { | ... | @@ -207,3 +207,116 @@ export function delAddress(ids) { |
| 207 | method: 'delete' | 207 | method: 'delete' |
| 208 | }) | 208 | }) |
| 209 | } | 209 | } |
| 210 | |||
| 211 | export function getMakeUpList(data) { | ||
| 212 | return request({ | ||
| 213 | url: `/ota/activityStudio/getStudioList`, | ||
| 214 | method: 'get', | ||
| 215 | params:data | ||
| 216 | }) | ||
| 217 | } | ||
| 218 | |||
| 219 | export function makeUpDetail(data) { | ||
| 220 | return request({ | ||
| 221 | url: `/ota/activityStudio/getComStudioVoById`, | ||
| 222 | method: 'get', | ||
| 223 | params:data | ||
| 224 | }) | ||
| 225 | } | ||
| 226 | |||
| 227 | export function getActivityMealVoListByStudioId(data) { | ||
| 228 | return request({ | ||
| 229 | url: `/ota/activityMeal/getActivityMealVoListByStudioId`, | ||
| 230 | method: 'get', | ||
| 231 | params:data | ||
| 232 | }) | ||
| 233 | } | ||
| 234 | |||
| 235 | export function getMealConfList(data) { | ||
| 236 | return request({ | ||
| 237 | url: `/ota/mealConfig/getMealConfList`, | ||
| 238 | method: 'get', | ||
| 239 | params:data | ||
| 240 | }) | ||
| 241 | } | ||
| 242 | |||
| 243 | export function submitOrderMeal(data) { | ||
| 244 | return request({ | ||
| 245 | url: `/ota/norder/submitOrderMeal`, | ||
| 246 | method: 'post', | ||
| 247 | data | ||
| 248 | }) | ||
| 249 | } | ||
| 250 | |||
| 251 | export function getMealOrderInfo(data) { | ||
| 252 | return request({ | ||
| 253 | url: `/ota/orderMeal/getMealOrderInfo`, | ||
| 254 | method: 'get', | ||
| 255 | params:data | ||
| 256 | }) | ||
| 257 | } | ||
| 258 | |||
| 259 | |||
| 260 | export function getMealOrderInfoByLogex(data) { | ||
| 261 | return request({ | ||
| 262 | url: `/ota/orderMeal/getMealOrderInfoByLogex`, | ||
| 263 | method: 'get', | ||
| 264 | params:data | ||
| 265 | }) | ||
| 266 | } | ||
| 267 | |||
| 268 | export function getShootList(data) { | ||
| 269 | return request({ | ||
| 270 | url: `/ota/activityShoot/getShootList`, | ||
| 271 | method: 'get', | ||
| 272 | params:data | ||
| 273 | }) | ||
| 274 | } | ||
| 275 | |||
| 276 | export function getComShootVoById(data) { | ||
| 277 | return request({ | ||
| 278 | url: `/ota/activityShoot/getComShootVoById`, | ||
| 279 | method: 'get', | ||
| 280 | params:data | ||
| 281 | }) | ||
| 282 | } | ||
| 283 | |||
| 284 | export function getActivityPhotoVoListByShootId(data) { | ||
| 285 | return request({ | ||
| 286 | url: `/ota/activityPhoto/getActivityPhotoVoListByShootId`, | ||
| 287 | method: 'get', | ||
| 288 | params:data | ||
| 289 | }) | ||
| 290 | } | ||
| 291 | |||
| 292 | export function getPhotoConfList(data) { | ||
| 293 | return request({ | ||
| 294 | url: `/ota/photoConfig/getPhotoConfList`, | ||
| 295 | method: 'get', | ||
| 296 | params:data | ||
| 297 | }) | ||
| 298 | } | ||
| 299 | |||
| 300 | export function submitOrderPhoto(data) { | ||
| 301 | return request({ | ||
| 302 | url: `/ota/norder/submitOrderPhoto`, | ||
| 303 | method: 'post', | ||
| 304 | data | ||
| 305 | }) | ||
| 306 | } | ||
| 307 | |||
| 308 | export function getPhotoOrderInfo(data) { | ||
| 309 | return request({ | ||
| 310 | url: `/ota/orderPhoto/getPhotoOrderInfo`, | ||
| 311 | method: 'get', | ||
| 312 | params:data | ||
| 313 | }) | ||
| 314 | } | ||
| 315 | |||
| 316 | export function getPhotoOrderInfoByLogex(data) { | ||
| 317 | return request({ | ||
| 318 | url: `/ota/orderPhoto/getPhotoOrderInfoByLogex`, | ||
| 319 | method: 'get', | ||
| 320 | params:data | ||
| 321 | }) | ||
| 322 | } | ... | ... |
src/assets/booking/pz_bg.png
0 → 100644
20.8 KB
src/assets/booking/pz_text1.png
0 → 100644
3.48 KB
src/assets/booking/pz_text2.png
0 → 100644
3.09 KB
| ... | @@ -10,7 +10,6 @@ NProgress.configure({ showSpinner: false }) | ... | @@ -10,7 +10,6 @@ NProgress.configure({ showSpinner: false }) |
| 10 | 10 | ||
| 11 | router.beforeEach((to, from, next) => { | 11 | router.beforeEach((to, from, next) => { |
| 12 | NProgress.start() | 12 | NProgress.start() |
| 13 | debugger | ||
| 14 | if (getToken()) { | 13 | if (getToken()) { |
| 15 | // 判断当前用户是否已拉取完user_info信息 | 14 | // 判断当前用户是否已拉取完user_info信息 |
| 16 | if (!useUserStore().user) { | 15 | if (!useUserStore().user) { | ... | ... |
| ... | @@ -404,18 +404,36 @@ export const constantRoutes = [ | ... | @@ -404,18 +404,36 @@ export const constantRoutes = [ |
| 404 | meta: { title: 'Makeup Appointment' } | 404 | meta: { title: 'Makeup Appointment' } |
| 405 | }, | 405 | }, |
| 406 | { | 406 | { |
| 407 | path: 'makeUp/:cptId/:studioId', | 407 | path: 'makeUp/:cptId/:id', |
| 408 | component: () => import('@/viewsPc/booking/studioDetail'), | 408 | component: () => import('@/viewsPc/booking/makeUpDetail'), |
| 409 | name: 'studioDetail', | 409 | name: 'makeUpDetail', |
| 410 | meta: { title: 'Makeup Appointment' } | 410 | meta: { title: 'Makeup Appointment' } |
| 411 | }, | 411 | }, |
| 412 | { | 412 | { |
| 413 | path: 'makeUp/:cptId/:id/:lasId', | ||
| 414 | component: () => import('@/viewsPc/booking/makeUpOrder.vue'), | ||
| 415 | name: 'makeUpOrder', | ||
| 416 | meta: { title: 'Makeup Reservation' } | ||
| 417 | }, | ||
| 418 | { | ||
| 413 | path: 'photography/:cptId', | 419 | path: 'photography/:cptId', |
| 414 | component: () => import('@/viewsPc/booking/photography'), | 420 | component: () => import('@/viewsPc/booking/photography'), |
| 415 | name: 'photography', | 421 | name: 'photography', |
| 416 | meta: { title: 'Photography Appointment' } | 422 | meta: { title: 'Photography Appointment' } |
| 417 | }, | 423 | }, |
| 418 | { | 424 | { |
| 425 | path: 'photography/:cptId/:id', | ||
| 426 | component: () => import('@/viewsPc/booking/photographyDetail'), | ||
| 427 | name: 'photographyDetail', | ||
| 428 | meta: { title: 'Photography Reservation' } | ||
| 429 | }, | ||
| 430 | { | ||
| 431 | path: 'photography/:cptId/:id/:lasId', | ||
| 432 | component: () => import('@/viewsPc/booking/photographyOrder.vue'), | ||
| 433 | name: 'photographyOrder', | ||
| 434 | meta: { title: 'Photography Appointment' } | ||
| 435 | }, | ||
| 436 | { | ||
| 419 | path: 'pay', | 437 | path: 'pay', |
| 420 | component: () => import('@/viewsPc/booking/pay'), | 438 | component: () => import('@/viewsPc/booking/pay'), |
| 421 | name: 'bookingPay', | 439 | name: 'bookingPay', |
| ... | @@ -432,12 +450,6 @@ export const constantRoutes = [ | ... | @@ -432,12 +450,6 @@ export const constantRoutes = [ |
| 432 | component: () => import('@/viewsPc/booking/invoicing'), | 450 | component: () => import('@/viewsPc/booking/invoicing'), |
| 433 | name: 'invoice', | 451 | name: 'invoice', |
| 434 | meta: { title: '我的发票' } | 452 | meta: { title: '我的发票' } |
| 435 | }, | ||
| 436 | { | ||
| 437 | path: 'addInvoice/:id', | ||
| 438 | component: () => import('@/viewsPc/booking/addInvoice'), | ||
| 439 | name: 'addInvoice', | ||
| 440 | meta: { title: '编辑发票' } | ||
| 441 | } | 453 | } |
| 442 | ] | 454 | ] |
| 443 | }, | 455 | }, | ... | ... |
| 1 | <template> | ||
| 2 | <div > | ||
| 3 | <el-calendar v-model="currentDate" :range="calendarRange"> | ||
| 4 | <template #header="{date}"> | ||
| 5 | <el-row style="width: 100%"> | ||
| 6 | <el-col :span="7"> | ||
| 7 | </el-col> | ||
| 8 | <el-col :span="10"> | ||
| 9 | <el-row justify="center" align='middle' > | ||
| 10 | <!-- <div class="canBtn"><el-icon><ArrowLeftBold /></el-icon></div>--> | ||
| 11 | <div class="cTitle"> | ||
| 12 | <!-- <el-date-picker--> | ||
| 13 | <!-- v-model="value2"--> | ||
| 14 | <!-- type="daterange"--> | ||
| 15 | <!-- range-separator="-"--> | ||
| 16 | <!-- start-placeholder="Start date"--> | ||
| 17 | <!-- end-placeholder="End date"--> | ||
| 18 | <!-- format="YYYY-MM-DD"--> | ||
| 19 | <!-- value-format="YYYY-MM-DD"--> | ||
| 20 | <!-- size="small"--> | ||
| 21 | <!-- @change="changee"--> | ||
| 22 | <!-- />--> | ||
| 23 | <!-- <el-input readonly :value="date" type="text" size="small" style="width: 280px"></el-input>--> | ||
| 24 | {{date}} | ||
| 25 | </div> | ||
| 26 | <!-- <div class="canBtn"><el-icon><ArrowRightBold /></el-icon></div>--> | ||
| 27 | </el-row> | ||
| 28 | </el-col> | ||
| 29 | <el-col :span="7"> | ||
| 30 | <div style="text-align: right;padding-right: 10px"> | ||
| 31 | <el-date-picker | ||
| 32 | v-model="currentDate1" | ||
| 33 | type="date" | ||
| 34 | placeholder="YYYY-MM-DD" | ||
| 35 | format="YYYY-MM-DD" | ||
| 36 | size="small" | ||
| 37 | @change="dateChange" | ||
| 38 | :disabled-date="disabledDate" | ||
| 39 | /> | ||
| 40 | </div> | ||
| 41 | </el-col> | ||
| 42 | </el-row> | ||
| 43 | </template> | ||
| 44 | <template #date-cell="data"> | ||
| 45 | <div :class="data.data.day==query.currentDate?'primaryDate date':'date'" @click="selectDate(data.data.day)"> | ||
| 46 | {{ data.data.day.slice(8, 10) }} | ||
| 47 | </div> | ||
| 48 | </template> | ||
| 49 | </el-calendar> | ||
| 50 | |||
| 51 | <div class="calendarList"> | ||
| 52 | <ul v-loading="loading"> | ||
| 53 | <li v-for="n in schList" :key="n.id" > | ||
| 54 | <el-row style="width: 100%"> | ||
| 55 | <div style="margin-right: 25px"> | ||
| 56 | <el-image style="width: 90px;height: 115px" :src="fillImgUrl(n.photos?.split(',')[0]) " fit="cover" /> | ||
| 57 | </div> | ||
| 58 | <div style="flex: 1" > | ||
| 59 | <div class="hz-title">{{ n.name }}</div> | ||
| 60 | <div> | ||
| 61 | <el-row justify="space-between"> | ||
| 62 | <el-row class="hz-p" style="flex: 1"> | ||
| 63 | <el-col :span="8"> | ||
| 64 | <div >{{ language==0?'套餐说明':'Package Description' }}: <span style="margin-right: 20px">{{n.introduction}}</span></div> | ||
| 65 | </el-col> | ||
| 66 | |||
| 67 | <el-col :span="8"> | ||
| 68 | <div>{{ language==0?'剩余':'' }}<span class="sign">{{ n.num-n.counts }}</span>{{language==0?'名额':'Places Remaining' }} </div> | ||
| 69 | </el-col> | ||
| 70 | <el-col :span="8"> | ||
| 71 | <div >{{n.goHome==1?language==0?'上门化妆':'Door-to-door makeup':''}}</div> | ||
| 72 | </el-col> | ||
| 73 | </el-row> | ||
| 74 | <el-row> | ||
| 75 | <div class="zh-margin" style="font-size: 36px;color: #ff8124"><span style="font-size: 24px">{{ language==0?'¥':'€'}} </span> {{language==0?n.mealPrice:n.mealPriceEn}}</div> | ||
| 76 | <el-button :disabled="n.num-n.counts<=0||Date.now()>dayjs(currentDate).subtract(-1,'day').valueOf()" class="btn-lineG w200px" round type="primary" size="large" @click="goMatch(n)">{{ language==0?'立即预约':'Select' }} ⇀</el-button> | ||
| 77 | </el-row> | ||
| 78 | </el-row> | ||
| 79 | </div> | ||
| 80 | </div> | ||
| 81 | </el-row> | ||
| 82 | </li> | ||
| 83 | </ul> | ||
| 84 | <el-empty v-if="schList.length== 0" | ||
| 85 | style="--el-empty-padding:0;--el-empty-description-margin-top:0" | ||
| 86 | :image="`/img/order_no.png`" | ||
| 87 | :image-size="200"/> | ||
| 88 | </div> | ||
| 89 | </div> | ||
| 90 | </template> | ||
| 91 | |||
| 92 | <script setup> | ||
| 93 | import {ref} from "vue"; | ||
| 94 | import {dayjs} from "element-plus"; | ||
| 95 | import {useRoute,useRouter} from 'vue-router' | ||
| 96 | import * as booking from "@/apiPc/booking" | ||
| 97 | import {useStorage} from "@vueuse/core/index"; | ||
| 98 | import useUserStore from "/@/store/modules/user"; | ||
| 99 | |||
| 100 | const user = useUserStore().user | ||
| 101 | const language = useStorage('language', 0) | ||
| 102 | const router = useRouter() | ||
| 103 | const route=useRoute() | ||
| 104 | const currentDate = ref(new Date()) | ||
| 105 | const currentDate1 = ref(new Date()) | ||
| 106 | const calendarRange = ref([dayjs(currentDate.value).toDate(),(dayjs(currentDate.value).toDate())]) | ||
| 107 | const schList = ref([]) | ||
| 108 | const loading = ref(false) | ||
| 109 | const query = ref({ | ||
| 110 | lasId:route.params.id, | ||
| 111 | }) | ||
| 112 | const value2=ref('') | ||
| 113 | |||
| 114 | |||
| 115 | getScheduleList() | ||
| 116 | function getScheduleList() { | ||
| 117 | loading.value = true | ||
| 118 | query.value.currentDate = dayjs(currentDate.value).format('YYYY-MM-DD') | ||
| 119 | booking.getActivityMealVoListByStudioId(query.value).then(res=>{ | ||
| 120 | loading.value = false | ||
| 121 | schList.value = res.data | ||
| 122 | }) | ||
| 123 | } | ||
| 124 | function selectDate(date) { | ||
| 125 | currentDate1.value= currentDate.value=dayjs(date).toDate() | ||
| 126 | console.log(date) | ||
| 127 | getScheduleList() | ||
| 128 | } | ||
| 129 | |||
| 130 | function dateChange(){ | ||
| 131 | currentDate.value=currentDate1.value | ||
| 132 | calendarRange.value=[dayjs(currentDate.value).toDate(),(dayjs(currentDate.value).toDate())] | ||
| 133 | getScheduleList() | ||
| 134 | } | ||
| 135 | |||
| 136 | function goMatch(n) { | ||
| 137 | if (!user) { | ||
| 138 | useUserStore().setVisitor() | ||
| 139 | return | ||
| 140 | } | ||
| 141 | |||
| 142 | router.push({ | ||
| 143 | name: 'makeUpOrder', | ||
| 144 | params: { | ||
| 145 | lasId: n.id | ||
| 146 | }, | ||
| 147 | query: { | ||
| 148 | date: dayjs(currentDate.value).format('YYYY-MM-DD') | ||
| 149 | } | ||
| 150 | }) | ||
| 151 | } | ||
| 152 | |||
| 153 | // function disabledDate(e){ | ||
| 154 | // return e.getTime()<=Date.now() | ||
| 155 | // console.log(e) | ||
| 156 | // } | ||
| 157 | </script> | ||
| 158 | |||
| 159 | <style scoped lang="scss"> | ||
| 160 | .el-calendar { | ||
| 161 | --el-calendar-border: none; | ||
| 162 | --el-calendar-cell-width: 40px; | ||
| 163 | text-align: center; | ||
| 164 | --el-text-color-regular: #8E8D94; | ||
| 165 | |||
| 166 | :deep(.el-calendar__header) { | ||
| 167 | justify-content: center; | ||
| 168 | padding: 0 0 10px | ||
| 169 | } | ||
| 170 | |||
| 171 | :deep(.el-calendar__body) { | ||
| 172 | border: 1px solid #F0F0F0; | ||
| 173 | padding: 0 | ||
| 174 | } | ||
| 175 | |||
| 176 | :deep(.el-calendar-table .el-calendar-day) { | ||
| 177 | padding: 1px; | ||
| 178 | } | ||
| 179 | |||
| 180 | :deep(.el-calendar-table td.is-selected) { | ||
| 181 | background: transparent; | ||
| 182 | } | ||
| 183 | |||
| 184 | :deep(.el-calendar__button-group) { | ||
| 185 | display: none; | ||
| 186 | } | ||
| 187 | |||
| 188 | :deep(.el-calendar-table thead th) { | ||
| 189 | padding: 5px 0 0 | ||
| 190 | } | ||
| 191 | |||
| 192 | .primaryDate { | ||
| 193 | color: #fff; | ||
| 194 | background: linear-gradient(90deg, #8623FC, #453DEA); | ||
| 195 | } | ||
| 196 | |||
| 197 | .date { | ||
| 198 | margin: auto; | ||
| 199 | border-radius: 50%; | ||
| 200 | width: 30px; | ||
| 201 | height: 30px; | ||
| 202 | line-height: 30px; | ||
| 203 | font-weight: bold; | ||
| 204 | } | ||
| 205 | } | ||
| 206 | |||
| 207 | .calendarList { | ||
| 208 | border: 1px solid #F0F0F0; | ||
| 209 | padding: 12px 20px; | ||
| 210 | overflow: auto; | ||
| 211 | height: 625px; | ||
| 212 | |||
| 213 | ul { | ||
| 214 | li {cursor: pointer; | ||
| 215 | background: #F6F9FE; | ||
| 216 | margin: 7px 0 7px 20px; | ||
| 217 | position: relative; | ||
| 218 | padding: 13px; | ||
| 219 | border-radius: 10px; | ||
| 220 | font-weight: 500; | ||
| 221 | font-size: 15px; | ||
| 222 | |||
| 223 | label { | ||
| 224 | color: #453DEA; | ||
| 225 | margin-right: 15px; | ||
| 226 | |||
| 227 | &::before { | ||
| 228 | content: ''; | ||
| 229 | background: #fff; | ||
| 230 | left: -17px; | ||
| 231 | top: 0px; | ||
| 232 | bottom: 0; | ||
| 233 | margin: auto; | ||
| 234 | border-radius: 50%; | ||
| 235 | width: 2px; | ||
| 236 | height: 2px; | ||
| 237 | position: absolute; | ||
| 238 | z-index: 1 | ||
| 239 | } | ||
| 240 | } | ||
| 241 | } | ||
| 242 | |||
| 243 | li::before { | ||
| 244 | content: ''; | ||
| 245 | background: linear-gradient(0deg, #8623FC, #453DEA); | ||
| 246 | border-radius: 50%; | ||
| 247 | width: 8px; | ||
| 248 | height: 8px; | ||
| 249 | position: absolute; | ||
| 250 | left: -20px; | ||
| 251 | top: 0; | ||
| 252 | bottom: 0; | ||
| 253 | margin: auto; | ||
| 254 | z-index: 1; | ||
| 255 | } | ||
| 256 | |||
| 257 | li::after { | ||
| 258 | content: ''; | ||
| 259 | left: -16px; | ||
| 260 | width: 1px; | ||
| 261 | height: 100%; | ||
| 262 | background: #EBEBEB; | ||
| 263 | position: absolute; | ||
| 264 | top: 20px | ||
| 265 | } | ||
| 266 | |||
| 267 | //li:hover { | ||
| 268 | // color: #fff; | ||
| 269 | // background: linear-gradient(-90deg, #8623FC, #453DEA); | ||
| 270 | // | ||
| 271 | // label { | ||
| 272 | // color: #fff; | ||
| 273 | // } | ||
| 274 | //} | ||
| 275 | } | ||
| 276 | } | ||
| 277 | |||
| 278 | .hz-title{ | ||
| 279 | font-size: 20px; | ||
| 280 | font-weight: 400; | ||
| 281 | color: #000; | ||
| 282 | margin-top:20px; | ||
| 283 | margin-bottom: 10px; | ||
| 284 | } | ||
| 285 | |||
| 286 | .zh-margin{ | ||
| 287 | font-weight: bold; | ||
| 288 | font-size: 36px; | ||
| 289 | color: #FF8124; | ||
| 290 | margin-right: 30px; | ||
| 291 | } | ||
| 292 | .hz-p{ | ||
| 293 | font-size: 16px; | ||
| 294 | color: #4C5359; | ||
| 295 | font-weight: 400; | ||
| 296 | } | ||
| 297 | |||
| 298 | :deep(.el-calendar__header) { | ||
| 299 | background: linear-gradient(90deg, #8623FC, #453DEA); | ||
| 300 | height: 50px; | ||
| 301 | line-height: 50px; | ||
| 302 | } | ||
| 303 | |||
| 304 | .canBtn{ | ||
| 305 | color: #453DEA; | ||
| 306 | border-radius: 2px; | ||
| 307 | width: 22px; | ||
| 308 | height: 22px; | ||
| 309 | line-height: 26px; | ||
| 310 | text-align: center; | ||
| 311 | background-color: #fff; | ||
| 312 | margin: 0 16px -2px 16px; | ||
| 313 | cursor:pointer | ||
| 314 | } | ||
| 315 | |||
| 316 | .cTitle{ | ||
| 317 | color: #fff; | ||
| 318 | font-size: 20px; | ||
| 319 | font-weight: 500; | ||
| 320 | } | ||
| 321 | </style> |
| 1 | <template> | ||
| 2 | <div > | ||
| 3 | <el-calendar v-model="currentDate" :range="calendarRange"> | ||
| 4 | <template #header="{date}"> | ||
| 5 | <el-row style="width: 100%"> | ||
| 6 | <el-col :span="7"> | ||
| 7 | </el-col> | ||
| 8 | <el-col :span="10"> | ||
| 9 | <el-row justify="center" align='middle' class="cTitle"> | ||
| 10 | <!-- <div class="canBtn"><el-icon><ArrowLeftBold /></el-icon></div>--> | ||
| 11 | <!-- <div>--> | ||
| 12 | <!--<!– <el-date-picker–>--> | ||
| 13 | <!--<!– v-model="value2"–>--> | ||
| 14 | <!--<!– type="daterange"–>--> | ||
| 15 | <!--<!– range-separator="-"–>--> | ||
| 16 | <!--<!– start-placeholder="Start date"–>--> | ||
| 17 | <!--<!– end-placeholder="End date"–>--> | ||
| 18 | <!--<!– format="YYYY-MM-DD"–>--> | ||
| 19 | <!--<!– value-format="YYYY-MM-DD"–>--> | ||
| 20 | <!--<!– size="small"–>--> | ||
| 21 | <!--<!– @change="changee"–>--> | ||
| 22 | <!--<!– />–>--> | ||
| 23 | <!-- <el-input readonly v-model="value2" type="text" size="small" style="width: 280px"></el-input>--> | ||
| 24 | <!-- </div>--> | ||
| 25 | <!-- <div class="canBtn"><el-icon><ArrowRightBold /></el-icon></div>--> | ||
| 26 | {{date}} | ||
| 27 | </el-row> | ||
| 28 | </el-col> | ||
| 29 | <el-col :span="7"> | ||
| 30 | <div style="text-align: right;padding-right: 10px"> | ||
| 31 | <el-date-picker | ||
| 32 | v-model="currentDate1" | ||
| 33 | type="date" | ||
| 34 | placeholder="YYYY-MM-DD" | ||
| 35 | format="YYYY-MM-DD" | ||
| 36 | size="small" | ||
| 37 | @change="dateChange" | ||
| 38 | /> | ||
| 39 | </div> | ||
| 40 | </el-col> | ||
| 41 | </el-row> | ||
| 42 | </template> | ||
| 43 | <template #date-cell="data"> | ||
| 44 | <div :class="data.data.day==query.currentDate?'primaryDate date':'date'" @click="selectDate(data.data.day)"> | ||
| 45 | {{ data.data.day.slice(8, 10) }} | ||
| 46 | </div> | ||
| 47 | </template> | ||
| 48 | </el-calendar> | ||
| 49 | |||
| 50 | <div class="calendarList"> | ||
| 51 | <ul v-loading="loading"> | ||
| 52 | <li v-for="n in schList" :key="n.id" @click="goMatch(n)"> | ||
| 53 | <el-row style="width: 100%"> | ||
| 54 | <div style="margin-right: 25px"> | ||
| 55 | <el-image style="width: 90px;height: 115px" :src="fillImgUrl(n.photos?.split(',')[0]) " fit="cover" /> | ||
| 56 | </div> | ||
| 57 | <div style="flex: 1" > | ||
| 58 | <div class="hz-title">{{ n.name }}</div> | ||
| 59 | <div> | ||
| 60 | <el-row justify="space-between"> | ||
| 61 | <el-row class="hz-p" style="flex: 1"> | ||
| 62 | <el-col :span="8"> | ||
| 63 | <div >{{ language==0?'套餐说明':'Package Description' }}: <span style="margin-right: 20px">{{n.introduction}}</span></div> | ||
| 64 | </el-col> | ||
| 65 | |||
| 66 | <el-col :span="8"> | ||
| 67 | <div>{{ language==0?'剩余':'' }}<span class="sign">{{ n.num-n.counts }}</span>{{language==0?'名额':'Places Remaining' }} </div> | ||
| 68 | </el-col> | ||
| 69 | <el-col :span="8"> | ||
| 70 | <div >{{n.goHome==1?language==0?'上门拍照':'Door-to-door photo':''}}</div> | ||
| 71 | </el-col> | ||
| 72 | </el-row> | ||
| 73 | <el-row> | ||
| 74 | <div class="zh-margin" style="font-size: 36px;color: #ff8124"><span style="font-size: 24px">{{ language==0?'¥':'€'}} </span> {{language==0?n.photoPrice:n.photoPriceEn}}</div> | ||
| 75 | <el-button :disabled="n.num-n.counts<=0||Date.now()>dayjs(currentDate).subtract(-1,'day').valueOf()" class="btn-lineG w200px" round type="primary" size="large" @click="goMatch(n)">{{ language==0?'立即预约':'Select' }} ⇀</el-button> | ||
| 76 | </el-row> | ||
| 77 | </el-row> | ||
| 78 | </div> | ||
| 79 | </div> | ||
| 80 | </el-row> | ||
| 81 | </li> | ||
| 82 | </ul> | ||
| 83 | <el-empty v-if="schList.length== 0" | ||
| 84 | style="--el-empty-padding:0;--el-empty-description-margin-top:0" | ||
| 85 | :image="`/img/order_no.png`" | ||
| 86 | :image-size="200"/> | ||
| 87 | </div> | ||
| 88 | </div> | ||
| 89 | </template> | ||
| 90 | |||
| 91 | <script setup> | ||
| 92 | import {ref} from "vue"; | ||
| 93 | import {dayjs} from "element-plus"; | ||
| 94 | import {useRoute,useRouter} from 'vue-router' | ||
| 95 | import * as booking from "@/apiPc/booking" | ||
| 96 | import {useStorage} from "@vueuse/core/index"; | ||
| 97 | import useUserStore from "/@/store/modules/user"; | ||
| 98 | import {getActivityPhotoVoListByShootId} from "@/apiPc/booking"; | ||
| 99 | |||
| 100 | const user = useUserStore().user | ||
| 101 | const language = useStorage('language', 0) | ||
| 102 | const router = useRouter() | ||
| 103 | const route=useRoute() | ||
| 104 | const currentDate = ref(new Date()) | ||
| 105 | const currentDate1 = ref(new Date()) | ||
| 106 | const calendarRange = ref([dayjs(currentDate.value).toDate(),(dayjs(currentDate.value).toDate())]) | ||
| 107 | const schList = ref([]) | ||
| 108 | const loading = ref(false) | ||
| 109 | const query = ref({ | ||
| 110 | lasId:route.params.id, | ||
| 111 | }) | ||
| 112 | const value2=ref('') | ||
| 113 | |||
| 114 | getScheduleList() | ||
| 115 | function getScheduleList() { | ||
| 116 | loading.value = true | ||
| 117 | query.value.currentDate = dayjs(currentDate.value).format('YYYY-MM-DD') | ||
| 118 | booking.getActivityPhotoVoListByShootId(query.value).then(res=>{ | ||
| 119 | loading.value = false | ||
| 120 | schList.value = res.data | ||
| 121 | }) | ||
| 122 | } | ||
| 123 | function selectDate(date) { | ||
| 124 | currentDate1.value= currentDate.value=dayjs(date).toDate() | ||
| 125 | console.log(date) | ||
| 126 | getScheduleList() | ||
| 127 | } | ||
| 128 | |||
| 129 | function dateChange(){ | ||
| 130 | currentDate.value=currentDate1.value | ||
| 131 | calendarRange.value=[dayjs(currentDate.value).toDate(),(dayjs(currentDate.value).toDate())] | ||
| 132 | getScheduleList() | ||
| 133 | console.log(currentDate.value) | ||
| 134 | console.log(currentDate1.value) | ||
| 135 | } | ||
| 136 | |||
| 137 | function goMatch(n) { | ||
| 138 | if (!user) { | ||
| 139 | useUserStore().setVisitor() | ||
| 140 | return | ||
| 141 | } | ||
| 142 | |||
| 143 | router.push({ | ||
| 144 | name: 'photographyOrder', | ||
| 145 | params: { | ||
| 146 | lasId: n.id | ||
| 147 | }, | ||
| 148 | query: { | ||
| 149 | date: dayjs(currentDate.value).format('YYYY-MM-DD') | ||
| 150 | } | ||
| 151 | }) | ||
| 152 | } | ||
| 153 | |||
| 154 | function changee(){ | ||
| 155 | console.log(value2.value) | ||
| 156 | } | ||
| 157 | </script> | ||
| 158 | |||
| 159 | <style scoped lang="scss"> | ||
| 160 | .el-calendar { | ||
| 161 | --el-calendar-border: none; | ||
| 162 | --el-calendar-cell-width: 40px; | ||
| 163 | text-align: center; | ||
| 164 | --el-text-color-regular: #8E8D94; | ||
| 165 | |||
| 166 | :deep(.el-calendar__header) { | ||
| 167 | justify-content: center; | ||
| 168 | padding: 0 0 10px | ||
| 169 | } | ||
| 170 | |||
| 171 | :deep(.el-calendar__body) { | ||
| 172 | border: 1px solid #F0F0F0; | ||
| 173 | padding: 0 | ||
| 174 | } | ||
| 175 | |||
| 176 | :deep(.el-calendar-table .el-calendar-day) { | ||
| 177 | padding: 1px; | ||
| 178 | } | ||
| 179 | |||
| 180 | :deep(.el-calendar-table td.is-selected) { | ||
| 181 | background: transparent; | ||
| 182 | } | ||
| 183 | |||
| 184 | :deep(.el-calendar__button-group) { | ||
| 185 | display: none; | ||
| 186 | } | ||
| 187 | |||
| 188 | :deep(.el-calendar-table thead th) { | ||
| 189 | padding: 5px 0 0 | ||
| 190 | } | ||
| 191 | |||
| 192 | .primaryDate { | ||
| 193 | color: #fff; | ||
| 194 | background: linear-gradient(90deg, #8623FC, #453DEA); | ||
| 195 | } | ||
| 196 | |||
| 197 | .date { | ||
| 198 | margin: auto; | ||
| 199 | border-radius: 50%; | ||
| 200 | width: 30px; | ||
| 201 | height: 30px; | ||
| 202 | line-height: 30px; | ||
| 203 | font-weight: bold; | ||
| 204 | } | ||
| 205 | } | ||
| 206 | |||
| 207 | .calendarList { | ||
| 208 | border: 1px solid #F0F0F0; | ||
| 209 | padding: 12px 20px; | ||
| 210 | overflow: auto; | ||
| 211 | height: 625px; | ||
| 212 | |||
| 213 | ul { | ||
| 214 | li {cursor: pointer; | ||
| 215 | background: #F6F9FE; | ||
| 216 | margin: 7px 0 7px 20px; | ||
| 217 | position: relative; | ||
| 218 | padding: 13px; | ||
| 219 | border-radius: 10px; | ||
| 220 | font-weight: 500; | ||
| 221 | font-size: 15px; | ||
| 222 | |||
| 223 | label { | ||
| 224 | color: #453DEA; | ||
| 225 | margin-right: 15px; | ||
| 226 | |||
| 227 | &::before { | ||
| 228 | content: ''; | ||
| 229 | background: #fff; | ||
| 230 | left: -17px; | ||
| 231 | top: 0px; | ||
| 232 | bottom: 0; | ||
| 233 | margin: auto; | ||
| 234 | border-radius: 50%; | ||
| 235 | width: 2px; | ||
| 236 | height: 2px; | ||
| 237 | position: absolute; | ||
| 238 | z-index: 1 | ||
| 239 | } | ||
| 240 | } | ||
| 241 | } | ||
| 242 | |||
| 243 | li::before { | ||
| 244 | content: ''; | ||
| 245 | background: linear-gradient(0deg, #8623FC, #453DEA); | ||
| 246 | border-radius: 50%; | ||
| 247 | width: 8px; | ||
| 248 | height: 8px; | ||
| 249 | position: absolute; | ||
| 250 | left: -20px; | ||
| 251 | top: 0; | ||
| 252 | bottom: 0; | ||
| 253 | margin: auto; | ||
| 254 | z-index: 1; | ||
| 255 | } | ||
| 256 | |||
| 257 | li::after { | ||
| 258 | content: ''; | ||
| 259 | left: -16px; | ||
| 260 | width: 1px; | ||
| 261 | height: 100%; | ||
| 262 | background: #EBEBEB; | ||
| 263 | position: absolute; | ||
| 264 | top: 20px | ||
| 265 | } | ||
| 266 | |||
| 267 | //li:hover { | ||
| 268 | // color: #fff; | ||
| 269 | // background: linear-gradient(-90deg, #8623FC, #453DEA); | ||
| 270 | // | ||
| 271 | // label { | ||
| 272 | // color: #fff; | ||
| 273 | // } | ||
| 274 | //} | ||
| 275 | } | ||
| 276 | } | ||
| 277 | |||
| 278 | .hz-title{ | ||
| 279 | font-size: 20px; | ||
| 280 | font-weight: 400; | ||
| 281 | color: #000; | ||
| 282 | margin-top:20px; | ||
| 283 | margin-bottom: 10px; | ||
| 284 | } | ||
| 285 | |||
| 286 | .zh-margin{ | ||
| 287 | font-weight: bold; | ||
| 288 | font-size: 36px; | ||
| 289 | color: #FF8124; | ||
| 290 | margin-right: 30px; | ||
| 291 | } | ||
| 292 | .hz-p{ | ||
| 293 | font-size: 16px; | ||
| 294 | color: #4C5359; | ||
| 295 | font-weight: 400; | ||
| 296 | } | ||
| 297 | |||
| 298 | :deep(.el-calendar__header) { | ||
| 299 | background: linear-gradient(90deg, #8623FC, #453DEA); | ||
| 300 | height: 50px; | ||
| 301 | line-height: 50px; | ||
| 302 | } | ||
| 303 | |||
| 304 | .canBtn{ | ||
| 305 | color: #453DEA; | ||
| 306 | border-radius: 2px; | ||
| 307 | width: 22px; | ||
| 308 | height: 22px; | ||
| 309 | line-height: 26px; | ||
| 310 | text-align: center; | ||
| 311 | background-color: #fff; | ||
| 312 | margin: 0 16px -2px 16px; | ||
| 313 | cursor:pointer | ||
| 314 | } | ||
| 315 | |||
| 316 | .cTitle{ | ||
| 317 | color: #fff; | ||
| 318 | font-size: 20px; | ||
| 319 | font-weight: 500; | ||
| 320 | } | ||
| 321 | </style> |
| 1 | <template> | 1 | <template> |
| 2 | <div> | 2 | <div> |
| 3 | <div class="banner"> | 3 | <div class="banner"> |
| 4 | <img src="@/assets/booking/hz_text.png"> | 4 | <img v-if="language==0" src="@/assets/booking/hz_text_c.png"> |
| 5 | <img v-else src="@/assets/booking/hz_text_e.png"> | ||
| 5 | </div> | 6 | </div> |
| 6 | <div class="box"> | 7 | <div class="box"> |
| 7 | <div class="searchBar"> | 8 | <div class="searchBar"> |
| ... | @@ -12,125 +13,171 @@ | ... | @@ -12,125 +13,171 @@ |
| 12 | </div> | 13 | </div> |
| 13 | </div> | 14 | </div> |
| 14 | <div class="box" v-loading="loading"> | 15 | <div class="box" v-loading="loading"> |
| 15 | <el-row :gutter="20" class="mb20"> | 16 | <el-row style="width: 100%" :gutter="20"> |
| 16 | <el-col :lg="8" :md="8" :sm="12" :xs="24" v-for="(n,index) in list" :key="index"> | 17 | <el-col :span="8" v-for="(h,index) in list" class="mb20" > |
| 17 | <el-card class="mb20 mitem"> | 18 | <el-card style="position: relative;"> |
| 18 | <div class="imgbox"><img/> | 19 | <img class="w100 hz-img" :src="fillImgUrl(h.cover)"/> |
| 19 | <span>30 个时间段可预约</span> | 20 | <div class="yuyue"> |
| 21 | {{ h.counts }} {{ language==0?'个时间段可预约':"time slots can be reserved" }} | ||
| 20 | </div> | 22 | </div> |
| 21 | <div class="info"> | 23 | <div class="hz-text">{{h.name}}</div> |
| 22 | <h3>Mango美妆工作室</h3> | 24 | <div class="tagbox esp"> |
| 23 | <div class="tagbox"> | 25 | <span v-for="(t,index) in h.label?.split(',')" v-show="index<4">{{t}}</span> |
| 24 | <span>专业团队</span> | ||
| 25 | <span>大牌化妆品</span> | ||
| 26 | <span>金牌化妆师</span> | ||
| 27 | <span>连锁</span> | ||
| 28 | </div> | 26 | </div> |
| 29 | <p class="esp"> | 27 | <div class="hz-row"> |
| 30 | <span> | 28 | <el-icon size="16" style="position: relative;top: 2px" color="#929AA0"><OfficeBuilding /></el-icon> |
| 31 | <el-icon><OfficeBuilding /></el-icon> | 29 | {{ language==0?'成立':'Established for'}} |
| 32 | 成立<i class="text-primary">6</i>年 | 30 | <span class="sign">{{ h.ageLimit }}</span>{{language==0?'年':'years'}} | |
| 33 | </span> | 31 | <el-icon size="16" style="position: relative;top: 2px" color="#929AA0"><UserFilled /></el-icon><span class="sign">{{ h.dresserLimit }}</span>{{language==0?'名化妆师':'makeup artists' }} |
| 34 | <span> | ||
| 35 | <el-icon><User /></el-icon> | ||
| 36 | <i class="text-primary">12</i>名化妆师 | ||
| 37 | </span> | ||
| 38 | </p> | ||
| 39 | <p class="esp"><el-icon><Iphone /></el-icon> | ||
| 40 | 800-820-8820 | ||
| 41 | </p> | ||
| 42 | <p class="esp"><el-icon><Location /></el-icon> | ||
| 43 | 江苏无锡梁溪区南长街5D-601 | ||
| 44 | </p> | ||
| 45 | <div class="text-center mt20"> | ||
| 46 | <el-button @click="goDetail(n)" round type="primary" class="btn-lineG fs18 w50" size="large"> | ||
| 47 | 立即预约   <el-icon class="rotate90_180"> <sort-down/></el-icon> | ||
| 48 | </el-button> | ||
| 49 | </div> | 32 | </div> |
| 33 | <div class="hz-row"> | ||
| 34 | <el-icon size="16" style="position: relative;top: 2px" color="#929AA0"><PhoneFilled /></el-icon> | ||
| 35 | {{ h.contact }} | ||
| 36 | </div> | ||
| 37 | <div class="hz-row"> | ||
| 38 | <el-icon size="16" style="position: relative;top: 2px" color="#929AA0"><LocationFilled /></el-icon> | ||
| 39 | {{h.remarks}} | ||
| 40 | </div> | ||
| 41 | <div style="text-align: center"> | ||
| 42 | <el-button :disabled="h.counts<=0" class="btn-lineG w200px" round type="primary" size="large" @click="goDetail(h)">{{ language==0?'立即预约':'Select' }} ⇀</el-button> | ||
| 50 | </div> | 43 | </div> |
| 51 | </el-card> | 44 | </el-card> |
| 52 | </el-col> | 45 | </el-col> |
| 53 | </el-row> | 46 | </el-row> |
| 54 | 47 | ||
| 48 | <el-empty v-show="!loading&&list.length==0" :image="`/img/order_no.png`" :image-size="228" description="" /> | ||
| 49 | <div style="height: 50px"></div> | ||
| 55 | </div> | 50 | </div> |
| 56 | 51 | ||
| 57 | </div> | 52 | </div> |
| 58 | </template> | 53 | </template> |
| 59 | 54 | ||
| 60 | <script setup> | 55 | <script setup> |
| 61 | import {getStudioList} from "@/apiPc/booking" | ||
| 62 | import {onMounted} from "@vue/runtime-core" | 56 | import {onMounted} from "@vue/runtime-core" |
| 63 | import {useRoute, useRouter} from "vue-router" | 57 | import * as booking from "@/apiPc/booking" |
| 58 | import {useRouter,useRoute} from "vue-router"; | ||
| 64 | import {useStorage} from "@vueuse/core/index"; | 59 | import {useStorage} from "@vueuse/core/index"; |
| 65 | const language= useStorage('language',0) | 60 | import {getMakeUpList} from "@/apiPc/booking"; |
| 66 | const router = useRouter() | 61 | const router = useRouter() |
| 67 | const route = useRoute() | 62 | const route = useRoute() |
| 68 | const list = ref([{id:'0'},{id:'1'},{id:'2'},{id:'3'}]) | 63 | const language= useStorage('language',0) |
| 69 | const loading = ref(false) | ||
| 70 | const query = ref({ | 64 | const query = ref({ |
| 71 | 65 | name:'' | |
| 72 | }) | 66 | }) |
| 67 | const cptId = ref('') | ||
| 68 | const list = ref([]) | ||
| 69 | const loading = ref(false) | ||
| 73 | onMounted(()=>{ | 70 | onMounted(()=>{ |
| 74 | query.value.activityId = route.params.cptId | 71 | query.value.activityId = route.params.cptId |
| 75 | // getList() | 72 | getList() |
| 76 | }) | 73 | }) |
| 74 | |||
| 77 | function getList() { | 75 | function getList() { |
| 78 | loading.value = true | 76 | loading.value = true |
| 79 | getStudioList(query.value).then(res=>{ | 77 | booking.getMakeUpList(query.value).then(res=>{ |
| 80 | list.value = res.rows | 78 | list.value = res.rows |
| 81 | loading.value = false | 79 | loading.value = false |
| 82 | }).catch(err=>{ | 80 | }).catch(e=>{ |
| 83 | loading.value = false | 81 | loading.value = false |
| 84 | }) | 82 | }) |
| 85 | } | 83 | } |
| 86 | function goDetail(n) { | 84 | function goDetail(item) { |
| 87 | router.push({ | 85 | router.push({ |
| 88 | name:'studioDetail', | 86 | name:'makeUpDetail', |
| 89 | params:{ | 87 | params:{ |
| 90 | studioId: n.id | 88 | id:item.id, |
| 91 | } | 89 | } |
| 92 | }) | 90 | }) |
| 93 | } | 91 | } |
| 94 | </script> | 92 | </script> |
| 95 | 93 | ||
| 96 | <style scoped lang="scss"> | 94 | <style scoped lang="scss"> |
| 95 | |||
| 97 | .banner{height: 140px;background-size: cover;text-align: center; | 96 | .banner{height: 140px;background-size: cover;text-align: center; |
| 98 | background: url("@/assets/booking/hz_bg.png") center;display: flex;align-items: center; | 97 | background: url("@/assets/booking/hz_bg.png") center;display: flex;align-items: center; |
| 99 | justify-content: center; | 98 | justify-content: center; |
| 100 | img{display: block;margin:-30px auto 0;width: auto;} | 99 | img{display: block;margin:-30px auto 0;width: auto;} |
| 101 | } | 100 | } |
| 102 | .searchBar{position: relative;top: -30px; | 101 | .searchBar{position: relative;top: -30px; |
| 103 | background: #FFFFFF;display: flex;padding: 20px; | 102 | background: #FFFFFF;display: flex;padding: 20px; |
| 104 | border-radius: 10px;} | 103 | border-radius: 10px;} |
| 105 | .no-border{border: none;background: #F5F7F9; | 104 | .no-border{border: none;background: #F5F7F9; |
| 106 | :deep(.el-input__wrapper){border: none;box-shadow: none;background: #F5F7F9;} | 105 | :deep(.el-input__wrapper){border: none;box-shadow: none;background: #F5F7F9;} |
| 107 | } | 106 | } |
| 108 | .tagbox{margin: 15px 0; | 107 | |
| 108 | .hz-img{ | ||
| 109 | height: 218px; | ||
| 110 | width: 100%; | ||
| 111 | border-radius: 2px; | ||
| 112 | border: 0; | ||
| 113 | margin-bottom: 20px; | ||
| 114 | object-fit: cover; | ||
| 115 | } | ||
| 116 | |||
| 117 | .yuyue{ | ||
| 118 | height: 30px; | ||
| 119 | padding-right: 10px; | ||
| 120 | background: #000000; | ||
| 121 | border-radius: 20px 0px 0px 2px; | ||
| 122 | padding-left: 15px; | ||
| 123 | opacity: 0.45; | ||
| 124 | color: #fff; | ||
| 125 | font-size: 14px; | ||
| 126 | line-height: 30px; | ||
| 127 | position: absolute; | ||
| 128 | top: 207px; | ||
| 129 | right:21px; | ||
| 130 | } | ||
| 131 | |||
| 132 | .hz-text{ | ||
| 133 | font-size: 20px; | ||
| 134 | font-weight: 500; | ||
| 135 | color: #000; | ||
| 136 | margin-bottom: 8px; | ||
| 137 | } | ||
| 138 | |||
| 139 | //.hz-tag{ | ||
| 140 | // border-radius: 13px; | ||
| 141 | // height: 25px; | ||
| 142 | // line-height: 25px; | ||
| 143 | // font-size: 12px; | ||
| 144 | // font-weight: 400; | ||
| 145 | // padding: 0 15px; | ||
| 146 | //} | ||
| 147 | //.tag1{ | ||
| 148 | // background: rgba(50, 177, 108, 0.2); | ||
| 149 | // color:rgba(50, 177, 108, 1); | ||
| 150 | //} | ||
| 151 | //.tag2{ | ||
| 152 | // background-color: rgba(243, 152, 0, 0.2); | ||
| 153 | // color: #F39800; | ||
| 154 | //} | ||
| 155 | //.tag3{ | ||
| 156 | // background-color: rgba(0, 160, 233, 0.2); | ||
| 157 | // color: #00A0E9; | ||
| 158 | //} | ||
| 159 | //.tag4{ | ||
| 160 | // background-color: rgba(247, 64, 166, 0.2); | ||
| 161 | // color: #F740A6; | ||
| 162 | //} | ||
| 163 | // | ||
| 164 | //.hz-row{ | ||
| 165 | // font-size: 14px; | ||
| 166 | // font-weight: 400; | ||
| 167 | // color: #929AA0; | ||
| 168 | // margin-bottom: 16px; | ||
| 169 | // .sign{ | ||
| 170 | // color: #493CEB; | ||
| 171 | // } | ||
| 172 | //} | ||
| 173 | |||
| 174 | |||
| 175 | .tagbox{margin: 10px 0; | ||
| 109 | a{color: #AFB5B9;font-size: 12px;} | 176 | a{color: #AFB5B9;font-size: 12px;} |
| 110 | span{border-radius: 13px;font-size: 12px;padding: 4px 10px;margin-right:10px;font-weight: 400;} | 177 | span{border-radius: 13px;font-size: 12px;padding: 3px 10px;margin-right:10px;font-weight: 400;} |
| 111 | span:nth-child(4n){background: rgba(50, 177, 108, 0.2);color: rgba(50, 177, 108, 1);} | 178 | span:nth-child(4n){background: rgba(50, 177, 108, 0.2);color: rgba(50, 177, 108, 1);} |
| 112 | span:nth-child(4n+1){background:rgba(243, 152, 0, 0.2);color: rgba(243, 152, 0, 1);} | 179 | span:nth-child(4n+1){background:rgba(243, 152, 0, 0.2);color: rgba(243, 152, 0, 1);} |
| 113 | span:nth-child(4n+2){background: rgba(0, 160, 233, 0.2);color: rgba(0, 160, 233, 1);} | 180 | span:nth-child(4n+2){background: rgba(0, 160, 233, 0.2);color: rgba(0, 160, 233, 1);} |
| 114 | span:nth-child(4n+3){background: rgba(247, 64, 166, 0.2);color:rgba(247, 64, 166, 1);} | 181 | span:nth-child(4n+3){background: rgba(247, 64, 166, 0.2);color:rgba(247, 64, 166, 1);} |
| 115 | } | 182 | } |
| 116 | .mitem{ | ||
| 117 | .imgbox{aspect-ratio: 16/9;background: rgba(129, 122, 234, 0.7); | ||
| 118 | position: relative; | ||
| 119 | span{position: absolute;color: #fff;font-weight: 400;bottom: 0;right: 0; | ||
| 120 | font-size: 14px;background: rgba(0,0,0,0.45); | ||
| 121 | border-radius: 16px 0 0 0;padding:4px 14px; | ||
| 122 | } | ||
| 123 | } | ||
| 124 | .info{ | ||
| 125 | p{font-weight: 400;margin: 7px 0; | ||
| 126 | font-size: 14px; | ||
| 127 | color: #929AA0; | ||
| 128 | i{font-style: normal;} | ||
| 129 | } | ||
| 130 | span{margin-right: 10px; | ||
| 131 | i.text-primary{padding: 0 4px;} | ||
| 132 | } | ||
| 133 | .el-icon{position: relative;top:2px;margin-right: 4px;} | ||
| 134 | } | ||
| 135 | } | ||
| 136 | </style> | 183 | </style> | ... | ... |
src/viewsPc/booking/makeUpDetail.vue
0 → 100644
| 1 | <template> | ||
| 2 | <div> | ||
| 3 | <div class="box"> | ||
| 4 | <el-card> | ||
| 5 | <el-row> | ||
| 6 | <div class="zh-title">{{ form.name }}</div> | ||
| 7 | <div class="tagbox esp"> | ||
| 8 | <span v-for="(t,index) in form.label?.split(',')" v-show="index<4">{{t}}</span> | ||
| 9 | </div> | ||
| 10 | </el-row> | ||
| 11 | <el-row class="hz-row"> | ||
| 12 | <el-icon size="16" style="position: relative;top: 2px" color="#929AA0"> | ||
| 13 | <OfficeBuilding/> | ||
| 14 | </el-icon> | ||
| 15 | {{ language==0?'成立':'Established for'}} <span class="sign">{{form.ageLimit}}</span>{{language==0?'年':'years'}} | | ||
| 16 | <el-icon size="16" style="position: relative;top: 2px" color="#929AA0"> | ||
| 17 | <UserFilled/> | ||
| 18 | </el-icon> | ||
| 19 | <span class="sign"> {{ form.dresserLimit }}</span>{{language==0?'名化妆师':'makeup artists' }} | | ||
| 20 | <el-icon size="16" style="position: relative;top: 2px" color="#929AA0"> | ||
| 21 | <PhoneFilled/> | ||
| 22 | </el-icon> | ||
| 23 | <span style="padding-top: 2px"> | ||
| 24 | {{ form.contact }} | ||
| 25 | </span> | ||
| 26 | | | ||
| 27 | <el-icon size="16" style="position: relative;top: 2px" color="#929AA0"> | ||
| 28 | <LocationFilled/> | ||
| 29 | </el-icon> | ||
| 30 | {{form.remarks}} | ||
| 31 | </el-row> | ||
| 32 | </el-card> | ||
| 33 | |||
| 34 | <div class="mt30"> | ||
| 35 | <el-row :gutter="20"> | ||
| 36 | <el-col :span="10"> | ||
| 37 | <div class="imgbox hotelImg"> | ||
| 38 | <el-image :src="form?.photosList?.[0]" fit="cover" :preview-src-list="form?.photosList"/> | ||
| 39 | </div> | ||
| 40 | </el-col> | ||
| 41 | <el-col :span="14"> | ||
| 42 | <el-row class="h100" :gutter="20"> | ||
| 43 | <el-col :span="8" class="oddmb" v-for="(p,index) in form?.photosList?.slice(1,7)"> | ||
| 44 | <div class="imgbox hotelImg"><el-image :src="p" fit="cover"/></div> | ||
| 45 | </el-col> | ||
| 46 | </el-row> | ||
| 47 | </el-col> | ||
| 48 | </el-row> | ||
| 49 | </div> | ||
| 50 | <br> | ||
| 51 | <el-card :body-style="{'padding':'20px 20px'}"> | ||
| 52 | <MakeUpCalendar/> | ||
| 53 | </el-card> | ||
| 54 | |||
| 55 | </div> | ||
| 56 | </div> | ||
| 57 | </template> | ||
| 58 | |||
| 59 | <script setup > | ||
| 60 | import {useRouter} from "vue-router"; | ||
| 61 | import {ref, reactive, onMounted} from "vue"; | ||
| 62 | import {useRoute} from "vue-router"; | ||
| 63 | import * as booking from "@/apiPc/booking" | ||
| 64 | import {useStorage} from "@vueuse/core/index"; | ||
| 65 | import useUserStore from "@/store/modules/user"; | ||
| 66 | import MakeUpCalendar from "@/viewsPc/booking/component/makeUpCalendar.vue"; | ||
| 67 | import {fillImgUrl} from "/@/utils/ruoyi"; | ||
| 68 | const user = useUserStore().user | ||
| 69 | const language = useStorage('language', 0) | ||
| 70 | const router = useRouter() | ||
| 71 | const route = useRoute() | ||
| 72 | const form = ref({}) | ||
| 73 | const query = ref({ | ||
| 74 | activityId: route.params.cptId, | ||
| 75 | id:route.params.id | ||
| 76 | }) | ||
| 77 | const loading = ref(false) | ||
| 78 | onMounted(() => { | ||
| 79 | getData() | ||
| 80 | }) | ||
| 81 | |||
| 82 | function getData() { | ||
| 83 | loading.value = true | ||
| 84 | booking.makeUpDetail(query.value).then(res => { | ||
| 85 | loading.value = false | ||
| 86 | form.value = res.data | ||
| 87 | form.value.photosList=[] | ||
| 88 | form.value.photos?.split(',')?.forEach(v=>{ | ||
| 89 | form.value.photosList.push(fillImgUrl(v)) | ||
| 90 | }) | ||
| 91 | console.log(res) | ||
| 92 | }).catch(err => { | ||
| 93 | console.log(err) | ||
| 94 | }) | ||
| 95 | } | ||
| 96 | |||
| 97 | </script> | ||
| 98 | |||
| 99 | <style scoped lang="scss"> | ||
| 100 | .room { | ||
| 101 | background: #FAFBFD; | ||
| 102 | margin: 20px 0 0; | ||
| 103 | padding: 20px; | ||
| 104 | border: 1px solid #E5E5E5; | ||
| 105 | |||
| 106 | .name { | ||
| 107 | font-size: 20px; | ||
| 108 | margin: 0 0 10px; | ||
| 109 | } | ||
| 110 | |||
| 111 | .roomImg { | ||
| 112 | aspect-ratio: 16/9; | ||
| 113 | border-radius: 10px; | ||
| 114 | overflow: hidden; | ||
| 115 | |||
| 116 | img { | ||
| 117 | width: 100%; | ||
| 118 | object-fit: cover; | ||
| 119 | object-position: center; | ||
| 120 | height: 100%; | ||
| 121 | } | ||
| 122 | } | ||
| 123 | |||
| 124 | .price { | ||
| 125 | color: #FF8124; | ||
| 126 | font-size: 24px; | ||
| 127 | |||
| 128 | span { | ||
| 129 | font-size: 36px; | ||
| 130 | font-family: "DIN Alternate" | ||
| 131 | } | ||
| 132 | } | ||
| 133 | |||
| 134 | .bg-lineg { | ||
| 135 | margin: auto; | ||
| 136 | border-radius: 10px; | ||
| 137 | text-align: center; | ||
| 138 | padding: 7px 2px 2px; | ||
| 139 | font-size: 24px; | ||
| 140 | width: 66px; | ||
| 141 | cursor: pointer; | ||
| 142 | |||
| 143 | div { | ||
| 144 | background: #fff; | ||
| 145 | font-size: 13px; | ||
| 146 | border-radius: 20px; | ||
| 147 | padding: 0 10px; | ||
| 148 | color: #453DEA; | ||
| 149 | font-weight: 500; | ||
| 150 | } | ||
| 151 | } | ||
| 152 | } | ||
| 153 | |||
| 154 | .zh-title { | ||
| 155 | font-size: 24px; | ||
| 156 | font-weight: 500; | ||
| 157 | margin-right: 25px; | ||
| 158 | } | ||
| 159 | |||
| 160 | |||
| 161 | .hotel { | ||
| 162 | h3 { | ||
| 163 | margin: 0 0 20px; | ||
| 164 | } | ||
| 165 | |||
| 166 | img.w100 { | ||
| 167 | object-fit: cover; | ||
| 168 | aspect-ratio: 16/9 | ||
| 169 | } | ||
| 170 | |||
| 171 | .addr { | ||
| 172 | font-size: 16px; | ||
| 173 | color: #929AA0; | ||
| 174 | font-weight: 400; | ||
| 175 | } | ||
| 176 | |||
| 177 | .price { | ||
| 178 | margin: 0 0 25px; | ||
| 179 | color: #FF8124; | ||
| 180 | font-size: 18px; | ||
| 181 | |||
| 182 | span { | ||
| 183 | font-size: 24px; | ||
| 184 | margin: 0 8px; | ||
| 185 | font-family: 'DINAlternate-Bold'; | ||
| 186 | font-weight: 600; | ||
| 187 | } | ||
| 188 | |||
| 189 | i { | ||
| 190 | font-style: normal; | ||
| 191 | color: #929AA0; | ||
| 192 | } | ||
| 193 | } | ||
| 194 | } | ||
| 195 | |||
| 196 | |||
| 197 | .tagbox { | ||
| 198 | margin: 15px 0; | ||
| 199 | |||
| 200 | a { | ||
| 201 | color: #AFB5B9; | ||
| 202 | font-size: 12px; | ||
| 203 | } | ||
| 204 | |||
| 205 | span { | ||
| 206 | border-radius: 13px; | ||
| 207 | font-size: 12px; | ||
| 208 | padding: 4px 10px; | ||
| 209 | margin-right: 10px; | ||
| 210 | font-weight: 400; | ||
| 211 | } | ||
| 212 | |||
| 213 | span:nth-child(4n) { | ||
| 214 | background: rgba(50, 177, 108, 0.2); | ||
| 215 | color: rgba(50, 177, 108, 1); | ||
| 216 | } | ||
| 217 | |||
| 218 | span:nth-child(4n+1) { | ||
| 219 | background: rgba(243, 152, 0, 0.2); | ||
| 220 | color: rgba(243, 152, 0, 1); | ||
| 221 | } | ||
| 222 | |||
| 223 | span:nth-child(4n+2) { | ||
| 224 | background: rgba(0, 160, 233, 0.2); | ||
| 225 | color: rgba(0, 160, 233, 1); | ||
| 226 | } | ||
| 227 | |||
| 228 | span:nth-child(4n+3) { | ||
| 229 | background: rgba(247, 64, 166, 0.2); | ||
| 230 | color: rgba(247, 64, 166, 1); | ||
| 231 | } | ||
| 232 | } | ||
| 233 | |||
| 234 | .sign { | ||
| 235 | padding-top: 2px; | ||
| 236 | } | ||
| 237 | |||
| 238 | .img-header { | ||
| 239 | height: 270px; | ||
| 240 | } | ||
| 241 | |||
| 242 | .card { | ||
| 243 | padding: 10px; | ||
| 244 | width: 100%; | ||
| 245 | height: 100%; | ||
| 246 | position: relative; | ||
| 247 | img{object-fit: cover} | ||
| 248 | } | ||
| 249 | |||
| 250 | .img-hover{ | ||
| 251 | position: absolute; | ||
| 252 | top: 0; | ||
| 253 | left: 0; | ||
| 254 | background-color: rgb(0,0,0,.5); | ||
| 255 | color: #fff; | ||
| 256 | font-size: 18px; | ||
| 257 | font-weight: 400; | ||
| 258 | width: 100%; | ||
| 259 | height: 100%; | ||
| 260 | line-height: 115px; | ||
| 261 | text-align: center; | ||
| 262 | border-radius: 10px; | ||
| 263 | } | ||
| 264 | |||
| 265 | .hotelImg{border-radius: 10px;overflow: hidden;aspect-ratio: 16/9; | ||
| 266 | img{object-fit: cover;object-position: center;width: 100%;height: 100%; | ||
| 267 | } | ||
| 268 | } | ||
| 269 | .oddmb:nth-child(2){margin-bottom: 20px;} | ||
| 270 | </style> |
src/viewsPc/booking/makeUpOrder.vue
0 → 100644
This diff is collapsed.
Click to expand it.
| ... | @@ -27,7 +27,6 @@ | ... | @@ -27,7 +27,6 @@ |
| 27 | </el-row> | 27 | </el-row> |
| 28 | </div> | 28 | </div> |
| 29 | </div> | 29 | </div> |
| 30 | |||
| 31 | <div v-if="type == 'car'"> | 30 | <div v-if="type == 'car'"> |
| 32 | <div class="leftboderTT">{{ language == 0 ? '路线信息' : 'Car Information' }}</div> | 31 | <div class="leftboderTT">{{ language == 0 ? '路线信息' : 'Car Information' }}</div> |
| 33 | <div class="border-info mt20"> | 32 | <div class="border-info mt20"> |
| ... | @@ -53,7 +52,42 @@ | ... | @@ -53,7 +52,42 @@ |
| 53 | </el-row> | 52 | </el-row> |
| 54 | </div> | 53 | </div> |
| 55 | </div> | 54 | </div> |
| 56 | 55 | <div v-if="type == 'makeUp'"> | |
| 56 | <div class="leftboderTT">{{ language == 0 ? '化妆信息' : 'Hotel Information' }}</div> | ||
| 57 | <div class="border-info mt20"> | ||
| 58 | <h3>{{ formInfo.studioName }}</h3> | ||
| 59 | <el-row> | ||
| 60 | <el-col> | ||
| 61 | {{ language == 0 ?'地址':'Address' }}: | ||
| 62 | <span >{{ formInfo.remarks }} </span> | ||
| 63 | </el-col> | ||
| 64 | <el-col> | ||
| 65 | {{ language == 0 ?'套餐':'Package' }}:{{ formInfo.mealName }} <span style="margin-left: 40px">{{ language==0?'价格':'Price' }}</span><span class="price">{{language==0? '¥'+formInfo.mealPrice:'€'+ formInfo.mealPriceEn}}</span> | ||
| 66 | </el-col> | ||
| 67 | <el-col> | ||
| 68 | {{ language == 0 ?'套餐说明':'Package Description' }}:{{ formInfo.introduction}} | ||
| 69 | </el-col> | ||
| 70 | </el-row> | ||
| 71 | </div> | ||
| 72 | </div> | ||
| 73 | <div v-if="type == 'photography'"> | ||
| 74 | <div class="leftboderTT">{{ language == 0 ? '拍摄信息' : 'Shooting Information' }}</div> | ||
| 75 | <div class="border-info mt20"> | ||
| 76 | <h3>{{ formInfo.shootName }}</h3> | ||
| 77 | <el-row> | ||
| 78 | <el-col> | ||
| 79 | {{ language == 0 ?'地址':'Address' }}: | ||
| 80 | <span >{{ formInfo.remarks }} </span> | ||
| 81 | </el-col> | ||
| 82 | <el-col> | ||
| 83 | {{ language == 0 ?'套餐':'Package' }}:{{ formInfo.photoName }} <span style="margin-left: 40px">{{ language==0?'价格':'Price' }}</span><span class="price">{{language==0? '¥'+formInfo.photoPrice:'€'+ formInfo.photoPriceEn}}</span> | ||
| 84 | </el-col> | ||
| 85 | <el-col> | ||
| 86 | {{ language == 0 ?'套餐说明':'Package Description' }}:{{ formInfo.introduction}} | ||
| 87 | </el-col> | ||
| 88 | </el-row> | ||
| 89 | </div> | ||
| 90 | </div> | ||
| 57 | 91 | ||
| 58 | <div class="leftboderTT">{{ language == 0 ? '预订信息' : 'Booking information' }}</div> | 92 | <div class="leftboderTT">{{ language == 0 ? '预订信息' : 'Booking information' }}</div> |
| 59 | 93 | ||
| ... | @@ -127,6 +161,37 @@ | ... | @@ -127,6 +161,37 @@ |
| 127 | <el-col :lg="8" :md="12" :sm="12" :xs="24">{{ language==0?'联系方式':'Contact Phone' }}:{{ form.phone }}</el-col> | 161 | <el-col :lg="8" :md="12" :sm="12" :xs="24">{{ language==0?'联系方式':'Contact Phone' }}:{{ form.phone }}</el-col> |
| 128 | <el-col :span="24" >{{ language==0?'备注':'Remarks' }}:{{ form.remarks || '-' }}</el-col> | 162 | <el-col :span="24" >{{ language==0?'备注':'Remarks' }}:{{ form.remarks || '-' }}</el-col> |
| 129 | </el-row> | 163 | </el-row> |
| 164 | <el-row v-if="type == 'makeUp'"> | ||
| 165 | <el-col :lg="8" :md="12" :sm="12" :xs="24"> | ||
| 166 | <div class="mb10">{{ language==0?'化妆时间':'Makeup time' }}: | ||
| 167 | <!-- {{ dayjs(form.dcStart).format('YYYY-MM-DD') +' ' }} ~ {{dayjs(form.dcStart).format('YYYY-MM-DD') +' '}}--> | ||
| 168 | {{ dayjs(form.dcStart).format('YYYY-MM-DD') +' '+ form.nameStart }} ~ {{dayjs(form.dcStart).format('YYYY-MM-DD') +' '+form.nameEnd}} | ||
| 169 | </div> | ||
| 170 | </el-col> | ||
| 171 | <el-col :lg="12" :md="12" :sm="12" :xs="24"> | ||
| 172 | <div class="mb10">{{ language==0?'预约数':'Number of appointments' }}:{{ form.num }} </div> | ||
| 173 | </el-col> | ||
| 174 | <el-col :lg="8" :md="12" :sm="12" :xs="24"> | ||
| 175 | <div class="mb10">{{ language==0?'联系人':'Contact Person' }}:{{ form.contacts }}</div> | ||
| 176 | </el-col> | ||
| 177 | <el-col :lg="8" :md="12" :sm="12" :xs="24">{{ language==0?'联系方式':'Contact Phone' }}:{{ form.phone }}</el-col> | ||
| 178 | <el-col :span="24" >{{ language==0?'备注':'Remarks' }}:{{ form.remarks }}</el-col> | ||
| 179 | </el-row> | ||
| 180 | <el-row v-if="type == 'photography'"> | ||
| 181 | <el-col :lg="8" :md="12" :sm="12" :xs="24"> | ||
| 182 | <div class="mb10">{{ language==0?'拍摄时间':'Makeup time' }}: | ||
| 183 | {{ dayjs(form.dcStart).format('YYYY-MM-DD') +' '+ form.nameStart }} ~ {{dayjs(form.dcStart).format('YYYY-MM-DD') +' '+form.nameEnd}} | ||
| 184 | </div> | ||
| 185 | </el-col> | ||
| 186 | <el-col :lg="12" :md="12" :sm="12" :xs="24"> | ||
| 187 | <div class="mb10">{{ language==0?'预约数':'Number of appointments' }}:{{ form.num }} </div> | ||
| 188 | </el-col> | ||
| 189 | <el-col :lg="8" :md="12" :sm="12" :xs="24"> | ||
| 190 | <div class="mb10">{{ language==0?'联系人':'Contact Person' }}:{{ form.contacts }}</div> | ||
| 191 | </el-col> | ||
| 192 | <el-col :lg="8" :md="12" :sm="12" :xs="24">{{ language==0?'联系方式':'Contact Phone' }}:{{ form.phone }}</el-col> | ||
| 193 | <el-col :span="24" >{{ language==0?'备注':'Remarks' }}:{{ form.remarks }}</el-col> | ||
| 194 | </el-row> | ||
| 130 | </div> | 195 | </div> |
| 131 | 196 | ||
| 132 | <el-row justify="space-between" align="middle"> | 197 | <el-row justify="space-between" align="middle"> |
| ... | @@ -169,7 +234,7 @@ | ... | @@ -169,7 +234,7 @@ |
| 169 | 234 | ||
| 170 | <div class="leftboderTT">{{ language == 0 ? '选择支付方式' : 'Choose payment method' }}</div> | 235 | <div class="leftboderTT">{{ language == 0 ? '选择支付方式' : 'Choose payment method' }}</div> |
| 171 | <div class="mt20"> | 236 | <div class="mt20"> |
| 172 | <el-radio-group v-model="payType"> | 237 | <el-radio-group v-model="payType" > |
| 173 | <el-radio value="2" v-if="language==0" border> | 238 | <el-radio value="2" v-if="language==0" border> |
| 174 | <!-- 微信--> | 239 | <!-- 微信--> |
| 175 | <svg t="1709002960407" class="icon" viewBox="0 0 3152 1024" version="1.1" | 240 | <svg t="1709002960407" class="icon" viewBox="0 0 3152 1024" version="1.1" |
| ... | @@ -298,7 +363,14 @@ import useUserStore from "@/store/modules/user"; | ... | @@ -298,7 +363,14 @@ import useUserStore from "@/store/modules/user"; |
| 298 | import FileUpload from "@/components/FileUpload"; | 363 | import FileUpload from "@/components/FileUpload"; |
| 299 | import {useStorage} from "@vueuse/core/index"; | 364 | import {useStorage} from "@vueuse/core/index"; |
| 300 | import {ElMessage} from "element-plus"; | 365 | import {ElMessage} from "element-plus"; |
| 301 | import {cancelOrder, cancelOrder2, getCarBilldetailbyId, getFoodBilldetailbyId} from "@/apiPc/booking"; | 366 | import { |
| 367 | cancelOrder, | ||
| 368 | cancelOrder2, | ||
| 369 | getCarBilldetailbyId, | ||
| 370 | getFoodBilldetailbyId, | ||
| 371 | getMealOrderInfoByLogex, getPhotoOrderInfo, getPhotoOrderInfoByLogex | ||
| 372 | } from "@/apiPc/booking"; | ||
| 373 | import dayjs from 'dayjs' | ||
| 302 | import {delPerson} from "@/api/exam/person"; | 374 | import {delPerson} from "@/api/exam/person"; |
| 303 | 375 | ||
| 304 | const isLogin = ref(false) | 376 | const isLogin = ref(false) |
| ... | @@ -306,13 +378,12 @@ const language = useStorage('language', 0) | ... | @@ -306,13 +378,12 @@ const language = useStorage('language', 0) |
| 306 | const totalFee = ref('') | 378 | const totalFee = ref('') |
| 307 | const wePayCodeUrl = ref('') | 379 | const wePayCodeUrl = ref('') |
| 308 | const form = ref({}) | 380 | const form = ref({}) |
| 381 | const formInfo=ref({}) | ||
| 309 | const type = ref('') | 382 | const type = ref('') |
| 310 | const errorBox = ref(false) | 383 | const errorBox = ref(false) |
| 311 | const hideconfirmbtn = ref(false) | 384 | const hideconfirmbtn = ref(false) |
| 312 | 385 | ||
| 313 | const user = useUserStore().user | 386 | const user = useUserStore().user |
| 314 | console.log(route.query.orderId) | ||
| 315 | // 1763462073870237698 | ||
| 316 | if (useUserStore().user) { | 387 | if (useUserStore().user) { |
| 317 | isLogin.value = true | 388 | isLogin.value = true |
| 318 | } | 389 | } |
| ... | @@ -336,8 +407,15 @@ onMounted(() => { | ... | @@ -336,8 +407,15 @@ onMounted(() => { |
| 336 | case '2': | 407 | case '2': |
| 337 | type.value = 'food' | 408 | type.value = 'food' |
| 338 | break | 409 | break |
| 410 | case '3': | ||
| 411 | type.value = 'makeUp' | ||
| 412 | break | ||
| 413 | case '4': | ||
| 414 | type.value = 'photography' | ||
| 415 | break | ||
| 339 | } | 416 | } |
| 340 | } | 417 | } |
| 418 | |||
| 341 | getData() | 419 | getData() |
| 342 | }) | 420 | }) |
| 343 | 421 | ||
| ... | @@ -384,6 +462,16 @@ function getData() { | ... | @@ -384,6 +462,16 @@ function getData() { |
| 384 | errorBox.value = true | 462 | errorBox.value = true |
| 385 | }) | 463 | }) |
| 386 | } | 464 | } |
| 465 | if(type.value=='makeUp') { | ||
| 466 | MakeUpOrder() | ||
| 467 | // MakeUpIno() | ||
| 468 | } | ||
| 469 | if(type.value=='photography') { | ||
| 470 | photographyOrder() | ||
| 471 | // photographyInfo() | ||
| 472 | } | ||
| 473 | |||
| 474 | console.log(payType.value) | ||
| 387 | } | 475 | } |
| 388 | 476 | ||
| 389 | function goHome() { | 477 | function goHome() { |
| ... | @@ -411,6 +499,29 @@ let handle; | ... | @@ -411,6 +499,29 @@ let handle; |
| 411 | 499 | ||
| 412 | function startforGetData() { | 500 | function startforGetData() { |
| 413 | handle = setTimeout(() => { | 501 | handle = setTimeout(() => { |
| 502 | if (type.value=='photography'){ | ||
| 503 | photographyOrder().then(res=>{ | ||
| 504 | if (form.value.payDate) { | ||
| 505 | if (handle) { | ||
| 506 | clearTimeout(handle) | ||
| 507 | handle = null | ||
| 508 | } | ||
| 509 | } else { | ||
| 510 | startforGetData() | ||
| 511 | } | ||
| 512 | }) | ||
| 513 | }else if(type.value=='makeUp'){ | ||
| 514 | MakeUpOrder().then(res=>{ | ||
| 515 | if (form.value.payDate) { | ||
| 516 | if (handle) { | ||
| 517 | clearTimeout(handle) | ||
| 518 | handle = null | ||
| 519 | } | ||
| 520 | } else { | ||
| 521 | startforGetData() | ||
| 522 | } | ||
| 523 | }) | ||
| 524 | }else{ | ||
| 414 | getData().then( res => { | 525 | getData().then( res => { |
| 415 | if (form.value.payDate) { | 526 | if (form.value.payDate) { |
| 416 | if (handle) { | 527 | if (handle) { |
| ... | @@ -421,6 +532,7 @@ function startforGetData() { | ... | @@ -421,6 +532,7 @@ function startforGetData() { |
| 421 | startforGetData() | 532 | startforGetData() |
| 422 | } | 533 | } |
| 423 | }) | 534 | }) |
| 535 | } | ||
| 424 | }, 2000) | 536 | }, 2000) |
| 425 | } | 537 | } |
| 426 | 538 | ||
| ... | @@ -428,6 +540,52 @@ function showLogin() { | ... | @@ -428,6 +540,52 @@ function showLogin() { |
| 428 | useUserStore().setReLogin() | 540 | useUserStore().setReLogin() |
| 429 | } | 541 | } |
| 430 | 542 | ||
| 543 | |||
| 544 | function MakeUpOrder(){ | ||
| 545 | return booking.getMealOrderInfo({orderId: orderId.value}).then(res => { | ||
| 546 | form.value=res.data | ||
| 547 | totalFee.value=language.value==0?form.value.total:form.value.totalEn | ||
| 548 | MakeUpIno() | ||
| 549 | console.log(res) | ||
| 550 | }).catch(err => { | ||
| 551 | console.log(err) | ||
| 552 | errorBox.value = true | ||
| 553 | }) | ||
| 554 | } | ||
| 555 | |||
| 556 | function MakeUpIno(){ | ||
| 557 | booking.getMealOrderInfoByLogex({asmId: form.value.asmId}).then(res=>{ | ||
| 558 | formInfo.value=res.data | ||
| 559 | console.log(res) | ||
| 560 | }) | ||
| 561 | .catch((e) => { | ||
| 562 | console.log(e) | ||
| 563 | errorBox.value = true | ||
| 564 | }) | ||
| 565 | } | ||
| 566 | |||
| 567 | |||
| 568 | function photographyOrder(){ | ||
| 569 | return booking.getPhotoOrderInfo({orderId: orderId.value}).then(res => { | ||
| 570 | form.value=res.data | ||
| 571 | totalFee.value=language.value==0?form.value.total:form.value.totalEn | ||
| 572 | photographyInfo() | ||
| 573 | }).catch(err => { | ||
| 574 | console.log(err) | ||
| 575 | errorBox.value = true | ||
| 576 | }) | ||
| 577 | } | ||
| 578 | |||
| 579 | function photographyInfo(){ | ||
| 580 | booking.getPhotoOrderInfoByLogex({aspId: form.value.aspId}).then(res=>{ | ||
| 581 | formInfo.value=res.data | ||
| 582 | }) | ||
| 583 | // .catch((e) => { | ||
| 584 | // console.log(e) | ||
| 585 | // errorBox.value = true | ||
| 586 | // }) | ||
| 587 | } | ||
| 588 | |||
| 431 | const cancel = () => { | 589 | const cancel = () => { |
| 432 | //取消订单 | 590 | //取消订单 |
| 433 | proxy.$modal.confirm(language.value == 0 ? '确定取消订单吗 ?' :`Are you sure to cancel the order?`).then(() => { | 591 | proxy.$modal.confirm(language.value == 0 ? '确定取消订单吗 ?' :`Are you sure to cancel the order?`).then(() => { |
| ... | @@ -451,6 +609,8 @@ const unsubscribe = () => { | ... | @@ -451,6 +609,8 @@ const unsubscribe = () => { |
| 451 | }) | 609 | }) |
| 452 | }) | 610 | }) |
| 453 | } | 611 | } |
| 612 | |||
| 613 | |||
| 454 | </script> | 614 | </script> |
| 455 | 615 | ||
| 456 | <style scoped lang="scss"> | 616 | <style scoped lang="scss"> |
| ... | @@ -606,4 +766,8 @@ const unsubscribe = () => { | ... | @@ -606,4 +766,8 @@ const unsubscribe = () => { |
| 606 | font-size: 16px; | 766 | font-size: 16px; |
| 607 | margin-top: 10px | 767 | margin-top: 10px |
| 608 | } | 768 | } |
| 769 | |||
| 770 | .price{ | ||
| 771 | color:orange; | ||
| 772 | } | ||
| 609 | </style> | 773 | </style> | ... | ... |
| 1 | <template> | 1 | <template> |
| 2 | <div> | 2 | <div> |
| 3 | <div class="banner"> | ||
| 4 | <img v-if="language==0" src="@/assets/booking/pz_text1.png"> | ||
| 5 | <img v-else src="@/assets/booking/pz_text2.png"> | ||
| 6 | </div> | ||
| 3 | <div class="box"> | 7 | <div class="box"> |
| 4 | <el-card class="mt30"></el-card> | 8 | <div class="searchBar"> |
| 9 | <el-input :placeholder="language==0?'请输入关键字搜索':'Search'" v-model="query.name" class="no-border"> | ||
| 10 | </el-input> | ||
| 11 | <el-button size="large" type="primary" class="btn-lineG" icon="search" @click="getList"> | ||
| 12 | {{ language==0?'搜索':'Search' }}</el-button> | ||
| 13 | </div> | ||
| 14 | </div> | ||
| 15 | <div class="box" v-loading="loading"> | ||
| 16 | <el-row style="width: 100%" :gutter="20"> | ||
| 17 | <el-col :span="8" v-for="(h,index) in list" class="mb20" > | ||
| 18 | <el-card style="position: relative;"> | ||
| 19 | <img class="w100 hz-img" :src="fillImgUrl(h.cover)"/> | ||
| 20 | <div class="yuyue"> | ||
| 21 | {{ h.counts }} {{ language==0?'个时间段可预约':"time slots can be reserved" }} | ||
| 22 | </div> | ||
| 23 | <div class="hz-text">{{h.name}}</div> | ||
| 24 | <div class="tagbox esp"> | ||
| 25 | <span v-for="(t,index) in h.label?.split(',')" v-show="index<4">{{t}}</span> | ||
| 26 | </div> | ||
| 27 | <div class="hz-row"> | ||
| 28 | <el-icon size="16" style="position: relative;top: 2px" color="#929AA0"><OfficeBuilding /></el-icon> | ||
| 29 | {{ language==0?'成立':'Established for'}} | ||
| 30 | <span class="sign">{{ h.ageLimit }}</span>{{language==0?'年':'years'}} | | ||
| 31 | <el-icon size="16" style="position: relative;top: 2px" color="#929AA0"><UserFilled /></el-icon><span class="sign">{{ h.dresserLimit }}</span>{{language==0?'名摄影师':'Photographers' }} | ||
| 32 | </div> | ||
| 33 | <div class="hz-row"> | ||
| 34 | <el-icon size="16" style="position: relative;top: 2px" color="#929AA0"><PhoneFilled /></el-icon> | ||
| 35 | {{ h.contact }} | ||
| 36 | </div> | ||
| 37 | <div class="hz-row"> | ||
| 38 | <el-icon size="16" style="position: relative;top: 2px" color="#929AA0"><LocationFilled /></el-icon> | ||
| 39 | {{h.remarks}} | ||
| 40 | </div> | ||
| 41 | <div style="text-align: center"> | ||
| 42 | <el-button :disabled="h.counts<=0" class="btn-lineG w200px" round type="primary" size="large" @click="goDetail(h)">{{ language==0?'立即预约':'Select' }} ⇀</el-button> | ||
| 43 | </div> | ||
| 44 | </el-card> | ||
| 45 | </el-col> | ||
| 46 | </el-row> | ||
| 5 | 47 | ||
| 48 | <el-empty v-show="!loading&&list.length==0" :image="`/img/order_no.png`" :image-size="228" description="" /> | ||
| 49 | <div style="height: 50px"></div> | ||
| 6 | </div> | 50 | </div> |
| 7 | 51 | ||
| 8 | </div> | 52 | </div> |
| 9 | </template> | 53 | </template> |
| 10 | 54 | ||
| 11 | <script setup> | 55 | <script setup> |
| 56 | import {onMounted} from "@vue/runtime-core" | ||
| 57 | import * as booking from "@/apiPc/booking" | ||
| 58 | import {useRouter,useRoute} from "vue-router"; | ||
| 59 | import {useStorage} from "@vueuse/core/index"; | ||
| 60 | import {getMakeUpList, getShootList} from "@/apiPc/booking"; | ||
| 61 | const router = useRouter() | ||
| 62 | const route = useRoute() | ||
| 63 | const language= useStorage('language',0) | ||
| 64 | const query = ref({ | ||
| 65 | name:'' | ||
| 66 | }) | ||
| 67 | const cptId = ref('') | ||
| 68 | const list = ref([]) | ||
| 69 | const loading = ref(false) | ||
| 70 | onMounted(()=>{ | ||
| 71 | query.value.activityId = route.params.cptId | ||
| 72 | getList() | ||
| 73 | }) | ||
| 12 | 74 | ||
| 75 | function getList() { | ||
| 76 | loading.value = true | ||
| 77 | booking.getShootList(query.value).then(res=>{ | ||
| 78 | list.value = res.rows | ||
| 79 | loading.value = false | ||
| 80 | }).catch(e=>{ | ||
| 81 | loading.value = false | ||
| 82 | }) | ||
| 83 | } | ||
| 84 | function goDetail(item) { | ||
| 85 | router.push({ | ||
| 86 | name:'photographyDetail', | ||
| 87 | params:{ | ||
| 88 | id:item.id, | ||
| 89 | } | ||
| 90 | }) | ||
| 91 | } | ||
| 13 | </script> | 92 | </script> |
| 14 | 93 | ||
| 15 | <style scoped> | 94 | <style scoped lang="scss"> |
| 95 | |||
| 96 | .banner{height: 140px;background-size: cover;text-align: center; | ||
| 97 | background: url("@/assets/booking/pz_bg.png") center;display: flex;align-items: center; | ||
| 98 | justify-content: center; | ||
| 99 | img{display: block;margin:-30px auto 0;width: auto;} | ||
| 100 | } | ||
| 101 | .searchBar{position: relative;top: -30px; | ||
| 102 | background: #FFFFFF;display: flex;padding: 20px; | ||
| 103 | border-radius: 10px;} | ||
| 104 | .no-border{border: none;background: #F5F7F9; | ||
| 105 | :deep(.el-input__wrapper){border: none;box-shadow: none;background: #F5F7F9;} | ||
| 106 | } | ||
| 107 | |||
| 108 | .hz-img{ | ||
| 109 | height: 218px; | ||
| 110 | width: 100%; | ||
| 111 | border-radius: 2px; | ||
| 112 | border: 0; | ||
| 113 | margin-bottom: 20px; | ||
| 114 | object-fit: cover; | ||
| 115 | } | ||
| 116 | |||
| 117 | .yuyue{ | ||
| 118 | height: 30px; | ||
| 119 | padding-right: 10px; | ||
| 120 | background: #000000; | ||
| 121 | border-radius: 20px 0px 0px 2px; | ||
| 122 | padding-left: 15px; | ||
| 123 | opacity: 0.45; | ||
| 124 | color: #fff; | ||
| 125 | font-size: 14px; | ||
| 126 | line-height: 30px; | ||
| 127 | position: absolute; | ||
| 128 | top: 207px; | ||
| 129 | right:21px; | ||
| 130 | } | ||
| 131 | |||
| 132 | .hz-text{ | ||
| 133 | font-size: 20px; | ||
| 134 | font-weight: 500; | ||
| 135 | color: #000; | ||
| 136 | margin-bottom: 8px; | ||
| 137 | } | ||
| 138 | |||
| 139 | //.hz-tag{ | ||
| 140 | // border-radius: 13px; | ||
| 141 | // height: 25px; | ||
| 142 | // line-height: 25px; | ||
| 143 | // font-size: 12px; | ||
| 144 | // font-weight: 400; | ||
| 145 | // padding: 0 15px; | ||
| 146 | //} | ||
| 147 | //.tag1{ | ||
| 148 | // background: rgba(50, 177, 108, 0.2); | ||
| 149 | // color:rgba(50, 177, 108, 1); | ||
| 150 | //} | ||
| 151 | //.tag2{ | ||
| 152 | // background-color: rgba(243, 152, 0, 0.2); | ||
| 153 | // color: #F39800; | ||
| 154 | //} | ||
| 155 | //.tag3{ | ||
| 156 | // background-color: rgba(0, 160, 233, 0.2); | ||
| 157 | // color: #00A0E9; | ||
| 158 | //} | ||
| 159 | //.tag4{ | ||
| 160 | // background-color: rgba(247, 64, 166, 0.2); | ||
| 161 | // color: #F740A6; | ||
| 162 | //} | ||
| 163 | // | ||
| 164 | //.hz-row{ | ||
| 165 | // font-size: 14px; | ||
| 166 | // font-weight: 400; | ||
| 167 | // color: #929AA0; | ||
| 168 | // margin-bottom: 16px; | ||
| 169 | // .sign{ | ||
| 170 | // color: #493CEB; | ||
| 171 | // } | ||
| 172 | //} | ||
| 173 | |||
| 16 | 174 | ||
| 175 | .tagbox{margin: 10px 0; | ||
| 176 | a{color: #AFB5B9;font-size: 12px;} | ||
| 177 | span{border-radius: 13px;font-size: 12px;padding: 3px 10px;margin-right:10px;font-weight: 400;} | ||
| 178 | span:nth-child(4n){background: rgba(50, 177, 108, 0.2);color: rgba(50, 177, 108, 1);} | ||
| 179 | span:nth-child(4n+1){background:rgba(243, 152, 0, 0.2);color: rgba(243, 152, 0, 1);} | ||
| 180 | span:nth-child(4n+2){background: rgba(0, 160, 233, 0.2);color: rgba(0, 160, 233, 1);} | ||
| 181 | span:nth-child(4n+3){background: rgba(247, 64, 166, 0.2);color:rgba(247, 64, 166, 1);} | ||
| 182 | } | ||
| 17 | </style> | 183 | </style> | ... | ... |
src/viewsPc/booking/photographyDetail.vue
0 → 100644
| 1 | <template> | ||
| 2 | <div> | ||
| 3 | <div class="box"> | ||
| 4 | <el-card> | ||
| 5 | <el-row> | ||
| 6 | <div class="zh-title">{{ form.name }}</div> | ||
| 7 | <div class="tagbox esp"> | ||
| 8 | <span v-for="(t,index) in form.label?.split(',')" v-show="index<4">{{t}}</span> | ||
| 9 | </div> | ||
| 10 | </el-row> | ||
| 11 | <el-row class="hz-row"> | ||
| 12 | <el-icon size="16" style="position: relative;top: 2px" color="#929AA0"> | ||
| 13 | <OfficeBuilding/> | ||
| 14 | </el-icon> | ||
| 15 | {{ language==0?'成立':'Established for'}} <span class="sign">{{form.ageLimit}}</span>{{language==0?'年':'years'}} | | ||
| 16 | <el-icon size="16" style="position: relative;top: 2px" color="#929AA0"> | ||
| 17 | <UserFilled/> | ||
| 18 | </el-icon> | ||
| 19 | <span class="sign"> {{ form.dresserLimit }}</span>{{language==0?'名摄影师':'Photographers' }} | | ||
| 20 | <el-icon size="16" style="position: relative;top: 2px" color="#929AA0"> | ||
| 21 | <PhoneFilled/> | ||
| 22 | </el-icon> | ||
| 23 | <span style="padding-top: 2px"> | ||
| 24 | {{ form.contact }} | ||
| 25 | </span> | ||
| 26 | | | ||
| 27 | <el-icon size="16" style="position: relative;top: 2px" color="#929AA0"> | ||
| 28 | <LocationFilled/> | ||
| 29 | </el-icon> | ||
| 30 | {{form.remarks}} | ||
| 31 | </el-row> | ||
| 32 | </el-card> | ||
| 33 | <div class="mt30"> | ||
| 34 | <el-row :gutter="20"> | ||
| 35 | <el-col :span="10"> | ||
| 36 | <div class="imgbox hotelImg"> | ||
| 37 | <el-image :src="form?.photosList?.[0]" fit="cover" :preview-src-list="form?.photosList"/> | ||
| 38 | </div> | ||
| 39 | </el-col> | ||
| 40 | <el-col :span="14"> | ||
| 41 | <el-row class="h100" :gutter="20"> | ||
| 42 | <el-col :span="8" class="oddmb" v-for="(p,index) in form?.photosList?.slice(1,7)"> | ||
| 43 | <div class="imgbox hotelImg"><el-image :src="p" fit="cover"/></div> | ||
| 44 | </el-col> | ||
| 45 | </el-row> | ||
| 46 | </el-col> | ||
| 47 | </el-row> | ||
| 48 | </div> | ||
| 49 | <br> | ||
| 50 | |||
| 51 | <el-card :body-style="{'padding':'20px 20px'}"> | ||
| 52 | <PhotoGraphyCalendar/> | ||
| 53 | </el-card> | ||
| 54 | </div> | ||
| 55 | </div> | ||
| 56 | </template> | ||
| 57 | |||
| 58 | <script setup > | ||
| 59 | import {useRouter} from "vue-router"; | ||
| 60 | import {ref, reactive, onMounted} from "vue"; | ||
| 61 | import {useRoute} from "vue-router"; | ||
| 62 | import * as booking from "@/apiPc/booking" | ||
| 63 | import {useStorage} from "@vueuse/core/index"; | ||
| 64 | import useUserStore from "@/store/modules/user"; | ||
| 65 | import PhotoGraphyCalendar from "@/viewsPc/booking/component/photoGraphyCalendar.vue"; | ||
| 66 | import {fillImgUrl} from "/@/utils/ruoyi"; | ||
| 67 | const user = useUserStore().user | ||
| 68 | const language = useStorage('language', 0) | ||
| 69 | const router = useRouter() | ||
| 70 | const route = useRoute() | ||
| 71 | const form = ref({}) | ||
| 72 | const query = ref({ | ||
| 73 | activityId: route.params.cptId, | ||
| 74 | id:route.params.id | ||
| 75 | }) | ||
| 76 | const loading = ref(false) | ||
| 77 | const map = ref(null) | ||
| 78 | onMounted(() => { | ||
| 79 | getData() | ||
| 80 | }) | ||
| 81 | |||
| 82 | function getData() { | ||
| 83 | loading.value = true | ||
| 84 | booking.getComShootVoById(query.value).then(res => { | ||
| 85 | loading.value = false | ||
| 86 | form.value = res.data | ||
| 87 | form.value.photosList=[] | ||
| 88 | form.value.photos.split(',').forEach(v=>{ | ||
| 89 | form.value.photosList.push(fillImgUrl(v)) | ||
| 90 | }) | ||
| 91 | }).catch(err => { | ||
| 92 | console.log(err) | ||
| 93 | }) | ||
| 94 | |||
| 95 | } | ||
| 96 | |||
| 97 | </script> | ||
| 98 | |||
| 99 | <style scoped lang="scss"> | ||
| 100 | .room { | ||
| 101 | background: #FAFBFD; | ||
| 102 | margin: 20px 0 0; | ||
| 103 | padding: 20px; | ||
| 104 | border: 1px solid #E5E5E5; | ||
| 105 | |||
| 106 | .name { | ||
| 107 | font-size: 20px; | ||
| 108 | margin: 0 0 10px; | ||
| 109 | } | ||
| 110 | |||
| 111 | .roomImg { | ||
| 112 | aspect-ratio: 16/9; | ||
| 113 | border-radius: 10px; | ||
| 114 | overflow: hidden; | ||
| 115 | |||
| 116 | img { | ||
| 117 | width: 100%; | ||
| 118 | object-fit: cover; | ||
| 119 | object-position: center; | ||
| 120 | height: 100%; | ||
| 121 | } | ||
| 122 | } | ||
| 123 | |||
| 124 | .price { | ||
| 125 | color: #FF8124; | ||
| 126 | font-size: 24px; | ||
| 127 | |||
| 128 | span { | ||
| 129 | font-size: 36px; | ||
| 130 | font-family: "DIN Alternate" | ||
| 131 | } | ||
| 132 | } | ||
| 133 | |||
| 134 | .bg-lineg { | ||
| 135 | margin: auto; | ||
| 136 | border-radius: 10px; | ||
| 137 | text-align: center; | ||
| 138 | padding: 7px 2px 2px; | ||
| 139 | font-size: 24px; | ||
| 140 | width: 66px; | ||
| 141 | cursor: pointer; | ||
| 142 | |||
| 143 | div { | ||
| 144 | background: #fff; | ||
| 145 | font-size: 13px; | ||
| 146 | border-radius: 20px; | ||
| 147 | padding: 0 10px; | ||
| 148 | color: #453DEA; | ||
| 149 | font-weight: 500; | ||
| 150 | } | ||
| 151 | } | ||
| 152 | } | ||
| 153 | |||
| 154 | .zh-title { | ||
| 155 | font-size: 24px; | ||
| 156 | font-weight: 500; | ||
| 157 | margin-right: 25px; | ||
| 158 | } | ||
| 159 | |||
| 160 | |||
| 161 | .hotel { | ||
| 162 | h3 { | ||
| 163 | margin: 0 0 20px; | ||
| 164 | } | ||
| 165 | |||
| 166 | img.w100 { | ||
| 167 | object-fit: cover; | ||
| 168 | aspect-ratio: 16/9 | ||
| 169 | } | ||
| 170 | |||
| 171 | .addr { | ||
| 172 | font-size: 16px; | ||
| 173 | color: #929AA0; | ||
| 174 | font-weight: 400; | ||
| 175 | } | ||
| 176 | |||
| 177 | .price { | ||
| 178 | margin: 0 0 25px; | ||
| 179 | color: #FF8124; | ||
| 180 | font-size: 18px; | ||
| 181 | |||
| 182 | span { | ||
| 183 | font-size: 24px; | ||
| 184 | margin: 0 8px; | ||
| 185 | font-family: 'DINAlternate-Bold'; | ||
| 186 | font-weight: 600; | ||
| 187 | } | ||
| 188 | |||
| 189 | i { | ||
| 190 | font-style: normal; | ||
| 191 | color: #929AA0; | ||
| 192 | } | ||
| 193 | } | ||
| 194 | } | ||
| 195 | |||
| 196 | |||
| 197 | .tagbox { | ||
| 198 | margin: 15px 0; | ||
| 199 | |||
| 200 | a { | ||
| 201 | color: #AFB5B9; | ||
| 202 | font-size: 12px; | ||
| 203 | } | ||
| 204 | |||
| 205 | span { | ||
| 206 | border-radius: 13px; | ||
| 207 | font-size: 12px; | ||
| 208 | padding: 4px 10px; | ||
| 209 | margin-right: 10px; | ||
| 210 | font-weight: 400; | ||
| 211 | } | ||
| 212 | |||
| 213 | span:nth-child(4n) { | ||
| 214 | background: rgba(50, 177, 108, 0.2); | ||
| 215 | color: rgba(50, 177, 108, 1); | ||
| 216 | } | ||
| 217 | |||
| 218 | span:nth-child(4n+1) { | ||
| 219 | background: rgba(243, 152, 0, 0.2); | ||
| 220 | color: rgba(243, 152, 0, 1); | ||
| 221 | } | ||
| 222 | |||
| 223 | span:nth-child(4n+2) { | ||
| 224 | background: rgba(0, 160, 233, 0.2); | ||
| 225 | color: rgba(0, 160, 233, 1); | ||
| 226 | } | ||
| 227 | |||
| 228 | span:nth-child(4n+3) { | ||
| 229 | background: rgba(247, 64, 166, 0.2); | ||
| 230 | color: rgba(247, 64, 166, 1); | ||
| 231 | } | ||
| 232 | } | ||
| 233 | |||
| 234 | .mapBox { | ||
| 235 | position: relative; | ||
| 236 | overflow: hidden; | ||
| 237 | height: 200px; | ||
| 238 | |||
| 239 | #map { | ||
| 240 | position: relative; | ||
| 241 | left: -70px; | ||
| 242 | width: calc(100% + 160px); | ||
| 243 | } | ||
| 244 | } | ||
| 245 | |||
| 246 | .sign { | ||
| 247 | padding-top: 2px; | ||
| 248 | } | ||
| 249 | |||
| 250 | .img-header { | ||
| 251 | height: 270px; | ||
| 252 | } | ||
| 253 | |||
| 254 | .card { | ||
| 255 | padding: 10px; | ||
| 256 | width: 100%; | ||
| 257 | height: 100%; | ||
| 258 | position: relative; | ||
| 259 | img{object-fit: cover} | ||
| 260 | } | ||
| 261 | |||
| 262 | .img-hover{ | ||
| 263 | position: absolute; | ||
| 264 | top: 0; | ||
| 265 | left: 0; | ||
| 266 | background-color: rgb(0,0,0,.5); | ||
| 267 | color: #fff; | ||
| 268 | font-size: 18px; | ||
| 269 | font-weight: 400; | ||
| 270 | width: 100%; | ||
| 271 | height: 100%; | ||
| 272 | line-height: 115px; | ||
| 273 | text-align: center; | ||
| 274 | border-radius: 10px; | ||
| 275 | |||
| 276 | //display: none; | ||
| 277 | } | ||
| 278 | .hotelImg{border-radius: 10px;overflow: hidden;aspect-ratio: 16/9; | ||
| 279 | img{object-fit: cover;object-position: center;width: 100%;height: 100%; | ||
| 280 | } | ||
| 281 | } | ||
| 282 | .oddmb:nth-child(2){margin-bottom: 20px;} | ||
| 283 | </style> |
src/viewsPc/booking/photographyOrder.vue
0 → 100644
This diff is collapsed.
Click to expand it.
| ... | @@ -15,6 +15,8 @@ | ... | @@ -15,6 +15,8 @@ |
| 15 | <label class="blueTag" v-if="b.orderType == 0"> {{ language==0?'酒店':'HOTEL' }} </label> | 15 | <label class="blueTag" v-if="b.orderType == 0"> {{ language==0?'酒店':'HOTEL' }} </label> |
| 16 | <label class="purpleTag" v-if="b.orderType == 1"> {{ language==0?'车辆':'TRANSPORTATION' }} </label> | 16 | <label class="purpleTag" v-if="b.orderType == 1"> {{ language==0?'车辆':'TRANSPORTATION' }} </label> |
| 17 | <label class="orangeTag" v-if="b.orderType == 2"> {{ language==0?'餐饮':'DINING' }} </label> | 17 | <label class="orangeTag" v-if="b.orderType == 2"> {{ language==0?'餐饮':'DINING' }} </label> |
| 18 | <label class="orangeTag" v-if="b.orderType == 3"> {{ language==0?'化妆':'MakeUp' }} </label> | ||
| 19 | <label class="orangeTag" v-if="b.orderType == 4"> {{ language==0?'拍摄':'Shooting ' }} </label> | ||
| 18 | <span>{{ language==0?'订单编号:':'No.' }} {{ b.id }}</span> | 20 | <span>{{ language==0?'订单编号:':'No.' }} {{ b.id }}</span> |
| 19 | </div> | 21 | </div> |
| 20 | 22 | ||
| ... | @@ -35,7 +37,6 @@ | ... | @@ -35,7 +37,6 @@ |
| 35 | <h3 class="name">{{b.name}}</h3> | 37 | <h3 class="name">{{b.name}}</h3> |
| 36 | <p v-if="language==0">{{b.messageObj?.roomStayDate}}</p> | 38 | <p v-if="language==0">{{b.messageObj?.roomStayDate}}</p> |
| 37 | <p v-else>{{b.messageObj?.roomStayDate.replace('共',' total ').replace('晚',' days')}}</p> | 39 | <p v-else>{{b.messageObj?.roomStayDate.replace('共',' total ').replace('晚',' days')}}</p> |
| 38 | |||
| 39 | <p>{{b.messageObj?.roomInfo}}</p> | 40 | <p>{{b.messageObj?.roomInfo}}</p> |
| 40 | 41 | ||
| 41 | </div> | 42 | </div> |
| ... | @@ -57,6 +58,12 @@ | ... | @@ -57,6 +58,12 @@ |
| 57 | <p>{{language==0?'配送日期':'Delivery Date'}}:{{b.extJsonObj.dcEnd }} ~ {{b.extJsonObj.dcEnd}}</p> | 58 | <p>{{language==0?'配送日期':'Delivery Date'}}:{{b.extJsonObj.dcEnd }} ~ {{b.extJsonObj.dcEnd}}</p> |
| 58 | 59 | ||
| 59 | </div> | 60 | </div> |
| 61 | <div v-if="b.orderType==3 ||b.orderType == 4"> | ||
| 62 | <h3 class="name">{{b.name}}</h3> | ||
| 63 | <p > | ||
| 64 | {{dayjs(b.deliveryTime).format('YYYY-MM-DD')+' '+b.extJsonObj.timePeriod?.split('-')[0]+'-'+dayjs(b.deliveryTime).format('YYYY-MM-DD')+' '+b.extJsonObj.timePeriod?.split('-')[1] }} | ||
| 65 | </p> | ||
| 66 | </div> | ||
| 60 | </el-col> | 67 | </el-col> |
| 61 | <el-col :lg="6"> | 68 | <el-col :lg="6"> |
| 62 | <div v-if="b.orderType == 0"> | 69 | <div v-if="b.orderType == 0"> |
| ... | @@ -67,6 +74,9 @@ | ... | @@ -67,6 +74,9 @@ |
| 67 | </div> | 74 | </div> |
| 68 | <div v-if="b.orderType == 2"> | 75 | <div v-if="b.orderType == 2"> |
| 69 | </div> | 76 | </div> |
| 77 | <div v-if="b.orderType == 3||b.orderType == 4"> | ||
| 78 | <p>{{ b.extJsonObj.packageName }}</p> | ||
| 79 | </div> | ||
| 70 | </el-col> | 80 | </el-col> |
| 71 | <el-col :lg="4" class="text-center"> | 81 | <el-col :lg="4" class="text-center"> |
| 72 | <span class="text-warning"> {{ language==0?'¥':'€' }} | 82 | <span class="text-warning"> {{ language==0?'¥':'€' }} |
| ... | @@ -76,8 +86,7 @@ | ... | @@ -76,8 +86,7 @@ |
| 76 | 86 | ||
| 77 | <el-col :lg="4" > | 87 | <el-col :lg="4" > |
| 78 | <div class="text-right mb20 text-danger"> | 88 | <div class="text-right mb20 text-danger"> |
| 79 | <el-countdown value-style="color:#E60012;font-size:16px;" v-if="b.status == '0'&&(b.surplus!='0,0'&&b.surplus!='0')" format="mm:ss" | 89 | <el-countdown value-style="color:#E60012;font-size:16px;" v-if="b.status == '0'&&(b.surplus!='0,0'&&b.surplus!='0')" format="mm:ss" :value="b.countdown" @finish="finish(b)"/> |
| 80 | :value="b.countdown" @finish="finish(b)"/> | ||
| 81 | </div> | 90 | </div> |
| 82 | 91 | ||
| 83 | <div class="text-right"> | 92 | <div class="text-right"> |
| ... | @@ -102,6 +111,7 @@ import {onMounted} from "@vue/runtime-core"; | ... | @@ -102,6 +111,7 @@ import {onMounted} from "@vue/runtime-core"; |
| 102 | import {useStorage} from "@vueuse/core/index"; | 111 | import {useStorage} from "@vueuse/core/index"; |
| 103 | import {newbilllist} from "@/apiPc/common"; | 112 | import {newbilllist} from "@/apiPc/common"; |
| 104 | import useUserStore from "@/store/modules/user"; | 113 | import useUserStore from "@/store/modules/user"; |
| 114 | import dayjs from 'dayjs' | ||
| 105 | const router = useRouter() | 115 | const router = useRouter() |
| 106 | const language= useStorage('language',0) | 116 | const language= useStorage('language',0) |
| 107 | const list = ref([]) | 117 | const list = ref([]) |
| ... | @@ -118,13 +128,14 @@ function getList() { | ... | @@ -118,13 +128,14 @@ function getList() { |
| 118 | newbilllist({createById:user.userId}).then(res=>{ | 128 | newbilllist({createById:user.userId}).then(res=>{ |
| 119 | list.value = res.rows | 129 | list.value = res.rows |
| 120 | for (var b of list.value) { | 130 | for (var b of list.value) { |
| 121 | b.messageObj = JSON.parse(b.message) | 131 | b.messageObj = JSON.parse(b.message) || {} |
| 122 | b.extJsonObj = JSON.parse(b.extJson) || {} | 132 | b.extJsonObj = JSON.parse(b.extJson) || {} |
| 123 | if(b.surplus&&b.status == '0'&&(b.surplus!='0,0'&&b.surplus!='0')){ | 133 | if(b.surplus&&b.status == '0'&&(b.surplus!='0,0'&&b.surplus!='0')){ |
| 124 | b.countdown = Date.now() + Number((b.surplus.split(',')[0]*60 + b.surplus.split(',')[1])*10) | 134 | b.countdown = Date.now() + Number((b.surplus.split(',')[0]*60 + b.surplus.split(',')[1])*10) |
| 125 | console.log(b.countdown) | 135 | console.log(b.countdown) |
| 126 | } | 136 | } |
| 127 | } | 137 | } |
| 138 | console.log(list.value) | ||
| 128 | }) | 139 | }) |
| 129 | } | 140 | } |
| 130 | function goDetail(b) { | 141 | function goDetail(b) { | ... | ... |
| ... | @@ -101,7 +101,7 @@ function popRemark(type){ | ... | @@ -101,7 +101,7 @@ function popRemark(type){ |
| 101 | building() | 101 | building() |
| 102 | return | 102 | return |
| 103 | } | 103 | } |
| 104 | if((form.value.isJdView == 0&&type=='1') || (form.value.isCarView == 0&&type=='2') || (form.value.isFoodView == 0&&type=='3') || type=='0' || type=='4' || type=='5'){ | 104 | if((form.value.isJdView == 0&&type=='1') || (form.value.isCarView == 0&&type=='2') || (form.value.isFoodView == 0&&type=='3') || type=='0' || (form.value.isMealView == 0&&type=='4') || (type=='5'&&form.value.isPhotoView == 0)){ |
| 105 | building() | 105 | building() |
| 106 | return | 106 | return |
| 107 | } | 107 | } |
| ... | @@ -137,8 +137,6 @@ function goBooking(n) { | ... | @@ -137,8 +137,6 @@ function goBooking(n) { |
| 137 | break; | 137 | break; |
| 138 | case 5: | 138 | case 5: |
| 139 | //拍照 | 139 | //拍照 |
| 140 | building() | ||
| 141 | |||
| 142 | router.push({path: `/booking/photography/${props.matchId}`}) | 140 | router.push({path: `/booking/photography/${props.matchId}`}) |
| 143 | break; | 141 | break; |
| 144 | } | 142 | } | ... | ... |
| ... | @@ -38,7 +38,10 @@ | ... | @@ -38,7 +38,10 @@ |
| 38 | <div class="text-center mt20"> | 38 | <div class="text-center mt20"> |
| 39 | <el-button type="primary" plain @click="switchPerson">{{language==0?'切换':'Switch'}}</el-button> | 39 | <el-button type="primary" plain @click="switchPerson">{{language==0?'切换':'Switch'}}</el-button> |
| 40 | </div> | 40 | </div> |
| 41 | 41 | <div class="tip"> | |
| 42 | <span v-if="language==0">*如果您参加个人项目,或给其它组合/选手进行报名,请点击切换按钮重新选择人员</span> | ||
| 43 | <span v-else>*If you are participating in an individual event, or if you are signing up for another group/competitor, please click the Switch button to re-select the team.</span> | ||
| 44 | </div> | ||
| 42 | </div> | 45 | </div> |
| 43 | </div> | 46 | </div> |
| 44 | </el-col> | 47 | </el-col> | ... | ... |
| ... | @@ -77,7 +77,6 @@ | ... | @@ -77,7 +77,6 @@ |
| 77 | </el-col> | 77 | </el-col> |
| 78 | </el-row> | 78 | </el-row> |
| 79 | </div> | 79 | </div> |
| 80 | |||
| 81 | <order-remark ref="orderRemarkRef" @submit="goBooking"/> | 80 | <order-remark ref="orderRemarkRef" @submit="goBooking"/> |
| 82 | </template> | 81 | </template> |
| 83 | 82 | ||
| ... | @@ -119,16 +118,19 @@ function popRemark(type){ | ... | @@ -119,16 +118,19 @@ function popRemark(type){ |
| 119 | building() | 118 | building() |
| 120 | return | 119 | return |
| 121 | } | 120 | } |
| 122 | if((form.value.isJdView == 0&&type=='1') || (form.value.isCarView == 0&&type=='2') || (form.value.isFoodView == 0&&type=='3') || type=='0' || type=='4' || type=='5'){ | 121 | |
| 122 | if((form.value.isJdView == 0&&type=='1') || (form.value.isCarView == 0&&type=='2') || (form.value.isFoodView == 0&&type=='3') || type=='0' || (form.value.isMealView == 0&&type=='4') || (type=='5'&&form.value.isPhotoView == 0)){ | ||
| 123 | building() | 123 | building() |
| 124 | return | 124 | return |
| 125 | } | 125 | } |
| 126 | |||
| 126 | const params = { | 127 | const params = { |
| 127 | matchId: props.matchId, | 128 | matchId: props.matchId, |
| 128 | title: language.value == 0 ?'预订说明':'Booking Instructions', | 129 | title: language.value == 0 ?'预订说明':'Booking Instructions', |
| 129 | type: type | 130 | type: type |
| 130 | } | 131 | } |
| 131 | proxy.$refs['orderRemarkRef'].open(params) | 132 | proxy.$refs['orderRemarkRef'].open(params) |
| 133 | |||
| 132 | } | 134 | } |
| 133 | function goBooking(n) { | 135 | function goBooking(n) { |
| 134 | switch (n) { | 136 | switch (n) { |
| ... | @@ -151,12 +153,10 @@ function goBooking(n) { | ... | @@ -151,12 +153,10 @@ function goBooking(n) { |
| 151 | break; | 153 | break; |
| 152 | case 4: | 154 | case 4: |
| 153 | //化妆 | 155 | //化妆 |
| 154 | building() | ||
| 155 | router.push({path: `/booking/makeup/${props.matchId}`}) | 156 | router.push({path: `/booking/makeup/${props.matchId}`}) |
| 156 | break; | 157 | break; |
| 157 | case 5: | 158 | case 5: |
| 158 | //拍照 | 159 | //拍照 |
| 159 | building() | ||
| 160 | router.push({path: `/booking/photography/${props.matchId}`}) | 160 | router.push({path: `/booking/photography/${props.matchId}`}) |
| 161 | break; | 161 | break; |
| 162 | } | 162 | } | ... | ... |
| ... | @@ -23,7 +23,7 @@ | ... | @@ -23,7 +23,7 @@ |
| 23 | </el-form-item> | 23 | </el-form-item> |
| 24 | </el-col> | 24 | </el-col> |
| 25 | <el-col :lg="10"> | 25 | <el-col :lg="10"> |
| 26 | <el-form-item :label="language==0?'代表国家/地区':'Representing'"> | 26 | <el-form-item :label="language==0?'代表国家/地区':'Representing'" required> |
| 27 | <el-select filterable v-model="form.countryId" @change="changeCountryId" | 27 | <el-select filterable v-model="form.countryId" @change="changeCountryId" |
| 28 | :disabled="form.type!='4'"> | 28 | :disabled="form.type!='4'"> |
| 29 | <!-- <el-option v-for="item in countryList" :key="item.id" :label="language==0?item.name:item.enName" :value="item.id"/>--> | 29 | <!-- <el-option v-for="item in countryList" :key="item.id" :label="language==0?item.name:item.enName" :value="item.id"/>--> | ... | ... |
| ... | @@ -26,7 +26,7 @@ | ... | @@ -26,7 +26,7 @@ |
| 26 | <el-form-item :label="language==0?'参赛队名称':'Name of participating team'" required prop="abreviations"> | 26 | <el-form-item :label="language==0?'参赛队名称':'Name of participating team'" required prop="abreviations"> |
| 27 | <el-input type="text" v-model="form.abreviations" :placeholder="language==0?'请输入内容':''"/> | 27 | <el-input type="text" v-model="form.abreviations" :placeholder="language==0?'请输入内容':''"/> |
| 28 | </el-form-item> | 28 | </el-form-item> |
| 29 | <el-form-item :label="language==0?'团体名称':'Team Name'" prop="name"> | 29 | <el-form-item :label="language==0?'团体名称':'Team Name'" prop="name" required> |
| 30 | <el-input v-model="form.name" :placeholder="language==0?'请输入团体名称':''" /> | 30 | <el-input v-model="form.name" :placeholder="language==0?'请输入团体名称':''" /> |
| 31 | </el-form-item> | 31 | </el-form-item> |
| 32 | <el-form-item :label="language==0?'所属国家/地区':'Country'" required> | 32 | <el-form-item :label="language==0?'所属国家/地区':'Country'" required> | ... | ... |
| ... | @@ -82,7 +82,7 @@ export default defineConfig(({ mode, command }) => { | ... | @@ -82,7 +82,7 @@ export default defineConfig(({ mode, command }) => { |
| 82 | rewrite: (p) => p.replace(/^\/dev-api\/ztx-webSite/, '') | 82 | rewrite: (p) => p.replace(/^\/dev-api\/ztx-webSite/, '') |
| 83 | }, | 83 | }, |
| 84 | '/dev-api': { | 84 | '/dev-api': { |
| 85 | target: 'http://192.168.1.131:8081/', | 85 | target: 'http://192.168.1.118:8081/', |
| 86 | // target: 'https://dance.itechtop.cn/stage-api', | 86 | // target: 'https://dance.itechtop.cn/stage-api', |
| 87 | // target: 'https://wdsfwuxicenter.com/stage-api', | 87 | // target: 'https://wdsfwuxicenter.com/stage-api', |
| 88 | changeOrigin: true, | 88 | changeOrigin: true, | ... | ... |
-
Please register or sign in to post a comment