no message
Showing
10 changed files
with
614 additions
and
347 deletions
| ... | @@ -171,7 +171,7 @@ export function queryTicket(qy) { | ... | @@ -171,7 +171,7 @@ export function queryTicket(qy) { |
| 171 | } | 171 | } |
| 172 | export function getHomeInviteQuery(params) { | 172 | export function getHomeInviteQuery(params) { |
| 173 | return request({ | 173 | return request({ |
| 174 | url: `/league/person/getHomeInviteQuery`, | 174 | url: `/league/visa/getHomeSearchVisaList`, |
| 175 | method: 'get', | 175 | method: 'get', |
| 176 | params: params | 176 | params: params |
| 177 | }) | 177 | }) |
| ... | @@ -185,7 +185,7 @@ export function getHomeCarQuery(params) { | ... | @@ -185,7 +185,7 @@ export function getHomeCarQuery(params) { |
| 185 | } | 185 | } |
| 186 | export function getHomeRoomQuery(params) { | 186 | export function getHomeRoomQuery(params) { |
| 187 | return request({ | 187 | return request({ |
| 188 | url: `/league/person/getHomeRoomQuery`, | 188 | url: `/ota/norder/getHomeRoomQuery`, |
| 189 | method: 'get', | 189 | method: 'get', |
| 190 | params: params | 190 | params: params |
| 191 | }) | 191 | }) | ... | ... |
| ... | @@ -832,6 +832,14 @@ export function aircraft(params) { | ... | @@ -832,6 +832,14 @@ export function aircraft(params) { |
| 832 | }) | 832 | }) |
| 833 | } | 833 | } |
| 834 | 834 | ||
| 835 | export function getHomePickQuery(params) { | ||
| 836 | return request({ | ||
| 837 | url: `/league/pickup/getHomePickQuery`, | ||
| 838 | method: 'get', | ||
| 839 | params | ||
| 840 | }) | ||
| 841 | } | ||
| 842 | |||
| 835 | // 关于我们 | 843 | // 关于我们 |
| 836 | export function getAboutUs(params) { | 844 | export function getAboutUs(params) { |
| 837 | return request({ | 845 | return request({ | ... | ... |
| ... | @@ -3,46 +3,51 @@ | ... | @@ -3,46 +3,51 @@ |
| 3 | <div class="box"> | 3 | <div class="box"> |
| 4 | <el-card class="mt20 mb20" :body-style="{'padding':'0'}"> | 4 | <el-card class="mt20 mb20" :body-style="{'padding':'0'}"> |
| 5 | <div class="lineHead"> | 5 | <div class="lineHead"> |
| 6 | <h3>{{ language==0?'服务查询': 'Service Search' }}</h3> | 6 | <h3>{{ language == 0 ? '服务查询' : 'Service Search' }}</h3> |
| 7 | </div> | 7 | </div> |
| 8 | <div class="pd20"> | 8 | <div class="pd20"> |
| 9 | <div class="topsearch"> | 9 | <div class="topsearch"> |
| 10 | <el-input v-if="activeTab==0" :placeholder="language==0?'请输入护照号搜索':'Please enter passport number to search'" | 10 | <el-input :placeholder="language==0?'请输入手机号或邮箱搜索':'Please enter phone or email to search'" |
| 11 | v-model="query.passportNo"/> | 11 | v-model="query.remarks" @keyup.enter="search"/> |
| 12 | <el-input v-else :placeholder="language==0?'请输入姓名搜索':'Please enter name to search'" | ||
| 13 | v-model="query.contacts"/> | ||
| 14 | <el-button class="btn-lineG" type="primary" @click="search"> | 12 | <el-button class="btn-lineG" type="primary" @click="search"> |
| 15 | <el-icon class="mr20"> | 13 | <el-icon class="mr20"> |
| 16 | <Search/> | 14 | <Search/> |
| 17 | </el-icon> | 15 | </el-icon> |
| 18 | {{ language==0?'搜索': 'Search' }} | 16 | {{ language == 0 ? '搜索' : 'Search' }} |
| 19 | </el-button> | 17 | </el-button> |
| 20 | </div> | 18 | </div> |
| 21 | 19 | ||
| 22 | <div class="stab"> | 20 | <div class="stab"> |
| 23 | <div :class="activeTab==0?'active':''" @click="changeActiveTab(0)"> | 21 | <div :class="activeTab==0?'active':''" @click="changeActiveTab('0')"> |
| 24 | <img v-show="activeTab!=0" src="@/assets/img/tag01@2x.png"/> | 22 | <img v-show="activeTab!=0" src="@/assets/img/tag01@2x.png"/> |
| 25 | <img v-show="activeTab==0" src="@/assets/img/tag01_dwn@2x.png"/> | 23 | <img v-show="activeTab==0" src="@/assets/img/tag01_dwn@2x.png"/> |
| 26 | {{language==0?'签证服务':'Visa Services'}} | 24 | {{ language == 0 ? '签证服务' : 'Visa Services' }} |
| 27 | </div> | 25 | </div> |
| 28 | <div :class="activeTab==1?'active':''" @click="changeActiveTab(1)"> | 26 | <div :class="activeTab==1?'active':''" @click="changeActiveTab('1')"> |
| 29 | <img v-show="activeTab!=1" src="@/assets/img/tag02@2x.png"/> | 27 | <img v-show="activeTab!=1" src="@/assets/img/tag02@2x.png"/> |
| 30 | <img v-show="activeTab==1" src="@/assets/img/tag02_dwn@2x.png"/> | 28 | <img v-show="activeTab==1" src="@/assets/img/tag02_dwn@2x.png"/> |
| 31 | {{language==0?'酒店预定':'Hotel Reservation'}} | 29 | {{ language == 0 ? '酒店预定' : 'Hotel Reservation' }} |
| 32 | </div> | 30 | </div> |
| 33 | <div :class="activeTab==2?'active':''" @click="changeActiveTab(2)"> | 31 | <div :class="activeTab==2?'active':''" @click="changeActiveTab('2')"> |
| 34 | <img v-show="activeTab!=2" src="@/assets/img/tag03@2x.png"/> | 32 | <img v-show="activeTab!=2" src="@/assets/img/tag03@2x.png"/> |
| 35 | <img v-show="activeTab==2" src="@/assets/img/tag03_dwn@2x.png"/> | 33 | <img v-show="activeTab==2" src="@/assets/img/tag03_dwn@2x.png"/> |
| 36 | {{language==0?'接送服务':'Pick-up Service'}} | 34 | {{ language == 0 ? '接送服务' : 'Pick-up Service' }} |
| 37 | </div> | 35 | </div> |
| 38 | </div> | 36 | </div> |
| 39 | <div> | 37 | <div> |
| 40 | <div v-for="item in list"> | 38 | <div v-if="activeTab==0"> |
| 41 | {{item}} | 39 | <el-empty v-if="list1.length==0"/> |
| 40 | <visa-info v-else :list="list1"></visa-info> | ||
| 41 | </div> | ||
| 42 | <div v-if="activeTab==1"> | ||
| 43 | <el-empty v-if="list2.length==0"/> | ||
| 44 | <reservation-info v-else :list="list2" min></reservation-info> | ||
| 45 | </div> | ||
| 46 | <div v-if="activeTab==2"> | ||
| 47 | <el-empty v-if="list3.length==0"/> | ||
| 48 | <pickup-info v-else :list="list3"></pickup-info> | ||
| 42 | </div> | 49 | </div> |
| 43 | </div> | 50 | </div> |
| 44 | |||
| 45 | <el-empty v-if="list.length==0"/> | ||
| 46 | </div> | 51 | </div> |
| 47 | </el-card> | 52 | </el-card> |
| 48 | </div> | 53 | </div> |
| ... | @@ -50,65 +55,89 @@ | ... | @@ -50,65 +55,89 @@ |
| 50 | </template> | 55 | </template> |
| 51 | 56 | ||
| 52 | <script setup> | 57 | <script setup> |
| 53 | import {ref, computed, onMounted} from 'vue' | 58 | import {ref, onMounted} from 'vue' |
| 54 | import {getHomeCarQuery, getHomeInviteQuery, getHomeRoomQuery} from "@/apiPc/common"; | 59 | import { getHomeInviteQuery, getHomeRoomQuery} from "@/apiPc/common"; |
| 55 | import {ElMessage} from "element-plus"; | 60 | import {ElMessage} from "element-plus"; |
| 56 | import {useStorage} from "@vueuse/core/index"; | 61 | import {useStorage} from "@vueuse/core/index"; |
| 62 | import VisaInfo from "/src/viewsPc/center/info/visaInfo.vue"; | ||
| 63 | import ReservationInfo from "/@/viewsPc/center/info/reservationInfo.vue"; | ||
| 64 | import {useRouteQuery} from '@vueuse/router' | ||
| 65 | import PickupInfo from "/@/viewsPc/center/info/pickupInfo.vue"; | ||
| 66 | import { getHomePickQuery} from "/@/apiPc/match"; | ||
| 57 | 67 | ||
| 58 | const language = useStorage('language', 0) | 68 | const language = useStorage('language', 0) |
| 59 | const activeTab = ref(0) | 69 | const activeTab = useRouteQuery('n', 0) |
| 70 | const searchVal = useRouteQuery('s') | ||
| 60 | const form = ref({}) | 71 | const form = ref({}) |
| 61 | const list = ref([]) | 72 | const list1 = ref([]) |
| 73 | const list2 = ref([]) | ||
| 74 | const list3 = ref([]) | ||
| 62 | const query = ref({ | 75 | const query = ref({ |
| 63 | status: 1 | 76 | status: 1, |
| 77 | remarks: '' | ||
| 64 | }) | 78 | }) |
| 65 | const loading = ref(false) | 79 | const loading = ref(false) |
| 80 | |||
| 66 | function changeActiveTab(n) { | 81 | function changeActiveTab(n) { |
| 67 | activeTab.value = n | 82 | activeTab.value = n |
| 68 | query.value.passportNo = '' | 83 | if (query.value.remarks) { |
| 69 | query.value.contacts = '' | 84 | search() |
| 85 | } | ||
| 70 | } | 86 | } |
| 87 | |||
| 88 | onMounted(() => { | ||
| 89 | if (searchVal.value) { | ||
| 90 | query.value.remarks = searchVal.value | ||
| 91 | search() | ||
| 92 | } | ||
| 93 | }) | ||
| 94 | |||
| 95 | |||
| 71 | function search() { | 96 | function search() { |
| 72 | if (!query.value.passportNo && activeTab.value == 0) { | 97 | if (!query.value.remarks) { |
| 73 | ElMessage.warning(language.value==0?'请输入护照号搜索':'Please enter keyword to search') | 98 | ElMessage.warning(language.value == 0 ? '请输入手机号或邮箱搜索' : 'Please enter phone or email to search') |
| 74 | return | 99 | return |
| 75 | } | 100 | } |
| 76 | if (!query.value.contacts && activeTab.value != 0) { | 101 | |
| 77 | ElMessage.warning(language.value==0?'请输入关键字搜索':'Please enter keyword to search') | 102 | if (activeTab.value == 0) { |
| 78 | return | 103 | delete query.value.status |
| 104 | }else{ | ||
| 105 | query.value.status = 1 | ||
| 79 | } | 106 | } |
| 107 | |||
| 108 | searchVal.value = query.value.remarks | ||
| 80 | loading.value = true | 109 | loading.value = true |
| 81 | if(activeTab.value == 0){ | 110 | if (activeTab.value == 0) { |
| 82 | // 签证服务 | 111 | // 签证服务 |
| 83 | getHomeInviteQuery(query.value).then(res=>{ | 112 | getHomeInviteQuery(query.value).then(res => { |
| 84 | if (!res.data||res.data.length==0) { | 113 | if (!res.data || res.data.length == 0) { |
| 85 | list.value = [] | 114 | list1.value = [] |
| 86 | ElMessage.warning(language.value==0?'未找到结果,请重新查询':'No result') | 115 | ElMessage.warning(language.value == 0 ? '未查到预定信息' : 'No reservation information found.') |
| 87 | return | 116 | return |
| 88 | } | 117 | } |
| 89 | list.value = res.data | 118 | list1.value = res.data |
| 90 | }) | 119 | }) |
| 91 | } | 120 | } |
| 92 | if(activeTab.value == 1){ | 121 | if (activeTab.value == 1) { |
| 93 | // 酒店预定 | 122 | // 酒店预定 |
| 94 | getHomeRoomQuery(query.value).then(res=>{ | 123 | getHomeRoomQuery(query.value).then(res => { |
| 95 | if (!res.data||res.data.length==0) { | 124 | if (!res.data || res.data.length == 0) { |
| 96 | list.value = [] | 125 | list2.value = [] |
| 97 | ElMessage.warning(language.value==0?'未找到结果,请重新查询':'No result') | 126 | ElMessage.warning(language.value == 0 ? '未查到预定信息' : 'No reservation information found.') |
| 98 | return | 127 | return |
| 99 | } | 128 | } |
| 100 | list.value = res.data | 129 | list2.value = res.data |
| 101 | }) | 130 | }) |
| 102 | } | 131 | } |
| 103 | if(activeTab.value == 2){ | 132 | if (activeTab.value == 2) { |
| 104 | // 接送服务 | 133 | // 接送服务 |
| 105 | getHomeCarQuery(query.value).then(res=>{ | 134 | getHomePickQuery(query.value).then(res => { |
| 106 | if (!res.data||res.data.length==0) { | 135 | if (!res.data || res.data.length == 0) { |
| 107 | list.value = [] | 136 | list3.value = [] |
| 108 | ElMessage.warning(language.value==0?'未找到结果,请重新查询':'No result') | 137 | ElMessage.warning(language.value == 0 ? '未查到预定信息' : 'No reservation information found.') |
| 109 | return | 138 | return |
| 110 | } | 139 | } |
| 111 | list.value = res.data | 140 | list3.value = res.data |
| 112 | }) | 141 | }) |
| 113 | } | 142 | } |
| 114 | } | 143 | } |
| ... | @@ -118,17 +147,47 @@ function search() { | ... | @@ -118,17 +147,47 @@ function search() { |
| 118 | .highlight { | 147 | .highlight { |
| 119 | background: yellow; | 148 | background: yellow; |
| 120 | } | 149 | } |
| 121 | .topsearch{display: flex;gap:10px; | 150 | |
| 122 | .el-input {--el-input-bg-color: #F5F7F9;height: 50px; | 151 | .topsearch { |
| 123 | --el-input-border-radius: 10px;} | 152 | display: flex; |
| 124 | .btn-lineG{border-radius: 10px;height: 50px;width: 130px;font-size: 20px;} | 153 | gap: 10px; |
| 154 | |||
| 155 | .el-input { | ||
| 156 | --el-input-bg-color: #F5F7F9; | ||
| 157 | height: 50px; | ||
| 158 | --el-input-border-radius: 10px; | ||
| 159 | } | ||
| 160 | |||
| 161 | .btn-lineG { | ||
| 162 | border-radius: 10px; | ||
| 163 | height: 50px; | ||
| 164 | width: 130px; | ||
| 165 | font-size: 20px; | ||
| 166 | } | ||
| 125 | } | 167 | } |
| 126 | .stab{display: flex;gap: 20px;margin: 20px 0 0 ; | 168 | |
| 127 | div{font-weight: 400;padding: 10px 0;display: flex;align-items: center; | 169 | .stab { |
| 128 | font-size: 18px;cursor: pointer; | 170 | display: flex; |
| 171 | gap: 20px; | ||
| 172 | margin: 20px 0 0; | ||
| 173 | |||
| 174 | div { | ||
| 175 | font-weight: 400; | ||
| 176 | padding: 10px 0; | ||
| 177 | display: flex; | ||
| 178 | align-items: center; | ||
| 179 | font-size: 18px; | ||
| 180 | cursor: pointer; | ||
| 129 | color: #4C5359; | 181 | color: #4C5359; |
| 130 | img{height: 30px;} | 182 | |
| 183 | img { | ||
| 184 | height: 30px; | ||
| 185 | } | ||
| 186 | } | ||
| 187 | |||
| 188 | .active { | ||
| 189 | color: #030303; | ||
| 190 | border-bottom: 2px solid #030303; | ||
| 131 | } | 191 | } |
| 132 | .active{color: #030303;border-bottom: 2px solid #030303;} | ||
| 133 | } | 192 | } |
| 134 | </style> | 193 | </style> | ... | ... |
| ... | @@ -141,8 +141,9 @@ onMounted(() => { | ... | @@ -141,8 +141,9 @@ onMounted(() => { |
| 141 | currMenu = _.find((language.value == 0? menus3.value: menus3En.value), (m) => { | 141 | currMenu = _.find((language.value == 0? menus3.value: menus3En.value), (m) => { |
| 142 | return m.routeName === route.name | 142 | return m.routeName === route.name |
| 143 | }) | 143 | }) |
| 144 | if(currMenu) { | ||
| 144 | currMenu.isActive = true | 145 | currMenu.isActive = true |
| 145 | 146 | } | |
| 146 | }) | 147 | }) |
| 147 | 148 | ||
| 148 | const toInfo = (item, list) => { | 149 | const toInfo = (item, list) => { | ... | ... |
src/viewsPc/center/info/pickupInfo.vue
0 → 100644
| 1 | <template> | ||
| 2 | <div class="pd20"> | ||
| 3 | <div v-for="b in list" class="item"> | ||
| 4 | <div class="title"> | ||
| 5 | <label class="orangeTag"> {{ language == 0 ? '接送服务' : 'Station Transfer' }} </label> | ||
| 6 | <span>{{ language == 0 ? '编号:' : 'No.' }} {{ b.id }}</span> | ||
| 7 | </div> | ||
| 8 | |||
| 9 | <div class="status-po"> | ||
| 10 | <span v-if="b.serviceType == '2'" class="bg-gary">{{ 'Drop-off' }}</span> | ||
| 11 | <span v-if="b.serviceType == '1'" class="bg-blue">{{ 'Pick-up' }}</span> | ||
| 12 | </div> | ||
| 13 | |||
| 14 | <el-row align="middle" class="pd20 mt10" justify="space-between"> | ||
| 15 | <el-col> | ||
| 16 | <el-descriptions> | ||
| 17 | <el-descriptions-item :label="language == 0 ? '联系人:' : 'Contact Person:'"> | ||
| 18 | {{ b.name }} | ||
| 19 | </el-descriptions-item> | ||
| 20 | <el-descriptions-item :label="language == 0 ? '联系电话:' : 'Phone Number:'"> | ||
| 21 | {{ b.phone }} | ||
| 22 | </el-descriptions-item> | ||
| 23 | <el-descriptions-item :label="language == 0 ? '预计抵达时间:' : 'Estimated Arrival Time:'"> | ||
| 24 | {{ b.arrivalDate }} {{b.arrivaTime}} | ||
| 25 | </el-descriptions-item> | ||
| 26 | <el-descriptions-item :label="language == 0 ? '航班/车次:' : 'Flight/Train Number:'"> | ||
| 27 | {{ b.flight }} | ||
| 28 | </el-descriptions-item> | ||
| 29 | <el-descriptions-item :label="language == 0 ? '机场/火车站:' : 'Airport/Train Station:'"> | ||
| 30 | {{ b.stationName }} | ||
| 31 | </el-descriptions-item> | ||
| 32 | <el-descriptions-item :label="language == 0 ? '航站楼:' : 'Terminal:'"> | ||
| 33 | {{ b.terminal }} | ||
| 34 | </el-descriptions-item> | ||
| 35 | <el-descriptions-item :label="language == 0 ? '接机/站人数:' : 'Number of Passengers:'"> | ||
| 36 | {{ b.counts }} | ||
| 37 | </el-descriptions-item> | ||
| 38 | <el-descriptions-item :label="language == 0 ? '送达酒店:' : 'Destination Hotel:'"> | ||
| 39 | {{ b.hotle }} | ||
| 40 | </el-descriptions-item> | ||
| 41 | </el-descriptions> | ||
| 42 | </el-col> | ||
| 43 | </el-row> | ||
| 44 | |||
| 45 | <!-- <el-row align="middle" class="pd20 mt10" justify="space-between">--> | ||
| 46 | <!-- <el-col >--> | ||
| 47 | <!-- <div>--> | ||
| 48 | <!-- <p>{{language == 0 ? '联系人:' : 'Contact Person:'}} {{ b.name }}</p>--> | ||
| 49 | <!-- <p>{{language == 0 ? '联系电话:' : 'Phone Number:'}} {{ b.phone }}</p>--> | ||
| 50 | <!-- </div>--> | ||
| 51 | <!-- </el-col>--> | ||
| 52 | <!-- </el-row>--> | ||
| 53 | </div> | ||
| 54 | |||
| 55 | <affix-invitation-view ref="affixInvitationRef"></affix-invitation-view> | ||
| 56 | </div> | ||
| 57 | </template> | ||
| 58 | |||
| 59 | <script setup> | ||
| 60 | import {getUplaodFile} from "/src/apiPc/match"; | ||
| 61 | import {fillImgUrl} from "/src/utils/ruoyi"; | ||
| 62 | import AffixInvitationView from "/src/viewsPc/match/components/affix-invitation-view.vue"; | ||
| 63 | import {ref} from "vue"; | ||
| 64 | import {useStorage} from "@vueuse/core"; | ||
| 65 | |||
| 66 | const language = useStorage('language', 0) | ||
| 67 | const affixInvitationRef = ref(null) | ||
| 68 | |||
| 69 | defineProps({ | ||
| 70 | list: { | ||
| 71 | type: Array, | ||
| 72 | default: () => [] | ||
| 73 | }, | ||
| 74 | min: { | ||
| 75 | type: Boolean, | ||
| 76 | default: false | ||
| 77 | }, | ||
| 78 | }) | ||
| 79 | |||
| 80 | function goDetail(b) { | ||
| 81 | affixInvitationRef.value.open(b) | ||
| 82 | } | ||
| 83 | |||
| 84 | function handleDownload(b) { | ||
| 85 | getUplaodFile({id: b.id}).then(res => { | ||
| 86 | window.open(fillImgUrl(res.msg), '_blank') | ||
| 87 | }) | ||
| 88 | } | ||
| 89 | </script> | ||
| 90 | |||
| 91 | <style scoped lang="scss"> | ||
| 92 | .bigMoney { | ||
| 93 | font-size: 24px; | ||
| 94 | font-family: "DIN Alternate"; | ||
| 95 | } | ||
| 96 | |||
| 97 | .name { | ||
| 98 | font-size: 18px; | ||
| 99 | margin: 0; | ||
| 100 | } | ||
| 101 | |||
| 102 | .status-po { | ||
| 103 | position: absolute; | ||
| 104 | right: 0; | ||
| 105 | top: 0; | ||
| 106 | font-size: 12px; | ||
| 107 | color: #FFFFFF; | ||
| 108 | |||
| 109 | span { | ||
| 110 | border-radius: 0px 10px 0px 10px; | ||
| 111 | padding: 4px 10px; | ||
| 112 | } | ||
| 113 | |||
| 114 | .bg-danger { | ||
| 115 | background: #E60012; | ||
| 116 | } | ||
| 117 | |||
| 118 | .bg-warning { | ||
| 119 | background: #e89f39; | ||
| 120 | } | ||
| 121 | |||
| 122 | .bg-pink { | ||
| 123 | background: #F740A6; | ||
| 124 | } | ||
| 125 | |||
| 126 | .bg-primary { | ||
| 127 | background: var(--el-color-primary) | ||
| 128 | } | ||
| 129 | |||
| 130 | .bg-blue { | ||
| 131 | background: #00a0e9 | ||
| 132 | } | ||
| 133 | } | ||
| 134 | |||
| 135 | .indexTitle { | ||
| 136 | margin: 20px 0 12px; | ||
| 137 | overflow: visible; | ||
| 138 | padding: 0 20px 15px; | ||
| 139 | border-bottom: 1px solid #e5e5e5; | ||
| 140 | |||
| 141 | .fr { | ||
| 142 | margin: -8px 0 0 | ||
| 143 | } | ||
| 144 | |||
| 145 | h3 { | ||
| 146 | display: inline-block; | ||
| 147 | font-size: 16px; | ||
| 148 | color: var(--el-color-primary); | ||
| 149 | } | ||
| 150 | } | ||
| 151 | |||
| 152 | .item { | ||
| 153 | .name { | ||
| 154 | font-size: 18px; | ||
| 155 | color: #000000; | ||
| 156 | margin: 0 0 10px; | ||
| 157 | } | ||
| 158 | |||
| 159 | p { | ||
| 160 | margin: 8px 0 0; | ||
| 161 | color: #707070; | ||
| 162 | font-size: 14px; | ||
| 163 | } | ||
| 164 | |||
| 165 | margin: 0 0 20px; | ||
| 166 | border: 1px solid #E5E5E5; | ||
| 167 | border-radius: 10px; | ||
| 168 | position: relative; | ||
| 169 | |||
| 170 | .bbody { | ||
| 171 | padding: 0 15px 20px; | ||
| 172 | } | ||
| 173 | |||
| 174 | .title { | ||
| 175 | background: #F7F7F7; | ||
| 176 | border-bottom: 1px solid #E5E5E5; | ||
| 177 | |||
| 178 | span { | ||
| 179 | font-size: 14px; | ||
| 180 | color: #4C5359; | ||
| 181 | } | ||
| 182 | } | ||
| 183 | |||
| 184 | .title label { | ||
| 185 | border-radius: 5px 0 5px 0; | ||
| 186 | font-size: 12px; | ||
| 187 | color: #fff; | ||
| 188 | padding: 4px 10px; | ||
| 189 | margin-right: 10px; | ||
| 190 | } | ||
| 191 | |||
| 192 | .blueTag { | ||
| 193 | background-color: #1EC886; | ||
| 194 | } | ||
| 195 | |||
| 196 | .purpleTag { | ||
| 197 | background-color: #717bef; | ||
| 198 | } | ||
| 199 | |||
| 200 | .orangeTag { | ||
| 201 | background-color: #ff8124; | ||
| 202 | } | ||
| 203 | } | ||
| 204 | |||
| 205 | .billFoot { | ||
| 206 | .price { | ||
| 207 | width: 100%; | ||
| 208 | justify-content: space-between; | ||
| 209 | } | ||
| 210 | } | ||
| 211 | |||
| 212 | .billFoot .tip { | ||
| 213 | font-size: 24px; | ||
| 214 | color: #999; | ||
| 215 | font-weight: 500; | ||
| 216 | margin: 0 20px; | ||
| 217 | } | ||
| 218 | |||
| 219 | .status { | ||
| 220 | position: absolute; | ||
| 221 | right: 10px; | ||
| 222 | bottom: 60px; | ||
| 223 | white-space: nowrap; | ||
| 224 | |||
| 225 | .warning { | ||
| 226 | color: #ff8124; | ||
| 227 | } | ||
| 228 | |||
| 229 | .danger { | ||
| 230 | color: #da2a2a; | ||
| 231 | } | ||
| 232 | |||
| 233 | .gary { | ||
| 234 | color: #666; | ||
| 235 | } | ||
| 236 | |||
| 237 | .success { | ||
| 238 | color: #1EC886; | ||
| 239 | } | ||
| 240 | } | ||
| 241 | </style> |
src/viewsPc/center/info/reservationInfo.vue
0 → 100644
This diff is collapsed.
Click to expand it.
src/viewsPc/center/info/visaInfo.vue
0 → 100644
| 1 | <template> | ||
| 2 | <div class="pd20"> | ||
| 3 | <div v-for="b in list" class="item"> | ||
| 4 | <div class="title"> | ||
| 5 | <label class="orangeTag"> {{ b.applicatTypeName }} </label> | ||
| 6 | <span>{{ language == 0 ? '订单编号:' : 'No.' }} {{ b.id }}</span> | ||
| 7 | </div> | ||
| 8 | |||
| 9 | <div class="status-po"> | ||
| 10 | <span v-if="b.status == '0'" class="bg-gary">{{ 'Under Review' }}</span> | ||
| 11 | <span v-if="b.status == '1'" class="bg-blue">{{ 'Approved' }}</span> | ||
| 12 | <span v-if="b.status == '2'" class="bg-danger">{{ 'Rejected' }}</span> | ||
| 13 | </div> | ||
| 14 | |||
| 15 | <el-row align="middle" class="pd20 mt10" justify="space-between"> | ||
| 16 | <el-col :lg="9" :md="12" :sm="12" :xs="24"> | ||
| 17 | <div> | ||
| 18 | <h3 class="name">{{ b.fullName }}</h3> | ||
| 19 | <p>{{ b.email }}</p> | ||
| 20 | <p>{{ b.createTime }}</p> | ||
| 21 | </div> | ||
| 22 | </el-col> | ||
| 23 | <el-col :lg="3" :md="6" :sm="6" :xs="6" class="text-center"> | ||
| 24 | <span class="text-warning"> {{ b.invitationTypeName }} </span> | ||
| 25 | </el-col> | ||
| 26 | <el-col :lg="6" :md="16" :sm="16" :xs="16"> | ||
| 27 | <div class="text-right"> | ||
| 28 | <el-button class="mb10" :disabled="b.emailFlag!='1'" plain round size="small" type="primary" | ||
| 29 | @click="handleDownload(b)"> | ||
| 30 | {{ language == 0 ? '下载邀请函' : 'Download Invitation' }} | ||
| 31 | </el-button> | ||
| 32 | <el-button class="mb10" plain round size="small" type="primary" @click="goDetail(b)"> | ||
| 33 | {{ language == 0 ? '详情' : 'Detail' }} | ||
| 34 | </el-button> | ||
| 35 | </div> | ||
| 36 | </el-col> | ||
| 37 | </el-row> | ||
| 38 | </div> | ||
| 39 | |||
| 40 | <affix-invitation-view ref="affixInvitationRef"></affix-invitation-view> | ||
| 41 | </div> | ||
| 42 | </template> | ||
| 43 | |||
| 44 | <script setup > | ||
| 45 | import {getUplaodFile} from "/src/apiPc/match"; | ||
| 46 | import {fillImgUrl} from "/src/utils/ruoyi"; | ||
| 47 | import AffixInvitationView from "/src/viewsPc/match/components/affix-invitation-view.vue"; | ||
| 48 | import {ref} from "vue"; | ||
| 49 | import {useStorage} from "@vueuse/core"; | ||
| 50 | |||
| 51 | const language = useStorage('language', 0) | ||
| 52 | const affixInvitationRef = ref(null) | ||
| 53 | |||
| 54 | defineProps({ | ||
| 55 | list: { | ||
| 56 | type: Array, | ||
| 57 | default: () => [] | ||
| 58 | }, | ||
| 59 | min: { | ||
| 60 | type: Boolean, | ||
| 61 | default: false | ||
| 62 | }, | ||
| 63 | }) | ||
| 64 | |||
| 65 | function goDetail(b) { | ||
| 66 | affixInvitationRef.value.open(b) | ||
| 67 | } | ||
| 68 | |||
| 69 | function handleDownload(b) { | ||
| 70 | getUplaodFile({id: b.id}).then(res => { | ||
| 71 | window.open(fillImgUrl(res.msg), '_blank') | ||
| 72 | }) | ||
| 73 | } | ||
| 74 | </script> | ||
| 75 | |||
| 76 | <style scoped lang="scss"> | ||
| 77 | .bigMoney { | ||
| 78 | font-size: 24px; | ||
| 79 | font-family: "DIN Alternate"; | ||
| 80 | } | ||
| 81 | |||
| 82 | .name { | ||
| 83 | font-size: 18px; | ||
| 84 | margin: 0; | ||
| 85 | } | ||
| 86 | |||
| 87 | .status-po { | ||
| 88 | position: absolute; | ||
| 89 | right: 0; | ||
| 90 | top: 0; | ||
| 91 | font-size: 12px; | ||
| 92 | color: #FFFFFF; | ||
| 93 | |||
| 94 | span { | ||
| 95 | border-radius: 0px 10px 0px 10px; | ||
| 96 | padding: 4px 10px; | ||
| 97 | } | ||
| 98 | |||
| 99 | .bg-danger { | ||
| 100 | background: #E60012; | ||
| 101 | } | ||
| 102 | |||
| 103 | .bg-warning { | ||
| 104 | background: #e89f39; | ||
| 105 | } | ||
| 106 | |||
| 107 | .bg-pink { | ||
| 108 | background: #F740A6; | ||
| 109 | } | ||
| 110 | |||
| 111 | .bg-primary { | ||
| 112 | background: var(--el-color-primary) | ||
| 113 | } | ||
| 114 | |||
| 115 | .bg-blue { | ||
| 116 | background: #00a0e9 | ||
| 117 | } | ||
| 118 | } | ||
| 119 | |||
| 120 | .indexTitle { | ||
| 121 | margin: 20px 0 12px; | ||
| 122 | overflow: visible; | ||
| 123 | padding: 0 20px 15px; | ||
| 124 | border-bottom: 1px solid #e5e5e5; | ||
| 125 | |||
| 126 | .fr { | ||
| 127 | margin: -8px 0 0 | ||
| 128 | } | ||
| 129 | |||
| 130 | h3 { | ||
| 131 | display: inline-block; | ||
| 132 | font-size: 16px; | ||
| 133 | color: var(--el-color-primary); | ||
| 134 | } | ||
| 135 | } | ||
| 136 | |||
| 137 | .item { | ||
| 138 | .name { | ||
| 139 | font-size: 18px; | ||
| 140 | color: #000000; | ||
| 141 | margin: 0 0 10px; | ||
| 142 | } | ||
| 143 | |||
| 144 | p { | ||
| 145 | margin: 8px 0 0; | ||
| 146 | color: #707070; | ||
| 147 | font-size: 14px; | ||
| 148 | } | ||
| 149 | |||
| 150 | margin: 0 0 20px; | ||
| 151 | border: 1px solid #E5E5E5; | ||
| 152 | border-radius: 10px; | ||
| 153 | position: relative; | ||
| 154 | |||
| 155 | .bbody { | ||
| 156 | padding: 0 15px 20px; | ||
| 157 | } | ||
| 158 | |||
| 159 | .title { | ||
| 160 | background: #F7F7F7; | ||
| 161 | border-bottom: 1px solid #E5E5E5; | ||
| 162 | |||
| 163 | span { | ||
| 164 | font-size: 14px; | ||
| 165 | color: #4C5359; | ||
| 166 | } | ||
| 167 | } | ||
| 168 | |||
| 169 | .title label { | ||
| 170 | border-radius: 5px 0 5px 0; | ||
| 171 | font-size: 12px; | ||
| 172 | color: #fff; | ||
| 173 | padding: 4px 10px; | ||
| 174 | margin-right: 10px; | ||
| 175 | } | ||
| 176 | |||
| 177 | .blueTag { | ||
| 178 | background-color: #1EC886; | ||
| 179 | } | ||
| 180 | |||
| 181 | .purpleTag { | ||
| 182 | background-color: #717bef; | ||
| 183 | } | ||
| 184 | |||
| 185 | .orangeTag { | ||
| 186 | background-color: #ff8124; | ||
| 187 | } | ||
| 188 | } | ||
| 189 | |||
| 190 | .billFoot { | ||
| 191 | .price { | ||
| 192 | width: 100%; | ||
| 193 | justify-content: space-between; | ||
| 194 | } | ||
| 195 | } | ||
| 196 | |||
| 197 | .billFoot .tip { | ||
| 198 | font-size: 24px; | ||
| 199 | color: #999; | ||
| 200 | font-weight: 500; | ||
| 201 | margin: 0 20px; | ||
| 202 | } | ||
| 203 | |||
| 204 | .status { | ||
| 205 | position: absolute; | ||
| 206 | right: 10px; | ||
| 207 | bottom: 60px; | ||
| 208 | white-space: nowrap; | ||
| 209 | |||
| 210 | .warning { | ||
| 211 | color: #ff8124; | ||
| 212 | } | ||
| 213 | |||
| 214 | .danger { | ||
| 215 | color: #da2a2a; | ||
| 216 | } | ||
| 217 | |||
| 218 | .gary { | ||
| 219 | color: #666; | ||
| 220 | } | ||
| 221 | |||
| 222 | .success { | ||
| 223 | color: #1EC886; | ||
| 224 | } | ||
| 225 | } | ||
| 226 | </style> |
| ... | @@ -9,150 +9,9 @@ | ... | @@ -9,150 +9,9 @@ |
| 9 | <!-- <el-button class="fr" type="primary" plain @click="toInvoice">{{ language==0?'我的发票':'My Invoice' }}</el-button>--> | 9 | <!-- <el-button class="fr" type="primary" plain @click="toInvoice">{{ language==0?'我的发票':'My Invoice' }}</el-button>--> |
| 10 | </div> | 10 | </div> |
| 11 | <el-empty v-if="list?.length == 0" :image="`/img/order_no.png`" :image-size="228"/> | 11 | <el-empty v-if="list?.length == 0" :image="`/img/order_no.png`" :image-size="228"/> |
| 12 | 12 | <reservation-info v-else :list="list"></reservation-info> | |
| 13 | <div class="pd20"> | ||
| 14 | <div v-for="b in list" class="item"> | ||
| 15 | <div class="title"> | ||
| 16 | <label v-if="b.orderType == 0" class="blueTag"> {{ language == 0 ? '酒店' : 'HOTEL' }} </label> | ||
| 17 | <label v-if="b.orderType == 1" class="purpleTag"> {{ language == 0 ? '车辆' : 'TRANSPORTATION' }} </label> | ||
| 18 | <label v-if="b.orderType == 2" class="orangeTag"> {{ language == 0 ? '餐饮' : 'DINING' }} </label> | ||
| 19 | <label v-if="b.orderType == 3" class="orangeTag"> {{ language == 0 ? '化妆' : 'MakeUp' }} </label> | ||
| 20 | <label v-if="b.orderType == 4" class="orangeTag"> {{ language == 0 ? '拍摄' : 'Shooting ' }} </label> | ||
| 21 | <label v-if="b.orderType == 5" class="orangeTag"> {{ language == 0 ? '票务' : 'TICKETING ' }} </label> | ||
| 22 | |||
| 23 | <span>{{ language == 0 ? '订单编号:' : 'No.' }} {{ b.id }}</span> | ||
| 24 | </div> | ||
| 25 | |||
| 26 | <div class="status-po"> | ||
| 27 | <span v-if="b.status == '0'&&b.surplus!='0,0'&&b.surplus!='0'" class="bg-warning"> | ||
| 28 | {{ language == 0 ? '待支付' : 'Unpaid' }} | ||
| 29 | </span> | ||
| 30 | <span v-if="b.status == '0'&&(b.surplus=='0,0'||b.surplus=='0')" class="bg-warning">{{ | ||
| 31 | language == 0 ? '已取消' : 'Canceled' | ||
| 32 | }}</span> | ||
| 33 | <span v-if="b.status == '1'" class="bg-blue">{{ language == 0 ? '支付成功' : 'successful' }}</span> | ||
| 34 | <span v-if="b.status == '2'" class="bg-warning">{{ language == 0 ? '已取消' : 'Canceled' }}</span> | ||
| 35 | <span v-if="b.status == '3'||b.status == '4'" class="bg-danger">{{ | ||
| 36 | language == 0 ? '已退订' : 'Refunded' | ||
| 37 | }}</span> | ||
| 38 | <span v-if="b.status == '7'" class="bg-danger">{{ | ||
| 39 | language == 0 ? '退款审核中' : 'Refund in review' | ||
| 40 | }}</span> | ||
| 41 | <span v-if="b.status == '-1'" class="bg-blue">{{ | ||
| 42 | language == 0 ? '已核销' : 'Completed' | ||
| 43 | }}</span> | ||
| 44 | </div> | ||
| 45 | |||
| 46 | <el-row align="middle" class="pd20 mt10" justify="space-between"> | ||
| 47 | <el-col :lg="9" :md="12" :sm="12" :xs="24"> | ||
| 48 | <div v-if="b.orderType == 0"> | ||
| 49 | <h3 class="name">{{ b.name }}</h3> | ||
| 50 | <p v-if="language==0">{{ b.messageObj?.roomStayDate }}</p> | ||
| 51 | <p v-else>{{ b.messageObj?.roomStayDate.replace('共', ' total ').replace('晚', ' days') }}</p> | ||
| 52 | <p>{{ b.messageObj?.roomInfo }}</p> | ||
| 53 | |||
| 54 | </div> | ||
| 55 | <div v-if="b.orderType == 1"> | ||
| 56 | <h3 class="name">{{ b.name }}</h3> | ||
| 57 | <div v-for="(car,index) in b.messageObj.carsList" :key="index"> | ||
| 58 | <p v-if="car.num>0">{{ car.typeName }}:{{ car.name }}:{{ car.num }} {{ | ||
| 59 | language == 0 ? '辆' : 'Cars' | ||
| 60 | }}</p> | ||
| 61 | </div> | ||
| 62 | <!-- <p>{{b.messageObj}}</p>--> | ||
| 63 | <!-- <p>{{b.extJsonObj}}</p>--> | ||
| 64 | </div> | ||
| 65 | <div v-if="b.orderType == 2"> | ||
| 66 | <h3 class="name">{{ b.name }}</h3> | ||
| 67 | <div v-for="(n,index) in b.messageObj.foodsList" :key="index"> | ||
| 68 | <p v-if="n.num > 0"> | ||
| 69 | {{ n.name }}({{ n.categoryName }}) * <span>{{ n.num }} {{ language == 0 ? '份' : 'pcs' }}</span> | ||
| 70 | </p> | ||
| 71 | </div> | ||
| 72 | <p>{{ language == 0 ? '配送日期' : 'Delivery Date' }}:{{ b.extJsonObj.dcEnd }} ~ | ||
| 73 | {{ b.extJsonObj.dcEnd }}</p> | ||
| 74 | |||
| 75 | </div> | ||
| 76 | <div v-if="b.orderType==3 ||b.orderType == 4"> | ||
| 77 | <h3 class="name">{{ b.name }}</h3> | ||
| 78 | <p> | ||
| 79 | {{ | ||
| 80 | dayjs(b.deliveryTime).format('YYYY-MM-DD') + ' ' + b.extJsonObj.timePeriod?.split('-')[0] + '-' + dayjs(b.deliveryTime).format('YYYY-MM-DD') + ' ' + b.extJsonObj.timePeriod?.split('-')[1] | ||
| 81 | }} | ||
| 82 | </p> | ||
| 83 | </div> | ||
| 84 | |||
| 85 | <div v-if="b.orderType==5"> | ||
| 86 | <h3 class="name">{{ b.name }}</h3> | ||
| 87 | <p> | ||
| 88 | <!-- {{--> | ||
| 89 | <!-- dayjs(b.deliveryTime).format('YYYY-MM-DD') + ' ' + b.extJsonObj.timePeriod?.split('-')[0] + '-' + dayjs(b.deliveryTime).format('YYYY-MM-DD') + ' ' + b.extJsonObj.timePeriod?.split('-')[1]--> | ||
| 90 | <!-- }}--> | ||
| 91 | {{ b.extJsonObj.ticketDate.name }} | ||
| 92 | </p> | ||
| 93 | </div> | ||
| 94 | </el-col> | ||
| 95 | <el-col :lg="6" :md="12" :sm="12" :xs="24"> | ||
| 96 | <div v-if="b.orderType == 0"> | ||
| 97 | <p>{{ b.messageObj?.roomName }}</p> | ||
| 98 | <p>{{ b.messageObj?.roomInfo }}</p> | ||
| 99 | </div> | ||
| 100 | <div v-if="b.orderType == 1"> | ||
| 101 | </div> | ||
| 102 | <div v-if="b.orderType == 2"> | ||
| 103 | </div> | ||
| 104 | <div v-if="b.orderType == 3||b.orderType == 4"> | ||
| 105 | <p>{{ b.extJsonObj.packageName }}</p> | ||
| 106 | </div> | ||
| 107 | <div v-if="b.orderType == 5"> | ||
| 108 | <p>{{ b.extJsonObj.packageName }}</p> | ||
| 109 | </div> | ||
| 110 | </el-col> | ||
| 111 | <el-col :lg="3" :md="6" :sm="6" :xs="6" class="text-center"> | ||
| 112 | <span class="text-warning"> {{ language == 0 ? '¥' : '$' }} | ||
| 113 | <span class="bigMoney">{{ language == 0 ? b.total : b.totalEn }}</span> | ||
| 114 | </span> | ||
| 115 | </el-col> | ||
| 116 | <el-col :lg="6" :md="16" :sm="16" :xs="16"> | ||
| 117 | <div class="text-right mb20 text-danger" v-if="b.paymentType!='4'&&b.paymentType!='5'"> | ||
| 118 | <el-countdown | ||
| 119 | v-if="b.status == '0'&&(b.surplus!='0,0'&&b.surplus!='0')" | ||
| 120 | :value="b.countdown" | ||
| 121 | format="mm:ss" | ||
| 122 | value-style="color:#E60012;font-size:16px;" | ||
| 123 | @finish="finish(b)"/> | ||
| 124 | </div> | ||
| 125 | |||
| 126 | <div class="text-right"> | ||
| 127 | <el-button v-if="(b.orderType == 0||b.orderType == 5)&&b.viewStatus!=0" class="mb10" plain round | ||
| 128 | size="small" type="success" | ||
| 129 | @click="Rebook(b)"> | ||
| 130 | {{ language == 0 ? '再次预订' : 'Rebook' }} | ||
| 131 | </el-button> | ||
| 132 | <el-button class="mb10" plain round size="small" type="primary" @click="goDetail(b)"> | ||
| 133 | {{ language == 0 ? '详情' : 'Detail' }} | ||
| 134 | </el-button> | ||
| 135 | <el-button v-if="b.status == '0'&&(b.surplus!='0,0'&&b.surplus!='0')" class="mb10" | ||
| 136 | plain round size="small" type="primary" @click="goDetail(b)"> | ||
| 137 | <span v-if="b.paymentType=='4'||b.paymentType=='5'">{{language == 0 ? '上传凭证' : 'Upload Receipt'}}</span> | ||
| 138 | <span v-else>{{ language == 0 ? '支付' : 'Pay' }}</span> | ||
| 139 | </el-button> | ||
| 140 | <el-button v-if="b.viewStatus==0" class="mb10" plain round size="small" type="warning" | ||
| 141 | @click="cancel(b)"> | ||
| 142 | {{ language == 0 ? '取消订单' : 'Cancel Order' }} | ||
| 143 | </el-button> | ||
| 144 | <el-button v-if="b.viewStatus==5" class="mb10" plain round size="small" type="" @click="unsubscribe(b)"> | ||
| 145 | {{ language == 0 ? '退订' : 'Unsubscribe' }} | ||
| 146 | </el-button> | ||
| 147 | |||
| 148 | </div> | ||
| 149 | </el-col> | ||
| 150 | </el-row> | ||
| 151 | </div> | ||
| 152 | </div> | ||
| 153 | </el-card> | 13 | </el-card> |
| 154 | <div class="pd20"></div> | 14 | <div class="pd20"></div> |
| 155 | |||
| 156 | </div> | 15 | </div> |
| 157 | </template> | 16 | </template> |
| 158 | 17 | ||
| ... | @@ -161,10 +20,8 @@ import {onMounted, getCurrentInstance} from "@vue/runtime-core"; | ... | @@ -161,10 +20,8 @@ import {onMounted, getCurrentInstance} from "@vue/runtime-core"; |
| 161 | import {useStorage} from "@vueuse/core/index"; | 20 | import {useStorage} from "@vueuse/core/index"; |
| 162 | import {newbilllist} from "@/apiPc/common"; | 21 | import {newbilllist} from "@/apiPc/common"; |
| 163 | import useUserStore from "@/store/modules/user"; | 22 | import useUserStore from "@/store/modules/user"; |
| 164 | import dayjs from 'dayjs' | ||
| 165 | import {cancelOrder2, cancelOrder} from "/@/apiPc/booking"; | ||
| 166 | 23 | ||
| 167 | import {ElMessage} from "element-plus"; | 24 | import ReservationInfo from "/@/viewsPc/center/info/reservationInfo.vue"; |
| 168 | 25 | ||
| 169 | const router = useRouter() | 26 | const router = useRouter() |
| 170 | const language = useStorage('language', 0) | 27 | const language = useStorage('language', 0) |
| ... | @@ -176,10 +33,6 @@ onMounted(() => { | ... | @@ -176,10 +33,6 @@ onMounted(() => { |
| 176 | getList() | 33 | getList() |
| 177 | }) | 34 | }) |
| 178 | 35 | ||
| 179 | function finish(bill) { | ||
| 180 | bill.status = '2' | ||
| 181 | // getList() | ||
| 182 | } | ||
| 183 | 36 | ||
| 184 | function getList() { | 37 | function getList() { |
| 185 | newbilllist({createById: user.userId}).then(res => { | 38 | newbilllist({createById: user.userId}).then(res => { |
| ... | @@ -202,65 +55,6 @@ function getList() { | ... | @@ -202,65 +55,6 @@ function getList() { |
| 202 | }) | 55 | }) |
| 203 | } | 56 | } |
| 204 | 57 | ||
| 205 | function goDetail(b) { | ||
| 206 | router.push({ | ||
| 207 | name: 'bookingPay', | ||
| 208 | query: { | ||
| 209 | orderId: b.id, | ||
| 210 | orderType: b.orderType | ||
| 211 | } | ||
| 212 | }) | ||
| 213 | } | ||
| 214 | |||
| 215 | function Rebook(row) { | ||
| 216 | console.log(row) | ||
| 217 | if (row.orderType == 0) { | ||
| 218 | router.push({ | ||
| 219 | name: 'hotelDetail', | ||
| 220 | params: { | ||
| 221 | cptId: row.activeId, | ||
| 222 | hotelId: row.hotelId | ||
| 223 | }, | ||
| 224 | query: { | ||
| 225 | id: row.extId | ||
| 226 | } | ||
| 227 | }) | ||
| 228 | } else { | ||
| 229 | router.push({ | ||
| 230 | name: 'ticket', | ||
| 231 | params: { | ||
| 232 | activeId: row.activeId, | ||
| 233 | } | ||
| 234 | }) | ||
| 235 | } | ||
| 236 | } | ||
| 237 | |||
| 238 | const cancel = (row) => { | ||
| 239 | //取消订单 | ||
| 240 | proxy.$modal.confirm(language.value == 0 ? '确定取消订单吗 ?' : `Are you sure to cancel the order?`).then(() => { | ||
| 241 | return cancelOrder2(row.id).then(res => { | ||
| 242 | getList() | ||
| 243 | ElMessage({ | ||
| 244 | message: language.value == 0 ? '操作成功' : 'Successful operation!', | ||
| 245 | type: 'success' | ||
| 246 | }) | ||
| 247 | }) | ||
| 248 | }) | ||
| 249 | } | ||
| 250 | |||
| 251 | const unsubscribe = (row) => { | ||
| 252 | proxy.$modal.confirm(language.value == 0 ? `确定退款吗 ?` : 'Are you sure to refund?').then(() => { | ||
| 253 | return cancelOrder(row.id).then(res => { | ||
| 254 | getList() | ||
| 255 | ElMessage({ | ||
| 256 | message: language.value == 0 ? '已提交退款,请等待审核!' : 'Refund has been submitted, please wait for review!', | ||
| 257 | type: 'success' | ||
| 258 | }) | ||
| 259 | }) | ||
| 260 | }) | ||
| 261 | } | ||
| 262 | |||
| 263 | |||
| 264 | function toInvoice() { | 58 | function toInvoice() { |
| 265 | router.push({ | 59 | router.push({ |
| 266 | name: 'invoice' | 60 | name: 'invoice' | ... | ... |
| ... | @@ -9,64 +9,21 @@ | ... | @@ -9,64 +9,21 @@ |
| 9 | <!-- <el-button class="fr" type="primary" plain @click="toInvoice">{{ language==0?'我的发票':'My Invoice' }}</el-button>--> | 9 | <!-- <el-button class="fr" type="primary" plain @click="toInvoice">{{ language==0?'我的发票':'My Invoice' }}</el-button>--> |
| 10 | </div> | 10 | </div> |
| 11 | <el-empty v-if="list?.length == 0" :image="`/img/order_no.png`" :image-size="228"/> | 11 | <el-empty v-if="list?.length == 0" :image="`/img/order_no.png`" :image-size="228"/> |
| 12 | 12 | <visa-info v-else :list="list"></visa-info> | |
| 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.createTime }}</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" :disabled="b.emailFlag!='1'" plain round size="small" type="primary" | ||
| 40 | @click="handleDownload(b)"> | ||
| 41 | {{ language == 0 ? '下载邀请函' : 'Download Invitation' }} | ||
| 42 | </el-button> | ||
| 43 | <el-button class="mb10" plain round size="small" type="primary" @click="goDetail(b)"> | ||
| 44 | {{ language == 0 ? '详情' : 'Detail' }} | ||
| 45 | </el-button> | ||
| 46 | </div> | ||
| 47 | </el-col> | ||
| 48 | </el-row> | ||
| 49 | </div> | ||
| 50 | </div> | ||
| 51 | </el-card> | 13 | </el-card> |
| 52 | <affix-invitation-view ref="affixInvitationRef"></affix-invitation-view> | ||
| 53 | </div> | 14 | </div> |
| 54 | </template> | 15 | </template> |
| 55 | 16 | ||
| 56 | <script setup> | 17 | <script setup> |
| 57 | import {onMounted, getCurrentInstance} from "@vue/runtime-core"; | 18 | import {onMounted, getCurrentInstance} from "@vue/runtime-core"; |
| 58 | import {useStorage} from "@vueuse/core/index"; | 19 | import {useStorage} from "@vueuse/core/index"; |
| 59 | // import {newbilllist} from "@/apiPc/common"; | ||
| 60 | import useUserStore from "@/store/modules/user"; | 20 | import useUserStore from "@/store/modules/user"; |
| 61 | // import dayjs from 'dayjs' | ||
| 62 | import {cancelOrder2, cancelOrder} from "/@/apiPc/booking"; | 21 | import {cancelOrder2, cancelOrder} from "/@/apiPc/booking"; |
| 63 | |||
| 64 | import {ElMessage} from "element-plus"; | 22 | import {ElMessage} from "element-plus"; |
| 65 | import {downInvite, getUplaodFile, getVisaInfo} from "/@/apiPc/match"; | 23 | import {getVisaInfo} from "/@/apiPc/match"; |
| 66 | import AffixInvitationView from "/@/viewsPc/match/components/affix-invitation-view.vue"; | ||
| 67 | import {ref} from "vue"; | 24 | import {ref} from "vue"; |
| 68 | import {useRouter} from "vue-router"; | 25 | import {useRouter} from "vue-router"; |
| 69 | import {fillImgUrl} from "/@/utils/ruoyi"; | 26 | import VisaInfo from "/src/viewsPc/center/info/visaInfo.vue"; |
| 70 | 27 | ||
| 71 | const router = useRouter() | 28 | const router = useRouter() |
| 72 | const language = useStorage('language', 0) | 29 | const language = useStorage('language', 0) |
| ... | @@ -74,8 +31,6 @@ const list = ref([]) | ... | @@ -74,8 +31,6 @@ const list = ref([]) |
| 74 | const user = useUserStore().user | 31 | const user = useUserStore().user |
| 75 | const {proxy} = getCurrentInstance() | 32 | const {proxy} = getCurrentInstance() |
| 76 | 33 | ||
| 77 | const affixInvitationRef = ref(null) | ||
| 78 | |||
| 79 | onMounted(() => { | 34 | onMounted(() => { |
| 80 | getList() | 35 | getList() |
| 81 | }) | 36 | }) |
| ... | @@ -91,23 +46,6 @@ function getList() { | ... | @@ -91,23 +46,6 @@ function getList() { |
| 91 | }) | 46 | }) |
| 92 | } | 47 | } |
| 93 | 48 | ||
| 94 | function goDetail(b) { | ||
| 95 | affixInvitationRef.value.open(b) | ||
| 96 | // router.push({ | ||
| 97 | // name: 'bookingPay', | ||
| 98 | // query: { | ||
| 99 | // orderId: b.id, | ||
| 100 | // orderType: b.orderType | ||
| 101 | // } | ||
| 102 | // }) | ||
| 103 | } | ||
| 104 | |||
| 105 | function handleDownload(b) { | ||
| 106 | getUplaodFile({id: b.id}).then(res => { | ||
| 107 | window.open(fillImgUrl(res.msg), '_blank') | ||
| 108 | }) | ||
| 109 | } | ||
| 110 | |||
| 111 | function Rebook(row) { | 49 | function Rebook(row) { |
| 112 | console.log(row) | 50 | console.log(row) |
| 113 | if (row.orderType == 0) { | 51 | if (row.orderType == 0) { | ... | ... |
| ... | @@ -66,8 +66,9 @@ | ... | @@ -66,8 +66,9 @@ |
| 66 | required> | 66 | required> |
| 67 | <div style="padding: 1px"> | 67 | <div style="padding: 1px"> |
| 68 | <el-date-picker | 68 | <el-date-picker |
| 69 | v-model="form.pickUpBo.arrivalDate" :disabled-date="disabledDateRZ" | 69 | v-model="form.pickUpBo.arrivalDate" :disabled-date="disabledDateDP" |
| 70 | default-value="'2024-09-27'" format="YYYY-MM-DD" | 70 | default-value="2025-10-18" |
| 71 | format="YYYY-MM-DD" | ||
| 71 | placeholder="YYYY-MM-DD" | 72 | placeholder="YYYY-MM-DD" |
| 72 | style="width: 100%;" type="date" value-format="YYYY-MM-DD" | 73 | style="width: 100%;" type="date" value-format="YYYY-MM-DD" |
| 73 | /> | 74 | /> |
| ... | @@ -127,8 +128,8 @@ | ... | @@ -127,8 +128,8 @@ |
| 127 | <!-- </el-checkbox-group>--> | 128 | <!-- </el-checkbox-group>--> |
| 128 | <!-- </el-form-item>--> | 129 | <!-- </el-form-item>--> |
| 129 | 130 | ||
| 130 | <el-form-item :label="language==0?'队伍俱乐部':'Team/Club Name'" prop="pickUpBo.standing" required> | 131 | <el-form-item :label="language==0?'队伍俱乐部':'Team/Club Name'" prop="downOffBo.standing" required> |
| 131 | <el-input v-model="form.pickUpBo.standing"/> | 132 | <el-input v-model="form.downOffBo.standing"/> |
| 132 | </el-form-item> | 133 | </el-form-item> |
| 133 | 134 | ||
| 134 | <el-form-item :label="language==0?'国家/地区':'Country/Region'" prop="downOffBo.nationalitys" required> | 135 | <el-form-item :label="language==0?'国家/地区':'Country/Region'" prop="downOffBo.nationalitys" required> |
| ... | @@ -162,7 +163,8 @@ | ... | @@ -162,7 +163,8 @@ |
| 162 | <div style="padding: 1px"> | 163 | <div style="padding: 1px"> |
| 163 | <el-date-picker | 164 | <el-date-picker |
| 164 | v-model="form.downOffBo.arrivalDate" :disabled-date="disabledDateDP" | 165 | v-model="form.downOffBo.arrivalDate" :disabled-date="disabledDateDP" |
| 165 | default-value="'2024-09-30'" format="YYYY-MM-DD" | 166 | default-value="2025-10-31" |
| 167 | format="YYYY-MM-DD" | ||
| 166 | placeholder="YYYY-MM-DD" | 168 | placeholder="YYYY-MM-DD" |
| 167 | style="width: 100%;" type="date" value-format="YYYY-MM-DD" | 169 | style="width: 100%;" type="date" value-format="YYYY-MM-DD" |
| 168 | /> | 170 | /> |
| ... | @@ -199,8 +201,8 @@ | ... | @@ -199,8 +201,8 @@ |
| 199 | :limit="1"/> | 201 | :limit="1"/> |
| 200 | </el-form-item> | 202 | </el-form-item> |
| 201 | 203 | ||
| 202 | <el-form-item :label="language==0?'酒店预订单':'Hotel Reservation'" prop="pickUpBo.hotleFile" required> | 204 | <el-form-item :label="language==0?'酒店预订单':'Hotel Reservation'" prop="downOffBo.hotleFile" required> |
| 203 | <image-upload v-model="form.pickUpBo.hotleFile" :button-text="language==0?'上传':'Upload'" | 205 | <image-upload v-model="form.downOffBo.hotleFile" :button-text="language==0?'上传':'Upload'" |
| 204 | :is-show-tip="false" | 206 | :is-show-tip="false" |
| 205 | :limit="1"/> | 207 | :limit="1"/> |
| 206 | </el-form-item> | 208 | </el-form-item> |
| ... | @@ -389,11 +391,11 @@ const open = (params) => { | ... | @@ -389,11 +391,11 @@ const open = (params) => { |
| 389 | form.value = { | 391 | form.value = { |
| 390 | pickUpBo: { | 392 | pickUpBo: { |
| 391 | serviceType: 1, | 393 | serviceType: 1, |
| 392 | arrivalDate: '2024-09-27' | 394 | arrivalDate: '' |
| 393 | }, | 395 | }, |
| 394 | downOffBo: { | 396 | downOffBo: { |
| 395 | serviceType: 2, | 397 | serviceType: 2, |
| 396 | arrivalDate: '2024-09-30' | 398 | arrivalDate: '' |
| 397 | }, | 399 | }, |
| 398 | type: ['1'], | 400 | type: ['1'], |
| 399 | } | 401 | } |
| ... | @@ -529,13 +531,11 @@ function disabledDateRZ(date) { | ... | @@ -529,13 +531,11 @@ function disabledDateRZ(date) { |
| 529 | } | 531 | } |
| 530 | 532 | ||
| 531 | function disabledDateDP(date) { | 533 | function disabledDateDP(date) { |
| 532 | const today = dayjs().format('YYYY-MM-DD') | 534 | let min= dayjs('2025-10-18').valueOf() |
| 533 | // if ('2024-07-18' < today) { | 535 | let max =dayjs('2025-10-31').valueOf() |
| 534 | // return !((date.getTime() >= dayjs(today).valueOf()) && (date.getTime() <= dayjs('2024-07-22').valueOf())) | 536 | if (date.getTime() < min || date.getTime() > max) { |
| 535 | // } else { | 537 | return true |
| 536 | // return !((date.getTime() >= dayjs('2024-07-18').valueOf()) && (date.getTime() <= dayjs('2024-07-22').valueOf())) | 538 | } |
| 537 | // } | ||
| 538 | return !(date.getTime() == dayjs('2024-09-30').valueOf()) | ||
| 539 | } | 539 | } |
| 540 | </script> | 540 | </script> |
| 541 | 541 | ... | ... |
-
Please register or sign in to post a comment