no message
Showing
6 changed files
with
522 additions
and
29 deletions
| ... | @@ -790,6 +790,14 @@ export function getVisaInfo(query) { | ... | @@ -790,6 +790,14 @@ export function getVisaInfo(query) { |
| 790 | }) | 790 | }) |
| 791 | } | 791 | } |
| 792 | 792 | ||
| 793 | export function listVisaInfo(query) { | ||
| 794 | return request({ | ||
| 795 | url: '/league/visaInfo/list', | ||
| 796 | method: 'get', | ||
| 797 | params: query | ||
| 798 | }) | ||
| 799 | } | ||
| 800 | |||
| 793 | // 酒店预约查询 | 801 | // 酒店预约查询 |
| 794 | export function hotelList(params) { | 802 | export function hotelList(params) { |
| 795 | return request({ | 803 | return request({ | ... | ... |
| ... | @@ -567,6 +567,12 @@ export const constantRoutes = [ | ... | @@ -567,6 +567,12 @@ export const constantRoutes = [ |
| 567 | meta: {title: 'My reservation'} | 567 | meta: {title: 'My reservation'} |
| 568 | }, | 568 | }, |
| 569 | { | 569 | { |
| 570 | path: 'myVisa', | ||
| 571 | component: () => import('@/viewsPc/center/myVisa'), | ||
| 572 | name: 'myVisa', | ||
| 573 | meta: {title: 'My visa'} | ||
| 574 | }, | ||
| 575 | { | ||
| 570 | path: 'mySms', | 576 | path: 'mySms', |
| 571 | component: () => import('@/viewsPc/center/mySms'), | 577 | component: () => import('@/viewsPc/center/mySms'), |
| 572 | name: 'mySms', | 578 | name: 'mySms', | ... | ... |
| ... | @@ -47,7 +47,8 @@ import {onMounted} from '@vue/runtime-core' | ... | @@ -47,7 +47,8 @@ import {onMounted} from '@vue/runtime-core' |
| 47 | import useUserStore from '@/store/modules/user' | 47 | import useUserStore from '@/store/modules/user' |
| 48 | import _ from 'lodash' | 48 | import _ from 'lodash' |
| 49 | import {useStorage} from "@vueuse/core/index"; | 49 | import {useStorage} from "@vueuse/core/index"; |
| 50 | const language= useStorage('language',0) | 50 | |
| 51 | const language = useStorage('language', 0) | ||
| 51 | 52 | ||
| 52 | const route = useRoute() | 53 | const route = useRoute() |
| 53 | const router = useRouter() | 54 | const router = useRouter() |
| ... | @@ -63,14 +64,14 @@ const menus3 = ref([ | ... | @@ -63,14 +64,14 @@ const menus3 = ref([ |
| 63 | // isActive: false | 64 | // isActive: false |
| 64 | // }, | 65 | // }, |
| 65 | { | 66 | { |
| 66 | name: language.value==0?'修改密码':'Change Password', | 67 | name: language.value == 0 ? '修改密码' : 'Change Password', |
| 67 | routeName: 'myPassword', | 68 | routeName: 'myPassword', |
| 68 | picUrl1: '/img/nav_27.png', | 69 | picUrl1: '/img/nav_27.png', |
| 69 | picUrl2: '/img/nav_27_dwn.png', | 70 | picUrl2: '/img/nav_27_dwn.png', |
| 70 | isActive: false | 71 | isActive: false |
| 71 | }, | 72 | }, |
| 72 | { | 73 | { |
| 73 | name: language.value==0?'我的预订':'My Reservation', | 74 | name: language.value == 0 ? '我的预订' : 'My Reservation', |
| 74 | routeName: 'myReservation', | 75 | routeName: 'myReservation', |
| 75 | picUrl1: '/img/nav_29.png', | 76 | picUrl1: '/img/nav_29.png', |
| 76 | picUrl2: '/img/nav_29_dwn.png', | 77 | picUrl2: '/img/nav_29_dwn.png', |
| ... | @@ -84,7 +85,7 @@ const menus3 = ref([ | ... | @@ -84,7 +85,7 @@ const menus3 = ref([ |
| 84 | // isActive: false | 85 | // isActive: false |
| 85 | // }, | 86 | // }, |
| 86 | { | 87 | { |
| 87 | name: language.value==0?'发票申请':'Electronic invoice', | 88 | name: language.value == 0 ? '发票申请' : 'Electronic invoice', |
| 88 | routeName: 'myKP', | 89 | routeName: 'myKP', |
| 89 | picUrl1: '/img/fp.svg', | 90 | picUrl1: '/img/fp.svg', |
| 90 | picUrl2: '/img/fp_dwn.svg', | 91 | picUrl2: '/img/fp_dwn.svg', |
| ... | @@ -100,19 +101,26 @@ const menus3En = ref([ | ... | @@ -100,19 +101,26 @@ const menus3En = ref([ |
| 100 | // isActive: false | 101 | // isActive: false |
| 101 | // }, | 102 | // }, |
| 102 | { | 103 | { |
| 103 | name: language.value==0?'修改密码':'Change Password', | 104 | name: language.value == 0 ? '修改密码' : 'Change Password', |
| 104 | routeName: 'myPassword', | 105 | routeName: 'myPassword', |
| 105 | picUrl1: '/img/nav_27.png', | 106 | picUrl1: '/img/nav_27.png', |
| 106 | picUrl2: '/img/nav_27_dwn.png', | 107 | picUrl2: '/img/nav_27_dwn.png', |
| 107 | isActive: false | 108 | isActive: false |
| 108 | }, | 109 | }, |
| 109 | { | 110 | { |
| 110 | name: language.value==0?'我的预订':'My Reservation', | 111 | name: language.value == 0 ? '我的预订' : 'My Reservation', |
| 111 | routeName: 'myReservation', | 112 | routeName: 'myReservation', |
| 112 | picUrl1: '/img/nav_29.png', | 113 | picUrl1: '/img/nav_29.png', |
| 113 | picUrl2: '/img/nav_29_dwn.png', | 114 | picUrl2: '/img/nav_29_dwn.png', |
| 114 | isActive: false | 115 | isActive: false |
| 115 | }, | 116 | }, |
| 117 | { | ||
| 118 | name: language.value == 0 ? '签证审核记录' : 'Visa Review record', | ||
| 119 | routeName: 'myVisa', | ||
| 120 | picUrl1: '/img/fp.svg', | ||
| 121 | picUrl2: '/img/fp_dwn.svg', | ||
| 122 | isActive: false | ||
| 123 | }, | ||
| 116 | // { | 124 | // { |
| 117 | // name: language.value==0?'票务预订':'Ticket Reservation', | 125 | // name: language.value==0?'票务预订':'Ticket Reservation', |
| 118 | // routeName: 'seat_order', | 126 | // routeName: 'seat_order', |
| ... | @@ -125,18 +133,19 @@ const menus3En = ref([ | ... | @@ -125,18 +133,19 @@ const menus3En = ref([ |
| 125 | let currMenu | 133 | let currMenu |
| 126 | onMounted(() => { | 134 | onMounted(() => { |
| 127 | console.log(route.query) | 135 | console.log(route.query) |
| 128 | if(!user.utype){ | 136 | if (!user.utype) { |
| 129 | router.push({name: 'home'}) | 137 | router.push({name: 'home'}) |
| 130 | return | 138 | return |
| 131 | } | 139 | } |
| 132 | currMenu = _.find(menus3.value, (m) => { | 140 | |
| 141 | currMenu = _.find((language.value == 0? menus3.value: menus3En.value), (m) => { | ||
| 133 | return m.routeName === route.name | 142 | return m.routeName === route.name |
| 134 | }) | 143 | }) |
| 135 | currMenu.isActive = true | 144 | currMenu.isActive = true |
| 136 | 145 | ||
| 137 | }) | 146 | }) |
| 138 | 147 | ||
| 139 | const toInfo = (item,list) => { | 148 | const toInfo = (item, list) => { |
| 140 | _.each(list, (m) => { | 149 | _.each(list, (m) => { |
| 141 | m.isActive = false | 150 | m.isActive = false |
| 142 | }) | 151 | }) |
| ... | @@ -159,11 +168,23 @@ const toInfo = (item,list) => { | ... | @@ -159,11 +168,23 @@ const toInfo = (item,list) => { |
| 159 | li { | 168 | li { |
| 160 | margin-bottom: 15px; | 169 | margin-bottom: 15px; |
| 161 | } | 170 | } |
| 162 | &.en-menu{text-align: left; | 171 | |
| 163 | li{padding: 6px 0 6px 14px; | 172 | &.en-menu { |
| 164 | a{display: flex;align-items: center;} | 173 | text-align: left; |
| 174 | |||
| 175 | li { | ||
| 176 | padding: 6px 0 6px 14px; | ||
| 177 | |||
| 178 | a { | ||
| 179 | display: flex; | ||
| 180 | align-items: center; | ||
| 181 | } | ||
| 182 | } | ||
| 183 | |||
| 184 | img { | ||
| 185 | padding: 0; | ||
| 186 | width: 26px; | ||
| 165 | } | 187 | } |
| 166 | img{padding: 0;width: 26px;} | ||
| 167 | } | 188 | } |
| 168 | } | 189 | } |
| 169 | 190 | ||
| ... | @@ -179,24 +200,61 @@ li img { | ... | @@ -179,24 +200,61 @@ li img { |
| 179 | background: #000; | 200 | background: #000; |
| 180 | border-radius: 20px; | 201 | border-radius: 20px; |
| 181 | } | 202 | } |
| 203 | |||
| 182 | @media (max-width: 500px) { | 204 | @media (max-width: 500px) { |
| 183 | .pd20{padding: 8px;} | 205 | .pd20 { |
| 184 | .el-card{box-shadow: none!important; | 206 | padding: 8px; |
| 185 | :deep(.el-card__body){padding: 0!important;} | 207 | } |
| 186 | } | 208 | .el-card { |
| 187 | .el-col{padding: 0!important;} | 209 | box-shadow: none !important; |
| 188 | .center-menu{height: 100vh;padding: 20px 0;position: fixed;left: 0;z-index: 1; | 210 | |
| 189 | background: #F5F7F9;top: 80px;width: 100px;border-right: 1px solid #eee; | 211 | :deep(.el-card__body) { |
| 190 | li{font-size: 13px;padding:8px 10px;border-radius: 0; | 212 | padding: 0 !important; |
| 191 | img{display: none} | 213 | } |
| 192 | &.active{background: #fff; | 214 | } |
| 215 | .el-col { | ||
| 216 | padding: 0 !important; | ||
| 217 | } | ||
| 218 | .center-menu { | ||
| 219 | height: 100vh; | ||
| 220 | padding: 20px 0; | ||
| 221 | position: fixed; | ||
| 222 | left: 0; | ||
| 223 | z-index: 1; | ||
| 224 | background: #F5F7F9; | ||
| 225 | top: 80px; | ||
| 226 | width: 100px; | ||
| 227 | border-right: 1px solid #eee; | ||
| 228 | |||
| 229 | li { | ||
| 230 | font-size: 13px; | ||
| 231 | padding: 8px 10px; | ||
| 232 | border-radius: 0; | ||
| 233 | |||
| 234 | img { | ||
| 235 | display: none | ||
| 236 | } | ||
| 237 | |||
| 238 | &.active { | ||
| 239 | background: #fff; | ||
| 193 | border-left: 2px solid var(--el-color-primary); | 240 | border-left: 2px solid var(--el-color-primary); |
| 194 | color: var(--el-color-primary);} | 241 | color: var(--el-color-primary); |
| 195 | } | 242 | } |
| 196 | } | 243 | } |
| 197 | .rightPart{width: calc(100vw - 100px);left: 100px;position: fixed; z-index: 1; | ||
| 198 | height: calc(100vh - 80px);overflow: auto;top: 80px;background: #fff; | ||
| 199 | } | 244 | } |
| 245 | .rightPart { | ||
| 246 | width: calc(100vw - 100px); | ||
| 247 | left: 100px; | ||
| 248 | position: fixed; | ||
| 249 | z-index: 1; | ||
| 250 | height: calc(100vh - 80px); | ||
| 251 | overflow: auto; | ||
| 252 | top: 80px; | ||
| 253 | background: #fff; | ||
| 254 | } | ||
| 255 | } | ||
| 256 | |||
| 257 | .app-container { | ||
| 258 | min-height: 80vh; | ||
| 200 | } | 259 | } |
| 201 | .app-container{min-height: 80vh;} | ||
| 202 | </style> | 260 | </style> | ... | ... |
src/viewsPc/center/myVisa.vue
0 → 100644
| 1 | <template> | ||
| 2 | <div> | ||
| 3 | <el-card :body-style="{'padding':'0'}"> | ||
| 4 | <div class="indexTitle"> | ||
| 5 | <h3 class="leftboderTT">{{ language == 0 ? '我的签证' : 'My visa' }} | ||
| 6 | </h3> | ||
| 7 | |||
| 8 | <!-- <el-button class="fr" type="primary" plain @click="toInvoice">{{ language==0?'发票开具':'Invoice' }}</el-button>--> | ||
| 9 | <!-- <el-button class="fr" type="primary" plain @click="toInvoice">{{ language==0?'我的发票':'My Invoice' }}</el-button>--> | ||
| 10 | </div> | ||
| 11 | <el-empty v-if="list?.length == 0" :image="`/img/order_no.png`" :image-size="228"/> | ||
| 12 | |||
| 13 | <div class="pd20"> | ||
| 14 | <div v-for="b in list" class="item"> | ||
| 15 | <div class="title"> | ||
| 16 | <label class="orangeTag"> {{ b.applicatTypeName }} </label> | ||
| 17 | <span>{{ language == 0 ? '订单编号:' : 'No.' }} {{ b.id }}</span> | ||
| 18 | </div> | ||
| 19 | |||
| 20 | <div class="status-po"> | ||
| 21 | <span v-if="b.status == '0'" class="bg-gary">{{ 'Under Review' }}</span> | ||
| 22 | <span v-if="b.status == '1'" class="bg-blue">{{ 'Approved' }}</span> | ||
| 23 | <span v-if="b.status == '2'" class="bg-danger">{{ 'Rejected' }}</span> | ||
| 24 | </div> | ||
| 25 | |||
| 26 | <el-row align="middle" class="pd20 mt10" justify="space-between"> | ||
| 27 | <el-col :lg="9" :md="12" :sm="12" :xs="24"> | ||
| 28 | <div> | ||
| 29 | <h3 class="name">{{ b.fullName }}</h3> | ||
| 30 | <p>{{ b.email }}</p> | ||
| 31 | <!-- <p>{{ b.phone }}</p>--> | ||
| 32 | </div> | ||
| 33 | </el-col> | ||
| 34 | <el-col :lg="3" :md="6" :sm="6" :xs="6" class="text-center"> | ||
| 35 | <span class="text-warning"> {{ b.invitationTypeName }} </span> | ||
| 36 | </el-col> | ||
| 37 | <el-col :lg="6" :md="16" :sm="16" :xs="16"> | ||
| 38 | <div class="text-right"> | ||
| 39 | <el-button class="mb10" plain round size="small" type="primary" @click="goDetail(b)"> | ||
| 40 | {{ language == 0 ? '详情' : 'Detail' }} | ||
| 41 | </el-button> | ||
| 42 | </div> | ||
| 43 | </el-col> | ||
| 44 | </el-row> | ||
| 45 | </div> | ||
| 46 | </div> | ||
| 47 | </el-card> | ||
| 48 | <affix-invitation-view ref="affixInvitationRef"></affix-invitation-view> | ||
| 49 | </div> | ||
| 50 | </template> | ||
| 51 | |||
| 52 | <script setup> | ||
| 53 | import {onMounted, getCurrentInstance} from "@vue/runtime-core"; | ||
| 54 | import {useStorage} from "@vueuse/core/index"; | ||
| 55 | // import {newbilllist} from "@/apiPc/common"; | ||
| 56 | import useUserStore from "@/store/modules/user"; | ||
| 57 | // import dayjs from 'dayjs' | ||
| 58 | import {cancelOrder2, cancelOrder} from "/@/apiPc/booking"; | ||
| 59 | |||
| 60 | import {ElMessage} from "element-plus"; | ||
| 61 | import {getVisaInfo} from "/@/apiPc/match"; | ||
| 62 | import AffixInvitationView from "/@/viewsPc/match/components/affix-invitation-view.vue"; | ||
| 63 | import {ref} from "vue"; | ||
| 64 | import {useRouter} from "vue-router"; | ||
| 65 | |||
| 66 | const router = useRouter() | ||
| 67 | const language = useStorage('language', 0) | ||
| 68 | const list = ref([]) | ||
| 69 | const user = useUserStore().user | ||
| 70 | const {proxy} = getCurrentInstance() | ||
| 71 | |||
| 72 | const affixInvitationRef = ref(null) | ||
| 73 | |||
| 74 | onMounted(() => { | ||
| 75 | getList() | ||
| 76 | }) | ||
| 77 | |||
| 78 | function finish(bill) { | ||
| 79 | bill.status = '2' | ||
| 80 | // getList() | ||
| 81 | } | ||
| 82 | |||
| 83 | function getList() { | ||
| 84 | getVisaInfo({userId: user.userId}).then(res => { | ||
| 85 | list.value = res.rows || [] | ||
| 86 | for (let b of list.value) { | ||
| 87 | b.messageObj = JSON.parse(b.message) || {} | ||
| 88 | b.extJsonObj = JSON.parse(b.extJson) || {} | ||
| 89 | if (b.orderType == 5) { | ||
| 90 | try { | ||
| 91 | b.extJsonObj.ticketDate = b.extJsonObj.ticketDate ? JSON.parse(b.extJsonObj.ticketDate) : {} | ||
| 92 | b.extJsonObj.ticketType = b.extJsonObj.ticketType ? JSON.parse(b.extJsonObj.ticketType) : {} | ||
| 93 | } catch (e) { | ||
| 94 | console.log(e) | ||
| 95 | } | ||
| 96 | } | ||
| 97 | if (b.surplus && b.status == '0' && (b.surplus != '0,0' && b.surplus != '0')) { | ||
| 98 | b.countdown = Date.now() + Number((b.surplus.split(',')[0] * 60 + b.surplus.split(',')[1]) * 10) | ||
| 99 | } | ||
| 100 | } | ||
| 101 | }) | ||
| 102 | } | ||
| 103 | |||
| 104 | function goDetail(b) { | ||
| 105 | affixInvitationRef.value.open(b) | ||
| 106 | // router.push({ | ||
| 107 | // name: 'bookingPay', | ||
| 108 | // query: { | ||
| 109 | // orderId: b.id, | ||
| 110 | // orderType: b.orderType | ||
| 111 | // } | ||
| 112 | // }) | ||
| 113 | } | ||
| 114 | |||
| 115 | function Rebook(row) { | ||
| 116 | console.log(row) | ||
| 117 | if (row.orderType == 0) { | ||
| 118 | router.push({ | ||
| 119 | name: 'hotelDetail', | ||
| 120 | params: { | ||
| 121 | cptId: row.activeId, | ||
| 122 | hotelId: row.hotelId | ||
| 123 | }, | ||
| 124 | query: { | ||
| 125 | id: row.extId | ||
| 126 | } | ||
| 127 | }) | ||
| 128 | } else { | ||
| 129 | router.push({ | ||
| 130 | name: 'ticket', | ||
| 131 | params: { | ||
| 132 | activeId: row.activeId, | ||
| 133 | } | ||
| 134 | }) | ||
| 135 | } | ||
| 136 | } | ||
| 137 | |||
| 138 | const cancel = (row) => { | ||
| 139 | //取消订单 | ||
| 140 | proxy.$modal.confirm(language.value == 0 ? '确定取消订单吗 ?' : `Are you sure to cancel the order?`).then(() => { | ||
| 141 | return cancelOrder2(row.id).then(res => { | ||
| 142 | getList() | ||
| 143 | ElMessage({ | ||
| 144 | message: language.value == 0 ? '操作成功' : 'Successful operation!', | ||
| 145 | type: 'success' | ||
| 146 | }) | ||
| 147 | }) | ||
| 148 | }) | ||
| 149 | } | ||
| 150 | |||
| 151 | const unsubscribe = (row) => { | ||
| 152 | proxy.$modal.confirm(language.value == 0 ? `确定退款吗 ?` : 'Are you sure to refund?').then(() => { | ||
| 153 | return cancelOrder(row.id).then(res => { | ||
| 154 | getList() | ||
| 155 | ElMessage({ | ||
| 156 | message: language.value == 0 ? '已提交退款,请等待审核!' : 'Refund has been submitted, please wait for review!', | ||
| 157 | type: 'success' | ||
| 158 | }) | ||
| 159 | }) | ||
| 160 | }) | ||
| 161 | } | ||
| 162 | |||
| 163 | |||
| 164 | function toInvoice() { | ||
| 165 | router.push({ | ||
| 166 | name: 'invoice' | ||
| 167 | }) | ||
| 168 | } | ||
| 169 | </script> | ||
| 170 | |||
| 171 | <style lang="scss" scoped> | ||
| 172 | .bigMoney { | ||
| 173 | font-size: 24px; | ||
| 174 | font-family: "DIN Alternate"; | ||
| 175 | } | ||
| 176 | |||
| 177 | .name { | ||
| 178 | font-size: 18px; | ||
| 179 | margin: 0; | ||
| 180 | } | ||
| 181 | |||
| 182 | .status-po { | ||
| 183 | position: absolute; | ||
| 184 | right: 0; | ||
| 185 | top: 0; | ||
| 186 | font-size: 12px; | ||
| 187 | color: #FFFFFF; | ||
| 188 | |||
| 189 | span { | ||
| 190 | border-radius: 0px 10px 0px 10px; | ||
| 191 | padding: 4px 10px; | ||
| 192 | } | ||
| 193 | |||
| 194 | .bg-danger { | ||
| 195 | background: #E60012; | ||
| 196 | } | ||
| 197 | |||
| 198 | .bg-warning { | ||
| 199 | background: #e89f39; | ||
| 200 | } | ||
| 201 | |||
| 202 | .bg-pink { | ||
| 203 | background: #F740A6; | ||
| 204 | } | ||
| 205 | |||
| 206 | .bg-primary { | ||
| 207 | background: var(--el-color-primary) | ||
| 208 | } | ||
| 209 | |||
| 210 | .bg-blue { | ||
| 211 | background: #00a0e9 | ||
| 212 | } | ||
| 213 | } | ||
| 214 | |||
| 215 | .indexTitle { | ||
| 216 | margin: 20px 0 12px; | ||
| 217 | overflow: visible; | ||
| 218 | padding: 0 20px 15px; | ||
| 219 | border-bottom: 1px solid #e5e5e5; | ||
| 220 | |||
| 221 | .fr { | ||
| 222 | margin: -8px 0 0 | ||
| 223 | } | ||
| 224 | |||
| 225 | h3 { | ||
| 226 | display: inline-block; | ||
| 227 | font-size: 16px; | ||
| 228 | color: var(--el-color-primary); | ||
| 229 | } | ||
| 230 | } | ||
| 231 | |||
| 232 | .item { | ||
| 233 | .name { | ||
| 234 | font-size: 18px; | ||
| 235 | color: #000000; | ||
| 236 | margin: 0 0 10px; | ||
| 237 | } | ||
| 238 | |||
| 239 | p { | ||
| 240 | margin: 8px 0 0; | ||
| 241 | color: #707070; | ||
| 242 | font-size: 14px; | ||
| 243 | } | ||
| 244 | |||
| 245 | margin: 0 0 20px; | ||
| 246 | border: 1px solid #E5E5E5; | ||
| 247 | border-radius: 10px; | ||
| 248 | position: relative; | ||
| 249 | |||
| 250 | .bbody { | ||
| 251 | padding: 0 15px 20px; | ||
| 252 | } | ||
| 253 | |||
| 254 | .title { | ||
| 255 | background: #F7F7F7; | ||
| 256 | border-bottom: 1px solid #E5E5E5; | ||
| 257 | |||
| 258 | span { | ||
| 259 | font-size: 14px; | ||
| 260 | color: #4C5359; | ||
| 261 | } | ||
| 262 | } | ||
| 263 | |||
| 264 | .title label { | ||
| 265 | border-radius: 5px 0 5px 0; | ||
| 266 | font-size: 12px; | ||
| 267 | color: #fff; | ||
| 268 | padding: 4px 10px; | ||
| 269 | margin-right: 10px; | ||
| 270 | } | ||
| 271 | |||
| 272 | .blueTag { | ||
| 273 | background-color: #1EC886; | ||
| 274 | } | ||
| 275 | |||
| 276 | .purpleTag { | ||
| 277 | background-color: #717bef; | ||
| 278 | } | ||
| 279 | |||
| 280 | .orangeTag { | ||
| 281 | background-color: #ff8124; | ||
| 282 | } | ||
| 283 | } | ||
| 284 | |||
| 285 | .billFoot { | ||
| 286 | .price { | ||
| 287 | width: 100%; | ||
| 288 | justify-content: space-between; | ||
| 289 | } | ||
| 290 | } | ||
| 291 | |||
| 292 | .billFoot .tip { | ||
| 293 | font-size: 24px; | ||
| 294 | color: #999; | ||
| 295 | font-weight: 500; | ||
| 296 | margin: 0 20px; | ||
| 297 | } | ||
| 298 | |||
| 299 | .status { | ||
| 300 | position: absolute; | ||
| 301 | right: 10px; | ||
| 302 | bottom: 60px; | ||
| 303 | white-space: nowrap; | ||
| 304 | |||
| 305 | .warning { | ||
| 306 | color: #ff8124; | ||
| 307 | } | ||
| 308 | |||
| 309 | .danger { | ||
| 310 | color: #da2a2a; | ||
| 311 | } | ||
| 312 | |||
| 313 | .gary { | ||
| 314 | color: #666; | ||
| 315 | } | ||
| 316 | |||
| 317 | .success { | ||
| 318 | color: #1EC886; | ||
| 319 | } | ||
| 320 | } | ||
| 321 | |||
| 322 | </style> | ||
| 323 |
| 1 | <template> | ||
| 2 | <el-dialog | ||
| 3 | v-model="show" title="Visa Invitation Letter" append-to-body close-icon="CircleClose" center | ||
| 4 | close-on-click-modal destroy-on-close width="1100" | ||
| 5 | > | ||
| 6 | <el-descriptions border> | ||
| 7 | <el-descriptions-item label="No.">{{ form.id }}</el-descriptions-item> | ||
| 8 | <el-descriptions-item label="Applicant Type">{{ form.remarks || form.applicatTypeName }}</el-descriptions-item> | ||
| 9 | <el-descriptions-item label="Invitation Type">{{ form.invitationTypeName }}</el-descriptions-item> | ||
| 10 | <el-descriptions-item label="Do you need a Chinese invitation?">{{ | ||
| 11 | form.chinese == '1' ? 'YES' : 'No' | ||
| 12 | }} | ||
| 13 | </el-descriptions-item> | ||
| 14 | <el-descriptions-item label="MNA/Team Name">{{ form.nameEn }}</el-descriptions-item> | ||
| 15 | <el-descriptions-item label="MNA/Team Address">{{ form.associationAddress }}</el-descriptions-item> | ||
| 16 | <el-descriptions-item label="Contact Email">{{ form.email }}</el-descriptions-item> | ||
| 17 | <el-descriptions-item label="Full Name">{{ form.fullName }}</el-descriptions-item> | ||
| 18 | <el-descriptions-item label="Position">{{ form.remarks1 || form.positionName }}</el-descriptions-item> | ||
| 19 | <el-descriptions-item label="Phone">{{ form.phone }}</el-descriptions-item> | ||
| 20 | <el-descriptions-item label="Chinese Embassy Visas Office">{{ form.embassy }}</el-descriptions-item> | ||
| 21 | <el-descriptions-item label="Chinese Embassy Email">{{ form.embassyEmail }}</el-descriptions-item> | ||
| 22 | <el-descriptions-item label="Additional Documents"> | ||
| 23 | <el-link v-if="form.files" :href="fillImgUrl(form.files)" target="_blank" type="primary"> | ||
| 24 | additional documents | ||
| 25 | </el-link> | ||
| 26 | </el-descriptions-item> | ||
| 27 | <el-descriptions-item label="Proof of Employment"> | ||
| 28 | <el-link v-if="form.invitationFile" target="_blank" :href="fillImgUrl(form.invitationFile)" type="primary"> | ||
| 29 | proof of employment | ||
| 30 | </el-link> | ||
| 31 | </el-descriptions-item> | ||
| 32 | </el-descriptions> | ||
| 33 | <!-- <el-divider></el-divider>--> | ||
| 34 | <br/> | ||
| 35 | <el-table :data="visaList" border stripe> | ||
| 36 | <el-table-column prop="passportCopy" label="Passport Copy"> | ||
| 37 | <template #default="{row}"> | ||
| 38 | <el-image | ||
| 39 | :src="fillImgUrl(row.passportCopy)" | ||
| 40 | :preview-src-list="[fillImgUrl(row.passportCopy)]" | ||
| 41 | :preview-teleported="true" | ||
| 42 | style="width: 50px;height: 70px" | ||
| 43 | /> | ||
| 44 | </template> | ||
| 45 | </el-table-column> | ||
| 46 | <el-table-column label="position" align="center" prop="position"/> | ||
| 47 | <el-table-column label="lastName" align="center" prop="lastName"/> | ||
| 48 | <el-table-column label="firstName" align="center" prop="fristName"/> | ||
| 49 | <el-table-column prop="sex" label="Gender" align="center"> | ||
| 50 | <template #default="{row}"> | ||
| 51 | {{ row.sex == '0' ? 'M' : 'F' }} | ||
| 52 | </template> | ||
| 53 | </el-table-column> | ||
| 54 | <el-table-column label="nationality" align="center" prop="nationality"/> | ||
| 55 | <el-table-column label="birthday" align="center" prop="birthday"/> | ||
| 56 | <el-table-column label="Passport No." align="center" prop="passportNo"/> | ||
| 57 | <el-table-column label="DATE OF ISSUE" align="center" prop="issueDate"/> | ||
| 58 | <el-table-column label="DATE OF EXPIRY" align="center" prop="expiryDate"/> | ||
| 59 | </el-table> | ||
| 60 | </el-dialog> | ||
| 61 | |||
| 62 | </template> | ||
| 63 | |||
| 64 | <script setup> | ||
| 65 | import {useStorage} from "@vueuse/core/index"; | ||
| 66 | import {getCurrentInstance, ref} from "vue"; | ||
| 67 | import {listVisaInfo} from "@/apiPc/match"; | ||
| 68 | import useUserStore from "@/store/modules/user"; | ||
| 69 | import {fillImgUrl} from "/@/utils/ruoyi"; | ||
| 70 | |||
| 71 | const user = useUserStore().user | ||
| 72 | const {proxy} = getCurrentInstance() | ||
| 73 | const language = useStorage('language', 0) | ||
| 74 | const form = ref({ | ||
| 75 | gender: '0', | ||
| 76 | cptVisaInfoBos: [], | ||
| 77 | email: user?.email, | ||
| 78 | }) | ||
| 79 | const show = ref(false) | ||
| 80 | const visaList = ref([]) | ||
| 81 | |||
| 82 | const open = (params) => { | ||
| 83 | show.value = true | ||
| 84 | form.value = params | ||
| 85 | |||
| 86 | listVisaInfo({visaId: params.id}) | ||
| 87 | .then((res) => { | ||
| 88 | visaList.value = res.rows | ||
| 89 | }) | ||
| 90 | |||
| 91 | } | ||
| 92 | defineExpose({open}) | ||
| 93 | |||
| 94 | </script> | ||
| 95 | |||
| 96 | <style scoped lang="scss"> | ||
| 97 | |||
| 98 | </style> |
| ... | @@ -76,13 +76,13 @@ export default defineConfig(({ mode, command }) => { | ... | @@ -76,13 +76,13 @@ export default defineConfig(({ mode, command }) => { |
| 76 | rewrite: (p) => p.replace(/^\/dev-api\/ztx-match/, '') | 76 | rewrite: (p) => p.replace(/^\/dev-api\/ztx-match/, '') |
| 77 | }, | 77 | }, |
| 78 | '/dev-api/ztx-webSite': { | 78 | '/dev-api/ztx-webSite': { |
| 79 | target: 'http://192.168.1.118:8081/', | 79 | target: 'http://192.168.1.118:8082/', |
| 80 | // target: 'https://ces.2025wtcwuxi.com/stage-api/', | 80 | // target: 'https://ces.2025wtcwuxi.com/stage-api/', |
| 81 | changeOrigin: true, | 81 | changeOrigin: true, |
| 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.118:8081/', | 85 | target: 'http://192.168.1.118:8082/', |
| 86 | // target: 'http://192.168.1.131:8081/', | 86 | // target: 'http://192.168.1.131:8081/', |
| 87 | // target: 'https://ces.2025wtcwuxi.com/stage-api/', | 87 | // target: 'https://ces.2025wtcwuxi.com/stage-api/', |
| 88 | // target: 'http://124.70.181.90:1880/stage-api', | 88 | // target: 'http://124.70.181.90:1880/stage-api', | ... | ... |
-
Please register or sign in to post a comment