2a7aa630 by 李婷婷

预定查询

1 parent 00bdea3a
...@@ -185,4 +185,40 @@ export function queryTicket(qy) { ...@@ -185,4 +185,40 @@ export function queryTicket(qy) {
185 params: qy 185 params: qy
186 }) 186 })
187 } 187 }
188 188 // 酒店
189 export function orderRoomList(qy) {
190 return request({
191 url: `/ota/orderRoom/getReservationRecordList`,
192 method: 'get',
193 params: qy
194 })
195 }
196 // 接送
197 export function orderCarList(qy) {
198 return request({
199 url: `/ota/orderCar/getReservationRecordList`,
200 method: 'get',
201 params: qy
202 })
203 }
204 export function orderMealList(qy) {
205 return request({
206 url: `/ota/orderMeal/getReservationRecordList`,
207 method: 'get',
208 params: qy
209 })
210 }
211 export function orderScenicList(qy) {
212 return request({
213 url: `/ota/orderScenic/getReservationRecordList`,
214 method: 'get',
215 params: qy
216 })
217 }
218 export function orderTicketList(qy) {
219 return request({
220 url: `/ota/orderTicket/getReservationRecordList`,
221 method: 'get',
222 params: qy
223 })
224 }
......
...@@ -75,7 +75,7 @@ onMounted(() => { ...@@ -75,7 +75,7 @@ onMounted(() => {
75 function getList() { 75 function getList() {
76 query.value.activityId = route.params.cptId 76 query.value.activityId = route.params.cptId
77 getActivityRestaurantList(query.value).then(res => { 77 getActivityRestaurantList(query.value).then(res => {
78 list.value = res.rows 78 list.value = res.rows.filter(item => item.viewStatus == '1');
79 }) 79 })
80 } 80 }
81 81
......
...@@ -75,7 +75,7 @@ onMounted(()=>{ ...@@ -75,7 +75,7 @@ onMounted(()=>{
75 function getList() { 75 function getList() {
76 loading.value = true 76 loading.value = true
77 booking.getMakeUpList(query.value).then(res=>{ 77 booking.getMakeUpList(query.value).then(res=>{
78 list.value = res.rows 78 list.value = res.rows.filter(item => item.viewStatus == 1)
79 loading.value = false 79 loading.value = false
80 }).catch(e=>{ 80 }).catch(e=>{
81 loading.value = false 81 loading.value = false
......
...@@ -75,7 +75,7 @@ onMounted(()=>{ ...@@ -75,7 +75,7 @@ onMounted(()=>{
75 function getList() { 75 function getList() {
76 loading.value = true 76 loading.value = true
77 booking.getShootList(query.value).then(res=>{ 77 booking.getShootList(query.value).then(res=>{
78 list.value = res.rows 78 list.value = res.rows.filter(item => item.viewStatus == 1)
79 loading.value = false 79 loading.value = false
80 }).catch(e=>{ 80 }).catch(e=>{
81 loading.value = false 81 loading.value = false
......
...@@ -159,17 +159,20 @@ ...@@ -159,17 +159,20 @@
159 </div> 159 </div>
160 </div> 160 </div>
161 <div class="select_item_box"> 161 <div class="select_item_box">
162 <div class="select_item"> 162 <div class="select_item-tag">
163 <div 163 <div
164 v-for="it in tickList[selectForm.sessionType]" 164 v-for="it in tickList[selectForm.sessionType]"
165 :key="it.id" 165 :key="it.id"
166 :class="[ 166
167 it.id == selectForm.latstId ? 'tagActive' : 'tag', 167
168 it.isView==0?'forbid':''
169 ]"
170 @click="selectTick(it)" 168 @click="selectTick(it)"
171 > 169 >
172 {{ it.name }} 170 <span v-if="it.viewStatus === '1'" :class="[
171 it.id == selectForm.latstId ? 'tagActive' : 'tag',
172 it.isView==0?'forbid':''
173 ]" >
174 {{ it.name}}
175 </span>
173 </div> 176 </div>
174 <div class="father"> 177 <div class="father">
175 <el-image 178 <el-image
...@@ -665,6 +668,65 @@ getmatchData() ...@@ -665,6 +668,65 @@ getmatchData()
665 cursor: no-drop; 668 cursor: no-drop;
666 } 669 }
667 } 670 }
671 .select_item-tag{
672 display: flex;
673 flex-wrap: wrap;
674 // gap: 10px;
675 user-select: none;
676
677 .tag_t {
678 padding: 1px 15px;
679 font-weight: 400;
680 font-size: 14px;
681 color: #493ceb;
682 border-radius: 6px;
683 border: 1px solid #453dea;
684 margin-left: 5px;
685 }
686
687 .tag {
688 display: flex;
689 padding: 12px 18px;
690 background: #eeeeee;
691 border-radius: 4px;
692 border: 1px solid #29343c;
693 font-size: 14px;
694 color: #4a4a4a;
695 margin-right: 10px;
696 margin-bottom: 10px;
697 cursor: pointer;
698 }
699
700 .tagActive {
701 display: flex;
702 padding: 12px 18px;
703 background: #fff;
704 border-radius: 4px;
705 border: 1px solid #493ceb;
706 font-size: 14px;
707 color: #493ceb;
708 margin-right: 10px;
709 margin-bottom: 10px;
710 cursor: pointer;
711 }
712
713 .tao {
714 border: 1px solid #493ceb;
715 font-size: 14px;
716 color: #493ceb;
717 margin-left: 10px;
718 }
719
720 .tagDisabled {
721 padding: 12px 18px;
722 background: #878787;
723 border-radius: 4px;
724 border: 1px solid #29343c;
725 font-size: 14px;
726 color: #4a4a4a;
727 cursor: no-drop;
728 }
729 }
668 } 730 }
669 731
670 .btn { 732 .btn {
...@@ -871,4 +933,11 @@ getmatchData() ...@@ -871,4 +933,11 @@ getmatchData()
871 } 933 }
872 } 934 }
873 } 935 }
936 .view-status-mark {
937 color: #493ceb; /* 与票档主题色一致 */
938 font-size: 12px; /* 小于票型名称字号,避免突兀 */
939 margin-left: 4px; /* 与名称保持间距 */
940 font-weight: 500;
941
942 }
874 </style> 943 </style>
......
...@@ -100,7 +100,7 @@ onMounted(() => { ...@@ -100,7 +100,7 @@ onMounted(() => {
100 function getList() { 100 function getList() {
101 loading.value = true 101 loading.value = true
102 booking.getScenicList(query.value).then(res => { 102 booking.getScenicList(query.value).then(res => {
103 list.value = res.rows 103 list.value = res.rows.filter(item => item.viewStatus == '1');
104 loading.value = false 104 loading.value = false
105 console.log(list.value) 105 console.log(list.value)
106 }).catch(e => { 106 }).catch(e => {
......
1 <template> 1 <template>
2 <el-dialog 2 <el-dialog v-model="show" :close-on-click-modal="false" :title="language === 0 ? '预订查询' : 'Reservation Inquiry'"
3 v-model="show" 3 align-center append-to-body center class="booking-inquiry-dialog" close-icon="CircleClose" destroy-on-close>
4 :close-on-click-modal="false" 4 <!-- 查询区域 -->
5 :title="language==0?'日程查询':'Schedule inquiry'" 5 <div class="search-container">
6 align-center 6 <el-input v-model="query" :placeholder="language === 0 ? '输入邮箱号查询' : 'Enter email to Query'" clearable
7 append-to-body 7 @blur="handleSearch" @empty="handleSearch" @enter="handleSearch" class="search-input" />
8 center 8 <el-button class="btn-lineG" style="color: #fff" @click="handleSearch">{{
9 class="pcloginpop"
10 close-icon="CircleClose"
11 destroy-on-close
12 style="min-width:350px;max-width: 500px"
13 >
14 <div v-loading="loading" style="min-height: 500px;height: 50vh;">
15
16 <div v-if="!type||type==''">
17 <div class="rItem" @click="type='0'">{{ language == 0 ? '按项目查询' : 'Query by project' }}</div>
18 <div class="rItem" @click="type='1'">{{ language == 0 ? '按团队查询' : 'Query by team' }}</div>
19 <div class="rItem" @click="type='2'">{{ language == 0 ? '按姓名查询' : 'Query by name' }}</div>
20 </div>
21
22 <div v-if="type=='0'">
23 <div class="flex mt30">
24 <el-input
25 v-model="query"
26 :placeholder="language==0?'输入项目/ 项目编号查询':'Enter project name or code to Query'" clearable
27 @blur="search" @empty="search" @enter="search"
28 />
29 <el-button class="btn-lineG" style="color: #fff" @click="search">{{
30 language == 0 ? '查询' : 'Search' 9 language == 0 ? '查询' : 'Search'
31 }} 10 }}
32 </el-button> 11 </el-button>
33 </div> 12 </div>
34 13
35 <div v-if="list.length>0" class="mt30 rollY"> 14 <!-- 标签页 -->
36 <el-timeline> 15 <el-tabs v-model="activeName" class="tabs-container" @tab-click="handleTabClick">
37 <el-timeline-item 16 <el-tab-pane :label="language === 0 ? '酒店' : 'Hotel'" name="1"></el-tab-pane>
38 v-for="(form, index) in list" 17 <el-tab-pane :label="language === 0 ? '化妆' : 'Makeup'" name="2"></el-tab-pane>
39 :key="index" :timestamp="form.date + ' ' + form.timeStr" 18 <el-tab-pane :label="language === 0 ? '接送' : 'Transfer'" name="3"></el-tab-pane>
40 placement="top" 19 <el-tab-pane :label="language === 0 ? '旅游' : 'Tour'" name="4"></el-tab-pane>
41 > 20 <el-tab-pane :label="language === 0 ? '票务' : 'Tickets'" name="5"></el-tab-pane>
42 <div class="text-primary"> 21 </el-tabs>
43 <span v-if="language==1&&form.projectNameEn">{{ form.projectNameEn }}</span>
44 <span v-else-if="form.projectName">{{ form.projectName }}</span>
45 <span class="fr">{{ form.changCi }} <i
46 v-if="form.changCi"
47 >/ </i> {{ language == 0 ? form.lun : form.lunEn }} </span>
48 </div>
49 <div>{{ form.danceType }}</div>
50 <div>{{ form.address }}</div>
51 </el-timeline-item>
52 </el-timeline>
53 </div>
54 <div v-else>
55 <el-empty />
56 </div>
57 </div>
58 <div class="searchBox">
59 <div v-if="type=='1'">
60 <div class="flex mt20">
61 <el-input
62 v-model="query2"
63 :placeholder="language==0?'请输入代表队名称至少两字符':'Enter the representing team name,At least two characters'"
64 clearable
65 @blur="searchTeam" @empty="searchTeam" @enter="searchTeam"
66 />
67 <el-button class="btn-lineG" style="color: #fff" @click="searchTeam">
68 {{ language == 0 ? '查询' : 'Search' }}
69 </el-button>
70 </div>
71 <span class="tip">*{{ language == 0 ? '模糊查询' : 'Fuzzy query' }}</span>
72 <div v-if="showGroupList" class="text-danger text-center">
73 {{ language == 0 ? '找到多个团体' : 'Found multiple teams' }}
74 </div>
75 <div v-if="showGroupList" class="groupList rollY">
76 <ul>
77 <li v-for="(item, index) in groupList" :key="index" @click="showDetail(item)">{{ item }}
78 <el-icon class="fr">
79 <ArrowRight />
80 </el-icon>
81 </li>
82 </ul>
83 </div>
84 <div v-if="teamlist.length>0" class="temell mt20 rollY">
85 <el-collapse accordion>
86 <el-collapse-item v-for="(team,index) in teamlist" :key="index" :name="index" :title="team[0].title">
87 <el-timeline>
88 <el-timeline-item v-for="(form, index) in team" :key="index" placement="top">
89
90 <div class="text-primary" style="position: relative;top:-15px">
91 {{ form.date + ' ' + form.timeStr + ' / ' + form.address }}
92 <span v-if="form.lunEn"> / {{ form.lunEn }}</span>
93 <span v-else-if="form.lun"> / {{ form.lun }}</span>
94 <span v-if="form.changCi "> / {{ language == 0 ? '场次' : 'Session' }}{{ form.changCi }}</span>
95 </div>
96 <div v-if="form.projectNameEn" class="tname">{{ form.projectNameEn }}</div>
97 <div v-if="form.projectName" class="tname">{{ form.projectName }}</div>
98 <div>{{ form.danceType }}</div>
99 </el-timeline-item>
100 </el-timeline>
101 </el-collapse-item>
102 </el-collapse>
103 </div>
104 </div>
105 22
106 <div v-if="type=='2'"> 23 <!-- 加载状态 -->
107 <div class="flex mt30"> 24 <div v-if="loading" class="loading-container">
108 <el-input 25 <el-loading :text="language === 0 ? '查询中...' : 'Searching...'" />
109 v-model="query3"
110 :placeholder="language==0?'输入选手姓名查询':'Enter the name of the player to Query'" clearable
111 @blur="personalSearch" @empty="personalSearch" @enter="personalSearch"
112 />
113 <el-button class="btn-lineG" style="color: #fff" @click="personalSearch">{{
114 language == 0 ? '查询' : 'Search'
115 }}
116 </el-button>
117 </div>
118 <div v-if="list.length>0" class="temell mt20 rollY">
119 <el-timeline>
120 <el-timeline-item v-for="(team,j) in list" :key="j" placement="top">
121 <div v-for="(form, index) in team" v-show="index==0" :key="index">
122 <div class="text-primary" style="position: relative;top:-15px">
123 {{ form.date + ' ' + form.timeStr + ' / ' + form.address }}
124 <span v-if="form.lunEn"> / {{ form.lunEn }}</span>
125 <span v-else-if="form.lun"> / {{ form.lun }}</span>
126 <span v-if="form.changCi "> / {{ language == 0 ? '场次' : 'Session' }}{{ form.changCi }}</span>
127 </div>
128 <div v-if="form.projectNameEn" class="tname">{{ form.projectNameEn }}</div>
129 <div v-if="form.projectName" class="tname">{{ form.projectName }}</div>
130 <div>{{ form.danceType }}</div>
131 </div>
132 <div v-for="(form, index) in team" v-show="index>0" :key="index" style="margin: 8px 0 0">
133 {{ form.date + ' ' + form.timeStr + ' / ' + form.address }}
134 <span v-if="form.lunEn"> / {{ form.lunEn }}</span>
135 <span v-else-if="form.lun"> / {{ form.lun }}</span>
136 <span v-if="form.changCi "> / {{ language == 0 ? '场次' : 'Session' }}{{ form.changCi }}</span>
137 </div>
138 </el-timeline-item>
139 </el-timeline>
140 </div>
141 </div>
142 </div> 26 </div>
27
28 <!-- 结果列表 -->
29 <div v-else class="results-container">
30 <!-- 酒店 -->
31 <el-card v-for="(item, index) in list" :key="index" class="result-card" v-if="activeName === '1'">
32 <p><span class="label">{{ language === 0 ? '酒店名称:' : 'Hotel Name:' }}</span>{{ item.hotelName }}</p>
33 <p><span class="label">{{ language === 0 ? '酒店联系人:' : 'Contact Person:' }}</span>{{ item.contact || '-' }}
34 </p>
35 <p><span class="label">{{ language === 0 ? '预定日期:' : 'Booking Date:' }}</span>{{ item.handleDate }}</p>
36 <p><span class="label">{{ language === 0 ? '预定数量:' : 'Quantity:' }}</span>{{ item.roomNum }}</p>
37 <p><span class="label">{{ language === 0 ? '入住人:' : 'Guest:' }}</span>{{ item.rzUsers }}</p>
38 </el-card>
39
40 <!-- 化妆 -->
41 <el-card v-for="(item, index) in list" :key="index" class="result-card" v-if="activeName === '2'">
42 <p><span class="label">{{ language === 0 ? '商家名称:' : 'Merchant:' }}</span>{{ item.name }}</p>
43 <p><span class="label">{{ language === 0 ? '套餐名称:' : 'Package:' }}</span>{{ item.meal?.packageName || '-' }}</p>
44 <p><span class="label">{{ language === 0 ? '工作室联系人:' : 'Studio Contact:' }}</span>{{ item.contacts }}</p>
45 <p><span class="label">{{ language === 0 ? '预定数量:' : 'Quantity:' }}</span>{{ item.num }}</p>
46 <p><span class="label">{{ language === 0 ? '预定时间:' : 'Booking Time:' }}</span>{{ item.payDate }}</p>
47 </el-card>
48
49 <!-- 接送 -->
50 <el-card v-for="(item, index) in list" :key="index" class="result-card" v-if="activeName === '3'">
51 <p><span class="label">{{ language === 0 ? '出发地:' : 'From:' }}</span>{{ item.resName.split('——')[0] || '-' }}
52 </p>
53 <p><span class="label">{{ language === 0 ? '终点地:' : 'To:' }}</span>{{ item.resName.split('——')[1] || '-' }}</p>
54 <p><span class="label">{{ language === 0 ? '用车日期:' : 'Date:' }}</span>{{ item.revTime }}</p>
55 <p><span class="label">{{ language === 0 ? '乘坐人:' : 'Passengers:' }}</span><span v-html="item.person"></span>
56 </p>
57 </el-card>
58
59 <!-- 旅游 -->
60 <el-card v-for="(item, index) in list" :key="index" class="result-card" v-if="activeName === '4'">
61 <p><span class="label">{{ language === 0 ? '景点名称:' : 'Attraction:' }}</span>{{ item.name }}</p>
62 <p><span class="label">{{ language === 0 ? '景区联系人:' : 'Contact:' }}</span>{{ item.contact }}</p>
63 <p><span class="label">{{ language === 0 ? '预约日期:' : 'Booking Date:' }}</span>{{ item.dcStart }}</p>
64 <p><span class="label">{{ language === 0 ? '预约人:' : 'Booker:' }}</span>{{ item.contacts }}</p>
65 <p><span class="label">{{ language === 0 ? '集合地点:' : 'Meeting Point:' }}</span>{{ item.address || '-' }}
66 </p>
67 <p><span class="label">{{ language === 0 ? '集合时间:' : 'Meeting Time:' }}</span>{{ item.startTime || '-' }}</p>
68 </el-card>
69
70 <!-- 票务 -->
71 <el-card v-for="(item, index) in list" :key="index" class="result-card" v-if="activeName === '5'">
72 <p><span class="label">{{ language === 0 ? '票型:' : 'Ticket Type:' }}</span>{{ item.ticketTypeStr }}</p>
73 <p><span class="label">{{ language === 0 ? '预定日期:' : 'Booking Date:' }}</span>{{ item.ticketTimeName }}</p>
74 <p><span class="label">{{ language === 0 ? '场次:' : 'Session:' }}</span>{{ item.sessionTypeName }}</p>
75 <p><span class="label">{{ language === 0 ? '场馆:' : 'Venue:' }}</span>{{ item.stadiumName }}</p>
76 <p><span class="label">{{ language === 0 ? '区域:' : 'Area:' }}</span>{{ item.ticketName || '-' }}</p>
77 <p><span class="label">{{ language === 0 ? '观影人:' : 'Attendees:' }}</span><span v-html="item.customers"></span>
78 </p>
79 </el-card>
80
81 <!-- 无结果 -->
82 <div v-if="list.length === 0" class="empty-container">
83 <el-empty :description="language === 0 ? '暂无相关预定记录' : 'No records found'" />
143 </div> 84 </div>
144 <div v-if="list.length>0||showGroupList.length>0||teamlist.length>0||groupList.length>0" class="text-center">
145 {{
146 language == 0 ? '下滑查看更多' : 'Scroll down to view more'
147 }}
148 </div> 85 </div>
149 </el-dialog> 86 </el-dialog>
150 </template> 87 </template>
151 88
152 <script setup> 89 <script setup>
153 import { ref } from 'vue' 90 import { ref } from 'vue'
154 import { ElMessage } from 'element-plus' 91 import { ElMessage, ElLoading } from 'element-plus'
155 import { 92 import {
156 getquerySchedule2Pre, 93 orderRoomList,//酒店
157 getqySchedule, 94 orderMealList,//化妆
158 getqySchedule2, 95 orderCarList,//接送
159 getTeamBackNumber, 96 orderScenicList,//旅游
160 getTeamBackNumberPre, queryScheduleSingle 97 orderTicketList,//票务
161 } from '@/apiPc/common' 98 } from '@/apiPc/common'
162 import { useStorage } from '@vueuse/core/index' 99 import { useStorage } from '@vueuse/core/index'
163 100
101 // 状态管理
164 const language = useStorage('language', 0) 102 const language = useStorage('language', 0)
165 const show = ref(false) 103 const show = ref(false)
166 // const form = ref({})
167 const list = ref([]) 104 const list = ref([])
168 const loading = ref(false) 105 const loading = ref(false)
169 const groupList = ref([])
170 const teamlist = ref([])
171 const query = ref('') 106 const query = ref('')
172 const query2 = ref('')
173 const query3 = ref('')
174 const type = ref('')
175 const showGroupList = ref(false)
176 const cptId = ref() 107 const cptId = ref()
108 const activeName = ref('1')
177 109
178 const search = () => { 110 // 处理tab切换
179 if (!query.value) { 111 const handleTabClick = (val) => {
180 ElMessage.warning(language.value == 0 ? '请输入搜索关键词' : 'Enter project name or code to Query') 112 activeName.value = val.paneName
181 return 113 if (query.value) {
182 } 114 handleSearch()
183 getqySchedule({ projectName: query.value, cptId: cptId.value }).then(res => {
184 if (!res.data || res.data.length == 0) {
185 list.value = []
186 // 提示 '未找到结果,请重新查询'
187 ElMessage.warning(language.value == 0 ? '未找到结果,请重新查询' : 'No result')
188 return
189 } 115 }
190 list.value = res.data
191 }).catch(e => {
192 loading.value = false
193 })
194 } 116 }
195 const searchTeam = () => { 117
196 teamlist.value = [] 118 // 处理搜索
197 if (!query2.value || query2.value.length < 2) { 119 const handleSearch = () => {
198 ElMessage.warning(language.value == 0 ? '请输入代表队名称至少两字符' : 'Enter the representing team name,At least two characters') 120 // 验证输入
121 if (!query.value) {
122 ElMessage.warning(language.value === 0 ? '请输入邮箱号' : 'Enter email to Query')
199 return 123 return
200 } 124 }
125
126 // 显示加载状态
201 loading.value = true 127 loading.value = true
202 getquerySchedule2Pre({ groupName: query2.value, cptId: cptId.value }).then(res => { 128 list.value = []
203 loading.value = false 129
204 if (!res.data || res.data.length == 0) { 130 // 根据当前tab调用不同接口
205 groupList.value = [] 131 const params = { createBy: query.value }
206 // 提示 '未找到结果,请重新查询' 132 let requestPromise;
207 ElMessage.warning(language.value == 0 ? '未找到结果,请重新查询' : 'No result') 133 switch (activeName.value) {
208 return 134 case '1':
209 } 135 requestPromise = orderRoomList(params)
210 groupList.value = res.data 136 break
211 if (groupList.value.length == 1) { 137 case '2':
212 showDetail(groupList.value[0]) 138 requestPromise = orderMealList(params)
213 } 139 break
214 if (groupList.value.length > 1) { 140 case '3':
215 showGroupList.value = true 141 requestPromise = orderCarList(params)
216 } 142 break
217 }).catch(e => { 143 case '4':
218 loading.value = false 144 requestPromise = orderScenicList(params)
219 }) 145 break
220 } 146 case '5':
221 const personalSearch = () => { 147 requestPromise = orderTicketList(params)
222 if (!query3.value) { 148 break
223 ElMessage.warning(language.value == 0 ? '请输入搜索关键词' : 'Enter project name or code to Query') 149 default:
224 return 150 requestPromise = Promise.reject(new Error('Invalid tab'))
225 } 151 }
226 loading.value = true 152
227 queryScheduleSingle({ query: query3.value, cptId: cptId.value }).then(res => { 153 // 处理请求结果
154 requestPromise.then(res => {
228 loading.value = false 155 loading.value = false
229 if (!res.data || res.data.length == 0) { 156 if (!res.rows || res.rows.length === 0) {
230 list.value = [] 157 list.value = []
231 // 提示 '未找到结果,请重新查询' 158 ElMessage.info(language.value === 0 ? '未找到结果,请重新查询' : 'No results found')
232 ElMessage.warning(language.value == 0 ? '未找到结果,请重新查询' : 'No result')
233 return 159 return
234 } 160 }
235 list.value = res.data 161 list.value = res.rows
162 }).catch(e => {
163 loading.value = false
164 ElMessage.error(language.value === 0 ? '查询失败,请稍后重试' : 'Query failed, please try again later')
165 console.error('查询错误:', e)
236 }) 166 })
237 } 167 }
168
169 // 打开对话框
238 const open = (param) => { 170 const open = (param) => {
239 console.log(param) 171 cptId.value = param?.cptId
240 cptId.value = param.cptId
241 show.value = true 172 show.value = true
242 list.value = [] 173 list.value = []
243 teamlist.value = []
244 groupList.value = []
245 query.value = '' 174 query.value = ''
246 type.value = '' 175 activeName.value = '1'
247 loading.value = false 176 loading.value = false
248 } 177 }
178
179 // 暴露方法
249 defineExpose({ 180 defineExpose({
250 open 181 open
251 }) 182 })
252
253 function showDetail(name) {
254 query2.value = name
255 showGroupList.value = false
256 loading.value = true
257 getqySchedule2({ groupName: name, cptId: cptId.value }).then(res => {
258 loading.value = false
259 teamlist.value = res.data
260 }).catch(e => {
261 loading.value = false
262 })
263 }
264 </script> 183 </script>
265 184
266 <style lang="scss" scoped> 185 <style lang="scss" scoped>
267 .tname { 186 .booking-inquiry-dialog {
268 font-size: 14px; 187 min-width: 300px;
269 font-weight: bold; 188 max-width: 500px;
270 position: relative; 189 padding: 15px;
271 top: -8px
272 }
273 190
274 .tip { 191 // 适配移动端
275 font-size: 12px; 192 @media (max-width: 768px) {
276 margin: 4px 0 0; 193 width: 90% !important;
277 display: inline-block; 194 max-width: none;
195 }
278 } 196 }
279 197
280 .rItem { 198 .search-container {
281 max-height: 130px; 199 display: flex;
282 cursor: pointer; 200 gap: 10px;
283 border: 1px solid #e1e1e1; 201 margin-bottom: 20px;
284 border-radius: 4px; 202 width: 100%;
285 max-width: 350px; 203
286 text-align: center; 204 .search-input {
287 line-height: 130px; 205 flex: 1;
288 padding: 1px; 206 }
289 font-size: 30px; 207
290 color: #fff; 208 .search-btn {
291 margin: 20px auto; 209 background-color: #409eff;
292 background: linear-gradient(90deg, #8623FC, #453DEA); 210 color: white;
293 211
294 &:hover { 212 &:hover {
295 background: linear-gradient(90deg, #453DEA, #8623FC); 213 background-color: #66b1ff;
296 box-shadow: 0 4px 10px #453DEA; 214 }
297 border: none;
298 } 215 }
299 } 216 }
300 217
301 .nowteamItem { 218 .tabs-container {
219 margin-bottom: 20px;
302 width: 100%; 220 width: 100%;
303 border: 1px solid #c8c5ff;
304 margin-top: 20px;
305 position: relative;
306 border-radius: 4px;
307 padding: 0 0 20px;
308 background: #FFFFFF;
309 box-sizing: border-box;
310
311 .info {
312 .nowName {
313 font-family: "DIN Alternate";
314 font-size: 60px;
315 font-weight: bold;
316 overflow: hidden;
317 display: block;
318 margin: 10px;
319 }
320 221
321 label { 222 ::v-deep .el-tabs__nav {
322 text-align: right; 223 flex-wrap: wrap;
323 font-size: 14px;
324 padding-left: 7%
325 } 224 }
326 225
327 div { 226 ::v-deep .el-tabs__item {
328 font-size: 14px; 227 margin-bottom: 5px;
329 color: #333;
330 margin: 6px 0 0;
331 }
332 } 228 }
333 } 229 }
334 230
335 .temell { 231 .loading-container {
336 .nowteamItem { 232 display: flex;
337 padding: 10px; 233 justify-content: center;
338 margin: 0 0 10px; 234 align-items: center;
235 padding: 40px 0;
236 }
339 237
340 .nowName { 238 .results-container {
341 font-size: 15px; 239 max-height: 500px;
342 font-weight: bold; 240 overflow-y: auto;
343 margin-right: 10px 241 padding-right: 5px;
344 }
345 242
346 .text-bold { 243 // 滚动条美化
347 font-weight: bold; 244 &::-webkit-scrollbar {
245 width: 6px;
348 } 246 }
349 247
350 .fontsize14 { 248 &::-webkit-scrollbar-thumb {
351 font-size: 14px; 249 background-color: #ddd;
352 } 250 border-radius: 3px;
353 } 251 }
354 } 252 }
355 253
356 .groupList { 254 .result-card {
357 max-height: 70vh; 255 margin-bottom: 15px;
358 overflow: auto; 256 border-radius: 6px;
359 border: 1px solid #e1e1e1; 257 overflow: hidden;
360 margin-top: 10px;
361 258
362 li { 259 ::v-deep .el-card__body {
363 padding: 10px; 260 padding: 15px;
364 border-bottom: 1px solid #e1e1e1;
365 cursor: pointer;
366 } 261 }
367 }
368 262
369 .searchBox { 263 p {
370 height: 50vh; 264 margin: 0 0 8px 0;
371 //overflow-y: auto; 265 line-height: 1.5;
266 font-size: 14px;
267
268 .label {
269 color: #666;
270 font-weight: 500;
271 }
272 }
273
274 p:last-child {
275 margin-bottom: 0;
276 }
372 } 277 }
373 278
374 .rollY { 279 .empty-container {
375 height: 45vh; 280 padding: 40px 0;
376 overflow-y: auto; 281 text-align: center;
377 } 282 }
378 </style> 283 </style>
......
1 <template> 1 <template>
2 <div> 2 <div>
3 <div class="banner"> 3 <div class="banner">
4 <el-carousel 4 <el-carousel :autoplay="false" :interval="2000" arrow="hover" class="forPc" height="450px"
5 :autoplay="false" :interval="2000" arrow="hover" class="forPc" 5 @change="carouselChange">
6 height="450px"
7 @change="carouselChange"
8 >
9 <el-carousel-item v-for="n in maList" :key="n.id" style="height: 450px;"> 6 <el-carousel-item v-for="n in maList" :key="n.id" style="height: 450px;">
10 <div class="bannerItem"> 7 <div class="bannerItem">
11 <div class="h100" @click.stop="goMatch(n)"> 8 <div class="h100" @click.stop="goMatch(n)">
12 <img v-if="n.bgImgUrl" :src="fillImgUrl(n.bgImgUrl)" class="bannerImg"> 9 <img v-if="n.bgImgUrl" :src="fillImgUrl(n.bgImgUrl)" class="bannerImg">
13 <img v-else class="bannerImg" src="@/assets/dance/banner.png"> 10 <img v-else class="bannerImg" src="@/assets/dance/banner.png">
14 <div class="box forPc" style="position: absolute;top: 0;left: 0;right: 0;margin: auto;"> 11 <div class="box forPc" style="position: absolute;top: 0;left: 0;right: 0;margin: auto;">
15 <div v-if="n.time>0" class="banner-count" @click="goMatch(n)"> 12 <div v-if="n.time > 0" class="banner-count" @click="goMatch(n)">
16 距离开始还有 13 距离开始还有
17 <van-count-down :time="n.time" format="DD 天 HH 时 mm 分 ss 秒"> 14 <van-count-down :time="n.time" format="DD 天 HH 时 mm 分 ss 秒">
18 <template #default="timeData"> 15 <template #default="timeData">
...@@ -34,30 +31,21 @@ ...@@ -34,30 +31,21 @@
34 </template> 31 </template>
35 </van-count-down> 32 </van-count-down>
36 </div> 33 </div>
37 <div v-if="n.timeEnd<0"> 34 <div v-if="n.timeEnd < 0">
38 35
39 <div class="banner-count bb" @click="goMatch(n)"> 36 <div class="banner-count bb" @click="goMatch(n)">
40 报名已结束 37 报名已结束
41 </div> 38 </div>
42 </div> 39 </div>
43 <div v-if="n.time<=0 && n.timeEnd>=0" class="banner-count bb" @click="goMatch(n)"> 40 <div v-if="n.time <= 0 && n.timeEnd >= 0" class="banner-count bb" @click="goMatch(n)">
44 开始报名 41 开始报名
45 </div> 42 </div>
46 43
47 <div 44 <div
48 style="position: absolute;bottom:22%;right:5%;z-index: 999;display: flex;width: 580px;justify-content: space-around" 45 style="position: absolute;bottom:22%;right:5%;z-index: 999;display: flex;width: 580px;justify-content: space-around">
49 > 46 <a class=" btn2" style="z-index: 999999" @click.stop="liveQrcodeShowBtn">赛事直播
50 <a
51 class=" btn2"
52 style="z-index: 999999"
53 @click.stop="liveQrcodeShowBtn"
54 >赛事直播
55 </a> 47 </a>
56 <a 48 <a class=" btn2" @click.stop="popMaster">公益课
57
58 class=" btn2"
59 @click.stop="popMaster"
60 >公益课
61 </a> 49 </a>
62 </div> 50 </div>
63 51
...@@ -73,7 +61,7 @@ ...@@ -73,7 +61,7 @@
73 <img v-if="n.bgImgUrl" :src="fillImgUrl(n.bgImgUrl)" class="bannerImg"> 61 <img v-if="n.bgImgUrl" :src="fillImgUrl(n.bgImgUrl)" class="bannerImg">
74 <img v-else class="bannerImg" src="@/assets/dance/banner.png"> 62 <img v-else class="bannerImg" src="@/assets/dance/banner.png">
75 <div style="position: absolute;left: 0;right: 0;top: 100px;margin: auto;"> 63 <div style="position: absolute;left: 0;right: 0;top: 100px;margin: auto;">
76 <div v-if="n.time>0" class="banner-count" @click="goMatch(n)"> 64 <div v-if="n.time > 0" class="banner-count" @click="goMatch(n)">
77 距离开始还有 65 距离开始还有
78 <van-count-down :time="n.time" format="DD 天 HH 时 mm 分 ss 秒"> 66 <van-count-down :time="n.time" format="DD 天 HH 时 mm 分 ss 秒">
79 <template #default="timeData"> 67 <template #default="timeData">
...@@ -95,31 +83,22 @@ ...@@ -95,31 +83,22 @@
95 </template> 83 </template>
96 </van-count-down> 84 </van-count-down>
97 </div> 85 </div>
98 <div v-if="n.timeEnd<0"> 86 <div v-if="n.timeEnd < 0">
99 87
100 <div class="banner-count bb" @click="goMatch(n)"> 88 <div class="banner-count bb" @click="goMatch(n)">
101 报名已结束 89 报名已结束
102 </div> 90 </div>
103 </div> 91 </div>
104 <div v-if="n.time<=0 && n.timeEnd>=0" class="banner-count bb" @click="goMatch(n)"> 92 <div v-if="n.time <= 0 && n.timeEnd >= 0" class="banner-count bb" @click="goMatch(n)">
105 开始报名 93 开始报名
106 </div> 94 </div>
107 95
108 </div> 96 </div>
109 <div 97 <div
110 style="position: absolute;bottom:20px;z-index: 999;display: flex;width: 380px;justify-content: space-around" 98 style="position: absolute;bottom:20px;z-index: 999;display: flex;width: 380px;justify-content: space-around">
111 > 99 <a class=" btn2-phone" style="z-index: 999999" @click.stop="liveQrcodeShowBtn">赛事直播
112 <a
113 class=" btn2-phone"
114 style="z-index: 999999"
115 @click.stop="liveQrcodeShowBtn"
116 >赛事直播
117 </a> 100 </a>
118 <a 101 <a class=" btn2-phone" @click.stop="popMaster">公益课
119
120 class=" btn2-phone"
121 @click.stop="popMaster"
122 >公益课
123 </a> 102 </a>
124 </div> 103 </div>
125 </div> 104 </div>
...@@ -140,16 +119,10 @@ ...@@ -140,16 +119,10 @@
140 <download /> 119 <download />
141 </el-icon> 120 </el-icon>
142 </a> 121 </a>
143 <a 122 <a class="zn-btn ml10 btn-q" @click="reserveSearch">预订查询</a>
144 class="zn-btn ml20 btn-q" 123
145 @click="reserveSearch" 124 <a v-show="matchData?.id" class="zn-btn ml10 btn-q mt20" @click="backNumberSearch">背号查询</a>
146 >预定查询</a> 125 <a v-show="matchData?.id" class="zn-btn ml10 btn-q" @click="schSearch">日程查询</a>
147 <br/>
148 <a
149 v-show="matchData?.id" class="zn-btn btn-q mt20"
150 @click="backNumberSearch"
151 >背号查询</a>
152 <a v-show="matchData?.id" class="zn-btn ml20 btn-q" @click="schSearch">日程查询</a>
153 </div> 126 </div>
154 </el-col> 127 </el-col>
155 <el-col :lg="14" :sm="24"> 128 <el-col :lg="14" :sm="24">
...@@ -168,7 +141,7 @@ ...@@ -168,7 +141,7 @@
168 <a class="more" href="#/saiC">MORE</a> 141 <a class="more" href="#/saiC">MORE</a>
169 </div> 142 </div>
170 <!--赛事日历--> 143 <!--赛事日历-->
171 <el-card :body-style="{'padding':'20px 20px'}"> 144 <el-card :body-style="{ 'padding': '20px 20px' }">
172 <home-calendar /> 145 <home-calendar />
173 </el-card> 146 </el-card>
174 </el-col> 147 </el-col>
...@@ -178,14 +151,14 @@ ...@@ -178,14 +151,14 @@
178 <a class="more" href="#/saiC">MORE</a> 151 <a class="more" href="#/saiC">MORE</a>
179 </div> 152 </div>
180 <!--历史排名--> 153 <!--历史排名-->
181 <el-card :body-style="{'padding':'10px 20px 18px'}"> 154 <el-card :body-style="{ 'padding': '10px 20px 18px' }">
182 <el-table :data="rank" height="495" stripe @row-click="handleRowClick"> 155 <el-table :data="rank" height="495" stripe @row-click="handleRowClick">
183 <el-table-column align="center" label="名次" prop="index" width="50" /> 156 <el-table-column align="center" label="名次" prop="index" width="50" />
184 157
185 <el-table-column label="国家" prop="name"> 158 <el-table-column label="国家" prop="name">
186 <template #default="scope"> 159 <template #default="scope">
187 <div> 160 <div>
188 <span v-if="scope.row.code!='tw'" :class="`flag-icon flag-icon-${scope.row.code}`" /> 161 <span v-if="scope.row.code != 'tw'" :class="`flag-icon flag-icon-${scope.row.code}`" />
189 <span v-else class="flag-icon"> 162 <span v-else class="flag-icon">
190 <img :src="hkImage" alt="" class="hkimg"> 163 <img :src="hkImage" alt="" class="hkimg">
191 </span> 164 </span>
...@@ -247,11 +220,7 @@ ...@@ -247,11 +220,7 @@
247 <a class="more" @click="goNews">MORE</a> 220 <a class="more" @click="goNews">MORE</a>
248 </div> 221 </div>
249 <el-row :gutter="20"> 222 <el-row :gutter="20">
250 <el-col 223 <el-col v-for="(n, index) in newest2" :key="n.id" :lg="8" :sm="8" :xs="24">
251 v-for="(n,index) in newest2"
252 :key="n.id" :lg="8" :sm="8"
253 :xs="24"
254 >
255 <div class="activeItem" @click="goDetail(n)"> 224 <div class="activeItem" @click="goDetail(n)">
256 <div class="imgbox"> 225 <div class="imgbox">
257 <img :src="fillImgUrl_webSite(n.picUrl)"> 226 <img :src="fillImgUrl_webSite(n.picUrl)">
...@@ -281,7 +250,7 @@ ...@@ -281,7 +250,7 @@
281 <el-row :gutter="20"> 250 <el-row :gutter="20">
282 <el-col :lg="8"> 251 <el-col :lg="8">
283 <a class="liveImgbox" target="_blank" @click="golive(livelist[0])"> 252 <a class="liveImgbox" target="_blank" @click="golive(livelist[0])">
284 <div v-if="time>0" class="livetimecount"> 253 <div v-if="time > 0" class="livetimecount">
285 <van-count-down :time="time" format="DD 天 HH 时 mm 分 ss 秒"> 254 <van-count-down :time="time" format="DD 天 HH 时 mm 分 ss 秒">
286 <template #default="timeData"> 255 <template #default="timeData">
287 <div class="block">{{ timeData.days }} 256 <div class="block">{{ timeData.days }}
...@@ -299,13 +268,13 @@ ...@@ -299,13 +268,13 @@
299 </template> 268 </template>
300 </van-count-down> 269 </van-count-down>
301 </div> 270 </div>
302 <i v-else-if="etime>0&&time<=0" class="ii">直播中</i> 271 <i v-else-if="etime > 0 && time <= 0" class="ii">直播中</i>
303 <!-- <i class="livetimecount" v-if="etime<=0">直播已结束</i>--> 272 <!-- <i class="livetimecount" v-if="etime<=0">直播已结束</i>-->
304 <div class="imgBox"> 273 <div class="imgBox">
305 <img v-if="time>0" src="/img/111.jpg"> 274 <img v-if="time > 0" src="/img/111.jpg">
306 <img v-else :src="fillImgUrl_webSite(livelist[0]?.picUrl)"> 275 <img v-else :src="fillImgUrl_webSite(livelist[0]?.picUrl)">
307 </div> 276 </div>
308 <h3 v-if="time>0" class="esp"> 277 <h3 v-if="time > 0" class="esp">
309 2025WDSF亚洲体育舞蹈节 278 2025WDSF亚洲体育舞蹈节
310 </h3> 279 </h3>
311 <h3 v-else class="esp"> 280 <h3 v-else class="esp">
...@@ -315,12 +284,9 @@ ...@@ -315,12 +284,9 @@
315 </el-col> 284 </el-col>
316 <el-col :lg="16"> 285 <el-col :lg="16">
317 <div class="swiperPic"> 286 <div class="swiperPic">
318 <swiper 287 <swiper :autoplay="true" :loop="true" :modules="modules" :navigation="navigationPic"
319 :autoplay="true" :loop="true" :modules="modules" :navigation="navigationPic" 288 :slides-per-view="3" :space-between="20" class="swiper-wrapper">
320 :slides-per-view="3" 289 <swiper-slide v-for="(n, i) in picList" :key="i">
321 :space-between="20" class="swiper-wrapper"
322 >
323 <swiper-slide v-for="(n,i) in picList" :key="i">
324 <div class="picbox" @click="goDetail(n)"> 290 <div class="picbox" @click="goDetail(n)">
325 <img :src="fillImgUrl_webSite(n.picUrl)"> 291 <img :src="fillImgUrl_webSite(n.picUrl)">
326 </div> 292 </div>
...@@ -332,11 +298,12 @@ ...@@ -332,11 +298,12 @@
332 </el-col> 298 </el-col>
333 </el-row> 299 </el-row>
334 <el-row class="news-l-r"> 300 <el-row class="news-l-r">
335 <el-col v-for="(n,index) in livelist" v-show="index>0" :lg="8"> 301 <el-col v-for="(n, index) in livelist" v-show="index > 0" :lg="8">
336 <div class="item" style="padding: 0;margin: 20px 0 0" @click="goDetail(n)"> 302 <div class="item" style="padding: 0;margin: 20px 0 0" @click="goDetail(n)">
337 <div class="imgbox"> 303 <div class="imgbox">
338 <i class="playIcon" /> 304 <i class="playIcon" />
339 <img :src="fillImgUrl_webSite(n.picUrl)"></div> 305 <img :src="fillImgUrl_webSite(n.picUrl)">
306 </div>
340 <div class="info"> 307 <div class="info">
341 <div class="text-primary small-size"> 308 <div class="text-primary small-size">
342 <span v-if="n.subName">{{ n.subName + ' | ' }}</span> 309 <span v-if="n.subName">{{ n.subName + ' | ' }}</span>
...@@ -358,10 +325,7 @@ ...@@ -358,10 +325,7 @@
358 <h3 class="leftboderTT">评委介绍</h3> 325 <h3 class="leftboderTT">评委介绍</h3>
359 </div> 326 </div>
360 <el-row :gutter="20"> 327 <el-row :gutter="20">
361 <el-col 328 <el-col v-for="n in personList" :key="n.name" :lg="4" :md="8" :sm="12" :xl="4" :xs="12">
362 v-for="n in personList" :key="n.name" :lg="4" :md="8" :sm="12"
363 :xl="4" :xs="12"
364 >
365 <div class="teacher" @click="goLeaderInfo"> 329 <div class="teacher" @click="goLeaderInfo">
366 <div class="imgbox"><img :src="n.src"></div> 330 <div class="imgbox"><img :src="n.src"></div>
367 <h3 class="esp">{{ n.name }}</h3> 331 <h3 class="esp">{{ n.name }}</h3>
...@@ -387,8 +351,7 @@ ...@@ -387,8 +351,7 @@
387 </div> 351 </div>
388 <div class="mt30 text-center"> 352 <div class="mt30 text-center">
389 <a class="btn-lineG" href="#/about/wuDao" style="display: inline-flex;align-items: center;">了解更多<img 353 <a class="btn-lineG" href="#/about/wuDao" style="display: inline-flex;align-items: center;">了解更多<img
390 src="@/assets/v1/more.png" style="filter: brightness(2);height: 8px" 354 src="@/assets/v1/more.png" style="filter: brightness(2);height: 8px"></a>
391 ></a>
392 </div> 355 </div>
393 356
394 </div> 357 </div>
...@@ -437,36 +400,22 @@ ...@@ -437,36 +400,22 @@
437 <img src="@/assets/logo/Invitation_c.png" @click="applyInvitation" v-if="matchData.invitationSw == '1'"> 400 <img src="@/assets/logo/Invitation_c.png" @click="applyInvitation" v-if="matchData.invitationSw == '1'">
438 <!-- && maList.invitationSw == '1' --> 401 <!-- && maList.invitationSw == '1' -->
439 <div v-if="clubImage && matchData.visaSw == '1'" style="padding-left: 7px;"> 402 <div v-if="clubImage && matchData.visaSw == '1'" style="padding-left: 7px;">
440 <el-image 403 <el-image :preview-src-list="[clubImage]" :src="clubImage" fit="cover" preview-teleported
441 :preview-src-list="[clubImage]" 404 style="width: 120px" />
442 :src="clubImage"
443 fit="cover"
444 preview-teleported
445 style="width: 120px"
446 />
447 </div> 405 </div>
448 406
449 </div> 407 </div>
450 408
451 <!-- 群聊--> 409 <!-- 群聊-->
452 <div v-if="matchData.chatQrcode" class="fixed_gg_l club"> 410 <div v-if="matchData.chatQrcode" class="fixed_gg_l club">
453 <el-image 411 <el-image :preview-src-list="[fillImgUrl(matchData.chatQrcode)]" :src="fillImgUrl(matchData.chatQrcode)"
454 :preview-src-list="[ fillImgUrl(matchData.chatQrcode) ]" 412 fit="cover" preview-teleported style="width: 120px;height: 120px" />
455 :src="fillImgUrl(matchData.chatQrcode)"
456 fit="cover"
457 preview-teleported
458 style="width: 120px;height: 120px"
459 />
460 </div> 413 </div>
461 414
462 <affix-invitation ref="dialogInvitationRef" /> 415 <affix-invitation ref="dialogInvitationRef" />
463 <el-dialog v-model="liveQrcodeShow" :title="language==0?'赛事直播' :'Live QR Code'" width="350px"> 416 <el-dialog v-model="liveQrcodeShow" :title="language == 0 ? '赛事直播' : 'Live QR Code'" width="350px">
464 <div v-if="matchData.liveQrcode" style="display: flex;justify-content: space-between"> 417 <div v-if="matchData.liveQrcode" style="display: flex;justify-content: space-between">
465 <el-image 418 <el-image :src="fillImgUrl(matchData.liveQrcode)" fit="cover" style="width: 350px;" />
466 :src="fillImgUrl(matchData.liveQrcode)"
467 fit="cover"
468 style="width: 350px;"
469 />
470 </div> 419 </div>
471 420
472 </el-dialog> 421 </el-dialog>
...@@ -505,7 +454,7 @@ const navigationPic = ref({ ...@@ -505,7 +454,7 @@ const navigationPic = ref({
505 }) 454 })
506 const router = useRouter() 455 const router = useRouter()
507 const { proxy } = getCurrentInstance() 456 const { proxy } = getCurrentInstance()
508 const emit = defineEmits(['pop', 'pickup', 'backNumber', 'schSearch','reserveSearch']) 457 const emit = defineEmits(['pop', 'pickup', 'backNumber', 'schSearch', 'reserveSearch'])
509 const time = ref(0) 458 const time = ref(0)
510 const etime = ref(0) 459 const etime = ref(0)
511 const personList = ref([ 460 const personList = ref([
...@@ -584,7 +533,7 @@ const init = () => { ...@@ -584,7 +533,7 @@ const init = () => {
584 }) 533 })
585 match.getMaList({ topFlag: 1 }).then((res) => { 534 match.getMaList({ topFlag: 1 }).then((res) => {
586 maList.value = res.rows 535 maList.value = res.rows
587 console.log(333,maList.value) 536 console.log(333, maList.value)
588 for (const n of maList.value) { 537 for (const n of maList.value) {
589 const today = dayjs().format('YYYY-MM-DD HH:mm:ss') 538 const today = dayjs().format('YYYY-MM-DD HH:mm:ss')
590 if (n.signBeginTime) { 539 if (n.signBeginTime) {
...@@ -665,11 +614,11 @@ const goGuide = () => { ...@@ -665,11 +614,11 @@ const goGuide = () => {
665 }) 614 })
666 } 615 }
667 const liveQrcodeShowBtn = () => { 616 const liveQrcodeShowBtn = () => {
668 if(!matchData.value.liveQrcode){ 617 if (!matchData.value.liveQrcode) {
669 ElMessage.warning('当前赛事暂无直播') 618 ElMessage.warning('当前赛事暂无直播')
670 return 619 return
671 }else{ 620 } else {
672 liveQrcodeShow.value=true 621 liveQrcodeShow.value = true
673 } 622 }
674 } 623 }
675 const popMaster = () => { 624 const popMaster = () => {
...@@ -715,7 +664,6 @@ function applyInvitation() { ...@@ -715,7 +664,6 @@ function applyInvitation() {
715 </script> 664 </script>
716 665
717 <style lang="scss" scoped> 666 <style lang="scss" scoped>
718
719 .zn-bg { 667 .zn-bg {
720 background: linear-gradient(90deg, #8623FC, #8623FC, #8623FC, #8623FC, #8623FC, #8623FC, #453DEA, #8623FC); 668 background: linear-gradient(90deg, #8623FC, #8623FC, #8623FC, #8623FC, #8623FC, #8623FC, #453DEA, #8623FC);
721 border-radius: 15px; 669 border-radius: 15px;
...@@ -1028,8 +976,7 @@ function applyInvitation() { ...@@ -1028,8 +976,7 @@ function applyInvitation() {
1028 background: linear-gradient(0deg, rgba(255, 255, 255, 1), rgba(255, 255, 255, 0)); 976 background: linear-gradient(0deg, rgba(255, 255, 255, 1), rgba(255, 255, 255, 0));
1029 } 977 }
1030 978
1031 .btn-lineG { 979 .btn-lineG {}
1032 }
1033 } 980 }
1034 981
1035 .mapBox { 982 .mapBox {
...@@ -1146,6 +1093,7 @@ function applyInvitation() { ...@@ -1146,6 +1093,7 @@ function applyInvitation() {
1146 .box { 1093 .box {
1147 width: 94% 1094 width: 94%
1148 } 1095 }
1096
1149 .calendarList { 1097 .calendarList {
1150 padding: 0; 1098 padding: 0;
1151 1099
...@@ -1155,12 +1103,15 @@ function applyInvitation() { ...@@ -1155,12 +1103,15 @@ function applyInvitation() {
1155 } 1103 }
1156 } 1104 }
1157 } 1105 }
1106
1158 .aboutBox { 1107 .aboutBox {
1159 padding: 20px 30px; 1108 padding: 20px 30px;
1160 } 1109 }
1110
1161 .indexTitle { 1111 .indexTitle {
1162 margin: 30px 0 20px 1112 margin: 30px 0 20px
1163 } 1113 }
1114
1164 .teacher { 1115 .teacher {
1165 height: 320px; 1116 height: 320px;
1166 margin: 0 0 20px; 1117 margin: 0 0 20px;
...@@ -1169,9 +1120,11 @@ function applyInvitation() { ...@@ -1169,9 +1120,11 @@ function applyInvitation() {
1169 height: 260px 1120 height: 260px
1170 } 1121 }
1171 } 1122 }
1123
1172 .activeItem { 1124 .activeItem {
1173 margin: 0 0 20px; 1125 margin: 0 0 20px;
1174 } 1126 }
1127
1175 .mapBox { 1128 .mapBox {
1176 div { 1129 div {
1177 padding-left: 40px; 1130 padding-left: 40px;
...@@ -1192,9 +1145,11 @@ function applyInvitation() { ...@@ -1192,9 +1145,11 @@ function applyInvitation() {
1192 word-break: break-all; 1145 word-break: break-all;
1193 } 1146 }
1194 } 1147 }
1148
1195 .fixed_gg { 1149 .fixed_gg {
1196 display: none; 1150 display: none;
1197 } 1151 }
1152
1198 .bannerItem .banner-count { 1153 .bannerItem .banner-count {
1199 flex-direction: column; 1154 flex-direction: column;
1200 transform: scale(0.5); 1155 transform: scale(0.5);
...@@ -1256,6 +1211,7 @@ function applyInvitation() { ...@@ -1256,6 +1211,7 @@ function applyInvitation() {
1256 .forPc { 1211 .forPc {
1257 display: none !important; 1212 display: none !important;
1258 } 1213 }
1214
1259 .logobox { 1215 .logobox {
1260 height: 60px; 1216 height: 60px;
1261 } 1217 }
...@@ -1338,6 +1294,7 @@ function applyInvitation() { ...@@ -1338,6 +1294,7 @@ function applyInvitation() {
1338 color: #fff; 1294 color: #fff;
1339 border-radius: 20px; 1295 border-radius: 20px;
1340 } 1296 }
1297
1341 .btn2-phone { 1298 .btn2-phone {
1342 cursor: pointer; 1299 cursor: pointer;
1343 padding: 10px 20px; 1300 padding: 10px 20px;
...@@ -1375,5 +1332,4 @@ function applyInvitation() { ...@@ -1375,5 +1332,4 @@ function applyInvitation() {
1375 } 1332 }
1376 } 1333 }
1377 } 1334 }
1378
1379 </style> 1335 </style>
......
1 <template> 1 <template>
2 <div> 2 <div>
3 <div class="banner"> 3 <div class="banner">
4 <el-carousel 4 <el-carousel :autoplay="false" :interval="2000" arrow="hover" class="forPc" height="450px"
5 :autoplay="false" :interval="2000" arrow="hover" class="forPc" 5 @change="carouselChange">
6 height="450px"
7 @change="carouselChange"
8 >
9 <el-carousel-item v-for="n in maList" :key="n.id" style="height: 450px;"> 6 <el-carousel-item v-for="n in maList" :key="n.id" style="height: 450px;">
10 <div class="bannerItem"> 7 <div class="bannerItem">
11 <div class="h100" @click.stop="goMatch(n)"> 8 <div class="h100" @click.stop="goMatch(n)">
...@@ -13,7 +10,7 @@ ...@@ -13,7 +10,7 @@
13 <img v-else class="bannerImg" src="@/assets/dance/banner.png"> 10 <img v-else class="bannerImg" src="@/assets/dance/banner.png">
14 <div class="box" style="position: absolute;top: 0;left: 0;right: 0;margin: auto;"> 11 <div class="box" style="position: absolute;top: 0;left: 0;right: 0;margin: auto;">
15 12
16 <div v-if="n.time>0" class="banner-count"> 13 <div v-if="n.time > 0" class="banner-count">
17 Countdown 14 Countdown
18 <van-count-down :time="n.time" format="DD 天 HH 时 mm 分 ss 秒"> 15 <van-count-down :time="n.time" format="DD 天 HH 时 mm 分 ss 秒">
19 <template #default="timeData"> 16 <template #default="timeData">
...@@ -35,29 +32,22 @@ ...@@ -35,29 +32,22 @@
35 </template> 32 </template>
36 </van-count-down> 33 </van-count-down>
37 </div> 34 </div>
38 <div v-if="n.timeEnd<0"> 35 <div v-if="n.timeEnd < 0">
39 <div class="banner-count bb" @click="goMatch(n)"> 36 <div class="banner-count bb" @click="goMatch(n)">
40 Registration has ended 37 Registration has ended
41 </div> 38 </div>
42 </div> 39 </div>
43 <div v-if="n.time<=0&&n.timeEnd>=0" class="banner-count bb" @click="goMatch(n)"> 40 <div v-if="n.time <= 0 && n.timeEnd >= 0" class="banner-count bb" @click="goMatch(n)">
44 REGISTER NOW 41 REGISTER NOW
45 </div> 42 </div>
46 43
47 <div 44 <div
48 style="position: absolute;bottom:22%;right:5%;z-index: 999;display: flex;width: 580px;justify-content: space-around" 45 style="position: absolute;bottom:22%;right:5%;z-index: 999;display: flex;width: 580px;justify-content: space-around">
49 > 46 <a class=" btn2" style="z-index: 999999" @click.stop="liveQrcodeShowBtn">
50 <a
51 class=" btn2"
52 style="z-index: 999999" @click.stop="liveQrcodeShowBtn"
53 >
54 <!-- 赛事直播--> 47 <!-- 赛事直播-->
55 Live Qrcode 48 Live Qrcode
56 </a> 49 </a>
57 <a 50 <a class=" btn2" @click.stop="popMaster">Junior &Youth Camp REGISTER
58 class=" btn2"
59 @click.stop="popMaster"
60 >Junior &Youth Camp REGISTER
61 </a> 51 </a>
62 </div> 52 </div>
63 </div> 53 </div>
...@@ -72,7 +62,7 @@ ...@@ -72,7 +62,7 @@
72 <img v-if="n.bgImgUrl" :src="fillImgUrl(n.bgImgUrl)" class="bannerImg"> 62 <img v-if="n.bgImgUrl" :src="fillImgUrl(n.bgImgUrl)" class="bannerImg">
73 <img v-else class="bannerImg" src="@/assets/dance/banner.png"> 63 <img v-else class="bannerImg" src="@/assets/dance/banner.png">
74 <div style="position: absolute;left: 0;right: 0;top: 100px;margin: auto;"> 64 <div style="position: absolute;left: 0;right: 0;top: 100px;margin: auto;">
75 <div v-if="n.time>0" class="banner-count"> 65 <div v-if="n.time > 0" class="banner-count">
76 Countdown 66 Countdown
77 <van-count-down :time="n.time" format="DD 天 HH 时 mm 分 ss 秒"> 67 <van-count-down :time="n.time" format="DD 天 HH 时 mm 分 ss 秒">
78 <template #default="timeData"> 68 <template #default="timeData">
...@@ -94,31 +84,24 @@ ...@@ -94,31 +84,24 @@
94 </template> 84 </template>
95 </van-count-down> 85 </van-count-down>
96 </div> 86 </div>
97 <div v-if="n.timeEnd<0"> 87 <div v-if="n.timeEnd < 0">
98 88
99 <div class="banner-count bb" @click="goMatch(n)"> 89 <div class="banner-count bb" @click="goMatch(n)">
100 Registration has ended 90 Registration has ended
101 </div> 91 </div>
102 </div> 92 </div>
103 <div v-if="n.time<=0&&n.timeEnd>=0" class="banner-count bb" @click="goMatch(n)"> 93 <div v-if="n.time <= 0 && n.timeEnd >= 0" class="banner-count bb" @click="goMatch(n)">
104 REGISTER NOW 94 REGISTER NOW
105 </div> 95 </div>
106 96
107 </div> 97 </div>
108 <div 98 <div
109 style="position: absolute;bottom:20px;z-index: 999;display: flex;width: 380px;justify-content: space-around" 99 style="position: absolute;bottom:20px;z-index: 999;display: flex;width: 380px;justify-content: space-around">
110 >
111 100
112 <a 101 <a class=" btn2-phone" style="z-index: 999999" @click.stop="liveQrcodeShowBtn">
113 class=" btn2-phone"
114 style="z-index: 999999" @click.stop="liveQrcodeShowBtn"
115 >
116 Live Qrcode 102 Live Qrcode
117 </a> 103 </a>
118 <a 104 <a class=" btn2-phone" @click.stop="popMaster">Junior &Youth Camp REGISTER
119 class=" btn2-phone"
120 @click.stop="popMaster"
121 >Junior &Youth Camp REGISTER
122 </a> 105 </a>
123 </div> 106 </div>
124 </div> 107 </div>
...@@ -141,7 +124,7 @@ ...@@ -141,7 +124,7 @@
141 <download /> 124 <download />
142 </el-icon> 125 </el-icon>
143 </a> 126 </a>
144 <a class="zn-btn ml20 btn-q" @click="popMaster">Booking Inquiry</a> 127 <a class="zn-btn ml20 btn-q" @click="reserveSearch">Reservation Inquiry</a>
145 <!-- <a 128 <!-- <a
146 v-if="matchData.isCourseView==1" class="zn-btn ml20 btn-q forPc" 129 v-if="matchData.isCourseView==1" class="zn-btn ml20 btn-q forPc"
147 style="font-size: 15px;margin-right: 20px" @click="popMaster" 130 style="font-size: 15px;margin-right: 20px" @click="popMaster"
...@@ -177,7 +160,7 @@ ...@@ -177,7 +160,7 @@
177 <a class="more" @click="gosaiC">MORE</a> 160 <a class="more" @click="gosaiC">MORE</a>
178 </div> 161 </div>
179 <!--赛事日历--> 162 <!--赛事日历-->
180 <el-card :body-style="{'padding':'20px 20px'}"> 163 <el-card :body-style="{ 'padding': '20px 20px' }">
181 <home-calendar /> 164 <home-calendar />
182 </el-card> 165 </el-card>
183 </el-col> 166 </el-col>
...@@ -187,7 +170,7 @@ ...@@ -187,7 +170,7 @@
187 <!-- <a class="more" href="#/saiC">MORE</a>--> 170 <!-- <a class="more" href="#/saiC">MORE</a>-->
188 </div> 171 </div>
189 <!--历史排名--> 172 <!--历史排名-->
190 <el-card :body-style="{'padding':'10px 20px 18px'}"> 173 <el-card :body-style="{ 'padding': '10px 20px 18px' }">
191 <el-table :data="rank" height="490" stripe @row-click="handleRowClick"> 174 <el-table :data="rank" height="490" stripe @row-click="handleRowClick">
192 <el-table-column align="center" label="RANK" prop="index" width="80"> 175 <el-table-column align="center" label="RANK" prop="index" width="80">
193 <!-- <template #default="scope">--> 176 <!-- <template #default="scope">-->
...@@ -201,7 +184,7 @@ ...@@ -201,7 +184,7 @@
201 <template #default="scope"> 184 <template #default="scope">
202 <div> 185 <div>
203 <!-- <span :class="`flag-icon flag-icon-${scope.row.code}`" />--> 186 <!-- <span :class="`flag-icon flag-icon-${scope.row.code}`" />-->
204 <span v-if="scope.row.code!='tw'" :class="`flag-icon flag-icon-${scope.row.code}`" /> 187 <span v-if="scope.row.code != 'tw'" :class="`flag-icon flag-icon-${scope.row.code}`" />
205 <span v-else class="flag-icon"> 188 <span v-else class="flag-icon">
206 <img :src="hkImage" alt="" class="hkimg"> 189 <img :src="hkImage" alt="" class="hkimg">
207 </span> 190 </span>
...@@ -256,11 +239,7 @@ ...@@ -256,11 +239,7 @@
256 <a class="more" @click="goNews">MORE</a> 239 <a class="more" @click="goNews">MORE</a>
257 </div> 240 </div>
258 <el-row :gutter="20"> 241 <el-row :gutter="20">
259 <el-col 242 <el-col v-for="(n, index) in newest2" :key="n.id" :lg="8" :sm="8" :xs="24">
260 v-for="(n,index) in newest2"
261 :key="n.id" :lg="8" :sm="8"
262 :xs="24"
263 >
264 <div class="activeItem" @click="goNewsDetail(n)"> 243 <div class="activeItem" @click="goNewsDetail(n)">
265 <div class="imgbox"> 244 <div class="imgbox">
266 <img :src="fillImgUrl_webSite(n.picUrl)"> 245 <img :src="fillImgUrl_webSite(n.picUrl)">
...@@ -291,7 +270,7 @@ ...@@ -291,7 +270,7 @@
291 <el-row :gutter="20"> 270 <el-row :gutter="20">
292 <el-col :lg="8"> 271 <el-col :lg="8">
293 <a class="liveImgbox" href="https://wx.vzan.com/live/page/1151815649?v=1720589464698" target="_blank"> 272 <a class="liveImgbox" href="https://wx.vzan.com/live/page/1151815649?v=1720589464698" target="_blank">
294 <div v-if="time>0" class="livetimecount"> 273 <div v-if="time > 0" class="livetimecount">
295 <van-count-down :time="time" format="DD 天 HH 时 mm 分 ss 秒"> 274 <van-count-down :time="time" format="DD 天 HH 时 mm 分 ss 秒">
296 <template #default="timeData"> 275 <template #default="timeData">
297 <div class="block">{{ timeData.days }} 276 <div class="block">{{ timeData.days }}
...@@ -320,12 +299,9 @@ ...@@ -320,12 +299,9 @@
320 <el-col :lg="16"> 299 <el-col :lg="16">
321 300
322 <div class="swiperPic forPx"> 301 <div class="swiperPic forPx">
323 <swiper 302 <swiper :autoplay="true" :loop="true" :modules="modules" :navigation="navigationPic"
324 :autoplay="true" :loop="true" :modules="modules" :navigation="navigationPic" 303 :slides-per-view="3" :space-between="20" class="swiper-wrapper">
325 :slides-per-view="3" 304 <swiper-slide v-for="(n, i) in picList" :key="i">
326 :space-between="20" class="swiper-wrapper"
327 >
328 <swiper-slide v-for="(n,i) in picList" :key="i">
329 <div class="picbox" @click="goNewsDetail(n)"> 305 <div class="picbox" @click="goNewsDetail(n)">
330 <img :src="fillImgUrl_webSite(n.picUrl)"> 306 <img :src="fillImgUrl_webSite(n.picUrl)">
331 </div> 307 </div>
...@@ -338,11 +314,12 @@ ...@@ -338,11 +314,12 @@
338 </el-col> 314 </el-col>
339 </el-row> 315 </el-row>
340 <el-row class="news-l-r"> 316 <el-row class="news-l-r">
341 <el-col v-for="(n,index) in livelist" v-show="index>0" :lg="8"> 317 <el-col v-for="(n, index) in livelist" v-show="index > 0" :lg="8">
342 <div class="item" style="padding: 0;margin: 20px 0 0" @click="goNewsDetail(n)"> 318 <div class="item" style="padding: 0;margin: 20px 0 0" @click="goNewsDetail(n)">
343 <div class="imgbox"> 319 <div class="imgbox">
344 <i class="playIcon" /> 320 <i class="playIcon" />
345 <img :src="fillImgUrl_webSite(n.picUrl)"></div> 321 <img :src="fillImgUrl_webSite(n.picUrl)">
322 </div>
346 <div class="info"> 323 <div class="info">
347 <div class="text-primary small-size"> 324 <div class="text-primary small-size">
348 <span v-if="n.subName">{{ n.subName + ' | ' }}</span> 325 <span v-if="n.subName">{{ n.subName + ' | ' }}</span>
...@@ -364,10 +341,7 @@ ...@@ -364,10 +341,7 @@
364 <h3 class="leftboderTT">INTRODUCTION OF ADJUDICATORS</h3> 341 <h3 class="leftboderTT">INTRODUCTION OF ADJUDICATORS</h3>
365 </div> 342 </div>
366 <el-row :gutter="20"> 343 <el-row :gutter="20">
367 <el-col 344 <el-col v-for="n in personList" :key="n.name" :lg="4" :sm="8" :xl="4" :xs="12">
368 v-for="n in personList" :key="n.name" :lg="4" :sm="8" :xl="4"
369 :xs="12"
370 >
371 <div class="teacher"> 345 <div class="teacher">
372 <div class="imgbox"><img :src="n.src"></div> 346 <div class="imgbox"><img :src="n.src"></div>
373 <h3 class="esp">{{ n.name }}</h3> 347 <h3 class="esp">{{ n.name }}</h3>
...@@ -440,36 +414,21 @@ ...@@ -440,36 +414,21 @@
440 <img src="@/assets/logo/Invitation_e.png" @click="applyInvitation" v-if="matchData.invitationSw == '1'"> 414 <img src="@/assets/logo/Invitation_e.png" @click="applyInvitation" v-if="matchData.invitationSw == '1'">
441 <div style="padding-left: 7px;"> 415 <div style="padding-left: 7px;">
442 416
443 <el-image 417 <el-image v-if="clubImage && matchData.visaSw == '1'" :preview-src-list="[clubImage]" :src="clubImage"
444 v-if="clubImage && matchData.visaSw == '1'" 418 fit="cover" preview-teleported style="width: 124px" />
445 :preview-src-list="[clubImage]"
446 :src="clubImage"
447 fit="cover"
448 preview-teleported
449 style="width: 124px"
450 />
451 </div> 419 </div>
452 </div> 420 </div>
453 <!-- 群聊--> 421 <!-- 群聊-->
454 <div v-if="matchData.chatQrcode" class="fixed_gg_l club"> 422 <div v-if="matchData.chatQrcode" class="fixed_gg_l club">
455 <el-image 423 <el-image :preview-src-list="[fillImgUrl(matchData.chatQrcode)]" :src="fillImgUrl(matchData.chatQrcode)"
456 :preview-src-list="[ fillImgUrl(matchData.chatQrcode)]" 424 fit="cover" preview-teleported style="width: 120px;height: 120px" />
457 :src="fillImgUrl(matchData.chatQrcode)"
458 fit="cover"
459 preview-teleported
460 style="width: 120px;height: 120px"
461 />
462 </div> 425 </div>
463 <affix-invitation ref="dialogInvitationRef" /> 426 <affix-invitation ref="dialogInvitationRef" />
464 427
465 <el-dialog v-model="liveQrcodeShow" :title="language==0?'赛事直播' :'Live QR Code'" width="350px"> 428 <el-dialog v-model="liveQrcodeShow" :title="language == 0 ? '赛事直播' : 'Live QR Code'" width="350px">
466 <div style="display: flex;justify-content: space-between"> 429 <div style="display: flex;justify-content: space-between">
467 <el-image 430 <el-image v-if="matchData.liveQrcode" :src="fillImgUrl(matchData.liveQrcode)" fit="cover"
468 v-if="matchData.liveQrcode" 431 style="max-width: 350px;" />
469 :src="fillImgUrl(matchData.liveQrcode)"
470 fit="cover"
471 style="max-width: 350px;"
472 />
473 </div> 432 </div>
474 433
475 </el-dialog> 434 </el-dialog>
...@@ -505,7 +464,7 @@ const navigationPic = ref({ ...@@ -505,7 +464,7 @@ const navigationPic = ref({
505 }) 464 })
506 const router = useRouter() 465 const router = useRouter()
507 const { proxy } = getCurrentInstance() 466 const { proxy } = getCurrentInstance()
508 const emit = defineEmits(['pop', 'backNumber', 'schSearch']) 467 const emit = defineEmits(['pop', 'backNumber', 'schSearch', 'reserveSearch'])
509 const time = ref(0) 468 const time = ref(0)
510 const etime = ref(0) 469 const etime = ref(0)
511 const liveQrcodeShow = ref(false) 470 const liveQrcodeShow = ref(false)
...@@ -540,6 +499,12 @@ const matchData = ref({}) ...@@ -540,6 +499,12 @@ const matchData = ref({})
540 onMounted(() => { 499 onMounted(() => {
541 init() 500 init()
542 }) 501 })
502 const reserveSearch = () => {
503 var params = {
504 cptId: matchData.value.id
505 }
506 emit('reserveSearch', params); // 向父组件发射事件+参数
507 };
543 508
544 function handleRowClick(row) { 509 function handleRowClick(row) {
545 console.log(row) 510 console.log(row)
...@@ -659,11 +624,11 @@ const goGuide = () => { ...@@ -659,11 +624,11 @@ const goGuide = () => {
659 }) 624 })
660 } 625 }
661 const liveQrcodeShowBtn = () => { 626 const liveQrcodeShowBtn = () => {
662 if(!matchData.value.liveQrcode){ 627 if (!matchData.value.liveQrcode) {
663 ElMessage.warning('There is currently no live broadcast of the event') 628 ElMessage.warning('There is currently no live broadcast of the event')
664 return 629 return
665 }else{ 630 } else {
666 liveQrcodeShow.value=true 631 liveQrcodeShow.value = true
667 } 632 }
668 } 633 }
669 634
...@@ -1169,8 +1134,7 @@ function applyInvitation() { ...@@ -1169,8 +1134,7 @@ function applyInvitation() {
1169 background: linear-gradient(0deg, rgba(255, 255, 255, 1), rgba(255, 255, 255, 0)); 1134 background: linear-gradient(0deg, rgba(255, 255, 255, 1), rgba(255, 255, 255, 0));
1170 } 1135 }
1171 1136
1172 .btn-lineG { 1137 .btn-lineG {}
1173 }
1174 } 1138 }
1175 1139
1176 .mapBox { 1140 .mapBox {
...@@ -1276,6 +1240,7 @@ function applyInvitation() { ...@@ -1276,6 +1240,7 @@ function applyInvitation() {
1276 .box { 1240 .box {
1277 width: 94% 1241 width: 94%
1278 } 1242 }
1243
1279 .calendarList { 1244 .calendarList {
1280 padding: 0; 1245 padding: 0;
1281 1246
...@@ -1285,12 +1250,15 @@ function applyInvitation() { ...@@ -1285,12 +1250,15 @@ function applyInvitation() {
1285 } 1250 }
1286 } 1251 }
1287 } 1252 }
1253
1288 .aboutBox { 1254 .aboutBox {
1289 padding: 20px 30px; 1255 padding: 20px 30px;
1290 } 1256 }
1257
1291 .indexTitle { 1258 .indexTitle {
1292 margin: 30px 0 20px 1259 margin: 30px 0 20px
1293 } 1260 }
1261
1294 .teacher { 1262 .teacher {
1295 height: 320px; 1263 height: 320px;
1296 margin: 0 0 20px; 1264 margin: 0 0 20px;
...@@ -1299,9 +1267,11 @@ function applyInvitation() { ...@@ -1299,9 +1267,11 @@ function applyInvitation() {
1299 height: 260px 1267 height: 260px
1300 } 1268 }
1301 } 1269 }
1270
1302 .activeItem { 1271 .activeItem {
1303 margin: 0 0 20px; 1272 margin: 0 0 20px;
1304 } 1273 }
1274
1305 .mapBox { 1275 .mapBox {
1306 div { 1276 div {
1307 padding-left: 40px; 1277 padding-left: 40px;
...@@ -1322,9 +1292,11 @@ function applyInvitation() { ...@@ -1322,9 +1292,11 @@ function applyInvitation() {
1322 word-break: break-all; 1292 word-break: break-all;
1323 } 1293 }
1324 } 1294 }
1295
1325 .fixed_gg { 1296 .fixed_gg {
1326 display: none; 1297 display: none;
1327 } 1298 }
1299
1328 .bannerItem .banner-count { 1300 .bannerItem .banner-count {
1329 flex-direction: column; 1301 flex-direction: column;
1330 transform: scale(0.5); 1302 transform: scale(0.5);
...@@ -1336,6 +1308,7 @@ function applyInvitation() { ...@@ -1336,6 +1308,7 @@ function applyInvitation() {
1336 margin: 30px 0 0; 1308 margin: 30px 0 0;
1337 } 1309 }
1338 } 1310 }
1311
1339 .bgbg { 1312 .bgbg {
1340 text-align: center; 1313 text-align: center;
1341 1314
...@@ -1426,6 +1399,7 @@ function applyInvitation() { ...@@ -1426,6 +1399,7 @@ function applyInvitation() {
1426 .forPc { 1399 .forPc {
1427 display: none !important; 1400 display: none !important;
1428 } 1401 }
1402
1429 .zn-Box .bgbg { 1403 .zn-Box .bgbg {
1430 padding: 10px 0 0; 1404 padding: 10px 0 0;
1431 1405
...@@ -1437,6 +1411,7 @@ function applyInvitation() { ...@@ -1437,6 +1411,7 @@ function applyInvitation() {
1437 margin-top: 10px 1411 margin-top: 10px
1438 } 1412 }
1439 } 1413 }
1414
1440 .logobox { 1415 .logobox {
1441 height: 60px; 1416 height: 60px;
1442 } 1417 }
...@@ -1500,5 +1475,4 @@ function applyInvitation() { ...@@ -1500,5 +1475,4 @@ function applyInvitation() {
1500 } 1475 }
1501 } 1476 }
1502 } 1477 }
1503
1504 </style> 1478 </style>
......
1 <template> 1 <template>
2 <el-dialog 2 <el-dialog v-model="show" :append-to-body="true" :close-on-click-modal="false" :show-close="showClose" :title="title"
3 v-model="show" 3 center class="pcloginpop" close-icon="CircleClose" destroy-on-close style="max-width: 450px;min-width: 350px"
4 :append-to-body="true" 4 @close="close">
5 :close-on-click-modal="false"
6 :show-close="showClose"
7 :title="title"
8 center
9 class="pcloginpop"
10 close-icon="CircleClose"
11 destroy-on-close
12 style="max-width: 450px;min-width: 350px"
13 @close="close"
14 >
15 <div class="pd10" /> 5 <div class="pd10" />
16 <el-form 6 <el-form v-if="loginStatus == 0" ref="loginRef" :model="loginForm" :rules="language == 0 ? loginRules : loginRules_en"
17 v-if="loginStatus==0" ref="loginRef" :model="loginForm" 7 class="login-form">
18 :rules="language==0?loginRules:loginRules_en" class="login-form"
19 >
20 <el-form-item prop="username"> 8 <el-form-item prop="username">
21 9
22 <el-input 10 <el-input v-model.trim="loginForm.username" :placeholder="language == 0 ? '账号(注册时使用的邮箱)' : 'Account (e-mail)'"
23 v-model.trim="loginForm.username" 11 auto-complete="off" size="large" />
24 :placeholder="language==0?'账号(注册时使用的邮箱)':'Account (e-mail)'"
25 auto-complete="off"
26 size="large"
27 />
28 </el-form-item> 12 </el-form-item>
29 <el-form-item prop="password"> 13 <el-form-item prop="password">
30 <el-input 14 <el-input v-model.trim="loginForm.password" :placeholder="language == 0 ? '密码' : 'Password'" auto-complete="off"
31 v-model.trim="loginForm.password" 15 show-password size="large" type="password" @keyup.enter="handleLogin" />
32 :placeholder="language==0?'密码':'Password'"
33 auto-complete="off" show-password
34 size="large"
35 type="password"
36 @keyup.enter="handleLogin"
37 />
38 </el-form-item> 16 </el-form-item>
39 <el-form-item v-if="captchaEnabled" prop="code"> 17 <el-form-item v-if="captchaEnabled" prop="code">
40 <el-input 18 <el-input v-model.trim="loginForm.code" :placeholder="language == 0 ? '验证码' : 'Code'" auto-complete="off" size="large"
41 v-model.trim="loginForm.code" 19 @keyup.enter="handleLogin">
42 :placeholder="language==0?'验证码':'Code'"
43 auto-complete="off"
44 size="large"
45 @keyup.enter="handleLogin"
46 >
47 <template #append> 20 <template #append>
48 <div class="login-code"> 21 <div class="login-code">
49 <img :src="codeUrl" class="login-code-img" @click="getCode"> 22 <img :src="codeUrl" class="login-code-img" @click="getCode">
...@@ -54,14 +27,8 @@ ...@@ -54,14 +27,8 @@
54 </el-form-item> 27 </el-form-item>
55 28
56 <el-form-item style="width:100%;"> 29 <el-form-item style="width:100%;">
57 <el-button 30 <el-button :loading="loading" class="loginBtn" size="large" style="width:100%;" type="primary"
58 :loading="loading" 31 @click.prevent="handleLogin">
59 class="loginBtn"
60 size="large"
61 style="width:100%;"
62 type="primary"
63 @click.prevent="handleLogin"
64 >
65 <span v-if="!loading">{{ language == 0 ? '登 录' : 'Login' }}</span> 32 <span v-if="!loading">{{ language == 0 ? '登 录' : 'Login' }}</span>
66 <span v-else>{{ language == 0 ? '登 录 中...' : 'Logging in' }}</span> 33 <span v-else>{{ language == 0 ? '登 录 中...' : 'Logging in' }}</span>
67 </el-button> 34 </el-button>
...@@ -69,15 +36,12 @@ ...@@ -69,15 +36,12 @@
69 <el-form-item> 36 <el-form-item>
70 <!-- <span style="color: #999;font-size: 12px;">*默认密码是会员号+证件号后四位+)*%</span>--> 37 <!-- <span style="color: #999;font-size: 12px;">*默认密码是会员号+证件号后四位+)*%</span>-->
71 <div style="display: flex;justify-content: space-between;width: 100%;"> 38 <div style="display: flex;justify-content: space-between;width: 100%;">
72 <a 39 <a class="text-primary" @click="showChangePassword">{{ language == 0 ? '忘记密码' : 'Forgot password' }}?</a>
73 class="text-primary"
74 @click="showChangePassword"
75 >{{ language == 0 ? '忘记密码' : 'Forgot password' }}?</a>
76 <a class="text-primary" @click="showRegister">{{ language == 0 ? '账号注册' : 'Register' }}></a> 40 <a class="text-primary" @click="showRegister">{{ language == 0 ? '账号注册' : 'Register' }}></a>
77 </div> 41 </div>
78 </el-form-item> 42 </el-form-item>
79 <el-form-item> 43 <el-form-item>
80 <div v-if="language==0" class="agreeLine"> 44 <div v-if="language == 0" class="agreeLine">
81 登录或注册即代表同意 45 登录或注册即代表同意
82 <a target="_blank" @click="goAgreement">《用户协议》</a> 46 <a target="_blank" @click="goAgreement">《用户协议》</a>
83 <a target="_blank" @click="goPolicy">《隐私政策》</a> 47 <a target="_blank" @click="goPolicy">《隐私政策》</a>
...@@ -90,7 +54,7 @@ ...@@ -90,7 +54,7 @@
90 </el-form-item> 54 </el-form-item>
91 </el-form> 55 </el-form>
92 56
93 <div v-if="loginStatus==1"> 57 <div v-if="loginStatus == 1">
94 <a class="poLeft" @click="close()"> 58 <a class="poLeft" @click="close()">
95 <el-icon> 59 <el-icon>
96 <ArrowLeftBold /> 60 <ArrowLeftBold />
...@@ -103,36 +67,25 @@ ...@@ -103,36 +67,25 @@
103 <h3>{{ language == 0 ? '个人用户' : 'Individual' }}</h3> 67 <h3>{{ language == 0 ? '个人用户' : 'Individual' }}</h3>
104 </div> 68 </div>
105 </div> 69 </div>
106 <div v-if="loginStatus==2"> 70 <div v-if="loginStatus == 2">
107 <a class="poLeft" @click="close()"> 71 <a class="poLeft" @click="close()">
108 <el-icon> 72 <el-icon>
109 <ArrowLeftBold /> 73 <ArrowLeftBold />
110 </el-icon> 74 </el-icon>
111 </a> 75 </a>
112 <el-form 76 <el-form ref="changePasswordRef" :model="changePasswordForm"
113 ref="changePasswordRef" :model="changePasswordForm" 77 :rules="language == 0 ? changePasswordRules : changePasswordRules_en" class="login-form">
114 :rules="language==0?changePasswordRules:changePasswordRules_en" class="login-form"
115 >
116 <el-form-item prop="username"> 78 <el-form-item prop="username">
117 79
118 <el-input 80 <el-input v-model.trim="changePasswordForm.username" :placeholder="language == 0 ? '注册时使用的邮箱' : 'E-mail'"
119 v-model.trim="changePasswordForm.username" 81 auto-complete="off" size="large" @change="changePasswordFormUsername" />
120 :placeholder="language==0?'注册时使用的邮箱':'E-mail'"
121 auto-complete="off" size="large"
122 @change="changePasswordFormUsername"
123 />
124 </el-form-item> 82 </el-form-item>
125 <el-form-item> 83 <el-form-item>
126 <el-input 84 <el-input v-model.trim="changePasswordForm.code" :placeholder="language == 0 ? '验证码' : 'Code'" auto-complete="off"
127 v-model.trim="changePasswordForm.code" 85 size="large" @keyup.enter="handleLogin">
128 :placeholder="language==0?'验证码':'Code'"
129 auto-complete="off"
130 size="large"
131 @keyup.enter="handleLogin"
132 >
133 <template #append> 86 <template #append>
134 <el-button plain style="width: 110px;" type="primary" @click="sendsmsMsg"> 87 <el-button plain style="width: 110px;" type="primary" @click="sendsmsMsg">
135 <van-count-down v-if="counting" :time="60000" format="ss" @finish="counting=false"> 88 <van-count-down v-if="counting" :time="60000" format="ss" @finish="counting = false">
136 <template #default="timeData"> 89 <template #default="timeData">
137 <span class="text-primary">{{ timeData.seconds }}{{ language == 0 ? '秒' : 's' }}</span> 90 <span class="text-primary">{{ timeData.seconds }}{{ language == 0 ? '秒' : 's' }}</span>
138 </template> 91 </template>
...@@ -147,42 +100,24 @@ ...@@ -147,42 +100,24 @@
147 </template> 100 </template>
148 </el-input> 101 </el-input>
149 <!-- <div class="vcodeBox" :style="isShow?'height:240px':'height:0'">--> 102 <!-- <div class="vcodeBox" :style="isShow?'height:240px':'height:0'">-->
150 <Vcode 103 <Vcode :fail-text="failVcode" :show="isShow" :slider-text="sliderText" :success-text="successVcode"
151 :fail-text="failVcode" :show="isShow" :slider-text="sliderText" :success-text="successVcode" 104 :z-index="9999" @success="codeSuccess" />
152 :z-index="9999" @success="codeSuccess"
153 />
154 <!-- </div>--> 105 <!-- </div>-->
155 </el-form-item> 106 </el-form-item>
156 107
157 <el-form-item prop="password"> 108 <el-form-item prop="password">
158 <el-input 109 <el-input v-model.trim="changePasswordForm.password" :placeholder="language == 0 ? '新密码' : 'New password'"
159 v-model.trim="changePasswordForm.password" 110 auto-complete="off" show-password size="large" type="password" @keyup.enter="handleLogin" />
160 :placeholder="language==0?'新密码':'New password'"
161 auto-complete="off" show-password
162 size="large"
163 type="password"
164 @keyup.enter="handleLogin"
165 />
166 </el-form-item> 111 </el-form-item>
167 <el-form-item prop="confirmPassword"> 112 <el-form-item prop="confirmPassword">
168 <el-input 113 <el-input v-model.trim="changePasswordForm.confirmPassword"
169 v-model.trim="changePasswordForm.confirmPassword" 114 :placeholder="language == 0 ? '确认密码' : 'Confirm password'" auto-complete="off" show-password size="large"
170 :placeholder="language==0?'确认密码':'Confirm password'" 115 type="password" />
171 auto-complete="off" show-password
172 size="large"
173 type="password"
174 />
175 </el-form-item> 116 </el-form-item>
176 <el-form-item style="width:100%;"> 117 <el-form-item style="width:100%;">
177 <el-button 118 <el-button :loading="loading" class="loginBtn" size="large" style="width:100%;" type="primary"
178 :loading="loading" 119 @click.prevent="handleChangePassword">
179 class="loginBtn" 120 <span v-if="language == 0">确定</span>
180 size="large"
181 style="width:100%;"
182 type="primary"
183 @click.prevent="handleChangePassword"
184 >
185 <span v-if="language==0">确定</span>
186 <span v-else>Submit</span> 121 <span v-else>Submit</span>
187 </el-button> 122 </el-button>
188 </el-form-item> 123 </el-form-item>
...@@ -624,7 +559,8 @@ const goPolicy = () => { ...@@ -624,7 +559,8 @@ const goPolicy = () => {
624 flex: 1 1 auto; 559 flex: 1 1 auto;
625 } 560 }
626 561
627 .el-input-group__append button.el-button, .el-input-group__append button.el-button:hover { 562 .el-input-group__append button.el-button,
563 .el-input-group__append button.el-button:hover {
628 color: var(--el-color-primary); 564 color: var(--el-color-primary);
629 background: #efefff; 565 background: #efefff;
630 border: var(--el-color-primary) solid 1px; 566 border: var(--el-color-primary) solid 1px;
......
...@@ -86,12 +86,12 @@ ...@@ -86,12 +86,12 @@
86 application of visa invitation letter and purchasing insurance etc.</span> 86 application of visa invitation letter and purchasing insurance etc.</span>
87 </div> 87 </div>
88 </el-form-item> 88 </el-form-item>
89 <el-form-item :label="language==0?'证件号':'Passport number'" required>
90 <el-input v-model="wdsfData.passportNumber" />
91 </el-form-item>
92 <el-form-item :label="language==0?'姓名':'Name'" required> 89 <el-form-item :label="language==0?'姓名':'Name'" required>
93 <el-input v-model.trim="wdsfData.certName" /> 90 <el-input v-model.trim="wdsfData.certName" />
94 </el-form-item> 91 </el-form-item>
92 <el-form-item :label="language==0?'证件号':'Passport number'" required>
93 <el-input v-model="wdsfData.passportNumber" />
94 </el-form-item>
95 <el-form-item :label="language==0?'性别':'Gender'" required> 95 <el-form-item :label="language==0?'性别':'Gender'" required>
96 <el-radio-group v-model="wdsfData.sex"> 96 <el-radio-group v-model="wdsfData.sex">
97 <el-radio value="0">{{ language == 0 ? '女' : 'female' }}</el-radio> 97 <el-radio value="0">{{ language == 0 ? '女' : 'female' }}</el-radio>
...@@ -105,6 +105,9 @@ ...@@ -105,6 +105,9 @@
105 style="width: 100%;" type="date" value-format="YYYY-MM-DD" 105 style="width: 100%;" type="date" value-format="YYYY-MM-DD"
106 /> 106 />
107 </el-form-item> 107 </el-form-item>
108 <el-form-item :label="language==0?'联系方式':'Contact Information'" required>
109 <el-input v-model.trim="wdsfData.phone" />
110 </el-form-item>
108 111
109 <div class="h30" /> 112 <div class="h30" />
110 113
...@@ -372,6 +375,10 @@ function bigNext() { ...@@ -372,6 +375,10 @@ function bigNext() {
372 ElMessage.warning(language.value == 0 ? '请输入姓名' : 'Please enter your name') 375 ElMessage.warning(language.value == 0 ? '请输入姓名' : 'Please enter your name')
373 return 376 return
374 } 377 }
378 if (!wdsfData.value.phone) {
379 ElMessage.warning(language.value == 0 ? '请输入联系方式' : 'Please enter your phone')
380 return
381 }
375 if (user && user.utype == '3') { 382 if (user && user.utype == '3') {
376 const obj = { 383 const obj = {
377 card: form.value.card, 384 card: form.value.card,
...@@ -381,6 +388,7 @@ function bigNext() { ...@@ -381,6 +388,7 @@ function bigNext() {
381 birth: wdsfData.value.birthday, 388 birth: wdsfData.value.birthday,
382 certName: wdsfData.value.certName, 389 certName: wdsfData.value.certName,
383 passportNumber: wdsfData.value.passportNumber, 390 passportNumber: wdsfData.value.passportNumber,
391 phone:wdsfData.value.phone,
384 ocrFlag: '1' 392 ocrFlag: '1'
385 } 393 }
386 if (Array.isArray(wdsfData.value.passportUrl)) { 394 if (Array.isArray(wdsfData.value.passportUrl)) {
...@@ -424,6 +432,7 @@ function next() { ...@@ -424,6 +432,7 @@ function next() {
424 certName: wdsfData.value.certName, 432 certName: wdsfData.value.certName,
425 birth: wdsfData.value.birthday, 433 birth: wdsfData.value.birthday,
426 passportNumber: wdsfData.value.passportNumber, 434 passportNumber: wdsfData.value.passportNumber,
435 phone:wdsfData.value.phone,
427 ocrFlag: '1' 436 ocrFlag: '1'
428 } 437 }
429 if (Array.isArray(wdsfData.value.passportUrl)) { 438 if (Array.isArray(wdsfData.value.passportUrl)) {
...@@ -449,6 +458,7 @@ function next() { ...@@ -449,6 +458,7 @@ function next() {
449 // personId: wdsfData.value.personId, 458 // personId: wdsfData.value.personId,
450 username: wdsfData.value.email, 459 username: wdsfData.value.email,
451 password: form.value.password, 460 password: form.value.password,
461 phone:wdsfData.value.phone,
452 ocrFlag: '1' 462 ocrFlag: '1'
453 } 463 }
454 if (Array.isArray(wdsfData.value.passportUrl)) { 464 if (Array.isArray(wdsfData.value.passportUrl)) {
......
...@@ -64,35 +64,40 @@ export default defineConfig(({ mode, command }) => { ...@@ -64,35 +64,40 @@ export default defineConfig(({ mode, command }) => {
64 proxy: { 64 proxy: {
65 // https://cn.vitejs.dev/config/#server-proxy 65 // https://cn.vitejs.dev/config/#server-proxy
66 '/dev-api/ztx-train': { 66 '/dev-api/ztx-train': {
67 // target: 'http://192.168.1.118:1896/stage-api', 67 target: 'http://192.168.1.22:8081',
68 target: 'https://wdsfwuxicenter.com/stage-api', 68 // target: 'https://wdsfwuxicenter.com/stage-api',
69 // target: 'https://jijin.wtwuxicenter.com/stage-api',
69 changeOrigin: true, 70 changeOrigin: true,
70 rewrite: (p) => p.replace(/^\/dev-api\/ztx-train/, '') 71 rewrite: (p) => p.replace(/^\/dev-api\/ztx-train/, '')
71 }, 72 },
72 '/dev-api/ztx-match': { 73 '/dev-api/ztx-match': {
73 // target: 'http://192.168.1.118:8081', 74 target: 'http://192.168.1.22:8081',
74 target: 'https://wdsfwuxicenter.com/stage-api', 75 // target: 'https://jijin.wtwuxicenter.com/stage-api',
76 // target: 'https://wdsfwuxicenter.com/stage-api',
75 // target: 'https://wdsfwuxicenter.com/stage-api/', 77 // target: 'https://wdsfwuxicenter.com/stage-api/',
76 changeOrigin: true, 78 changeOrigin: true,
77 rewrite: (p) => p.replace(/^\/dev-api\/ztx-match/, '') 79 rewrite: (p) => p.replace(/^\/dev-api\/ztx-match/, '')
78 }, 80 },
79 '/dev-api/ztx-webSite': { 81 '/dev-api/ztx-webSite': {
80 // target: 'http://192.168.1.118:8081', 82 target: 'http://192.168.1.22:8081',
81 target: 'https://wdsfwuxicenter.com/stage-api', 83 // target: 'https://wdsfwuxicenter.com/stage-api',
84 // target: 'https://jijin.wtwuxicenter.com/stage-api',
82 changeOrigin: true, 85 changeOrigin: true,
83 rewrite: (p) => p.replace(/^\/dev-api\/ztx-webSite/, '') 86 rewrite: (p) => p.replace(/^\/dev-api\/ztx-webSite/, '')
84 }, 87 },
85 '/dev-api': { 88 '/dev-api': {
86 // target: 'http://192.168.1.213:8081/', 89 target: 'http://192.168.1.22:8081',
87 // target: 'http://192.168.1.169:8081', 90 // target: 'http://192.168.1.169:8081',
88 // target: 'https://jijin.wtwuxicenter.com/stage-api', 91 // target: 'https://jijin.wtwuxicenter.com/stage-api',
89 target: 'https://wdsfwuxicenter.com/stage-api/', 92 // target: 'https://wdsfwuxicenter.com/stage-api/',
93 // target: 'https://jijin.wtwuxicenter.com/stage-api',
90 changeOrigin: true, 94 changeOrigin: true,
91 rewrite: (p) => p.replace(/^\/dev-api/, '') 95 rewrite: (p) => p.replace(/^\/dev-api/, '')
92 }, 96 },
93 '/ticket': { 97 '/ticket': {
94 // target: 'http://192.168.1.242:8081/', 98 // target: 'https://jijin.wtwuxicenter.com/stage-api',
95 target: 'https://wdsfwuxicenter.com/h5/', 99 target: 'http://192.168.1.22:8081',
100 // target: 'https://wdsfwuxicenter.com/h5/',
96 // target: 'https://ticketh5.wdsfwuxicenter.com/h5/', 101 // target: 'https://ticketh5.wdsfwuxicenter.com/h5/',
97 changeOrigin: true, 102 changeOrigin: true,
98 rewrite: (p) => p.replace(/^\/ticket/, '') 103 rewrite: (p) => p.replace(/^\/ticket/, '')
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!