6be47212 by 杨炀

no message

1 parent 1cf0239b
...@@ -548,12 +548,6 @@ export const constantRoutes = [ ...@@ -548,12 +548,6 @@ export const constantRoutes = [
548 meta: { title: '选择参赛项目' } 548 meta: { title: '选择参赛项目' }
549 }, 549 },
550 { 550 {
551 path: 'list/:id/expenseDetails',
552 component: () => import('@/viewsPc/match/expenseDetails'),
553 name: 'expenseDetails',
554 meta: { title: '费用明细' }
555 },
556 {
557 path: 'list/:id/signPreview', 551 path: 'list/:id/signPreview',
558 component: () => import('@/viewsPc/match/signPreview'), 552 component: () => import('@/viewsPc/match/signPreview'),
559 name: 'signPreview', 553 name: 'signPreview',
......
...@@ -453,12 +453,6 @@ export const constantRoutes = [ ...@@ -453,12 +453,6 @@ export const constantRoutes = [
453 meta: { title: '选择参赛项目' } 453 meta: { title: '选择参赛项目' }
454 }, 454 },
455 { 455 {
456 path: 'list/:id/expenseDetails',
457 component: () => import('@/viewsPc/match/expenseDetails'),
458 name: 'expenseDetails',
459 meta: { title: '费用明细' }
460 },
461 {
462 path: 'list/:id/signPreview', 456 path: 'list/:id/signPreview',
463 component: () => import('@/viewsPc/match/signPreview'), 457 component: () => import('@/viewsPc/match/signPreview'),
464 name: 'signPreview', 458 name: 'signPreview',
......
...@@ -438,12 +438,6 @@ export const constantRoutes = [ ...@@ -438,12 +438,6 @@ export const constantRoutes = [
438 component: () => import('@/viewsPc/match/chooseProject'), 438 component: () => import('@/viewsPc/match/chooseProject'),
439 name: 'chooseProject', 439 name: 'chooseProject',
440 meta: { title: '选择参赛项目' } 440 meta: { title: '选择参赛项目' }
441 },
442 {
443 path: 'list/:id/expenseDetails',
444 component: () => import('@/viewsPc/match/expenseDetails'),
445 name: 'expenseDetails',
446 meta: { title: '费用明细' }
447 } 441 }
448 ] 442 ]
449 }, 443 },
......
...@@ -9,15 +9,16 @@ ...@@ -9,15 +9,16 @@
9 <el-form-item :label="language==0?'姓名':'Name'"> 9 <el-form-item :label="language==0?'姓名':'Name'">
10 <el-input v-model="query.realName" style="width: 120px;" clearable/> 10 <el-input v-model="query.realName" style="width: 120px;" clearable/>
11 </el-form-item> 11 </el-form-item>
12 <el-form-item :label="language==0?'短名':'Nick Name'"> 12 <!-- <el-form-item :label="language==0?'短名':'Nick Name'">-->
13 <el-input v-model="query.shortName" style="width: 120px;" clearable/> 13 <!-- <el-input v-model="query.shortName" style="width: 120px;" clearable/>-->
14 </el-form-item> 14 <!-- </el-form-item>-->
15 <el-form-item :label="language==0?'手机号码':'Phone'"> 15 <!-- <el-form-item :label="language==0?'手机号码':'Phone'">-->
16 <el-input v-model="query.phone" style="width: 120px;" clearable/> 16 <!-- <el-input v-model="query.phone" style="width: 120px;" clearable/>-->
17 </el-form-item> 17 <!-- </el-form-item>-->
18 <el-form-item :label="language==0?'邮箱':'E-mail'"> 18 <!-- <el-form-item :label="language==0?'邮箱':'E-mail'">-->
19 <el-input v-model="query.email" style="width: 120px;" clearable/> 19 <!-- <el-input v-model="query.email" style="width: 120px;" clearable/>-->
20 </el-form-item> 20 <!-- </el-form-item>-->
21
21 <el-form-item :label="language==0?'证件类型':'ID Type'"> 22 <el-form-item :label="language==0?'证件类型':'ID Type'">
22 <el-input v-model="query.idcType" style="width: 120px;" clearable/> 23 <el-input v-model="query.idcType" style="width: 120px;" clearable/>
23 </el-form-item> 24 </el-form-item>
...@@ -29,6 +30,9 @@ ...@@ -29,6 +30,9 @@
29 <el-option v-for="l in labels" :key="l.value" :value="l.value" :label="language==0?(l.label):(l.enlabel)"/> 30 <el-option v-for="l in labels" :key="l.value" :value="l.value" :label="language==0?(l.label):(l.enlabel)"/>
30 </el-select> 31 </el-select>
31 </el-form-item> 32 </el-form-item>
33 <el-form-item :label="language==0?'WDSF':'WDSF'">
34 <el-input v-model="query.wdsfMin" style="width: 120px;" clearable/>
35 </el-form-item>
32 <el-form-item> 36 <el-form-item>
33 <el-button type="primary" @click="getList">{{ language==0?'查询':'Search' }}</el-button> 37 <el-button type="primary" @click="getList">{{ language==0?'查询':'Search' }}</el-button>
34 </el-form-item> 38 </el-form-item>
......
...@@ -23,6 +23,15 @@ ...@@ -23,6 +23,15 @@
23 <el-form-item :label="language==0?'机构名称':'Team Name'" required prop="name"> 23 <el-form-item :label="language==0?'机构名称':'Team Name'" required prop="name">
24 <el-input type="text" v-model="form.name" :placeholder="language==0?'请输入内容':''"/> 24 <el-input type="text" v-model="form.name" :placeholder="language==0?'请输入内容':''"/>
25 </el-form-item> 25 </el-form-item>
26 <el-form-item :label="language==0?'团体类型':'Group type'" prop="type" required>
27 <el-select v-model="form.type" :placeholder="language==0?'请选择团体类型':''" style="width: 100%;">
28 <el-option :label="language==0?'普通院校':'School'" value="0" />
29 <el-option :label="language==0?'专业舞蹈学校':'Professional dance school'" value="1" />
30 <el-option :label="language==0?'培训机构/俱乐部':'Company/Club'" value="2" />
31 <el-option :label="language==0?'地方协会':'Local Association'" value="3" />
32 <el-option :label="language==0?'国家协会':'National Association'" value="4" />
33 </el-select>
34 </el-form-item>
26 <el-form-item :label="language==0?'联系人姓名':'Contact Person'" required prop="contactPerson"> 35 <el-form-item :label="language==0?'联系人姓名':'Contact Person'" required prop="contactPerson">
27 <el-input type="text" v-model="form.contactPerson" :placeholder="language==0?'请输入内容':''"/> 36 <el-input type="text" v-model="form.contactPerson" :placeholder="language==0?'请输入内容':''"/>
28 </el-form-item> 37 </el-form-item>
......
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
11 v-model.trim="loginForm.username" 11 v-model.trim="loginForm.username"
12 size="large" 12 size="large"
13 auto-complete="off" 13 auto-complete="off"
14 :placeholder="language==0?'账号(注册时使用的邮箱/手机号码)':'Account (e-mail/ cell-phone number)'" 14 :placeholder="language==0?'账号(注册时使用的邮箱)':'Account (e-mail)'"
15 > 15 >
16 16
17 </el-input> 17 </el-input>
......
1 <template> 1 <template>
2 <div> 2 <div>
3 <!-- 个人报名-国外-->
3 <div class="box ph-30"> 4 <div class="box ph-30">
4 <el-card class="mb20"> 5 <el-card class="mb20">
5 <single-sign-step :activeStep="2" :language="language"/> 6 <single-sign-step :activeStep="2" :language="language"/>
...@@ -16,19 +17,34 @@ ...@@ -16,19 +17,34 @@
16 <h3 class="panel-title" v-else>My Information</h3> 17 <h3 class="panel-title" v-else>My Information</h3>
17 </div> 18 </div>
18 <div class="panel-body"> 19 <div class="panel-body">
19 <div class="chooseForm"> 20 <div class="chooseForm" style="display: flex">
20 <div @click="editPerson" style="width: 60px"> 21 <div @click="editPerson" style="width: 60px" class="mr20">
21 <el-avatar fit="cover" v-if="form.picUrl" :size="60" :src="fillImgUrl(form.picUrl)"/> 22 <el-avatar fit="cover" v-if="form.picUrl" :size="60" :src="fillImgUrl(form.picUrl)"/>
22 <div class="addBttn" v-else>+</div> 23 <div class="addBttn" v-else>+</div>
23 24
24 <div class="text-center mt10"> 25 <div class="text-center mt10">
25 <span v-if="form.shortName">{{form.shortName}}</span> 26 <span>{{ form.name }}</span>
26 <el-icon> 27 <el-icon>
27 <Edit/> 28 <Edit/>
28 </el-icon> 29 </el-icon>
29 </div> 30 </div>
31 </div>
32 <!-- 舞伴-->
33 <el-checkbox-group style="width: 60px">
34 <el-checkbox>
35 <div>
36 <el-avatar fit="cover" v-if="form.picUrl" :size="60" :src="fillImgUrl(form.picUrl)"/>
37 <div class="addBttn" v-else>+</div>
30 38
39 <div class="text-center mt10">
40 <span>{{ form.name }}</span>
41 <el-icon>
42 <Edit/>
43 </el-icon>
31 </div> 44 </div>
45 </div>
46 </el-checkbox>
47 </el-checkbox-group>
32 48
33 </div> 49 </div>
34 </div> 50 </div>
...@@ -45,7 +61,7 @@ ...@@ -45,7 +61,7 @@
45 clearable/> 61 clearable/>
46 </div> 62 </div>
47 </div> 63 </div>
48 <div v-loading="loadingProject" style="min-height: 200px;max-height: 60vh"> 64 <div v-loading="loadingProject" style="height: 60vh">
49 <el-checkbox-group v-model="projectIds"> 65 <el-checkbox-group v-model="projectIds">
50 <el-checkbox class="flexBetweenBox" v-for="c in projectList" :label="c.id" :key="c.id"> 66 <el-checkbox class="flexBetweenBox" v-for="c in projectList" :label="c.id" :key="c.id">
51 <div class="flexBetween w100"> 67 <div class="flexBetween w100">
...@@ -53,7 +69,7 @@ ...@@ -53,7 +69,7 @@
53 {{ c.code }}:{{ c.name }} 69 {{ c.code }}:{{ c.name }}
54 <div>{{ c.danceTypeDetailStr }}</div> 70 <div>{{ c.danceTypeDetailStr }}</div>
55 </div> 71 </div>
56 <div class="text-primary">¥{{ c.serviceFee }}</div> 72 <div class="text-primary">{{ language == 0 ? '¥' : '£' }}{{ c.serviceFee }}</div>
57 </div> 73 </div>
58 </el-checkbox> 74 </el-checkbox>
59 </el-checkbox-group> 75 </el-checkbox-group>
...@@ -89,19 +105,59 @@ ...@@ -89,19 +105,59 @@
89 :extraform="extraform" :language="language" :list="signInfoList" 105 :extraform="extraform" :language="language" :list="signInfoList"
90 @editExtra="goPersonInfo"/> 106 @editExtra="goPersonInfo"/>
91 <zu-table v-else :list="zuTableList" :language="language" @delete="removeThis"/> 107 <zu-table v-else :list="zuTableList" :language="language" @delete="removeThis"/>
108
109 <div v-if="showPersonList">
110 <el-row class="mt20">
111 <el-col :span="24">
112 <el-button type="primary" plain>{{ language == 0 ? '添加随行人员' : 'Add accompanying personnel' }}
113 </el-button>
114 </el-col>
115 </el-row>
116 <el-table class="mt20">
117 <el-table-column type="index" label="Index" width="60"/>
118 <el-table-column label="Name"/>
119 <el-table-column label="Passport number"/>
120 <el-table-column label="Birthday"/>
121 <el-table-column label="Sex"/>
122 <el-table-column label="Role">
123 <template #default="scope">
124 <div class="esp">
125 <span v-for="item in scope.row.label?.split(',')" :key="item.id" class="text-primary">
126 <span v-if="item==='0'" class="ml5">{{ language == 0 ? '运动员' : 'athletes' }}</span>
127 <span v-if="item==='1'" class="ml5">{{ language == 0 ? '教练' : 'coach' }}</span>
128 <span v-if="item==='2'" class="ml5">{{ language == 0 ? '领队' : 'team leader' }}</span>
129 <span v-if="item==='3'" class="ml5">{{ language == 0 ? '队医' : 'team doctor' }}</span>
130 <span v-if="item==='4'" class="ml5">{{ language == 0 ? '翻译' : 'translator' }}</span>
131 <span v-if="item==='5'" class="ml5">{{ language == 0 ? '官员' : 'official' }}</span>
132 <span v-if="item==='6'" class="ml5">{{ language == 0 ? '其他' : 'other' }}</span>
133 </span>
134 </div>
135 </template>
136 </el-table-column>
137 <el-table-column label="Actions">
138 <template #default="scope">
139 <a class="text-primary pd10" @click="delperson(scope.row)">
140 {{ language == 0 ? '删除' : 'Delete' }}
141 </a>
142 </template>
143 </el-table-column>
144 </el-table>
145 </div>
146
92 <div class="text-center mt20"> 147 <div class="text-center mt20">
93 <el-button type="primary" class="" plain round @click="submitForm(0)">{{ language==0?'保存暂不提交审核':'Save, Do Not Submit for Review Yet' }}</el-button> 148 <el-button type="primary" class="" plain round @click="submitForm(0)">
94 <el-button type="primary" class="btn-lineG w200px" round @click="submitForm(1)">{{ language==0?'提交审核':'Submit for review' }}</el-button> 149 {{ language == 0 ? '保存暂不提交审核' : 'Save, Do Not Submit for Review Yet' }}
150 </el-button>
151 <el-button type="primary" class="btn-lineG w200px" round @click="submitForm(1)">
152 {{ language == 0 ? '提交审核' : 'Submit for review' }}
153 </el-button>
95 </div> 154 </div>
96 </div> 155 </div>
97 </el-card> 156 </el-card>
98 </div> 157 </div>
99 158
100 <dialogAddCoach ref="dialogAddCoachRef" @submitForm="changeMeDone"/> 159 <dialogAddCoach ref="dialogAddCoachRef" @submitForm="changeMeDone"/>
101
102
103 <!-- <dialogChangeCoach ref="popChangeCoach" @submitForm="getMySignInfo"/>--> 160 <!-- <dialogChangeCoach ref="popChangeCoach" @submitForm="getMySignInfo"/>-->
104
105 <dialogExtraForm ref="popExtraForm" @submitForm="getSignInfoList"/> 161 <dialogExtraForm ref="popExtraForm" @submitForm="getSignInfoList"/>
106 </div> 162 </div>
107 </template> 163 </template>
...@@ -131,6 +187,7 @@ import ZuTable from '@/viewsPc/match/components/zu-table' ...@@ -131,6 +187,7 @@ import ZuTable from '@/viewsPc/match/components/zu-table'
131 import SingleSignStep from "@/viewsPc/match/components/singleSignStep"; 187 import SingleSignStep from "@/viewsPc/match/components/singleSignStep";
132 import MatchInfoRow from "@/viewsPc/match/components/matchInfo-row"; 188 import MatchInfoRow from "@/viewsPc/match/components/matchInfo-row";
133 import useUserStore from "@/store/modules/user"; 189 import useUserStore from "@/store/modules/user";
190
134 const language = ref(cache.local.get('language') || 0) 191 const language = ref(cache.local.get('language') || 0)
135 192
136 const data = reactive({ 193 const data = reactive({
...@@ -165,11 +222,12 @@ const { ...@@ -165,11 +222,12 @@ const {
165 const matchId = ref(route.query.matchId) 222 const matchId = ref(route.query.matchId)
166 let signInfoType = null 223 let signInfoType = null
167 const form = ref({}) 224 const form = ref({})
225 const showPersonList = ref(false)
168 const signEndTime = ref('') 226 const signEndTime = ref('')
169 const userId = ref('') 227 const userId = ref('')
170 const myId = ref('') 228 const myId = ref('')
171 onMounted(() => { 229 onMounted(() => {
172 if(useUserStore().user){ 230 if (useUserStore().user) {
173 userId.value = useUserStore().user.userId 231 userId.value = useUserStore().user.userId
174 } 232 }
175 signType.value = route.query.signType 233 signType.value = route.query.signType
...@@ -179,17 +237,20 @@ onMounted(() => { ...@@ -179,17 +237,20 @@ onMounted(() => {
179 237
180 getMySignInfo() 238 getMySignInfo()
181 }) 239 })
182 function getMyInfo(){ 240
241 function getMyInfo() {
183 match.getMyPersonInfo().then(res => { 242 match.getMyPersonInfo().then(res => {
184 form.value = res.data 243 form.value = res.data
185 myId.value = res.data.id 244 myId.value = res.data.id
186 getProjectList() 245 getProjectList()
187 }) 246 })
188 } 247 }
189 function changeMeDone(){ 248
249 function changeMeDone() {
190 getMyInfo() 250 getMyInfo()
191 getProjectList() 251 getProjectList()
192 } 252 }
253
193 let chargeFlag 254 let chargeFlag
194 255
195 function getMatch(id) { 256 function getMatch(id) {
...@@ -226,7 +287,6 @@ function getSignInfoList() { ...@@ -226,7 +287,6 @@ function getSignInfoList() {
226 } 287 }
227 288
228 289
229
230 function submitForm(n) { 290 function submitForm(n) {
231 if (signInfoType == '1') { 291 if (signInfoType == '1') {
232 ElMessageBox.confirm('已报项,前往我的报项', '提示', { 292 ElMessageBox.confirm('已报项,前往我的报项', '提示', {
...@@ -238,15 +298,15 @@ function submitForm(n) { ...@@ -238,15 +298,15 @@ function submitForm(n) {
238 }) 298 })
239 return 299 return
240 } 300 }
241 if(n==0){ 301 if (n == 0) {
242 ElMessageBox.confirm(`您当前的操作为暂存,并不是提交审核, 302 ElMessageBox.confirm(`您当前的操作为暂存,并不是提交审核,
243 必须在报名截止时间${signEndTime.value}之前完成提交。 303 必须在报名截止时间${signEndTime.value}之前完成提交。
244 您也可以在个人中心-我的报名中,找到这条报名,点击提交审核。`, 304 您也可以在个人中心-我的报名中,找到这条报名,点击提交审核。`,
245 language.value==0?'提示':'Tip',{ 305 language.value == 0 ? '提示' : 'Tip', {
246 confirmButtonText: language.value==0?'去个人中心':'Go My Eegistration ', 306 confirmButtonText: language.value == 0 ? '去个人中心' : 'Go My Eegistration ',
247 cancelButtonText: language.value==0?'知道了':'OK', 307 cancelButtonText: language.value == 0 ? '知道了' : 'OK',
248 type: 'warning' 308 type: 'warning'
249 }).then((res)=>{ 309 }).then((res) => {
250 console.log(res) 310 console.log(res)
251 router.push({name: 'myMatch'}) 311 router.push({name: 'myMatch'})
252 }) 312 })
...@@ -260,24 +320,38 @@ function submitForm(n) { ...@@ -260,24 +320,38 @@ function submitForm(n) {
260 } 320 }
261 for (const s of signInfoList.value) { 321 for (const s of signInfoList.value) {
262 if (s.extraPersonInfo == null && needBuchong) { 322 if (s.extraPersonInfo == null && needBuchong) {
263 ElMessage.error(language.value==0?'请完善运动员补充信息':'Complete Supplementary Information') 323 ElMessage.error(language.value == 0 ? '请完善运动员补充信息' : 'Complete Supplementary Information')
264 tableType.value = 0 324 tableType.value = 0
265 return 325 return
266 } 326 }
267 } 327 }
268 328
329 if(showPersonList.value){
269 commit() 330 commit()
331 } else {
332 ElMessageBox.confirm(language.value==0?'是否添加随性人员?':'Do you want to add casual personnel?',
333 language.value==0?'提示':'Tip', {
334 confirmButtonText: language.value==0?'确定':'Yes',
335 cancelButtonText: language.value==0?'取消':'Cancel',
336 type: 'warning'
337 }).then(() => {
338 showPersonList.value = true
339 }).catch(() => {
340 commit()
341 })
342 }
270 } 343 }
271 344
272 } 345 }
273 } 346 }
347
274 function commit() { 348 function commit() {
275 match.commitSign({ 349 match.commitSign({
276 groupId: 0, 350 groupId: 0,
277 cptId: matchId.value 351 cptId: matchId.value
278 }).then(res=>{ 352 }).then(res => {
279 router.push({ 353 router.push({
280 name:`commitDone`, 354 name: `commitDone`,
281 params: { 355 params: {
282 orderId: res.data 356 orderId: res.data
283 } 357 }
...@@ -292,7 +366,7 @@ function getProjectList() { ...@@ -292,7 +366,7 @@ function getProjectList() {
292 var obj = { 366 var obj = {
293 cptId: matchId.value, 367 cptId: matchId.value,
294 perIds: myId.value, 368 perIds: myId.value,
295 name:projectQuery.value.name 369 name: projectQuery.value.name
296 } 370 }
297 match.getProjectPageByPerIds(obj).then(res => { 371 match.getProjectPageByPerIds(obj).then(res => {
298 projectList.value = res.rows 372 projectList.value = res.rows
...@@ -337,7 +411,7 @@ function signUp() { ...@@ -337,7 +411,7 @@ function signUp() {
337 return 411 return
338 } 412 }
339 const obj = { 413 const obj = {
340 athleteIds:myId.value, 414 athleteIds: myId.value,
341 projectIds: projectIds.value.toString(), 415 projectIds: projectIds.value.toString(),
342 groupId: groupId.value 416 groupId: groupId.value
343 } 417 }
...@@ -348,15 +422,15 @@ function signUp() { ...@@ -348,15 +422,15 @@ function signUp() {
348 } 422 }
349 423
350 function removeThis(id) { 424 function removeThis(id) {
351 ElMessageBox.confirm(language.value==0?'确定移除这条报项吗?':'Are you sure to remove this report item', 425 ElMessageBox.confirm(language.value == 0 ? '确定移除这条报项吗?' : 'Are you sure to remove this report item',
352 language.value==0?'提示':'Tips', { 426 language.value == 0 ? '提示' : 'Tips', {
353 confirmButtonText: language.value==0?'确定':'Confirm', 427 confirmButtonText: language.value == 0 ? '确定' : 'Confirm',
354 cancelButtonText: language.value==0?'取消':'Cancel', 428 cancelButtonText: language.value == 0 ? '取消' : 'Cancel',
355 type: 'warning' 429 type: 'warning'
356 }).then(() => { 430 }).then(() => {
357 match.deleteSign(id).then(res => { 431 match.deleteSign(id).then(res => {
358 // 重新获取已报名信息 432 // 重新获取已报名信息
359 ElMessage.success(language.value==0?'已移除该报项':'success') 433 ElMessage.success(language.value == 0 ? '已移除该报项' : 'success')
360 getSignInfoList() 434 getSignInfoList()
361 getProjectList() 435 getProjectList()
362 }) 436 })
...@@ -411,7 +485,7 @@ function downloadVoucher() { ...@@ -411,7 +485,7 @@ function downloadVoucher() {
411 485
412 function editPerson() { 486 function editPerson() {
413 proxy.$refs['dialogAddCoachRef'].open({ 487 proxy.$refs['dialogAddCoachRef'].open({
414 title: language.value==0?'编辑个人信息':'Edit My Information', 488 title: language.value == 0 ? '编辑个人信息' : 'Edit My Information',
415 isMe: true 489 isMe: true
416 }) 490 })
417 } 491 }
......
...@@ -14,22 +14,15 @@ ...@@ -14,22 +14,15 @@
14 <h3 class="panel-title" v-else>Select list of participating athletes</h3> 14 <h3 class="panel-title" v-else>Select list of participating athletes</h3>
15 <a class="fr" @click="emptyChoosed">{{ language == 0 ? '清空' : 'Empty' }}</a> 15 <a class="fr" @click="emptyChoosed">{{ language == 0 ? '清空' : 'Empty' }}</a>
16 </div> 16 </div>
17 <div class="panel-body"> 17 <div class="panel-body" style="padding: 10px">
18 <div class="chooseForm"> 18 <div class="noPicChooseForm">
19 <el-checkbox-group v-model="choosedchoosed" @change="changechoosed"> 19 <el-checkbox-group v-model="choosedchoosed" @change="changechoosed">
20 <div class="addBttn" @click="chooseSportman">+</div> 20 <el-button plain @click="chooseSportman">+{{ language == 0 ?'选择':'add' }}</el-button>
21 <el-checkbox v-for="c in choosedList" :label="c.id"> 21 <el-checkbox v-for="c in choosedList" :label="c.id" border>
22 <el-avatar fit="cover" v-if="c.picUrl" :size="60" :src="fillImgUrl(c.picUrl)"/> 22 <p class="name">{{ c.realName }}
23 <el-avatar fit="cover" v-else-if="c.sex == 0" :size="60" src="@/assets/img/head1.png"/> 23 <!-- ({{ c.sexStr }})-->
24 <el-avatar fit="cover" v-else-if="c.sex == 1" :size="60" src="@/assets/img/head0.png"/> 24 <img v-if="c.sex=='0'" src="@/assets/img/female.png"/>
25 25 <img v-if="c.sex=='1'" src="@/assets/img/male.png"/>
26 <p class="name">{{ c.shortName }}({{ c.sexStr }})
27 <!-- <el-icon @click.stop="editPerson(c.id)">-->
28 <!-- <Edit/>-->
29 <!-- </el-icon>-->
30 <!-- <el-icon @click.stop="delthischoosed(c)">-->
31 <!-- <Delete/>-->
32 <!-- </el-icon>-->
33 </p> 26 </p>
34 </el-checkbox> 27 </el-checkbox>
35 </el-checkbox-group> 28 </el-checkbox-group>
...@@ -42,6 +35,7 @@ ...@@ -42,6 +35,7 @@
42 <div class="panel-header "> 35 <div class="panel-header ">
43 <h3 class="panel-title" v-if="language==0">选择一个参赛组合</h3> 36 <h3 class="panel-title" v-if="language==0">选择一个参赛组合</h3>
44 <h3 class="panel-title" v-else>Select a Participating team</h3> 37 <h3 class="panel-title" v-else>Select a Participating team</h3>
38 <a class="fr" @click="emptyChangechoosed">{{ language == 0 ? '清空' : 'Empty' }}</a>
45 </div> 39 </div>
46 <div class="panel-body"> 40 <div class="panel-body">
47 <div class="chooseForm"> 41 <div class="chooseForm">
...@@ -51,7 +45,10 @@ ...@@ -51,7 +45,10 @@
51 <el-avatar fit="cover" v-if="c.picUrl" :size="60" :src="fillImgUrl(c.picUrl)"/> 45 <el-avatar fit="cover" v-if="c.picUrl" :size="60" :src="fillImgUrl(c.picUrl)"/>
52 <el-avatar fit="cover" v-else-if="c.sex == 0" :size="60" src="@/assets/img/head1.png"/> 46 <el-avatar fit="cover" v-else-if="c.sex == 0" :size="60" src="@/assets/img/head1.png"/>
53 <el-avatar fit="cover" v-else-if="c.sex == 1" :size="60" src="@/assets/img/head0.png"/> 47 <el-avatar fit="cover" v-else-if="c.sex == 1" :size="60" src="@/assets/img/head0.png"/>
54 <p class="name">{{ c.shortName }}({{ c.sexStr }}) 48 <p class="name">{{ c.realName }}
49 <!-- ({{ c.sexStr }})-->
50 <img v-if="c.sex=='0'" src="@/assets/img/female.png"/>
51 <img v-if="c.sex=='1'" src="@/assets/img/male.png"/>
55 <!-- <el-icon @click.stop="editPerson(c.id)">--> 52 <!-- <el-icon @click.stop="editPerson(c.id)">-->
56 <!-- <Edit/>--> 53 <!-- <Edit/>-->
57 <!-- </el-icon>--> 54 <!-- </el-icon>-->
...@@ -68,11 +65,12 @@ ...@@ -68,11 +65,12 @@
68 <h3 class="panel-title" v-if="language==0">可参与报名的项目</h3> 65 <h3 class="panel-title" v-if="language==0">可参与报名的项目</h3>
69 <h3 class="panel-title" v-else>Eligible Events for Registration</h3> 66 <h3 class="panel-title" v-else>Eligible Events for Registration</h3>
70 <div class="fr"> 67 <div class="fr">
71 <el-input size="small" v-model="projectQuery.name" :prefix-icon="Search" @change="getProjectList" 68 <el-input size="small" v-model="projectQuery.name" :prefix-icon="Search"
69 @change="getProjectList"
72 clearable/> 70 clearable/>
73 </div> 71 </div>
74 </div> 72 </div>
75 <div v-loading="loadingProject"> 73 <div v-loading="loadingProject" style="height: 60vh">
76 <el-checkbox-group v-model="projectIds"> 74 <el-checkbox-group v-model="projectIds">
77 <el-checkbox class="flexBetweenBox" v-for="c in projectList" :label="c.id" :key="c.id"> 75 <el-checkbox class="flexBetweenBox" v-for="c in projectList" :label="c.id" :key="c.id">
78 <div class="flexBetween w100"> 76 <div class="flexBetween w100">
...@@ -80,7 +78,7 @@ ...@@ -80,7 +78,7 @@
80 {{ c.code }}:{{ c.name }} 78 {{ c.code }}:{{ c.name }}
81 <div>{{ c.danceTypeDetailStr }}</div> 79 <div>{{ c.danceTypeDetailStr }}</div>
82 </div> 80 </div>
83 <div class="text-primary">¥{{ c.serviceFee }}</div> 81 <div class="text-primary">{{ language==0?'¥':'£' }}{{ c.serviceFee }}</div>
84 </div> 82 </div>
85 </el-checkbox> 83 </el-checkbox>
86 </el-checkbox-group> 84 </el-checkbox-group>
...@@ -336,26 +334,6 @@ function afterRecover() { ...@@ -336,26 +334,6 @@ function afterRecover() {
336 } 334 }
337 return 335 return
338 } 336 }
339 // 判断是否收费
340 if (chargeFlag == '0') {
341 var obj = {
342 cptId: matchId.value,
343 groupId: groupId.value
344 }
345 match.commitSign(obj).then(res => {
346 console.log(res.data)
347 showResult.value = true
348 })
349 } else {
350 // 生成账单
351 router.push({
352 name: 'expenseDetails',
353 query: {
354 matchId: matchId.value,
355 groupId: groupId.value
356 }
357 })
358 }
359 } 337 }
360 338
361 function goPrev() { 339 function goPrev() {
...@@ -472,6 +450,10 @@ function delthischoosed(p) { ...@@ -472,6 +450,10 @@ function delthischoosed(p) {
472 function emptyChoosed() { 450 function emptyChoosed() {
473 choosedList.value = [] 451 choosedList.value = []
474 } 452 }
453 function emptyChangechoosed() {
454 choosedchoosed.value = []
455 choosed2List.value = []
456 }
475 457
476 function delchoosedchoosed() { 458 function delchoosedchoosed() {
477 console.log(choosedchoosed.value) 459 console.log(choosedchoosed.value)
...@@ -514,6 +496,7 @@ function signUp() { ...@@ -514,6 +496,7 @@ function signUp() {
514 groupId: groupId.value 496 groupId: groupId.value
515 } 497 }
516 match.sportsmanDone(obj).then(res => { 498 match.sportsmanDone(obj).then(res => {
499 choosedchoosed.value = []
517 getSignInfoList() 500 getSignInfoList()
518 getProjectList() 501 getProjectList()
519 }) 502 })
...@@ -756,4 +739,14 @@ function switchTabletype() { ...@@ -756,4 +739,14 @@ function switchTabletype() {
756 } 739 }
757 } 740 }
758 } 741 }
742 .noPicChooseForm{
743 .el-checkbox-group{display: flex;flex-wrap: wrap;text-align: justify;
744 .el-button{width: 31%;margin:1%;}
745 .el-checkbox{margin: 1%;width: 31%;overflow: hidden;}
746 .name{justify-content: left;}
747 }
748 }
749 .name{display: flex;align-items: center;justify-content: center;
750 img{height: 20px;margin-left: 4px;}
751 }
759 </style> 752 </style>
......
...@@ -7,24 +7,12 @@ ...@@ -7,24 +7,12 @@
7 <el-form ref="dialogRef" :model="form" :rules="language==0?rules:rules_cn" label-width="120px" inline> 7 <el-form ref="dialogRef" :model="form" :rules="language==0?rules:rules_cn" label-width="120px" inline>
8 <el-row :gutter="30"> 8 <el-row :gutter="30">
9 <el-col :lg="12" class="touxiang"> 9 <el-col :lg="12" class="touxiang">
10 <el-form-item prop="picUrl" :label="language==0?'个人照片':'photo'" required> 10
11 <ImageUpload2
12 v-model="form.picUrl" :crop-height="280" :crop-width="200" class="threeFour" :limit="1"
13 :is-show-tip="false"
14 />
15 </el-form-item>
16 <el-form-item :label="language==0?'姓氏':'surname'" prop="xing" required> 11 <el-form-item :label="language==0?'姓氏':'surname'" prop="xing" required>
17 <el-input v-model="form.xing"/> 12 <el-input v-model="form.xing"/>
18 </el-form-item> 13 </el-form-item>
19 <el-form-item :label="language==0?'短名':'nike name'" prop="shortName" required> 14 <el-form-item :label="language==0?'名':'name'" prop="ming" required>
20 <el-input v-model="form.shortName" :placeholder="language==0?'赛事用名':''"/> 15 <el-input v-model="form.ming"/>
21 </el-form-item>
22 <el-form-item :label="language==0?'出生日期':'birth'" prop="birth" required>
23 <el-date-picker
24 v-model="form.birth"
25 style="width: 100%;"
26 type="date" format="YYYY-MM-DD" value-format="YYYY-MM-DD"
27 />
28 </el-form-item> 16 </el-form-item>
29 <el-form-item :label="language==0?'证件类型':'ID type'" prop="idcType" required> 17 <el-form-item :label="language==0?'证件类型':'ID type'" prop="idcType" required>
30 <el-select v-model="form.idcType" style="width: 100%;"> 18 <el-select v-model="form.idcType" style="width: 100%;">
...@@ -36,16 +24,42 @@ ...@@ -36,16 +24,42 @@
36 /> 24 />
37 </el-select> 25 </el-select>
38 </el-form-item> 26 </el-form-item>
39 <el-form-item :label="language==0?'手机号码':'Phone'" prop="phone" required> 27 <el-form-item :label="language==0?'证件号码':'ID NO'" prop="idcCode" required>
40 <el-input v-model="form.phone" type="number"/> 28 <el-input v-model="form.idcCode" @blur="checkCode"/>
41 </el-form-item> 29 </el-form-item>
42 <el-form-item :label="language==0?'WDSF会员号':'WDSF code'" prop="wdsfMin"> 30 <el-form-item :label="language==0?'性别':'sex'" prop="sex">
43 <el-input v-model="form.wdsfMin" type="number"/> 31 <el-radio-group v-model="form.sex">
32 <el-radio label="0">{{ language==0?'女':'female' }}</el-radio>
33 <el-radio label="1">{{ language==0?'男':'male' }}</el-radio>
34 </el-radio-group>
35 </el-form-item>
36
37 <el-form-item :label="language==0?'出生日期':'birth'" prop="birth" required>
38 <el-date-picker
39 v-model="form.birth"
40 style="width: 100%;"
41 type="date" format="YYYY-MM-DD" value-format="YYYY-MM-DD"
42 />
44 </el-form-item> 43 </el-form-item>
44 <el-form-item :label="language==0?'主要会员角色':'roles'" prop="labelArr">
45 <el-select v-model="form.labelArr" multiple @change="labelvalue">
46 <el-option v-for="l in labels" :key="l.value" :value="l.value" :label="language==0?l.label:l.enlabel"/>
47 </el-select>
48 </el-form-item>
49 <!-- <el-form-item :label="language==0?'短名':'nike name'" prop="shortName" required>-->
50 <!-- <el-input v-model="form.shortName" :placeholder="language==0?'赛事用名':''"/>-->
51 <!-- </el-form-item>-->
52
53
45 </el-col> 54 </el-col>
46 <el-col :lg="12"> 55 <el-col :lg="12">
56 <el-form-item :label="language==0?'手机号码':'Phone'" prop="phone" required>
57 <el-input v-model="form.phone" type="number"/>
58 </el-form-item>
59
60
47 <el-form-item :label="language==0?'所属国家':'Nationality'" prop="countryId" required> 61 <el-form-item :label="language==0?'所属国家':'Nationality'" prop="countryId" required>
48 <el-select filterable v-model="form.countryId" style="width: 100%;" @change="changeCountryId"> 62 <el-select :disabled="language==0" filterable v-model="form.countryId" style="width: 100%;" @change="changeCountryId">
49 <el-option v-for="item in countryList" :key="item.id" :label="language==0?item.name:item.enName" :value="item.id"/> 63 <el-option v-for="item in countryList" :key="item.id" :label="language==0?item.name:item.enName" :value="item.id"/>
50 </el-select> 64 </el-select>
51 </el-form-item> 65 </el-form-item>
...@@ -59,26 +73,21 @@ ...@@ -59,26 +73,21 @@
59 <el-input v-model="form.address" type="textarea" :rows="4"/> 73 <el-input v-model="form.address" type="textarea" :rows="4"/>
60 74
61 </el-form-item> 75 </el-form-item>
62 <el-form-item :label="language==0?'名':'name'" prop="ming" required> 76 <el-form-item :label="language==0?'WDSF会员号':'WDSF code'" prop="wdsfMin">
63 <el-input v-model="form.ming"/> 77 <el-input v-model="form.wdsfMin" type="number"/>
64 </el-form-item>
65 <el-form-item :label="language==0?'性别':'sex'" prop="sex">
66 <el-radio-group v-model="form.sex">
67 <el-radio label="0">{{ language==0?'女':'female' }}</el-radio>
68 <el-radio label="1">{{ language==0?'男':'male' }}</el-radio>
69 </el-radio-group>
70 </el-form-item>
71 <el-form-item :label="language==0?'邮箱':'Email'" prop="email" required>
72 <el-input v-model="form.email"/>
73 </el-form-item>
74 <el-form-item :label="language==0?'证件号码':'ID NO'" prop="idcCode" required>
75 <el-input v-model="form.idcCode" @blur="checkCode"/>
76 </el-form-item> 78 </el-form-item>
77 <el-form-item :label="language==0?'主要会员角色':'roles'" prop="labelArr"> 79 <el-form-item prop="picUrl" :label="language==0?'个人照片':'photo'">
78 <el-select v-model="form.labelArr" multiple @change="labelvalue"> 80 <ImageUpload2
79 <el-option v-for="l in labels" :key="l.value" :value="l.value" :label="language==0?l.label:l.enlabel"/> 81 v-model="form.picUrl" :crop-height="280" :crop-width="200" class="threeFour" :limit="1"
80 </el-select> 82 :is-show-tip="false"
83 />
81 </el-form-item> 84 </el-form-item>
85
86 <!-- <el-form-item :label="language==0?'邮箱':'Email'" prop="email" required>-->
87 <!-- <el-input v-model="form.email"/>-->
88 <!-- </el-form-item>-->
89
90
82 </el-col> 91 </el-col>
83 </el-row> 92 </el-row>
84 </el-form> 93 </el-form>
...@@ -117,13 +126,13 @@ const {proxy} = getCurrentInstance() ...@@ -117,13 +126,13 @@ const {proxy} = getCurrentInstance()
117 const emit = defineEmits(['submitForm']) 126 const emit = defineEmits(['submitForm'])
118 const data = reactive({ 127 const data = reactive({
119 form: { 128 form: {
120 countryId: 240 129 // countryId: 240
121 }, 130 },
122 rules: { 131 rules: {
123 xing: [{required: true, message: '必填', trigger: 'blur'}], 132 xing: [{required: true, message: '必填', trigger: 'blur'}],
124 ming: [{required: true, message: '必填', trigger: 'blur'}], 133 ming: [{required: true, message: '必填', trigger: 'blur'}],
125 shortName: [{required: true, message: '必填', trigger: 'blur'}], 134 // shortName: [{required: true, message: '必填', trigger: 'blur'}],
126 email: [{required: true, message: '必填', trigger: 'blur'}], 135 // email: [{required: true, message: '必填', trigger: 'blur'}],
127 countryId: [{required: true, message: '必填', trigger: 'change'}], 136 countryId: [{required: true, message: '必填', trigger: 'change'}],
128 idcType: [{required: true, message: '必填', trigger: 'change'}], 137 idcType: [{required: true, message: '必填', trigger: 'change'}],
129 idcCode: [{required: true, message: '必填', trigger: 'blur'}], 138 idcCode: [{required: true, message: '必填', trigger: 'blur'}],
...@@ -131,15 +140,15 @@ const data = reactive({ ...@@ -131,15 +140,15 @@ const data = reactive({
131 // regionId: [{ required: true, message: '必填', trigger: 'change' }], 140 // regionId: [{ required: true, message: '必填', trigger: 'change' }],
132 birth: [{required: true, message: '必填', trigger: 'change'}], 141 birth: [{required: true, message: '必填', trigger: 'change'}],
133 address: [{ required: true, message: '必填', trigger: 'blur' }], 142 address: [{ required: true, message: '必填', trigger: 'blur' }],
134 picUrl: [{required: true, message: '必填', trigger: 'blur'}], 143 // picUrl: [{required: true, message: '必填', trigger: 'blur'}],
135 sex: [{required: true, message: '必填', trigger: 'change'}], 144 sex: [{required: true, message: '必填', trigger: 'change'}],
136 labelArr: [{required: true, message: '必填', trigger: 'change'}] 145 labelArr: [{required: true, message: '必填', trigger: 'change'}]
137 }, 146 },
138 rules_cn:{ 147 rules_cn:{
139 xing: [{required: true, message: 'required', trigger: 'blur'}], 148 xing: [{required: true, message: 'required', trigger: 'blur'}],
140 ming: [{required: true, message: 'required', trigger: 'blur'}], 149 ming: [{required: true, message: 'required', trigger: 'blur'}],
141 shortName: [{required: true, message: 'required', trigger: 'blur'}], 150 // shortName: [{required: true, message: 'required', trigger: 'blur'}],
142 email: [{required: true, message: 'required', trigger: 'blur'}], 151 // email: [{required: true, message: 'required', trigger: 'blur'}],
143 countryId: [{required: true, message: 'required', trigger: 'change'}], 152 countryId: [{required: true, message: 'required', trigger: 'change'}],
144 idcType: [{required: true, message: 'required', trigger: 'change'}], 153 idcType: [{required: true, message: 'required', trigger: 'change'}],
145 idcCode: [{required: true, message: 'required', trigger: 'blur'}], 154 idcCode: [{required: true, message: 'required', trigger: 'blur'}],
...@@ -147,7 +156,7 @@ const data = reactive({ ...@@ -147,7 +156,7 @@ const data = reactive({
147 // regionId: [{ required: true, message: 'required', trigger: 'change' }], 156 // regionId: [{ required: true, message: 'required', trigger: 'change' }],
148 birth: [{required: true, message: 'required', trigger: 'change'}], 157 birth: [{required: true, message: 'required', trigger: 'change'}],
149 address: [{ required: true, message: 'required', trigger: 'blur' }], 158 address: [{ required: true, message: 'required', trigger: 'blur' }],
150 picUrl: [{required: true, message: 'required', trigger: 'blur'}], 159 // picUrl: [{required: true, message: 'required', trigger: 'blur'}],
151 sex: [{required: true, message: 'required', trigger: 'change'}], 160 sex: [{required: true, message: 'required', trigger: 'change'}],
152 labelArr: [{required: true, message: 'required', trigger: 'change'}] 161 labelArr: [{required: true, message: 'required', trigger: 'change'}]
153 }, 162 },
...@@ -172,6 +181,7 @@ const {showRequire, form, rules,rules_cn, show, countryList, regionsList, title, ...@@ -172,6 +181,7 @@ const {showRequire, form, rules,rules_cn, show, countryList, regionsList, title,
172 onMounted(() => { 181 onMounted(() => {
173 getCountryList() 182 getCountryList()
174 getRegionsList() 183 getRegionsList()
184
175 }) 185 })
176 let editgay = false 186 let editgay = false
177 const open = (params) => { 187 const open = (params) => {
...@@ -180,6 +190,9 @@ const open = (params) => { ...@@ -180,6 +190,9 @@ const open = (params) => {
180 title.value = params.title 190 title.value = params.title
181 groupId.value = params.groupId || '0' 191 groupId.value = params.groupId || '0'
182 isMe.value = params.isMe 192 isMe.value = params.isMe
193 if(language.value == 0){
194 form.value.countryId = 240
195 }
183 if(isMe.value){ 196 if(isMe.value){
184 //个人 197 //个人
185 match.getMyPersonInfo().then(res => { 198 match.getMyPersonInfo().then(res => {
......
...@@ -13,15 +13,6 @@ ...@@ -13,15 +13,6 @@
13 <el-form-item :label="language==0?'姓名':'Name'"> 13 <el-form-item :label="language==0?'姓名':'Name'">
14 <el-input v-model="query.realName" style="width: 120px;" clearable/> 14 <el-input v-model="query.realName" style="width: 120px;" clearable/>
15 </el-form-item> 15 </el-form-item>
16 <el-form-item :label="language==0?'短名':'Nick Name'">
17 <el-input v-model="query.shortName" style="width: 120px;" clearable/>
18 </el-form-item>
19 <el-form-item :label="language==0?'手机号码':'Phone Number'">
20 <el-input v-model="query.phone" style="width: 120px;" clearable/>
21 </el-form-item>
22 <el-form-item :label="language==0?'邮箱':'E-mail'">
23 <el-input v-model="query.email" style="width: 120px;" clearable/>
24 </el-form-item>
25 <el-form-item :label="language==0?'证件类型':'ID Type'"> 16 <el-form-item :label="language==0?'证件类型':'ID Type'">
26 <el-input v-model="query.idcType" style="width: 120px;" clearable/> 17 <el-input v-model="query.idcType" style="width: 120px;" clearable/>
27 </el-form-item> 18 </el-form-item>
...@@ -40,15 +31,12 @@ ...@@ -40,15 +31,12 @@
40 <el-table ref="allSportmenTable" v-loading="loading" :data="tableData" height="60vh" 31 <el-table ref="allSportmenTable" v-loading="loading" :data="tableData" height="60vh"
41 @selection-change="handleSelectionChange"> 32 @selection-change="handleSelectionChange">
42 <el-table-column type="selection" :label="language==0?'选择':'Selection'" :selectable="selectable"/> 33 <el-table-column type="selection" :label="language==0?'选择':'Selection'" :selectable="selectable"/>
43 <el-table-column :label="language==0?'所属国家':'Nationality'" prop="countryName" min-width="100"/>
44 <el-table-column :label="language==0?'姓氏':'Last Name'" prop="xing" min-width="100"/> 34 <el-table-column :label="language==0?'姓氏':'Last Name'" prop="xing" min-width="100"/>
45 <el-table-column :label="language==0?'名':'First Name'" prop="ming" min-width="100"/> 35 <el-table-column :label="language==0?'名':'First Name'" prop="ming" min-width="100"/>
46 <el-table-column :label="language==0?'短名':'Nick Name'" prop="shortName" min-width="110"/> 36 <el-table-column :label="language==0?'所属国家':'Nationality'" prop="countryName" min-width="100"/>
47 <el-table-column :label="language==0?'性别':'Gender'" prop="sexStr"/> 37 <el-table-column :label="language==0?'性别':'Gender'" prop="sexStr"/>
48 <el-table-column :label="language==0?'年龄':'Age'" prop="age"/> 38 <el-table-column :label="language==0?'年龄':'Age'" prop="age"/>
49 <el-table-column :label="language==0?'出生日期':'Birth'" prop="birth" width="110"/> 39 <el-table-column :label="language==0?'出生日期':'Birth'" prop="birth" width="110"/>
50 <el-table-column :label="language==0?'手机号码':'Phone Number'" prop="phone" width="120"/>
51 <el-table-column :label="language==0?'邮箱':'E-mail'" prop="email" width="150"/>
52 <el-table-column :label="language==0?'证件类型':'ID Type'" prop="idcTypeStr"/> 40 <el-table-column :label="language==0?'证件类型':'ID Type'" prop="idcTypeStr"/>
53 <el-table-column :label="language==0?'证件号码':'ID NO.'" prop="idcCode" width="200"/> 41 <el-table-column :label="language==0?'证件号码':'ID NO.'" prop="idcCode" width="200"/>
54 <!-- <el-table-column label="会员角色" width="200">--> 42 <!-- <el-table-column label="会员角色" width="200">-->
...@@ -68,7 +56,6 @@ ...@@ -68,7 +56,6 @@
68 <!-- </div>--> 56 <!-- </div>-->
69 <!-- </template>--> 57 <!-- </template>-->
70 <!-- </el-table-column>--> 58 <!-- </el-table-column>-->
71 <el-table-column :label="language==0?'详细地址':'Detailed Address'" prop="address" min-width="140"/>
72 <el-table-column :label="language==0?'操作':'Actions'" width="120" fixed="right" align="center"> 59 <el-table-column :label="language==0?'操作':'Actions'" width="120" fixed="right" align="center">
73 <template #default="scope"> 60 <template #default="scope">
74 <el-button link type="primary" @click="editPerson(scope.row)"> 61 <el-button link type="primary" @click="editPerson(scope.row)">
...@@ -77,6 +64,13 @@ ...@@ -77,6 +64,13 @@
77 </template> 64 </template>
78 </el-table-column> 65 </el-table-column>
79 </el-table> 66 </el-table>
67 <paginationPc
68 v-show="total>0"
69 v-model:page="query.pageNum"
70 v-model:limit="query.pageSize"
71 :total="total"
72 @pagination="getList"
73 />
80 <template #footer> 74 <template #footer>
81 <div class="dialog-footer text-center"> 75 <div class="dialog-footer text-center">
82 <el-button type="primary" @click="submitForm">{{language==0?'确定':'Confirm'}}</el-button> 76 <el-button type="primary" @click="submitForm">{{language==0?'确定':'Confirm'}}</el-button>
...@@ -104,16 +98,18 @@ const {proxy} = getCurrentInstance() ...@@ -104,16 +98,18 @@ const {proxy} = getCurrentInstance()
104 const emit = defineEmits(['submitForm', 'transfer']) 98 const emit = defineEmits(['submitForm', 'transfer'])
105 const data = reactive({ 99 const data = reactive({
106 query: { 100 query: {
107 label:'0' 101 label:'0',
102 pageNum:1,
103 pageSize:10
108 }, 104 },
109 tableData: [], 105 tableData: [],
110 birthArr: [],
111 show: false, 106 show: false,
112 loading: false, 107 loading: false,
113 title: '选择运动员', 108 title: '选择运动员',
114 noPhotoCanSign: 0 109 noPhotoCanSign: 0,
110 total: 0
115 }) 111 })
116 const {query, tableData, show, title, birthArr, loading, noPhotoCanSign} = toRefs(data) 112 const {query, tableData, show, title, loading, noPhotoCanSign,total} = toRefs(data)
117 let matchId 113 let matchId
118 let groupId 114 let groupId
119 let choosedList = [] 115 let choosedList = []
...@@ -142,12 +138,9 @@ const selectable = (row) => { ...@@ -142,12 +138,9 @@ const selectable = (row) => {
142 } 138 }
143 const getList = () => { 139 const getList = () => {
144 loading.value = true 140 loading.value = true
145 if (birthArr.value) {
146 query.value.birthBegin = birthArr.value[0]
147 query.value.birthEnd = birthArr.value[1]
148 }
149 match.getGroupPersonList(query.value, groupId).then(res => { 141 match.getGroupPersonList(query.value, groupId).then(res => {
150 tableData.value = res.rows 142 tableData.value = res.rows
143 total.value = res.total
151 nextTick(() => { 144 nextTick(() => {
152 for (const n in tableData.value) { 145 for (const n in tableData.value) {
153 if (choosedIds.indexOf(tableData.value[n].id) > -1) { 146 if (choosedIds.indexOf(tableData.value[n].id) > -1) {
......
...@@ -3,23 +3,23 @@ ...@@ -3,23 +3,23 @@
3 <el-row> 3 <el-row>
4 <el-col :lg="8"> 4 <el-col :lg="8">
5 <div class="item"><label>{{ language == 0 ? '教练' : 'Coach' }}</label> 5 <div class="item"><label>{{ language == 0 ? '教练' : 'Coach' }}</label>
6 <span v-for="c in names.coachList">{{ c.shortName }}</span> 6 <span v-for="c in names.coachList">{{ c.realName}}, </span>
7 <span v-if="!names.coachList">--</span> 7 <span v-if="!names.coachList">--</span>
8 </div> 8 </div>
9 <div class="item"><label>{{ language == 0 ? '翻译' : 'Translator' }}</label> 9 <div class="item"><label>{{ language == 0 ? '翻译' : 'Translator' }}</label>
10 <span v-for="c in names.translatorList">{{ c.shortName }}</span> 10 <span v-for="c in names.translatorList">{{ c.realName }}</span>
11 <span v-if="!names.translatorList">--</span> 11 <span v-if="!names.translatorList">--</span>
12 </div> 12 </div>
13 </el-col> 13 </el-col>
14 <el-col :lg="8"> 14 <el-col :lg="8">
15 <div class="item"> 15 <div class="item">
16 <label>{{ language == 0 ? '领队' : 'Team leader' }}</label> 16 <label>{{ language == 0 ? '领队' : 'Team leader' }}</label>
17 <span v-for="c in names.leaderList">{{ c.shortName }}</span> 17 <span v-for="c in names.leaderList">{{ c.realName }}</span>
18 <span v-if="!names.leaderList">--</span> 18 <span v-if="!names.leaderList">--</span>
19 </div> 19 </div>
20 <div class="item"> 20 <div class="item">
21 <label>{{ language == 0 ? '官员' : 'Official' }}</label> 21 <label>{{ language == 0 ? '官员' : 'Official' }}</label>
22 <span class="mr5" v-for="c in names.officialList">{{ c.shortName }}</span> 22 <span class="mr5" v-for="c in names.officialList">{{ c.realName }}</span>
23 <span v-if="!names.officialList">--</span> 23 <span v-if="!names.officialList">--</span>
24 </div> 24 </div>
25 </el-col> 25 </el-col>
...@@ -27,7 +27,7 @@ ...@@ -27,7 +27,7 @@
27 <div class="item"> 27 <div class="item">
28 <label>{{ language == 0 ? '队医' : 'Team doctor' }}</label> 28 <label>{{ language == 0 ? '队医' : 'Team doctor' }}</label>
29 <span class="mr5" v-for="c in names.teamDoctorList"> 29 <span class="mr5" v-for="c in names.teamDoctorList">
30 {{ c.shortName }} 30 {{ c.realName }}
31 </span> 31 </span>
32 <span v-if="!names.teamDoctorList">--</span> 32 <span v-if="!names.teamDoctorList">--</span>
33 </div> 33 </div>
......
...@@ -9,15 +9,11 @@ ...@@ -9,15 +9,11 @@
9 </el-descriptions-item> 9 </el-descriptions-item>
10 <el-descriptions-item :label="language==0?'姓氏':'surname'">{{ form.xing }}</el-descriptions-item> 10 <el-descriptions-item :label="language==0?'姓氏':'surname'">{{ form.xing }}</el-descriptions-item>
11 <el-descriptions-item :label="language==0?'名':'name'">{{ form.ming }}</el-descriptions-item> 11 <el-descriptions-item :label="language==0?'名':'name'">{{ form.ming }}</el-descriptions-item>
12 <el-descriptions-item :label="language==0?'短名':'short name'">{{ form.shortName }}</el-descriptions-item>
13 <el-descriptions-item :label="language==0?'性别':'sex'">{{ form.sexStr }}</el-descriptions-item> 12 <el-descriptions-item :label="language==0?'性别':'sex'">{{ form.sexStr }}</el-descriptions-item>
14 <el-descriptions-item :label="language==0?'所属国家':'Nationality'">{{ form.countryName }}</el-descriptions-item> 13 <el-descriptions-item :label="language==0?'所属国家':'Nationality'">{{ form.countryName }}</el-descriptions-item>
15 <el-descriptions-item :label="language==0?'证件类型':'ID type'">{{ form.idcTypeStr }}</el-descriptions-item> 14 <el-descriptions-item :label="language==0?'证件类型':'ID type'">{{ form.idcTypeStr }}</el-descriptions-item>
16 <el-descriptions-item :label="language==0?'证件号码':'ID NO'">{{ form.idcCode }}</el-descriptions-item> 15 <el-descriptions-item :label="language==0?'证件号码':'ID NO'">{{ form.idcCode }}</el-descriptions-item>
17 <el-descriptions-item :label="language==0?'出生日期':'birth'">{{ form.birth }}</el-descriptions-item> 16 <el-descriptions-item :label="language==0?'出生日期':'birth'">{{ form.birth }}</el-descriptions-item>
18 <el-descriptions-item :label="language==0?'手机号码':'Phone'">{{ form.phone }}</el-descriptions-item>
19 <el-descriptions-item :label="language==0?'邮箱':'Email'">{{ form.email }}</el-descriptions-item>
20 <el-descriptions-item :label="language==0?'详细地址':'Address'">{{ form.address }}</el-descriptions-item>
21 </el-descriptions> 17 </el-descriptions>
22 18
23 <el-row v-if="participantsInfoArr&&participantsInfoArr.length>0" class="mt20"> 19 <el-row v-if="participantsInfoArr&&participantsInfoArr.length>0" class="mt20">
......
...@@ -35,12 +35,12 @@ const language = ref(cache.local.get('language') || 0) ...@@ -35,12 +35,12 @@ const language = ref(cache.local.get('language') || 0)
35 const props = defineProps({ 35 const props = defineProps({
36 groupId: { 36 groupId: {
37 type: Object, 37 type: Object,
38 required: true 38 required: false
39 } 39 }
40 }) 40 })
41 const user = useUserStore().user 41 const user = useUserStore().user
42 const groupInfo = useUserStore().group 42 const groupInfo = useUserStore().group
43 if(props.groupId!=0){ 43 if(props.groupId){
44 getGroupInfo() 44 getGroupInfo()
45 } 45 }
46 function getGroupInfo() { 46 function getGroupInfo() {
......
...@@ -55,7 +55,7 @@ ...@@ -55,7 +55,7 @@
55 <td>{{ p.danceTypeDetailStr }}</td> 55 <td>{{ p.danceTypeDetailStr }}</td>
56 <td>{{ p.playTypeStr }}</td> 56 <td>{{ p.playTypeStr }}</td>
57 <td>{{ p.birthPeriod }}</td> 57 <td>{{ p.birthPeriod }}</td>
58 <td>¥{{ p.serviceFee }}</td> 58 <td>{{ language==0?'¥':'£' }}{{ p.serviceFee }}</td>
59 </tr> 59 </tr>
60 </table> 60 </table>
61 </div> 61 </div>
...@@ -122,7 +122,7 @@ ...@@ -122,7 +122,7 @@
122 <td>{{ p.danceTypeDetailStr }}</td> 122 <td>{{ p.danceTypeDetailStr }}</td>
123 <td>{{ p.playTypeStr }}</td> 123 <td>{{ p.playTypeStr }}</td>
124 <td>{{ p.birthPeriod }}</td> 124 <td>{{ p.birthPeriod }}</td>
125 <td>¥{{ p.serviceFee }}</td> 125 <td>{{ language==0?'¥':'£' }}{{ p.serviceFee }}</td>
126 </tr> 126 </tr>
127 </table> 127 </table>
128 </div> 128 </div>
......
...@@ -2,18 +2,17 @@ ...@@ -2,18 +2,17 @@
2 <!-- 人员表格--> 2 <!-- 人员表格-->
3 <el-table :data="tableData" class="mt20"> 3 <el-table :data="tableData" class="mt20">
4 <el-table-column type="index" :label="language==0?'序号':'index'" width="80" align="center"/> 4 <el-table-column type="index" :label="language==0?'序号':'index'" width="80" align="center"/>
5 <el-table-column :label="language==0?'所属国家':'Nationality'" prop="countryName" min-width="100"/>
6 <el-table-column :label="language==0?'姓氏':'Last Name'" prop="xing" min-width="100"/> 5 <el-table-column :label="language==0?'姓氏':'Last Name'" prop="xing" min-width="100"/>
7 <el-table-column :label="language==0?'名':'First Name'" prop="ming" min-width="100"/> 6 <el-table-column :label="language==0?'名':'First Name'" prop="ming" min-width="100"/>
8 <el-table-column :label="language==0?'短名':'Nick Name'" prop="shortName" min-width="110"/> 7 <el-table-column :label="language==0?'所属国家':'Nationality'" prop="countryName" min-width="100"/>
8 <!-- <el-table-column :label="language==0?'短名':'Nick Name'" prop="shortName" min-width="110"/>-->
9 <el-table-column :label="language==0?'性别':'Gender'" prop="sexStr"/> 9 <el-table-column :label="language==0?'性别':'Gender'" prop="sexStr"/>
10 <el-table-column :label="language==0?'年龄':'Age'" prop="age"/> 10 <!-- <el-table-column :label="language==0?'年龄':'Age'" prop="age"/>-->
11 <el-table-column :label="language==0?'出生日期':'Birth'" prop="birth" width="110"/> 11 <!-- <el-table-column :label="language==0?'手机号码':'Phone Number'" prop="phone" width="120"/>-->
12 <el-table-column :label="language==0?'手机号码':'Phone Number'" prop="phone" width="120"/> 12 <!-- <el-table-column :label="language==0?'邮箱':'E-mail'" prop="email" width="150"/>-->
13 <el-table-column :label="language==0?'邮箱':'E-mail'" prop="email" width="150"/>
14 <el-table-column :label="language==0?'证件类型':'ID Type'" prop="idcTypeStr" :min-width="language==0?'80':'160'"/> 13 <el-table-column :label="language==0?'证件类型':'ID Type'" prop="idcTypeStr" :min-width="language==0?'80':'160'"/>
15 <el-table-column :label="language==0?'证件号码':'ID NO.'" prop="idcCode" width="200"/> 14 <el-table-column :label="language==0?'证件号码':'ID NO.'" prop="idcCode" width="200"/>
16 <el-table-column :label="language==0?'WDSF会员号':'WDSF code'" prop="wdsfMin" width="200"/> 15 <el-table-column :label="language==0?'出生日期':'Birth'" prop="birth" width="110"/>
17 <el-table-column :label="language==0?'会员角色':'Role'" width="150"> 16 <el-table-column :label="language==0?'会员角色':'Role'" width="150">
18 <template #default="scope"> 17 <template #default="scope">
19 <div class="esp"> 18 <div class="esp">
...@@ -29,7 +28,8 @@ ...@@ -29,7 +28,8 @@
29 </div> 28 </div>
30 </template> 29 </template>
31 </el-table-column> 30 </el-table-column>
32 <el-table-column :label="language==0?'详细地址':'Detailed Address'" prop="address" min-width="140"/> 31 <el-table-column :label="language==0?'WDSF会员号':'WDSF code'" prop="wdsfMin" width="200"/>
32 <!-- <el-table-column :label="language==0?'详细地址':'Detailed Address'" prop="address" min-width="140"/>-->
33 <el-table-column :label="language==0?'操作':'Actions'" fixed="right" width="160" header-align="center" 33 <el-table-column :label="language==0?'操作':'Actions'" fixed="right" width="160" header-align="center"
34 align="center"> 34 align="center">
35 <template #default="scope"> 35 <template #default="scope">
......
1 <template> 1 <template>
2 <el-table :data="list" border style="width: 100%" v-loading="loading"> 2 <div class="mt20"></div>
3 <el-table-column :label="language==0?'所属国家':'Nationality'" prop="personInfo.countryName" min-width="100"/> 3 <el-table :data="list" :sum-text="sumText" border style="width: 100%" v-loading="loading">
4 <el-table-column :label="language==0?'序号':'Index'" type="index" width="70" align="center"/>
4 <el-table-column :label="language==0?'姓氏':'Last Name'" prop="personInfo.xing" min-width="100"/> 5 <el-table-column :label="language==0?'姓氏':'Last Name'" prop="personInfo.xing" min-width="100"/>
5 <el-table-column :label="language==0?'名':'First Name'" prop="personInfo.ming" min-width="100"/> 6 <el-table-column :label="language==0?'名':'First Name'" prop="personInfo.ming" min-width="100"/>
6 <el-table-column :label="language==0?'短名':'Nick Name'" prop="personInfo.shortName" min-width="110"/> 7 <el-table-column :label="language==0?'所属国家':'Nationality'" prop="personInfo.countryName" :min-width="language==0?'100':'120'"/>
8 <!-- <el-table-column :label="language==0?'短名':'Nick Name'" prop="personInfo.shortName" min-width="110"/>-->
7 <el-table-column :label="language==0?'性别':'Gender'" prop="personInfo.sexStr"/> 9 <el-table-column :label="language==0?'性别':'Gender'" prop="personInfo.sexStr"/>
8 <el-table-column :label="language==0?'年龄':'Age'" prop="personInfo.age"/> 10 <!-- <el-table-column :label="language==0?'年龄':'Age'" prop="personInfo.age"/>-->
9 <el-table-column :label="language==0?'出生日期':'Birth'" prop="personInfo.birth" width="110"/> 11 <!-- <el-table-column :label="language==0?'手机号码':'Phone Number'" prop="personInfo.phone" min-width="130"/>-->
10 <el-table-column :label="language==0?'手机号码':'Phone Number'" prop="personInfo.phone" min-width="130"/> 12 <!-- <el-table-column :label="language==0?'邮箱':'E-mail'" prop="personInfo.email" width="150"/>-->
11 <el-table-column :label="language==0?'邮箱':'E-mail'" prop="personInfo.email" width="150"/> 13 <el-table-column :label="language==0?'证件类型':'ID Type'" :width="language==0?'':'140'" prop="personInfo.idcTypeStr"/>
12 <el-table-column :label="language==0?'证件类型':'ID Type'" prop="personInfo.idcTypeStr"/>
13 <el-table-column :label="language==0?'证件号码':'ID NO.'" prop="personInfo.idcCode" width="200"/> 14 <el-table-column :label="language==0?'证件号码':'ID NO.'" prop="personInfo.idcCode" width="200"/>
15 <el-table-column :label="language==0?'出生日期':'Birth'" prop="personInfo.birth" width="110"/>
14 <el-table-column :label="language==0?'会员角色':'Role'" width="150"> 16 <el-table-column :label="language==0?'会员角色':'Role'" width="150">
15 <template #default="scope"> 17 <template #default="scope">
16 <div class="esp"> 18 <div class="esp">
...@@ -26,8 +28,7 @@ ...@@ -26,8 +28,7 @@
26 </div> 28 </div>
27 </template> 29 </template>
28 </el-table-column> 30 </el-table-column>
29 <el-table-column :label="language==0?'详细地址':'Detailed Address'" prop="personInfo.address" min-width="140"/> 31 <!-- <el-table-column :label="language==0?'详细地址':'Detailed Address'" prop="personInfo.address" min-width="140"/>-->
30
31 <el-table-column :label="language==0?'报项':'Entries'" min-width="300" :fixed="hasAction?false:'right'"> 32 <el-table-column :label="language==0?'报项':'Entries'" min-width="300" :fixed="hasAction?false:'right'">
32 <template #default="props"> 33 <template #default="props">
33 <ol> 34 <ol>
...@@ -45,7 +46,7 @@ ...@@ -45,7 +46,7 @@
45 </el-table-column> 46 </el-table-column>
46 <el-table-column :fixed="hasAction?false:'right'" min-width="100" :label="language==0?'保险费':'Premium'" prop="insuranceFee"> 47 <el-table-column :fixed="hasAction?false:'right'" min-width="100" :label="language==0?'保险费':'Premium'" prop="insuranceFee">
47 <template #default="scope"> 48 <template #default="scope">
48 <span class="text-primary">¥{{ scope.row.insuranceFee }}</span> 49 <span class="text-primary">{{ language==0?'¥':'£' }}{{ scope.row.insuranceFee }}</span>
49 </template> 50 </template>
50 </el-table-column> 51 </el-table-column>
51 <!-- 补充信息--> 52 <!-- 补充信息-->
...@@ -69,6 +70,11 @@ ...@@ -69,6 +70,11 @@
69 </template> 70 </template>
70 </el-table-column> 71 </el-table-column>
71 </el-table> 72 </el-table>
73 <div v-if="showSummary" class="rowSummary">
74 <div>
75 {{ language==0?'金额小计':'Amount' }}: <span>{{ language==0?'¥':'£' }}{{ total }}</span>
76 </div>
77 </div>
72 78
73 </template> 79 </template>
74 80
...@@ -95,12 +101,23 @@ const props = defineProps({ ...@@ -95,12 +101,23 @@ const props = defineProps({
95 type: Boolean, 101 type: Boolean,
96 required: false, 102 required: false,
97 default: true 103 default: true
104 },
105 showSummary:{
106 type: Boolean,
107 required: false,
108 default: false
109 },
110 total:{
111 type: String,
112 required: false,
113 default: '0'
98 } 114 }
99 }) 115 })
100 import cache from "@/plugins/cache"; 116 import cache from "@/plugins/cache";
101 const language = ref(cache.local.get('language') || 0) 117 const language = ref(cache.local.get('language') || 0)
102 const extraTableHead = ref([]) 118 const extraTableHead = ref([])
103 const loading = ref(true) 119 const loading = ref(true)
120 const sumText = ref('保险费')
104 getTableHead() 121 getTableHead()
105 const goPersonInfo = (row) => { 122 const goPersonInfo = (row) => {
106 emit('editExtra', row) 123 emit('editExtra', row)
...@@ -111,8 +128,17 @@ function getTableHead() { ...@@ -111,8 +128,17 @@ function getTableHead() {
111 loading.value = false 128 loading.value = false
112 }) 129 })
113 } 130 }
131 function totalMethod() {
132 }
114 </script> 133 </script>
115 134
116 <style scoped> 135 <style scoped lang="scss">
117 136 .rowSummary{text-align: right;padding: 0 20px;
137 height: 40px;line-height: 40px;
138 background: #FAFBFD;font-size: 16px;
139 color: #95A1A6;
140 border: 1px solid #EEEFF0;
141 span{font-size: 18px;font-family: DIN Alternate;
142 color: #000;}
143 }
118 </style> 144 </style>
......
1 <template> 1 <template>
2 <div class="mt20"></div>
2 <el-table :data="list" border style="width: 100%"> 3 <el-table :data="list" border style="width: 100%">
4 <el-table-column :label="language==0?'序号':'Index'" type="index" width="70" align="center"/>
3 <el-table-column :label="language==0?'组别代码':'Group code'" width="120px" prop="zuName"/> 5 <el-table-column :label="language==0?'组别代码':'Group code'" width="120px" prop="zuName"/>
4 <el-table-column :label="language==0?'组别':'Group'" prop="project.name"/> 6 <el-table-column :label="language==0?'组别':'Group'" prop="project.name"/>
5 <el-table-column :label="language==0?'舞种':'Dance Style'" width="120px" prop="project.danceType"/> 7 <el-table-column :label="language==0?'舞种':'Dance Style'" width="120px" prop="project.danceType"/>
...@@ -14,7 +16,7 @@ ...@@ -14,7 +16,7 @@
14 <el-table-column :label="language==0?'报名费':'Registration Fee'" width="120px" prop=""> 16 <el-table-column :label="language==0?'报名费':'Registration Fee'" width="120px" prop="">
15 <template #default="scope"> 17 <template #default="scope">
16 <div class="text-primary"> 18 <div class="text-primary">
17 ¥{{ scope.row.project.serviceFee }} 19 {{ language==0?'¥':'£' }}{{ scope.row.project.serviceFee }}
18 </div> 20 </div>
19 </template> 21 </template>
20 </el-table-column> 22 </el-table-column>
...@@ -27,7 +29,11 @@ ...@@ -27,7 +29,11 @@
27 </template> 29 </template>
28 </el-table-column> 30 </el-table-column>
29 </el-table> 31 </el-table>
30 32 <div v-if="showSummary" class="rowSummary">
33 <div>
34 {{ language==0?'金额小计':'Amount' }}: <span>{{ language==0?'¥':'£' }}{{ total }}</span>
35 </div>
36 </div>
31 </template> 37 </template>
32 38
33 <script setup> 39 <script setup>
...@@ -41,6 +47,16 @@ const props = defineProps({ ...@@ -41,6 +47,16 @@ const props = defineProps({
41 type: Boolean, 47 type: Boolean,
42 required: false, 48 required: false,
43 default: true 49 default: true
50 },
51 showSummary:{
52 type: Boolean,
53 required: false,
54 default: false
55 },
56 total:{
57 type: String,
58 required: false,
59 default: '0'
44 } 60 }
45 }) 61 })
46 import cache from "@/plugins/cache"; 62 import cache from "@/plugins/cache";
...@@ -50,6 +66,12 @@ const remove = (id) => { ...@@ -50,6 +66,12 @@ const remove = (id) => {
50 } 66 }
51 </script> 67 </script>
52 68
53 <style scoped> 69 <style scoped lang="scss">
54 70 .rowSummary{text-align: right;padding: 0 20px;
71 height: 40px;line-height: 40px;
72 background: #FAFBFD;font-size: 16px;
73 color: #95A1A6;
74 border: 1px solid #EEEFF0;
75 span{font-size: 18px;font-family: DIN Alternate;color: #000;}
76 }
55 </style> 77 </style>
......
1 <template> 1 <template>
2 <div class="app-container"> 2 <div class="app-container" v-loading="loading">
3 <div class="mt30" /> 3 <div class="mt30"/>
4 <div class="box mb20 "> 4 <div v-if="error">
5 <el-result
6 icon="error"
7 title="未找到赛事"
8 >
9 <template #extra>
10 </template>
11 </el-result>
12 </div>
13 <div class="box mb20 " v-else>
5 <el-card class="mb20"> 14 <el-card class="mb20">
6 <el-row :gutter="20"> 15 <el-row :gutter="20">
7 <el-col :lg="7" :md="24" :xl="6" > 16 <el-col :lg="7" :md="24" :xl="6">
8 <img class="mauto w100" :src="fillImgUrl(matchData.coverUrl)" > 17 <img class="mauto w100" :src="fillImgUrl(matchData.coverUrl)">
9 </el-col> 18 </el-col>
10 <el-col :lg="9" :md="12" :xl="10"> 19 <el-col :lg="9" :md="12" :xl="10">
11 <h3> 20 <h3>
12 {{ matchData.name }} 21 {{ matchData.name }}
13 </h3> 22 </h3>
14 <p class="ppl"><label class="bm1">比赛时间:</label>{{matchData.beginTime?.slice(0,10)}}{{ matchData.endTime?.slice(0,10) }}</p> 23 <p class="ppl"><label class="bm1">比赛时间:</label>{{ matchData.beginTime?.slice(0, 10) }} 至
24 {{ matchData.endTime?.slice(0, 10) }}</p>
15 <p class="ppl"><label class="bm2">赛事级别:</label>{{ matchData.level }}</p> 25 <p class="ppl"><label class="bm2">赛事级别:</label>{{ matchData.level }}</p>
16 <p class="ppl"><label class="bm3">&ensp;&ensp;&ensp;&ensp;点:</label>{{ matchData.address }}</p> 26 <p class="ppl"><label class="bm3">&ensp;&ensp;&ensp;&ensp;点:</label>{{ matchData.address }}</p>
17 <p class="ppl"><label class="bm4">报名截止:</label>{{ matchData.signEndTime?.slice(0,10) }}</p> 27 <p class="ppl"><label class="bm4">报名截止:</label>{{ matchData.signEndTime?.slice(0, 10) }}</p>
18 </el-col> 28 </el-col>
19 <el-col :lg="8" :md="12" :xl="8" v-if="matchData.type=='0'"> 29 <el-col :lg="8" :md="12" :xl="8" v-if="matchData.type=='0'">
20 <p class="countDownTitle"><span>报名截止倒计时</span></p> 30 <p class="countDownTitle"><span>报名截止倒计时</span></p>
...@@ -45,7 +55,9 @@ ...@@ -45,7 +55,9 @@
45 <el-card :body-style="{'padding':'0'}"> 55 <el-card :body-style="{'padding':'0'}">
46 <div class="lineHead"> 56 <div class="lineHead">
47 <ul> 57 <ul>
48 <li v-for="l in menu" :key="l.name" @click="changeMenu(menu,l)" :class="l.active==1?'active':''">{{l.name}}</li> 58 <li v-for="l in menu" :key="l.name" @click="changeMenu(menu,l)" :class="l.active==1?'active':''">
59 {{ l.name }}
60 </li>
49 </ul> 61 </ul>
50 </div> 62 </div>
51 <matchInfo :form="matchData" v-if="menu[0].active==1"/> 63 <matchInfo :form="matchData" v-if="menu[0].active==1"/>
...@@ -69,12 +81,13 @@ ...@@ -69,12 +81,13 @@
69 <td>{{ p.danceTypeDetailStr }}</td> 81 <td>{{ p.danceTypeDetailStr }}</td>
70 <td>{{ p.playTypeStr }}</td> 82 <td>{{ p.playTypeStr }}</td>
71 <td>{{ p.birthPeriod }}</td> 83 <td>{{ p.birthPeriod }}</td>
72 <td>¥{{ p.serviceFee }}</td> 84 <td>{{ language==0?'¥':'£' }}{{ p.serviceFee }}</td>
73 </tr> 85 </tr>
74 </table> 86 </table>
75 </div> 87 </div>
76 88
77 <el-empty :image="`/img/order_no.png`" :image-size="228" v-if="matchData.cptProjectList?.length == 0" description=" "/> 89 <el-empty :image="`/img/order_no.png`" :image-size="228" v-if="matchData.cptProjectList?.length == 0"
90 description=" "/>
78 </div> 91 </div>
79 </div> 92 </div>
80 <match-schedule-list :match-data="matchData" v-if="menu[2].active==1"/> 93 <match-schedule-list :match-data="matchData" v-if="menu[2].active==1"/>
...@@ -82,7 +95,7 @@ ...@@ -82,7 +95,7 @@
82 <el-row :gutter="20" v-if="matchData.signType == '0'"> 95 <el-row :gutter="20" v-if="matchData.signType == '0'">
83 <el-col v-for="t in signDoneGroupList" :key="t.id" :span="8"> 96 <el-col v-for="t in signDoneGroupList" :key="t.id" :span="8">
84 <div class="teamItem"> 97 <div class="teamItem">
85 <el-avatar :size="60" :src="t.imgUrl||t.avatar" /> 98 <el-avatar :size="60" :src="t.imgUrl||t.avatar"/>
86 <span class="name">{{ t.name }}</span> 99 <span class="name">{{ t.name }}</span>
87 </div> 100 </div>
88 </el-col> 101 </el-col>
...@@ -90,32 +103,35 @@ ...@@ -90,32 +103,35 @@
90 <el-row :gutter="20" v-else> 103 <el-row :gutter="20" v-else>
91 <el-col :span="24" v-for="(t,index) in signDoneGroupList" :key="t.id"> 104 <el-col :span="24" v-for="(t,index) in signDoneGroupList" :key="t.id">
92 <div class="nowteamItem"> 105 <div class="nowteamItem">
93 <span>{{index+1}}.</span> 106 <span>{{ index + 1 }}.</span>
94 <el-avatar :size="80" :src="t.imgUrl||t.avatar" :fit="cover"/> 107 <el-avatar :size="80" :src="t.imgUrl||t.avatar" :fit="cover"/>
95 <div class="info"> 108 <div class="info">
96 <h3 class="name">{{ t.name }}</h3> 109 <h3 class="name">{{ t.name }}</h3>
97 <p v-if="t.extraInfo"> 110 <p v-if="t.extraInfo">
98 <span v-for="(ee,index) in JSON.parse(t.extraInfo)" :key="index" v-show="(ee?.type == '0'||ee?.type == '4')&&index<2"> 111 <span v-for="(ee,index) in JSON.parse(t.extraInfo)" :key="index"
99 {{ee.value}}&ensp;&ensp; 112 v-show="(ee?.type == '0'||ee?.type == '4')&&index<2">
113 {{ ee.value }}&ensp;&ensp;
100 </span> 114 </span>
101 </p> 115 </p>
102 </div> 116 </div>
103 <p class="rr"><span>{{t.renCi}}</span> 人参赛</p> 117 <p class="rr"><span>{{ t.renCi }}</span> 人参赛</p>
104 </div> 118 </div>
105 </el-col> 119 </el-col>
106 </el-row> 120 </el-row>
107 <el-empty :image="`/img/order_no.png`" :image-size="228" v-if="(signDoneGroupList==null)||(signDoneGroupList.length==0)" description="" /> 121 <el-empty :image="`/img/order_no.png`" :image-size="228"
122 v-if="(signDoneGroupList==null)||(signDoneGroupList.length==0)" description=""/>
108 </div> 123 </div>
109 <div v-if="menu[4].active==1"> 124 <div v-if="menu[4].active==1">
110 <!-- 成绩--> 125 <!-- 成绩-->
111 <el-empty :image="`/img/order_no.png`" :image-size="228"/> 126 <el-empty :image="`/img/order_no.png`" :image-size="228"/>
112 </div> 127 </div>
113 <div v-if="menu[5].active==1" class="pd20"> 128 <div v-if="menu[5].active==1" class="pd20">
114 <div class="xzbox"> 129 <div class="xzbox">
115 <div v-html="matchData.signKnow"></div> 130 <div v-html="matchData.signKnow"></div>
116 <el-link v-if="matchData.signKnowUrl" type="primary" :href="fillImgUrl(JSON.parse(matchData.signKnowUrl)[0]?.url)" target="_blank"> 131 <el-link v-if="matchData.signKnowUrl" type="primary"
132 :href="fillImgUrl(JSON.parse(matchData.signKnowUrl)[0]?.url)" target="_blank">
117 <el-icon :size="20"> 133 <el-icon :size="20">
118 <Download /> 134 <Download/>
119 </el-icon> 135 </el-icon>
120 {{ JSON.parse(matchData.signKnowUrl)[0]?.name }} 136 {{ JSON.parse(matchData.signKnowUrl)[0]?.name }}
121 </el-link> 137 </el-link>
...@@ -135,10 +151,12 @@ ...@@ -135,10 +151,12 @@
135 <el-card :body-style="{'padding':'0'}"> 151 <el-card :body-style="{'padding':'0'}">
136 <div class="lineHead"> 152 <div class="lineHead">
137 <ul> 153 <ul>
138 <li v-for="l in menu1" :key="l.name" @click="changeMenu(menu1,l)" :class="l.active==1?'active':''">{{l.name}}</li> 154 <li v-for="l in menu1" :key="l.name" @click="changeMenu(menu1,l)" :class="l.active==1?'active':''">
155 {{ l.name }}
156 </li>
139 </ul> 157 </ul>
140 </div> 158 </div>
141 <!-- 分站赛--> 159 <!-- 分站赛-->
142 <substation-list v-if="menu1[0].active==1" :list="matchData.cpts"/> 160 <substation-list v-if="menu1[0].active==1" :list="matchData.cpts"/>
143 <matchInfo :form="matchData" v-if="menu1[1].active==1"/> 161 <matchInfo :form="matchData" v-if="menu1[1].active==1"/>
144 <match-schedule-list :match-data="matchData" v-if="menu1[2].active==1"/> 162 <match-schedule-list :match-data="matchData" v-if="menu1[2].active==1"/>
...@@ -146,6 +164,7 @@ ...@@ -146,6 +164,7 @@
146 </el-col> 164 </el-col>
147 </el-row> 165 </el-row>
148 </div> 166 </div>
167
149 </div> 168 </div>
150 </template> 169 </template>
151 170
...@@ -155,40 +174,49 @@ import MatchScheduleList from "@/viewsPc/match/components/matchScheduleList"; ...@@ -155,40 +174,49 @@ import MatchScheduleList from "@/viewsPc/match/components/matchScheduleList";
155 import MatchNews from "@/viewsPc/match/components/matchNews"; 174 import MatchNews from "@/viewsPc/match/components/matchNews";
156 import SubstationList from "@/viewsPc/match/components/substation-list"; 175 import SubstationList from "@/viewsPc/match/components/substation-list";
157 176
158 import { getCurrentInstance, ref } from 'vue' 177 import {getCurrentInstance, ref} from 'vue'
159 import { reactive, onMounted } from '@vue/runtime-core' 178 import {reactive, onMounted} from '@vue/runtime-core'
160 import { useRoute, useRouter } from 'vue-router' 179 import {useRoute, useRouter} from 'vue-router'
161 180
162 const route = useRoute() 181 const route = useRoute()
163 const router = useRouter() 182 const router = useRouter()
164 const { proxy } = getCurrentInstance() 183 const {proxy} = getCurrentInstance()
165 import * as match from '@/apiPc/match' 184 import * as match from '@/apiPc/match'
166 import { toRefs } from '@vueuse/shared' 185 import {toRefs} from '@vueuse/shared'
167 import {dayjs, ElMessage} from 'element-plus' 186 import {dayjs, ElMessage, ElMessageBox} from 'element-plus'
168 import useUserStore from "@/store/modules/user"; 187 import useUserStore from "@/store/modules/user";
169 import QuickRow from "@/viewsPc/match/components/quick-row"; 188 import QuickRow from "@/viewsPc/match/components/quick-row";
189 import {isRelogin} from "@/utils/request";
190
170 const data = reactive({ 191 const data = reactive({
192 loading:false,
193 error:false,
171 matchData: {}, 194 matchData: {},
172 matchId: 0, 195 matchId: 0,
173 groupId: '', 196 groupId: '',
174 activeName2:'first', 197 activeName2: 'first',
175 popupGroupList:false, 198 popupGroupList: false,
176 menu:[{name:'赛事详情',active:1},{name:'赛事设项',active:0},{name:'日程',active:0},{name:'参赛队',active:0},{name:'成绩',active:0},{name:'报名须知',active:0}], 199 menu: [{name: '赛事详情', active: 1}, {name: '赛事设项', active: 0}, {name: '日程', active: 0}, {
177 menu1:[{name:'分站赛',active:1},{name:'赛事详情',active:0},{name:'日程',active:0}], 200 name: '参赛队',
201 active: 0
202 }, {name: '成绩', active: 0}, {name: '报名须知', active: 0}],
203 menu1: [{name: '分站赛', active: 1}, {name: '赛事详情', active: 0}, {name: '日程', active: 0}],
178 signDoneGroupList: [], 204 signDoneGroupList: [],
179 time:'' 205 time: ''
180 }) 206 })
181 const {time,matchData,matchId,groupId,activeName2,popupGroupList,menu,menu1,signDoneGroupList} = toRefs(data) 207 const {loading,error,time, matchData, matchId, groupId, activeName2, popupGroupList, menu, menu1, signDoneGroupList} = toRefs(data)
208 import cache from "@/plugins/cache"
209 const language = ref(cache.local.get('language') || 0)
182 const group = useUserStore().group 210 const group = useUserStore().group
183 const user = useUserStore().user 211 const user = useUserStore().user
184 onMounted(() => { 212 onMounted(() => {
185 if(group){ 213 if (group) {
186 groupId.value = group.id 214 groupId.value = group.id
187 } else { 215 } else {
188 groupId.value = 0 216 groupId.value = 0
189 } 217 }
190 match.getMaList().then((res) => { 218 match.getMaList().then((res) => {
191 if(route.params.id!=0){ 219 if (route.params.id != 0) {
192 matchId.value = route.params.id 220 matchId.value = route.params.id
193 } else { 221 } else {
194 matchId.value = res.rows[0].id 222 matchId.value = res.rows[0].id
...@@ -198,39 +226,49 @@ onMounted(() => { ...@@ -198,39 +226,49 @@ onMounted(() => {
198 }) 226 })
199 227
200 }) 228 })
229
201 function building() { 230 function building() {
202 ElMessage.warning('暂未开发,敬请期待!') 231 ElMessage.warning('暂未开发,敬请期待!')
203 } 232 }
233
204 function getMatch(id) { 234 function getMatch(id) {
205 if(id!=0) 235 loading.value = true
206 match.getMatchById({ id: id }).then(res => { 236 match.getMatchById({id: id}).then(res => {
207 matchData.value = res.data 237 matchData.value = res.data
238 loading.value = false
208 var today = dayjs().format('YYYY-MM-DD HH:mm:ss') 239 var today = dayjs().format('YYYY-MM-DD HH:mm:ss')
209 time.value = dayjs(res.data.signEndTime).diff(today, 'millisecond') 240 time.value = dayjs(res.data.signEndTime).diff(today, 'millisecond')
241 }).catch(res=>{
242 error.value = true
243 loading.value = false
244
210 }) 245 })
211 } 246 }
247
212 function getGroupListByCptId(id) { 248 function getGroupListByCptId(id) {
213 match.getGroupListByCptId(id).then(res => { 249 match.getGroupListByCptId(id).then(res => {
214 signDoneGroupList.value = res.data 250 signDoneGroupList.value = res.data
215 }) 251 })
216 } 252 }
217 function changeMenu(menu,l){ 253
218 for(const n of menu){ 254 function changeMenu(menu, l) {
219 if(n==l){ 255 for (const n of menu) {
256 if (n == l) {
220 n.active = 1 257 n.active = 1
221 } else { 258 } else {
222 n.active = 0 259 n.active = 0
223 } 260 }
224 } 261 }
225 } 262 }
263
226 function choseSignType() { 264 function choseSignType() {
227 if(!user){ 265 console.log(matchData.value.signType,user)
228 ElMessage.warning('请登录') 266 if (!user) {
267 useUserStore().setReLogin(true)
229 return 268 return
230 } 269 }
231 console.log(matchData.value.signType)
232 checkIsSign().then(() => { 270 checkIsSign().then(() => {
233 if (matchData.value.signType == '0'||(matchData.value.signType == '2' && user.utype == '1')) { 271 if (matchData.value.signType == '0' || (matchData.value.signType == '2' && user.utype == '1')) {
234 // 个人报名 272 // 个人报名
235 // router.push({ 273 // router.push({
236 // path: `${matchId.value}/singleSign` 274 // path: `${matchId.value}/singleSign`
...@@ -245,7 +283,7 @@ function choseSignType() { ...@@ -245,7 +283,7 @@ function choseSignType() {
245 }) 283 })
246 window.open(routeData.href, '_blank') 284 window.open(routeData.href, '_blank')
247 } 285 }
248 if(matchData.value.signType == '1'||(matchData.value.signType == '2' && user.utype == '2')){ 286 if (matchData.value.signType == '1' || (matchData.value.signType == '2' && user.utype == '2')) {
249 const routeData = router.resolve({ 287 const routeData = router.resolve({
250 path: `${matchId.value}/teamSign`, 288 path: `${matchId.value}/teamSign`,
251 query: { 289 query: {
...@@ -267,7 +305,18 @@ function checkIsSign() { ...@@ -267,7 +305,18 @@ function checkIsSign() {
267 } 305 }
268 return match.getMySignInfo(obj).then(res => { 306 return match.getMySignInfo(obj).then(res => {
269 if (res.data.type == '1') { 307 if (res.data.type == '1') {
270 ElMessage.error('已报名,不能重复报名') 308 ElMessageBox.confirm(
309 '已报名,不能重复报名,是否前往个人中心查看',
310 '提示',
311 {
312 confirmButtonText: '确定',
313 cancelButtonText: '取消',
314 type: 'warning',
315 }
316 ).then(() => {
317 router.push({name: 'myMatch'})
318 })
319
271 return Promise.reject('rejected message') 320 return Promise.reject('rejected message')
272 } 321 }
273 }) 322 })
...@@ -275,22 +324,49 @@ function checkIsSign() { ...@@ -275,22 +324,49 @@ function checkIsSign() {
275 </script> 324 </script>
276 325
277 <style scoped lang="scss"> 326 <style scoped lang="scss">
327 .app-container{min-height: 80vh;}
328 .indexTitle {
329 margin: 20px 0 12px;
278 330
279 .indexTitle{margin: 20px 0 12px; 331 h3 {
280 h3{
281 font-size: 20px; 332 font-size: 20px;
282 color:var(--el-color-primary); 333 color: var(--el-color-primary);
334 }
335 }
336
337
338 .ppl {
339 color: #29343C;
340
341 label {
342 color: #929AA0;
283 } 343 }
284 } 344 }
285 345
346 .bm1 {
347 background: url("@/assets/dance/bm1.png") no-repeat left;
348 background-size: contain;
349 padding-left: 24px;
350 }
351
352 .bm2 {
353 background: url("@/assets/dance/bm2.png") no-repeat left;
354 background-size: contain;
355 padding-left: 24px;
356 }
357
358 .bm3 {
359 background: url("@/assets/dance/bm3.png") no-repeat left;
360 background-size: contain;
361 padding-left: 24px;
362 }
286 363
287 .ppl{color: #29343C; 364 .bm4 {
288 label{color: #929AA0;} 365 background: url("@/assets/dance/bm4.png") no-repeat left;
366 background-size: contain;
367 padding-left: 24px;
289 } 368 }
290 .bm1{background: url("@/assets/dance/bm1.png") no-repeat left;background-size: contain;padding-left: 24px;} 369
291 .bm2{background: url("@/assets/dance/bm2.png") no-repeat left;background-size: contain;padding-left: 24px;}
292 .bm3{background: url("@/assets/dance/bm3.png") no-repeat left;background-size: contain;padding-left: 24px;}
293 .bm4{background: url("@/assets/dance/bm4.png") no-repeat left;background-size: contain;padding-left: 24px;}
294 .app-container { 370 .app-container {
295 padding: 0; 371 padding: 0;
296 background: #F5F7F9; 372 background: #F5F7F9;
...@@ -455,7 +531,11 @@ function checkIsSign() { ...@@ -455,7 +531,11 @@ function checkIsSign() {
455 color: #000000; 531 color: #000000;
456 margin: 0 0 10px; 532 margin: 0 0 10px;
457 font-size: 24px; 533 font-size: 24px;
458 img{margin-right: 10px} 534
535 img {
536 margin-right: 10px
537 }
538
459 .typeTag { 539 .typeTag {
460 border-radius: 13px 13px 13px 0; 540 border-radius: 13px 13px 13px 0;
461 margin-left: 10px; 541 margin-left: 10px;
...@@ -466,7 +546,11 @@ function checkIsSign() { ...@@ -466,7 +546,11 @@ function checkIsSign() {
466 color: #7B7F83; 546 color: #7B7F83;
467 font-size: 16px; 547 font-size: 16px;
468 } 548 }
469 .countDownTitle{font-size: 14px;} 549
550 .countDownTitle {
551 font-size: 14px;
552 }
553
470 .el-button.el-button--primary { 554 .el-button.el-button--primary {
471 background: #CA171D; 555 background: #CA171D;
472 border: none; 556 border: none;
...@@ -477,7 +561,9 @@ function checkIsSign() { ...@@ -477,7 +561,9 @@ function checkIsSign() {
477 .gg { 561 .gg {
478 margin: 0 0 28px; 562 margin: 0 0 28px;
479 563
480 h3 {border-left: 2px solid #BA2E29; padding: 0 0 0 12px; 564 h3 {
565 border-left: 2px solid #BA2E29;
566 padding: 0 0 0 12px;
481 margin: 20px 0 8px; 567 margin: 20px 0 8px;
482 font-weight: 500; 568 font-weight: 500;
483 font-size: 16px; 569 font-size: 16px;
...@@ -488,7 +574,10 @@ function checkIsSign() { ...@@ -488,7 +574,10 @@ function checkIsSign() {
488 color: #000; 574 color: #000;
489 margin: 0 0 8px; 575 margin: 0 0 8px;
490 line-height: 24px; 576 line-height: 24px;
491 label{color: #7D8790;} 577
578 label {
579 color: #7D8790;
580 }
492 } 581 }
493 582
494 .pp { 583 .pp {
...@@ -611,8 +700,11 @@ function checkIsSign() { ...@@ -611,8 +700,11 @@ function checkIsSign() {
611 margin: 0 0 20px; 700 margin: 0 0 20px;
612 701
613 button { 702 button {
614 width: 90%;background: var(--el-color-primary); 703 width: 90%;
615 font-size: 20px;margin: 30px auto 0;display: block; 704 background: var(--el-color-primary);
705 font-size: 20px;
706 margin: 30px auto 0;
707 display: block;
616 height: 50px; 708 height: 50px;
617 } 709 }
618 } 710 }
...@@ -638,24 +730,50 @@ function checkIsSign() { ...@@ -638,24 +730,50 @@ function checkIsSign() {
638 height: 1px; 730 height: 1px;
639 } 731 }
640 732
641 .table{width: 100%;border-left: 1px solid #e1e1e1;border-top:1px solid #e1e1e1; 733 .table {
642 th{background: #eee;padding: 6px 10px; 734 width: 100%;
735 border-left: 1px solid #e1e1e1;
736 border-top: 1px solid #e1e1e1;
737
738 th {
739 background: #eee;
740 padding: 6px 10px;
643 border-right: 1px solid #e1e1e1; 741 border-right: 1px solid #e1e1e1;
644 border-bottom:1px solid #e1e1e1; 742 border-bottom: 1px solid #e1e1e1;
645 font-size: 15px; 743 font-size: 15px;
646 } 744 }
647 td{padding: 6px 10px;border-right: 1px solid #e1e1e1;font-size: 15px; 745
648 border-bottom:1px solid #e1e1e1;vertical-align: middle;text-align: center; 746 td {
649 span{margin-right: 10px} 747 padding: 6px 10px;
650 span::after{content: ','} 748 border-right: 1px solid #e1e1e1;
651 span:last-child::after{content: ''} 749 font-size: 15px;
750 border-bottom: 1px solid #e1e1e1;
751 vertical-align: middle;
752 text-align: center;
753
754 span {
755 margin-right: 10px
756 }
757
758 span::after {
759 content: ','
760 }
761
762 span:last-child::after {
763 content: ''
764 }
652 } 765 }
653 } 766 }
654 .flexLine{display: flex; 767
655 label{font-weight: normal} 768 .flexLine {
769 display: flex;
770
771 label {
772 font-weight: normal
773 }
656 } 774 }
657 775
658 .nowteamItem{ 776 .nowteamItem {
659 height: 100px; 777 height: 100px;
660 background: #FBFCFD; 778 background: #FBFCFD;
661 border-radius: 10px; 779 border-radius: 10px;
...@@ -665,39 +783,89 @@ function checkIsSign() { ...@@ -665,39 +783,89 @@ function checkIsSign() {
665 padding: 0 20px; 783 padding: 0 20px;
666 overflow: hidden; 784 overflow: hidden;
667 text-overflow: ellipsis; 785 text-overflow: ellipsis;
668 .el-avatar {margin: 0 20px} 786
669 .info{ 787 .el-avatar {
670 h3{margin: 0 0 15px;} 788 margin: 0 20px
671 p{margin: 0;color: #1ab394} 789 }
790
791 .info {
792 h3 {
793 margin: 0 0 15px;
794 }
795
796 p {
797 margin: 0;
798 color: #1ab394
799 }
800 }
801
802 .rr {
803 text-align: right;
804 flex: 1;
805
806 span {
807 color: #1ab394
672 } 808 }
673 .rr{text-align: right; flex: 1;
674 span{color: #1ab394}
675 } 809 }
676 } 810 }
677 811
678 .collapsebox{ 812 .collapsebox {
679 .el-collapse-item{margin-bottom: 15px;--el-collapse-content-bg-color:#F4F9FE; 813 .el-collapse-item {
814 margin-bottom: 15px;
815 --el-collapse-content-bg-color: #F4F9FE;
680 border: 2px solid #DDECFB; 816 border: 2px solid #DDECFB;
681 .table{background: #fff;} 817
818 .table {
819 background: #fff;
820 }
821 }
822
823 .is-active {
824 --el-collapse-header-bg-color: #F4F9FE
825 }
826
827 :deep(.el-collapse-item__header) {
828 padding: 0 20px;
682 } 829 }
683 .is-active{--el-collapse-header-bg-color:#F4F9FE}
684 :deep(.el-collapse-item__header){padding: 0 20px;}
685 } 830 }
686 .funcBtns{display: flex; justify-content: space-around; 831
687 div{text-align: center;background: #F7FAFF;box-shadow:0 0 10px #d4cae4; 832 .funcBtns {
688 border-radius: 15px;padding: 0px 10px 5px; 833 display: flex;
689 img{} 834 justify-content: space-around;
690 h4{margin: 0;font-size: 16px;} 835
836 div {
837 text-align: center;
838 background: #F7FAFF;
839 box-shadow: 0 0 10px #d4cae4;
840 border-radius: 15px;
841 padding: 0px 10px 5px;
842
843 img {
844 }
845
846 h4 {
847 margin: 0;
848 font-size: 16px;
849 }
691 } 850 }
692 } 851 }
693 .table{white-space: nowrap} 852
853 .table {
854 white-space: nowrap
855 }
856
694 @media (max-width: 800px) { 857 @media (max-width: 800px) {
695 .van-count-down{ 858 .van-count-down {
696 .block{margin: 0 10px;} 859 .block {
860 margin: 0 10px;
861 }
862 }
863 .colon {
864 display: none;
697 } 865 }
698 .colon{display: none;} 866 .funcBtns {
699 .funcBtns{ 867 div {
700 div{padding: 0 0 10px; 868 padding: 0 0 10px;
701 margin: 0 5px; 869 margin: 0 5px;
702 870
703 } 871 }
......
1 <template> 1 <template>
2 <div class="app-container" v-loading="loading"> 2 <div class="app-container" v-loading="loading">
3 <div class="mt30" /> 3 <div class="mt30"/>
4 <div class="box mb20 "> 4 <div v-if="error">
5 <el-result
6 icon="error"
7 :title="'No Data'"
8 >
9 <template #extra>
10 </template>
11 </el-result>
12 </div>
13 <div class="box mb20" v-else>
5 <el-card class="mb20"> 14 <el-card class="mb20">
6 <el-row :gutter="20"> 15 <el-row :gutter="20">
7 <el-col :lg="7" :md="12" :xl="6" > 16 <el-col :lg="7" :md="12" :xl="6">
8 <img class="mauto w100" :src="fillImgUrl(matchData.coverUrl)" > 17 <img class="mauto w100" :src="fillImgUrl(matchData.coverUrl)">
9 </el-col> 18 </el-col>
10 <el-col :lg="9" :md="12" :xl="10"> 19 <el-col :lg="9" :md="12" :xl="10">
11 <h3 class="m0"> 20 <h3 class="m0">
12 {{ matchData.name }} 21 {{ matchData.name }}
13 </h3> 22 </h3>
14 <p class="ppl"><label class="bm1">Playing Time:</label>{{matchData.beginTime?.slice(0,10)}} ~ {{ matchData.endTime?.slice(0,10) }}</p> 23 <p class="ppl"><label class="bm1">Playing Time:</label>{{ matchData.beginTime?.slice(0, 10) }} ~
24 {{ matchData.endTime?.slice(0, 10) }}</p>
15 <p class="ppl"><label class="bm2">Event Level:</label>{{ matchData.level }}</p> 25 <p class="ppl"><label class="bm2">Event Level:</label>{{ matchData.level }}</p>
16 <p class="ppl" v-if="matchData.address"><label class="bm3">Location:</label>{{ matchData.address }}</p> 26 <p class="ppl" v-if="matchData.address"><label class="bm3">Location:</label>{{ matchData.address }}</p>
17 <p class="ppl" v-if="matchData.signEndTime"><label class="bm4">Registration Deadline:</label>{{ matchData.signEndTime?.slice(0,10) }}</p> 27 <p class="ppl" v-if="matchData.signEndTime"><label class="bm4">Registration
28 Deadline:</label>{{ matchData.signEndTime?.slice(0, 10) }}</p>
18 </el-col> 29 </el-col>
19 <el-col :lg="8" :md="12" :xl="8" v-if="matchData.type=='0'"> 30 <el-col :lg="8" :md="12" :xl="8" v-if="matchData.type=='0'">
20 <p class="countDownTitle"><span>Registration deadline countdown</span></p> 31 <p class="countDownTitle"><span>Registration deadline countdown</span></p>
...@@ -33,7 +44,8 @@ ...@@ -33,7 +44,8 @@
33 44
34 <div class="flexCenter"> 45 <div class="flexCenter">
35 <el-button ref="RegisterRef" type="primary" round size="large" class="btn-lineG mb20 mt30 w100" 46 <el-button ref="RegisterRef" type="primary" round size="large" class="btn-lineG mb20 mt30 w100"
36 @click="choseSignType" style="font-size: 16px">Register</el-button> 47 @click="choseSignType" style="font-size: 16px">Register
48 </el-button>
37 </div> 49 </div>
38 </el-col> 50 </el-col>
39 </el-row> 51 </el-row>
...@@ -46,7 +58,9 @@ ...@@ -46,7 +58,9 @@
46 <el-card :body-style="{'padding':'0'}"> 58 <el-card :body-style="{'padding':'0'}">
47 <div class="lineHead"> 59 <div class="lineHead">
48 <ul> 60 <ul>
49 <li v-for="l in menu" :key="l.name" @click="changeMenu(menu,l)" :class="l.active==1?'active':''">{{l.name}}</li> 61 <li v-for="l in menu" :key="l.name" @click="changeMenu(menu,l)" :class="l.active==1?'active':''">
62 {{ l.name }}
63 </li>
50 </ul> 64 </ul>
51 </div> 65 </div>
52 <matchInfo :form="matchData" v-if="menu[0].active==1"/> 66 <matchInfo :form="matchData" v-if="menu[0].active==1"/>
...@@ -70,12 +84,13 @@ ...@@ -70,12 +84,13 @@
70 <td>{{ p.danceTypeDetailStr }}</td> 84 <td>{{ p.danceTypeDetailStr }}</td>
71 <td>{{ p.playTypeStr }}</td> 85 <td>{{ p.playTypeStr }}</td>
72 <td>{{ p.birthPeriod }}</td> 86 <td>{{ p.birthPeriod }}</td>
73 <td>¥{{ p.serviceFee }}</td> 87 <td>{{ language==0?'¥':'£' }}{{ p.serviceFee }}</td>
74 </tr> 88 </tr>
75 </table> 89 </table>
76 </div> 90 </div>
77 91
78 <el-empty :image="`/img/order_no.png`" :image-size="228" v-if="matchData.cptProjectList?.length == 0" description=" "/> 92 <el-empty :image="`/img/order_no.png`" :image-size="228" v-if="matchData.cptProjectList?.length == 0"
93 description=" "/>
79 </div> 94 </div>
80 </div> 95 </div>
81 <match-schedule-list :match-data="matchData" v-if="menu[2].active==1"/> 96 <match-schedule-list :match-data="matchData" v-if="menu[2].active==1"/>
...@@ -83,7 +98,7 @@ ...@@ -83,7 +98,7 @@
83 <el-row :gutter="20" v-if="matchData.signType == '0'"> 98 <el-row :gutter="20" v-if="matchData.signType == '0'">
84 <el-col v-for="t in signDoneGroupList" :key="t.id" :span="8"> 99 <el-col v-for="t in signDoneGroupList" :key="t.id" :span="8">
85 <div class="teamItem"> 100 <div class="teamItem">
86 <el-avatar :size="60" :src="fillImgUrl(t.imgUrl||t.avatar)" /> 101 <el-avatar :size="60" :src="fillImgUrl(t.imgUrl||t.avatar)"/>
87 <span class="name">{{ t.name }}</span> 102 <span class="name">{{ t.name }}</span>
88 </div> 103 </div>
89 </el-col> 104 </el-col>
...@@ -91,32 +106,35 @@ ...@@ -91,32 +106,35 @@
91 <el-row :gutter="20" v-else> 106 <el-row :gutter="20" v-else>
92 <el-col :span="24" v-for="(t,index) in signDoneGroupList" :key="t.id"> 107 <el-col :span="24" v-for="(t,index) in signDoneGroupList" :key="t.id">
93 <div class="nowteamItem"> 108 <div class="nowteamItem">
94 <span>{{index+1}}.</span> 109 <span>{{ index + 1 }}.</span>
95 <el-avatar :size="80" :src="fillImgUrl(t.imgUrl||t.avatar)" :fit="cover"/> 110 <el-avatar :size="80" :src="fillImgUrl(t.imgUrl||t.avatar)" :fit="cover"/>
96 <div class="info"> 111 <div class="info">
97 <h3 class="name">{{ t.name }}</h3> 112 <h3 class="name">{{ t.name }}</h3>
98 <p v-if="t.extraInfo"> 113 <p v-if="t.extraInfo">
99 <span v-for="(ee,index) in JSON.parse(t.extraInfo)" :key="index" v-show="(ee?.type == '0'||ee?.type == '4')&&index<2"> 114 <span v-for="(ee,index) in JSON.parse(t.extraInfo)" :key="index"
100 {{ee.value}}&ensp;&ensp; 115 v-show="(ee?.type == '0'||ee?.type == '4')&&index<2">
116 {{ ee.value }}&ensp;&ensp;
101 </span> 117 </span>
102 </p> 118 </p>
103 </div> 119 </div>
104 <p class="rr"><span>{{t.renCi}}</span> registrants</p> 120 <p class="rr"><span>{{ t.renCi }}</span> registrants</p>
105 </div> 121 </div>
106 </el-col> 122 </el-col>
107 </el-row> 123 </el-row>
108 <el-empty :image="`/img/order_no.png`" :image-size="228" v-if="(signDoneGroupList==null)||(signDoneGroupList.length==0)" description="" /> 124 <el-empty :image="`/img/order_no.png`" :image-size="228"
125 v-if="(signDoneGroupList==null)||(signDoneGroupList.length==0)" description=""/>
109 </div> 126 </div>
110 <div v-if="menu[4].active==1"> 127 <div v-if="menu[4].active==1">
111 <!-- 成绩--> 128 <!-- 成绩-->
112 <el-empty :image="`/img/order_no.png`" :image-size="228" description="" /> 129 <el-empty :image="`/img/order_no.png`" :image-size="228" description=""/>
113 </div> 130 </div>
114 <div v-if="menu[5].active==1" class="pd20"> 131 <div v-if="menu[5].active==1" class="pd20">
115 <div class="xzbox"> 132 <div class="xzbox">
116 <div v-html="matchData.signKnow"></div> 133 <div v-html="matchData.signKnow"></div>
117 <el-link v-if="matchData.signKnowUrl" type="primary" :href="fillImgUrl(JSON.parse(matchData.signKnowUrl)[0]?.url)" target="_blank"> 134 <el-link v-if="matchData.signKnowUrl" type="primary"
135 :href="fillImgUrl(JSON.parse(matchData.signKnowUrl)[0]?.url)" target="_blank">
118 <el-icon :size="20"> 136 <el-icon :size="20">
119 <Download /> 137 <Download/>
120 </el-icon> 138 </el-icon>
121 {{ JSON.parse(matchData.signKnowUrl)[0]?.name }} 139 {{ JSON.parse(matchData.signKnowUrl)[0]?.name }}
122 </el-link> 140 </el-link>
...@@ -136,7 +154,9 @@ ...@@ -136,7 +154,9 @@
136 <el-card :body-style="{'padding':'0'}"> 154 <el-card :body-style="{'padding':'0'}">
137 <div class="lineHead"> 155 <div class="lineHead">
138 <ul> 156 <ul>
139 <li v-for="l in menu1" :key="l.name" @click="changeMenu(menu1,l)" :class="l.active==1?'active':''">{{l.name}}</li> 157 <li v-for="l in menu1" :key="l.name" @click="changeMenu(menu1,l)" :class="l.active==1?'active':''">
158 {{ l.name }}
159 </li>
140 </ul> 160 </ul>
141 </div> 161 </div>
142 <!-- 分站赛--> 162 <!-- 分站赛-->
...@@ -147,8 +167,20 @@ ...@@ -147,8 +167,20 @@
147 </el-col> 167 </el-col>
148 </el-row> 168 </el-row>
149 </div> 169 </div>
170
150 <div style="height: 50px"></div> 171 <div style="height: 50px"></div>
151 172
173 <el-dialog v-model="signTypePop" class="pcloginpop" close-icon="CircleClose"
174 center width="450px" title="Choose Type">
175 <div>
176 <div class="rItem r1" @click="goLogin">
177 <h3>{{language==0?'机构用户':'Organization'}}</h3>
178 </div>
179 <div class="rItem r2" @click="goGeren">
180 <h3>{{language==0?'个人用户':'Individual'}}</h3>
181 </div>
182 </div>
183 </el-dialog>
152 </div> 184 </div>
153 </template> 185 </template>
154 186
...@@ -158,41 +190,60 @@ import MatchScheduleList from "@/viewsPc/match/components/matchScheduleList"; ...@@ -158,41 +190,60 @@ import MatchScheduleList from "@/viewsPc/match/components/matchScheduleList";
158 import MatchNews from "@/viewsPc/match/components/matchNews"; 190 import MatchNews from "@/viewsPc/match/components/matchNews";
159 import SubstationList from "@/viewsPc/match/components/substation-list"; 191 import SubstationList from "@/viewsPc/match/components/substation-list";
160 192
161 import { getCurrentInstance, ref } from 'vue' 193 import {getCurrentInstance, ref} from 'vue'
162 import { reactive, onMounted } from '@vue/runtime-core' 194 import {reactive, onMounted} from '@vue/runtime-core'
163 import { useRoute, useRouter } from 'vue-router' 195 import {useRoute, useRouter} from 'vue-router'
196
164 const route = useRoute() 197 const route = useRoute()
165 const router = useRouter() 198 const router = useRouter()
166 const { proxy } = getCurrentInstance() 199 const {proxy} = getCurrentInstance()
167 import * as match from '@/apiPc/match' 200 import * as match from '@/apiPc/match'
168 import { toRefs } from '@vueuse/shared' 201 import {toRefs} from '@vueuse/shared'
169 import {dayjs, ElMessage} from 'element-plus' 202 import {dayjs, ElMessage, ElMessageBox} from 'element-plus'
170 import useUserStore from "@/store/modules/user"; 203 import useUserStore from "@/store/modules/user";
171 import QuickRow from "@/viewsPc/match/components/quick-row"; 204 import QuickRow from "@/viewsPc/match/components/quick-row";
172 const user = useUserStore().user || {} 205
173 const group = useUserStore().group || {} 206 const user = useUserStore().user
207 const group = useUserStore().group
174 const data = reactive({ 208 const data = reactive({
175 loading:false, 209 error: false,
210 loading: false,
176 matchData: {}, 211 matchData: {},
177 matchId: 0, 212 matchId: 0,
178 groupId: '', 213 groupId: '',
179 activeName2:'first', 214 activeName2: 'first',
180 popupGroupList:false, 215 popupGroupList: false,
181 menu:[{name:'Event details',active:1},{name:'Event settings',active:0},{name:'Schedule',active:0},{name:'Participating teams',active:0}, 216 menu: [{name: 'Event details', active: 1}, {name: 'Event settings', active: 0}, {
182 {name:'Achievement',active:0},{name:'Notes',active:0}], 217 name: 'Schedule',
183 menu1:[{name:'Station race',active:1},{name:'Event details',active:0},{name:'Schedule',active:0}], 218 active: 0
219 }, {name: 'Participating teams', active: 0},
220 {name: 'Achievement', active: 0}, {name: 'Notes', active: 0}],
221 menu1: [{name: 'Station race', active: 1}, {name: 'Event details', active: 0}, {name: 'Schedule', active: 0}],
184 signDoneGroupList: [], 222 signDoneGroupList: [],
185 time:'' 223 time: ''
186 }) 224 })
187 const {loading,matchData,matchId,groupId,activeName2,popupGroupList,menu,menu1,signDoneGroupList,time} = toRefs(data) 225 const {
226 error,
227 loading,
228 matchData,
229 matchId,
230 groupId,
231 activeName2,
232 popupGroupList,
233 menu,
234 menu1,
235 signDoneGroupList,
236 time
237 } = toRefs(data)
238 const signTypePop = false
188 onMounted(() => { 239 onMounted(() => {
189 if(group){ 240 if (group) {
190 groupId.value = group.id 241 groupId.value = group.id
191 } else { 242 } else {
192 groupId.value = 0 243 groupId.value = 0
193 } 244 }
194 match.getMaList().then((res) => { 245 match.getMaList().then((res) => {
195 if(route.params.id!=0){ 246 if (route.params.id != 0) {
196 matchId.value = route.params.id 247 matchId.value = route.params.id
197 } else { 248 } else {
198 matchId.value = res.rows[0].id 249 matchId.value = res.rows[0].id
...@@ -204,45 +255,94 @@ onMounted(() => { ...@@ -204,45 +255,94 @@ onMounted(() => {
204 255
205 function getMatch() { 256 function getMatch() {
206 loading.value = true 257 loading.value = true
207 match.getMatchById({ id: matchId.value }).then(res => { 258 match.getMatchById({id: matchId.value}).then(res => {
208 matchData.value = res.data 259 matchData.value = res.data
209 loading.value = false 260 loading.value = false
210 var today = dayjs().format('YYYY-MM-DD HH:mm:ss') 261 var today = dayjs().format('YYYY-MM-DD HH:mm:ss')
211 time.value = dayjs(res.data.signEndTime).diff(today, 'millisecond') 262 time.value = dayjs(res.data.signEndTime).diff(today, 'millisecond')
263 }).catch(res => {
264 error.value = true
265 loading.value = false
266
212 }) 267 })
213 } 268 }
269
214 function getGroupListByCptId(id) { 270 function getGroupListByCptId(id) {
215 match.getGroupListByCptId(id).then(res => { 271 match.getGroupListByCptId(id).then(res => {
216 signDoneGroupList.value = res.data 272 signDoneGroupList.value = res.data
217 }) 273 })
218 } 274 }
219 function changeMenu(menu,l){ 275
220 for(const n of menu){ 276 function changeMenu(menu, l) {
221 if(n==l){ 277 for (const n of menu) {
278 if (n == l) {
222 n.active = 1 279 n.active = 1
223 } else { 280 } else {
224 n.active = 0 281 n.active = 0
225 } 282 }
226 } 283 }
227 } 284 }
285
228 function choseSignType() { 286 function choseSignType() {
229 if(!user){ 287 console.log(matchData.value.signType, user)
230 ElMessage.warning('Please login') 288 if (!user) {
231 return 289 //判断signType,如1个人注册-报名;
290 switch (matchData.value.signType) {
291 case '0':
292 goGeren()
293 break
294 case '1':
295 goLogin()
296 break
297 case '2':
298 popChangeType()
299 break
232 } 300 }
233 //判断signType,如果是2且utype是2,则跳转到团体报名 301 } else {
234 checkIsSign().then(() => { 302 checkIsSign().then(() => {
235 if (matchData.value.signType == '0'||(matchData.value.signType == '2' && user.utype == '1')) { 303 switch (matchData.value.signType) {
236 // 个人报名 304 case '0':
237 router.push({ 305 if (user.utype == '1') {
238 name: `chooseCoach`, 306 goPersonalSign()
239 query: { 307 } else {
240 matchId: matchId.value, 308 ElMessageBox.confirm(
241 signType: matchData.value.signType 309 'The current event is a personal event, cannot register',
310 'Warning',
311 {
312 confirmButtonText: 'OK',
313 cancelButtonText: 'Cancel',
314 type: 'warning',
315 }
316 )
317 }
318 break
319 case '1':
320 if (user.utype == '1') {
321 ElMessageBox.confirm(
322 'The current event is a team event, cannot register',
323 'Warning',
324 {
325 confirmButtonText: 'OK',
326 cancelButtonText: 'Cancel',
327 type: 'warning',
328 }
329 )
330 } else {
331 goTeamSign()
332 }
333 break
334 case '2':
335 if (user.utype == '1') {
336 goPersonalSign()
337 } else {
338 goTeamSign()
339 }
340 break
242 } 341 }
243 }) 342 })
244 } 343 }
245 if(matchData.value.signType == '1'||(matchData.value.signType == '2' && user.utype == '2')){ 344 }
345 function goTeamSign() {
246 router.push({ 346 router.push({
247 path: `${route.params.id}/teamSign`, 347 path: `${route.params.id}/teamSign`,
248 query: { 348 query: {
...@@ -251,9 +351,30 @@ function choseSignType() { ...@@ -251,9 +351,30 @@ function choseSignType() {
251 signType: matchData.value.signType 351 signType: matchData.value.signType
252 } 352 }
253 }) 353 })
354 }
355 function goPersonalSign() {
356 // 选项目
357 router.push({
358 name: `chooseCoach`,
359 query: {
360 matchId: matchId.value,
361 signType: matchData.value.signType
254 } 362 }
255 }) 363 })
256 } 364 }
365 function goLogin() {
366 useUserStore().setReLogin(true)
367 }
368 function goGeren() {
369 //注册
370 router.push({name: 'personalRegister', query: {matchId: matchId.value}})
371 }
372
373 function popChangeType() {
374 //选择登录类型
375 signTypePop.value = true
376 }
377
257 // 获取已报信息 378 // 获取已报信息
258 function checkIsSign() { 379 function checkIsSign() {
259 var obj = { 380 var obj = {
...@@ -262,7 +383,17 @@ function checkIsSign() { ...@@ -262,7 +383,17 @@ function checkIsSign() {
262 } 383 }
263 return match.getMySignInfo(obj).then(res => { 384 return match.getMySignInfo(obj).then(res => {
264 if (res.data.type == '1') { 385 if (res.data.type == '1') {
265 ElMessage.error('Registered, cannot be duplicated') 386 ElMessageBox.confirm(
387 'Registered, cannot be duplicated. Do you want to go to the personal center to check',
388 'Warning',
389 {
390 confirmButtonText: 'OK',
391 cancelButtonText: 'Cancel',
392 type: 'warning',
393 }
394 ).then(() => {
395 router.push({name: 'myMatch'})
396 })
266 return Promise.reject('rejected message') 397 return Promise.reject('rejected message')
267 } 398 }
268 }) 399 })
...@@ -270,37 +401,95 @@ function checkIsSign() { ...@@ -270,37 +401,95 @@ function checkIsSign() {
270 </script> 401 </script>
271 402
272 <style scoped lang="scss"> 403 <style scoped lang="scss">
273 .m0{margin: 0;} 404 .app-container {
274 .indexTitle{margin: 20px 0 12px; 405 min-height: 80vh;
275 h3{ 406 }
407
408 .m0 {
409 margin: 0;
410 }
411
412 .indexTitle {
413 margin: 20px 0 12px;
414
415 h3 {
276 font-size: 20px; 416 font-size: 20px;
277 color:var(--el-color-primary); 417 color: var(--el-color-primary);
278 } 418 }
279 } 419 }
280 .xzbox{border: 2px solid #DDECFB;padding: 20px;line-height: 2; 420
421 .xzbox {
422 border: 2px solid #DDECFB;
423 padding: 20px;
424 line-height: 2;
281 color: #29343C; 425 color: #29343C;
282 font-size: 16px;} 426 font-size: 16px;
283 .dlbox{background: url("@/assets/dance/ds_bg.png") no-repeat left;background-size: 100% 100%; 427 }
284 padding: 0 0 20px;margin: 0 0 20px;height: 90%; 428
285 dl{min-height: 120px;margin: 0; 429 .dlbox {
286 dt{ 430 background: url("@/assets/dance/ds_bg.png") no-repeat left;
431 background-size: 100% 100%;
432 padding: 0 0 20px;
433 margin: 0 0 20px;
434 height: 90%;
435
436 dl {
437 min-height: 120px;
438 margin: 0;
439
440 dt {
287 height: 30px; 441 height: 30px;
288 font-size: 16px;margin: 0 0 18px; 442 font-size: 16px;
289 font-weight: 600;line-height: 30px;display: inline-block;padding:0 20px 0 14px; 443 margin: 0 0 18px;
444 font-weight: 600;
445 line-height: 30px;
446 display: inline-block;
447 padding: 0 20px 0 14px;
290 background: linear-gradient(90deg, #8623FC, #453DEA); 448 background: linear-gradient(90deg, #8623FC, #453DEA);
291 border-radius: 0px 0px 15px 0px;color: #fff;} 449 border-radius: 0px 0px 15px 0px;
450 color: #fff;
451 }
452 }
453
454 dd {
455 font-size: 14px;
456 line-height: 1.6;
457 color: #29343C;
292 } 458 }
293 dd{
294 font-size: 14px;line-height: 1.6;
295 color: #29343C;}
296 } 459 }
297 .ppl{color: #29343C; 460
298 label{color: #929AA0;} 461 .ppl {
462 color: #29343C;
463
464 label {
465 color: #929AA0;
466 }
467 }
468
469 .bm1 {
470 background: url("@/assets/dance/bm1.png") no-repeat left;
471 background-size: contain;
472 padding-left: 24px;
473 }
474
475 .bm2 {
476 background: url("@/assets/dance/bm2.png") no-repeat left;
477 background-size: contain;
478 padding-left: 24px;
479 }
480
481 .bm3 {
482 background: url("@/assets/dance/bm3.png") no-repeat left;
483 background-size: contain;
484 padding-left: 24px;
299 } 485 }
300 .bm1{background: url("@/assets/dance/bm1.png") no-repeat left;background-size: contain;padding-left: 24px;} 486
301 .bm2{background: url("@/assets/dance/bm2.png") no-repeat left;background-size: contain;padding-left: 24px;} 487 .bm4 {
302 .bm3{background: url("@/assets/dance/bm3.png") no-repeat left;background-size: contain;padding-left: 24px;} 488 background: url("@/assets/dance/bm4.png") no-repeat left;
303 .bm4{background: url("@/assets/dance/bm4.png") no-repeat left;background-size: contain;padding-left: 24px;} 489 background-size: contain;
490 padding-left: 24px;
491 }
492
304 .app-container { 493 .app-container {
305 padding: 0; 494 padding: 0;
306 background: #F5F7F9; 495 background: #F5F7F9;
...@@ -465,7 +654,11 @@ function checkIsSign() { ...@@ -465,7 +654,11 @@ function checkIsSign() {
465 color: #000000; 654 color: #000000;
466 margin: 0 0 10px; 655 margin: 0 0 10px;
467 font-size: 24px; 656 font-size: 24px;
468 img{margin-right: 10px} 657
658 img {
659 margin-right: 10px
660 }
661
469 .typeTag { 662 .typeTag {
470 border-radius: 13px 13px 13px 0; 663 border-radius: 13px 13px 13px 0;
471 margin-left: 10px; 664 margin-left: 10px;
...@@ -476,7 +669,11 @@ function checkIsSign() { ...@@ -476,7 +669,11 @@ function checkIsSign() {
476 color: #7B7F83; 669 color: #7B7F83;
477 font-size: 16px; 670 font-size: 16px;
478 } 671 }
479 .countDownTitle{font-size: 14px;} 672
673 .countDownTitle {
674 font-size: 14px;
675 }
676
480 .el-button.el-button--primary { 677 .el-button.el-button--primary {
481 background: #CA171D; 678 background: #CA171D;
482 border: none; 679 border: none;
...@@ -487,7 +684,9 @@ function checkIsSign() { ...@@ -487,7 +684,9 @@ function checkIsSign() {
487 .gg { 684 .gg {
488 margin: 0 0 28px; 685 margin: 0 0 28px;
489 686
490 h3 {border-left: 2px solid #BA2E29; padding: 0 0 0 12px; 687 h3 {
688 border-left: 2px solid #BA2E29;
689 padding: 0 0 0 12px;
491 margin: 20px 0 8px; 690 margin: 20px 0 8px;
492 font-weight: 500; 691 font-weight: 500;
493 font-size: 16px; 692 font-size: 16px;
...@@ -498,7 +697,10 @@ function checkIsSign() { ...@@ -498,7 +697,10 @@ function checkIsSign() {
498 color: #000; 697 color: #000;
499 margin: 0 0 8px; 698 margin: 0 0 8px;
500 line-height: 24px; 699 line-height: 24px;
501 label{color: #7D8790;} 700
701 label {
702 color: #7D8790;
703 }
502 } 704 }
503 705
504 .pp { 706 .pp {
...@@ -621,8 +823,11 @@ function checkIsSign() { ...@@ -621,8 +823,11 @@ function checkIsSign() {
621 margin: 0 0 20px; 823 margin: 0 0 20px;
622 824
623 button { 825 button {
624 width: 90%;background: var(--el-color-primary); 826 width: 90%;
625 font-size: 20px;margin: 30px auto 0;display: block; 827 background: var(--el-color-primary);
828 font-size: 20px;
829 margin: 30px auto 0;
830 display: block;
626 height: 50px; 831 height: 50px;
627 } 832 }
628 } 833 }
...@@ -648,24 +853,50 @@ function checkIsSign() { ...@@ -648,24 +853,50 @@ function checkIsSign() {
648 height: 1px; 853 height: 1px;
649 } 854 }
650 855
651 .table{width: 100%;border-left: 1px solid #e1e1e1;border-top:1px solid #e1e1e1; 856 .table {
652 th{background: #eee;padding: 6px 10px; 857 width: 100%;
858 border-left: 1px solid #e1e1e1;
859 border-top: 1px solid #e1e1e1;
860
861 th {
862 background: #eee;
863 padding: 6px 10px;
653 border-right: 1px solid #e1e1e1; 864 border-right: 1px solid #e1e1e1;
654 border-bottom:1px solid #e1e1e1; 865 border-bottom: 1px solid #e1e1e1;
655 font-size: 15px; 866 font-size: 15px;
656 } 867 }
657 td{padding: 6px 10px;border-right: 1px solid #e1e1e1;font-size: 15px; 868
658 border-bottom:1px solid #e1e1e1;vertical-align: middle;text-align: center; 869 td {
659 span{margin-right: 10px} 870 padding: 6px 10px;
660 span::after{content: ','} 871 border-right: 1px solid #e1e1e1;
661 span:last-child::after{content: ''} 872 font-size: 15px;
873 border-bottom: 1px solid #e1e1e1;
874 vertical-align: middle;
875 text-align: center;
876
877 span {
878 margin-right: 10px
879 }
880
881 span::after {
882 content: ','
883 }
884
885 span:last-child::after {
886 content: ''
887 }
662 } 888 }
663 } 889 }
664 .flexLine{display: flex; 890
665 label{font-weight: normal} 891 .flexLine {
892 display: flex;
893
894 label {
895 font-weight: normal
896 }
666 } 897 }
667 898
668 .nowteamItem{ 899 .nowteamItem {
669 height: 100px; 900 height: 100px;
670 background: #FBFCFD; 901 background: #FBFCFD;
671 border-radius: 10px; 902 border-radius: 10px;
...@@ -675,40 +906,91 @@ function checkIsSign() { ...@@ -675,40 +906,91 @@ function checkIsSign() {
675 padding: 0 20px; 906 padding: 0 20px;
676 overflow: hidden; 907 overflow: hidden;
677 text-overflow: ellipsis; 908 text-overflow: ellipsis;
678 .el-avatar {margin: 0 20px} 909
679 .info{ 910 .el-avatar {
680 h3{margin: 0 0 15px;} 911 margin: 0 20px
681 p{margin: 0;color: #1ab394} 912 }
913
914 .info {
915 h3 {
916 margin: 0 0 15px;
917 }
918
919 p {
920 margin: 0;
921 color: #1ab394
922 }
923 }
924
925 .rr {
926 text-align: right;
927 flex: 1;
928
929 span {
930 color: #1ab394
682 } 931 }
683 .rr{text-align: right; flex: 1;
684 span{color: #1ab394}
685 } 932 }
686 } 933 }
687 934
688 .collapsebox{ 935 .collapsebox {
689 .el-collapse-item{margin-bottom: 15px;--el-collapse-content-bg-color:#F4F9FE; 936 .el-collapse-item {
937 margin-bottom: 15px;
938 --el-collapse-content-bg-color: #F4F9FE;
690 border: 2px solid #DDECFB; 939 border: 2px solid #DDECFB;
691 .table{background: #fff;} 940
941 .table {
942 background: #fff;
943 }
944 }
945
946 .is-active {
947 --el-collapse-header-bg-color: #F4F9FE
948 }
949
950 :deep(.el-collapse-item__header) {
951 padding: 0 20px;
692 } 952 }
693 .is-active{--el-collapse-header-bg-color:#F4F9FE}
694 :deep(.el-collapse-item__header){padding: 0 20px;}
695 } 953 }
696 .funcBtns{display: flex; justify-content: space-around; 954
697 div{text-align: center;background: #F7FAFF;box-shadow:0 0 10px #d4cae4;margin: 0 5px; 955 .funcBtns {
698 border-radius: 15px;padding:0 10px 15px; 956 display: flex;
699 img{margin: auto} 957 justify-content: space-around;
700 h4{margin: 0;font-size: 14px;} 958
959 div {
960 text-align: center;
961 background: #F7FAFF;
962 box-shadow: 0 0 10px #d4cae4;
963 margin: 0 5px;
964 border-radius: 15px;
965 padding: 0 10px 15px;
966
967 img {
968 margin: auto
969 }
970
971 h4 {
972 margin: 0;
973 font-size: 14px;
974 }
701 } 975 }
702 } 976 }
703 .table{white-space: nowrap} 977
978 .table {
979 white-space: nowrap
980 }
704 981
705 @media (max-width: 800px) { 982 @media (max-width: 800px) {
706 .van-count-down{ 983 .van-count-down {
707 .block{margin: 0 10px;} 984 .block {
985 margin: 0 10px;
986 }
987 }
988 .colon {
989 display: none;
708 } 990 }
709 .colon{display: none;} 991 .funcBtns {
710 .funcBtns{ 992 div {
711 div{padding: 0 0 10px; 993 padding: 0 0 10px;
712 margin: 0 5px; 994 margin: 0 5px;
713 995
714 } 996 }
......
1 <template>
2 <div class="app-container">
3
4 <div class="box ph-30">
5 <div class="panel">
6 <div class="panel-header">
7 <h3 class="panel-title">费用明细</h3>
8 </div>
9 <div class="panel-body">
10 <el-row>
11 <el-col :span="24">
12
13 <el-collapse v-model="activeCollapse">
14 <!-- 报名费-->
15 <el-collapse-item v-if="form.cptRegistrationFee?.totalFee>0" name="1">
16 <template #title>
17 <div class="titlebar">
18 {{ form.cptRegistrationFee?.name }}
19 <div class="fr">
20 <span class="num">{{ form.cptRegistrationFee?.count }}</span>
21 合计:<span class="money">{{ form.cptRegistrationFee?.totalFee }}</span>
22 </div>
23 </div>
24 </template>
25 <div>
26 <el-table border :data="form.cptRegistrationFee?.info" style="width: 100%">
27 <el-table-column type="index" label="序号" width="50" />
28 <el-table-column label="姓名" prop="personInfo.realName" />
29 <el-table-column label="性别">
30 <template #default="scope">
31 <span v-if="scope.row.personInfo.sex=='0'"></span>
32 <span v-else></span>
33 </template>
34 </el-table-column>
35 <el-table-column label="证件号码" prop="personInfo.idcType">
36 <template #default="scope">
37 <span v-if="scope.row.personInfo.idcType=='0'">身份证</span>
38 <span v-if="scope.row.personInfo.idcType=='1'">护照</span>
39 <span v-if="scope.row.personInfo.idcType=='2'">其他</span>
40 <div>{{ scope.row.personInfo.idcCode }}</div>
41 </template>
42 </el-table-column>
43 <el-table-column label="出生日期">
44 <template #default="scope">
45 {{ scope.row.personInfo.birth.substring(0,10) }}
46 </template>
47 </el-table-column>
48 <el-table-column label="费用">
49 <template #default="scope">
50 ¥{{ scope.row.registrationFee }}
51 </template>
52 </el-table-column>
53 </el-table>
54 </div>
55 </el-collapse-item>
56 <el-collapse-item v-if="form.cptCompatibleFee?.totalFee>0" name="3">
57 <template #title>
58 <div class="titlebar">
59 {{ form.cptCompatibleFee?.name }}
60 <div class="fr">
61 <span class="num">{{ form.cptCompatibleFee?.count }}</span>
62 合计:<span class="money">{{ form.cptCompatibleFee?.totalFee }}</span>
63 </div>
64 </div>
65 </template>
66 <div>
67 <el-table border :data="form.cptCompatibleFee?.info" style="width: 100%">
68 <el-table-column type="index" label="序号" width="50" />
69 <el-table-column label="姓名" prop="personInfo.realName" />
70 <el-table-column label="性别">
71 <template #default="scope">
72 <span v-if="scope.row.personInfo.sex=='0'"></span>
73 <span v-else></span>
74 </template>
75 </el-table-column>
76 <el-table-column label="证件类型">
77 <template #default="scope">
78 <span v-if="scope.row.personInfo.idcType=='0'">身份证</span>
79 <span v-if="scope.row.personInfo.idcType=='1'">护照</span>
80 <span v-if="scope.row.personInfo.idcType=='2'">其他</span>
81 <div>{{ scope.row.personInfo.idcCode }}</div>
82 </template>
83 </el-table-column>
84 <el-table-column label="费用" prop="compatibleFee" />
85 </el-table>
86 </div>
87 </el-collapse-item>
88 <el-collapse-item name="2">
89 <template #title>
90 <div class="titlebar">
91 {{ form.cptInsuranceFee?.name }}
92 <div class="fr">
93 合计:<span class="money">{{ cptInsuranceFee }}</span>
94 </div>
95 </div>
96 </template>
97 <div>
98 <el-checkbox-group v-model="buyInsurancePersonIds" @change="choseInsuranceFee">
99 <el-table border :data="form.cptInsuranceFee?.info" style="width: 100%">
100 <el-table-column type="index" label="序号" width="50" />
101 <el-table-column label="姓名" prop="personInfo.realName" />
102 <el-table-column label="性别">
103 <template #default="scope">
104 <span v-if="scope.row.personInfo.sex=='0'"></span>
105 <span v-else></span>
106 </template>
107 </el-table-column>
108 <el-table-column label="证件类型">
109 <template #default="scope">
110 <span v-if="scope.row.personInfo.idcType=='0'">身份证</span>
111 <span v-if="scope.row.personInfo.idcType=='1'">护照</span>
112 <span v-if="scope.row.personInfo.idcType=='2'">其他</span>
113 <div>{{ scope.row.personInfo.idcCode }}</div>
114 </template>
115 </el-table-column>
116 <el-table-column label="出生日期">
117 <template #default="scope">
118 {{ scope.row.personInfo.birth.substring(0,10) }}
119 </template>
120 </el-table-column>
121 <el-table-column v-if="form.cptInsuranceFee?.must=='0'" label="购买保险" align="center">
122 <template #default="scope">
123 <span v-if="scope.row.lastBuyFlag=='1'">已购</span>
124 <el-checkbox v-else :label="scope.row.personId">
125 {{ scope.row.insuranceFee }}
126 </el-checkbox>
127 </template>
128 </el-table-column>
129 <!-- <el-table-column label="费用" prop="insuranceFee" />-->
130 </el-table>
131 </el-checkbox-group>
132 </div>
133 </el-collapse-item>
134 <el-collapse-item v-if="form.otherFee?.totalFee>0" name="4">
135 <template #title>
136 <div class="titlebar">
137 {{ form.otherFee?.name }}
138 <div class="fr">
139 <span class="num">{{ form.otherFee?.count }}</span>
140 合计:<span class="money">{{ othermm }}</span>
141 </div>
142 </div>
143 </template>
144 <div>
145 <el-checkbox-group v-model="hasOthersPersonIds" @change="choseOtherFee">
146 <el-table border :data="form.otherFee?.info" style="width: 100%">
147 <el-table-column type="index" label="序号" width="50" />
148 <el-table-column label="姓名" prop="personInfo.realName" />
149 <el-table-column label="性别">
150 <template #default="scope">
151 <span v-if="scope.row.personInfo.sex=='0'"></span>
152 <span v-else></span>
153 </template>
154 </el-table-column>
155 <el-table-column label="证件类型">
156 <template #default="scope">
157 <span v-if="scope.row.personInfo.idcType=='0'">身份证</span>
158 <span v-if="scope.row.personInfo.idcType=='1'">护照</span>
159 <span v-if="scope.row.personInfo.idcType=='2'">其他</span>
160 <div>{{ scope.row.personInfo.idcCode }}</div>
161 </template>
162 </el-table-column>
163 <el-table-column label="是否自备">
164 <template #default="scope">
165 <span v-if="scope.row.allBringOwn=='0'">{{ scope.row.otherFee }}</span>
166 <el-checkbox v-else :label="scope.row.personId" checked>
167 {{ scope.row.otherFee }}
168 </el-checkbox>
169 </template>
170 </el-table-column>
171 </el-table>
172 </el-checkbox-group>
173 </div>
174 </el-collapse-item>
175 </el-collapse>
176 <el-divider />
177 <div>
178 <h3>支付方式</h3>
179 <el-radio-group v-model="form.payType">
180 <el-radio v-if="myBalance>'0'" label="0" size="large" border><img src="@/assets/img/zf02.png" style="width: 30px;">
181 会员卡支付<span>(余额 <i class="orange">¥{{ myBalance }}</i>)</span>
182 </el-radio>
183 <el-radio label="1" size="large" border><img src="@/assets/img/zf_wx.png">微信</el-radio>
184 <el-radio label="2" size="large" border><img src="@/assets/img/zf_xj.png">线下支付</el-radio>
185 </el-radio-group>
186 </div>
187 </el-col>
188 </el-row>
189
190
191 </div>
192 <div class="panel-footer text-center" style="justify-content: space-between;padding: 0 20px">
193 <p class="footFee">
194 <span v-if="form.cptRegistrationFee?.totalFee>0">{{ form.cptRegistrationFee?.name }}:{{ form.cptRegistrationFee.totalFee }}元</span>
195 <span v-if="form.cptCompatibleFee?.totalFee>0">{{ form.cptCompatibleFee?.name }}:{{ form.cptCompatibleFee.totalFee }}元</span>
196 <span>{{ form.cptInsuranceFee?.name }}:{{ cptInsuranceFee }}元</span>
197 <span v-if="form.otherFee?.totalFee>0">{{ form.otherFee?.name }}:{{ othermm }}元</span>
198 <span v-if="form.teamFee?.totalFee>0">{{ form.teamFee?.name }}:{{ form.teamFee?.totalFee }}元</span>
199 <span v-if="form.cptDepositFee?.totalFee>0">{{ form.cptDepositFee?.name }}:{{ form.cptDepositFee.totalFee }}元</span>
200 </p>
201 <p class="footTotal">
202 合计:<span>¥{{ finialFee }}</span>
203 </p>
204 <!-- <el-button type="success" plain round @click="goPrev()">上一步</el-button>-->
205 <el-button type="success" round @click="submitForm()">提交订单</el-button>
206 </div>
207 </div>
208 </div>
209 <el-dialog v-model="showResult" :close-on-click-modal="false">
210 <el-result icon="success" title="支付成功" />
211 <template #extra>
212 <el-button type="primary" @click="downloadVoucher">下载报名凭证</el-button>
213 <el-button type="primary" @click="goMyMatch">查看订单</el-button>
214 </template>
215 </el-dialog>
216 <el-dialog v-model="showOrganizerInfo" title=" 线下支付" width="400px">
217 <ul class="orgbox">
218 <li>单位:{{ org.organizerName }}</li>
219 <li>开户行:{{ org.organizerBank }}</li>
220 <li>账户:{{ org.organizerAccount }}</li>
221 <li>打款金额:<span class="orange">¥{{ org.organizerFee }}</span></li>
222 </ul>
223 <template #footer>
224 <div class="dialog-footer text-center">
225 <el-button type="primary" @click="downloadVoucher">下载报名凭证</el-button>
226 <el-button type="primary" @click="goMyMatch">查看订单</el-button>
227 </div>
228 </template>
229 </el-dialog>
230 <we-pay ref="wePayRef" @close="goMyMatch" />
231 </div>
232 </template>
233
234 <script setup>
235 import { reactive, toRefs } from 'vue'
236 import { getCurrentInstance, onMounted } from '@vue/runtime-core'
237 const { proxy } = getCurrentInstance()
238 const router = useRouter()
239 const route = useRoute()
240 import * as match from '@/apiPc/match'
241 import { useRoute, useRouter } from 'vue-router'
242 import { ElMessage } from 'element-plus'
243 const data = reactive({
244 form: {},
245 activeCollapse: ['1', '2', '3', '4'],
246 myBalance: '',
247 finialFee: '',
248 cptInsuranceFee: '',
249 othermm: '',
250 buyInsurancePersonIds: [],
251 hasOthersPersonIds: [],
252 org: {},
253 showOrganizerInfo: false,
254 showResult: false
255 })
256 const { form, activeCollapse, myBalance, finialFee, org, showOrganizerInfo, showResult, cptInsuranceFee, othermm, buyInsurancePersonIds, hasOthersPersonIds } = toRefs(data)
257
258 let entryId
259 let groupId = ''
260 let cptId
261 let baseTotal
262 let bxdanjia
263 let otherdanjia
264 onMounted(() => {
265 cptId = route.params.id
266 if (route.query.personId) {
267 entryId = route.query.personId
268 }
269 if (route.query.groupId) {
270 groupId = route.query.groupId
271 entryId = route.query.groupId
272 }
273 getTotalFee()
274 // getMemberInfoByCptId()
275 })
276 function getTotalFee() {
277 match.getTotalFee({
278 entryId: groupId,
279 cptId: cptId
280 }).then(res => {
281 form.value = res.data
282 finialFee.value = form.value.totalFee
283 baseTotal = parseFloat(form.value.totalFee) - parseFloat(form.value.otherFee?.totalFee || 0)
284 cptInsuranceFee.value = form.value.cptInsuranceFee.totalFee
285 othermm.value = form.value.otherFee.totalFee
286 bxdanjia = form.value.cptInsuranceFee.info[0]?.insuranceFee
287 if (form.value.otherFee.info.length > 0) {
288 otherdanjia = form.value.otherFee.info[0]?.otherFee
289 for (const ren of form.value.otherFee.info) {
290 hasOthersPersonIds.value.push(ren.personId)
291 }
292 }
293 })
294 }
295 // function getMemberInfoByCptId() {
296 // match.getMemberInfoByCptId(cptId).then((res) => {
297 // myBalance.value = res.data.balance
298 // })
299 // }
300 function getTotal() {
301 finialFee.value = parseFloat(baseTotal) + parseFloat(cptInsuranceFee.value) + parseFloat(othermm.value)
302 }
303 // 保险费
304 function choseInsuranceFee(e) {
305 console.log(e, buyInsurancePersonIds.value)
306 cptInsuranceFee.value = e.length * bxdanjia
307 getTotal()
308 // finialFee.value = parseFloat(cptInsuranceFee.value) + parseFloat(form.value.totalFee)
309 }
310 // 其他费用
311 function choseOtherFee(e) {
312 console.log(e, hasOthersPersonIds.value)
313 othermm.value = e.length * otherdanjia
314 getTotal()
315 }
316 function submitForm() {
317 // 提交订单
318 var obj = {
319 insruanceFee: cptInsuranceFee.value,
320 buyInsurancePersonIds: buyInsurancePersonIds.value.toString() || '',
321 otherFee: othermm.value,
322 bringPersonIds: hasOthersPersonIds.value.toString() || '',
323 cptId: cptId,
324 groupId: groupId
325 }
326 console.log(obj)
327 creatBill(obj)
328 }
329 let orderId
330 function creatBill(obj) {
331 if (!form.value.payType) {
332 ElMessage.error('请选择支付方式')
333 return
334 }
335 match.commitSign(obj).then(res => {
336 orderId = res.data
337 match.payMatch({ orderId: orderId, payType: form.value.payType }).then(res => {
338 console.log(res.data)
339 if (form.value.payType == 2) {
340 org.value = res.data.org
341 showOrganizerInfo.value = true
342 } else if (form.value.payType == 1) {
343 // 微信
344 proxy.$refs['wePayRef'].open(res.data)
345 } else {
346 showResult.value = true
347 }
348 })
349 })
350 }
351 function goMyMatch() {
352 router.push({
353 name: 'myMatch'
354 })
355 }
356 function downloadVoucher() {
357 // 下载报名凭证
358 proxy.download(
359 `/pdf/getPayedOrderPdf/${cptId}/${groupId || 0}`, {}, '报项凭证.pdf'
360 )
361 }
362 </script>
363
364 <style scoped lang="scss">
365 .footFee{
366 color: #95A1A6;
367 font-size: 16px;
368 span{margin: 0 20px}
369 }
370 .footTotal{
371 color: #000000;
372 font-size: 16px;
373 span{
374 color: #EB6100;
375 font-size: 22px;}
376 }
377
378 .app-container{ padding: 0;background: #F5F7F9;}
379 .panel-footer .el-button--success{background: #254385;border: none;
380 padding: 0 40px;
381 font-size: 16px;
382 }
383 .panel-footer .el-button--success.is-plain{background: #fff;border:1px solid #2ED981;color: #2ED981;}
384 .el-collapse{--el-collapse-border-color:transparent}
385 .el-collapse-item{ margin: 0 0 30px;padding: 0 20px;
386 border-radius: 10px;
387 background: #FBFCFD;
388 --el-collapse-border-color:transparent;
389 --el-collapse-header-bg-color:transparent;
390 --el-collapse-content-bg-color:transparent;
391 }
392 .titlebar{width: 100%;
393 font-size: 18px;
394 .fr{
395 .num{color: #7B7F83;margin-right: 20px ;}
396 .money{color: #FF8124;margin:0 6px;}
397 }
398 }
399 :deep(.el-radio.el-radio--large .el-radio__label){display: flex; align-items: center;
400 img{margin-right: 6px;}
401 }
402 :deep(.el-radio.is-bordered.el-radio--large .el-radio__inner){
403 width: 25px;height: 25px;
404 }
405 :deep(.el-radio__inner::after){
406 width: 7px;height: 7px;
407 }
408 .fixCollapseItem{padding: 20px;font-weight: 500;}
409 .orange{font-size: 16px;font-style: normal;font-weight: bold}
410 </style>
...@@ -12,16 +12,25 @@ ...@@ -12,16 +12,25 @@
12 <div class="pd20" v-if="signInfoList?.length>0"> 12 <div class="pd20" v-if="signInfoList?.length>0">
13 <div class="leftboderTT">{{ language == 0 ? '参赛人员保险费' : 'Participant Insurance Fee' }}</div> 13 <div class="leftboderTT">{{ language == 0 ? '参赛人员保险费' : 'Participant Insurance Fee' }}</div>
14 <!-- 人员列表--> 14 <!-- 人员列表-->
15 <sign-info-table class="mt20" v-if="matchId" :match-id="matchId" :list="signInfoList" :hasAction="false"/> 15 <sign-info-table class="mt20" v-if="matchId" :show-summary="true" :total="insuranceFeeTotal" :match-id="matchId" :list="signInfoList" :hasAction="false"/>
16 </div> 16 </div>
17 <div class="pd20" v-if="zuTableList?.length>0"> 17 <div class="pd20" v-if="zuTableList?.length>0">
18 <div class="leftboderTT">{{ language == 0 ? '参赛设项报名费' : 'Registration Fee for Event Entry' }}</div> 18 <div class="leftboderTT">{{ language == 0 ? '参赛设项报名费' : 'Registration Fee for Event Entry' }}</div>
19 <zu-table class="mt20" :list="zuTableList" :hasAction="false"/> 19 <zu-table class="mt20" :list="zuTableList" :show-summary="true" :total="serviceFeeTotal" :hasAction="false"/>
20 </div> 20 </div>
21 <el-row class="priceBar">
22 <el-col :lg="24" :xs="24">
23 <div class="flex">
24 <div class="item" v-if="signInfoList?.length>0"><label>{{ language==0?'报名费':'Registration Fee' }}</label><span>{{ language==0?'¥':'£' }}{{serviceFeeTotal}}</span></div>
25 <div class="item" v-if="zuTableList?.length>0"><label>{{ language==0?'保险费':'Insurance Fee' }}</label><span>{{ language==0?'¥':'£' }}{{insuranceFeeTotal}}</span></div>
26 <div class="item"><label>{{ language==0?'费用总计':'Total Cost' }}</label><span class="size26">{{ language==0?'¥':'£' }}{{form.totalFee}}</span></div>
27 </div>
28 </el-col>
29 </el-row>
21 </div> 30 </div>
22 <div v-else class="pd20 skeletonBox"> 31 <div v-else class="pd20 skeletonBox">
23 <el-skeleton :rows="8"/> 32 <el-skeleton :rows="8"/>
24 <el-button type="primary" class="w200px btn-lineG" round @click="showLogin"> 33 <el-button type="primary" class="btn-lineG" size="large" :style="language == 0 ?'width:200px':'width:400px'" round @click="showLogin">
25 {{ language == 0 ?'登录后查看详细报项信息':'View detailed report information after logging in' }} 34 {{ language == 0 ?'登录后查看详细报项信息':'View detailed report information after logging in' }}
26 </el-button> 35 </el-button>
27 </div> 36 </div>
...@@ -41,11 +50,12 @@ ...@@ -41,11 +50,12 @@
41 <div class="text-danger flex" v-if="form.auditStatus=='3'"> 50 <div class="text-danger flex" v-if="form.auditStatus=='3'">
42 <img src="@/assets/img/w.png"> 51 <img src="@/assets/img/w.png">
43 {{ language==0?'报名信息审核拒绝':'Registration Information rejected' }} 52 {{ language==0?'报名信息审核拒绝':'Registration Information rejected' }}
53 <div>{{ language==0?'驳回理由:':'Reason:'}}</div>
44 </div> 54 </div>
45 </el-col> 55 </el-col>
46 <el-col :lg="12"> 56 <el-col :lg="12">
47 <div class="priceb" v-if="form.payStatus=='0'">{{ language==0?'待支付金额':'Amount Due' }}<span class="price">¥{{ Number(totalFee).toFixed(2) }}</span></div> 57 <div class="priceb" v-if="form.payStatus=='0'">{{ language==0?'待支付金额':'Amount Due' }}<span class="price">{{ language==0?'¥':'£' }}{{ Number(totalFee).toFixed(2) }}</span></div>
48 <div class="priceb" v-if="form.payStatus=='1'">{{ language==0?'已支付金额':'Amount Due' }}<span class="price">¥{{ Number(totalFee).toFixed(2) }}</span></div> 58 <div class="priceb" v-if="form.payStatus=='1'">{{ language==0?'已支付金额':'Amount Due' }}<span class="price">{{ language==0?'¥':'£' }}{{ Number(totalFee).toFixed(2) }}</span></div>
49 </el-col> 59 </el-col>
50 </el-row> 60 </el-row>
51 </el-card> 61 </el-card>
...@@ -147,7 +157,7 @@ ...@@ -147,7 +157,7 @@
147 <tr> 157 <tr>
148 <th>{{ language==0?'付款金额':'Payment Amount' }}</th> 158 <th>{{ language==0?'付款金额':'Payment Amount' }}</th>
149 <td> 159 <td>
150 ¥{{ totalFee }} 160 {{ language==0?'¥':'£' }}{{ totalFee }}
151 <div class="text-gray">{{ language==0?'请按照指定金额进行打款':'Please make the payment according to the specified amount' }}</div> 161 <div class="text-gray">{{ language==0?'请按照指定金额进行打款':'Please make the payment according to the specified amount' }}</div>
152 </td> 162 </td>
153 </tr> 163 </tr>
...@@ -211,7 +221,7 @@ ...@@ -211,7 +221,7 @@
211 <div class="text-center"> 221 <div class="text-center">
212 <el-icon color="#32B16C" size="80"><SuccessFilled /></el-icon> 222 <el-icon color="#32B16C" size="80"><SuccessFilled /></el-icon>
213 <p class="text-success">{{ language==0?'支付成功':'successful!' }}</p> 223 <p class="text-success">{{ language==0?'支付成功':'successful!' }}</p>
214 <h3 class="wePrice">¥{{form.totalFee}}</h3> 224 <h3 class="wePrice">{{ language==0?'¥':'£' }}{{form.totalFee}}</h3>
215 </div> 225 </div>
216 </el-card> 226 </el-card>
217 <el-card class="mb60" v-if="form.payStatus == '1' && form.curPayType=='2'"> 227 <el-card class="mb60" v-if="form.payStatus == '1' && form.curPayType=='2'">
...@@ -219,7 +229,7 @@ ...@@ -219,7 +229,7 @@
219 <div class="text-center"> 229 <div class="text-center">
220 <el-icon color="#32B16C" size="80"><SuccessFilled /></el-icon> 230 <el-icon color="#32B16C" size="80"><SuccessFilled /></el-icon>
221 <p class="text-success">{{ language==0?'支付成功':'successful!' }}</p> 231 <p class="text-success">{{ language==0?'支付成功':'successful!' }}</p>
222 <h3 class="wePrice">¥{{form.totalFee}}</h3> 232 <h3 class="wePrice">{{ language==0?'¥':'£' }}{{form.totalFee}}</h3>
223 <span v-if="language==0" class="text-danger size12">*您可以在上传汇款单完成后,与联系人进行电话确认。具体缴费结果,可以在个人中心-我的报名中查看进度</span> 233 <span v-if="language==0" class="text-danger size12">*您可以在上传汇款单完成后,与联系人进行电话确认。具体缴费结果,可以在个人中心-我的报名中查看进度</span>
224 <span v-else class="text-danger size12">*You can confirm with the contact person by phone after uploading the remittance form. The specific payment results can be viewed in the My Registration section of the personal center to check the progress</span> 234 <span v-else class="text-danger size12">*You can confirm with the contact person by phone after uploading the remittance form. The specific payment results can be viewed in the My Registration section of the personal center to check the progress</span>
225 235
...@@ -279,6 +289,8 @@ const upForm = ref({ ...@@ -279,6 +289,8 @@ const upForm = ref({
279 }) 289 })
280 const errorBox = ref(false) 290 const errorBox = ref(false)
281 const hideconfirmbtn = ref(false) 291 const hideconfirmbtn = ref(false)
292 const insuranceFeeTotal = ref(0)
293 const serviceFeeTotal = ref(0)
282 console.log(route.query.orderId) 294 console.log(route.query.orderId)
283 // 1763462073870237698 295 // 1763462073870237698
284 getData() 296 getData()
...@@ -310,8 +322,17 @@ function getSignList() { ...@@ -310,8 +322,17 @@ function getSignList() {
310 cptId: matchId.value, 322 cptId: matchId.value,
311 groupId: groupId.value 323 groupId: groupId.value
312 }).then(res => { 324 }).then(res => {
325 insuranceFeeTotal.value = 0
326 serviceFeeTotal.value = 0
313 signInfoList.value = res.data.singleData 327 signInfoList.value = res.data.singleData
314 zuTableList.value = res.data.zuData 328 zuTableList.value = res.data.zuData
329 for(var s of signInfoList.value){
330 insuranceFeeTotal.value = insuranceFeeTotal.value + Number(s.insuranceFee)
331 }
332 for(var z of zuTableList.value){
333 serviceFeeTotal.value = serviceFeeTotal.value + Number(z.project.serviceFee)
334 }
335
315 }) 336 })
316 } 337 }
317 function goHome() { 338 function goHome() {
...@@ -456,4 +477,13 @@ function showLogin(){ ...@@ -456,4 +477,13 @@ function showLogin(){
456 } 477 }
457 } 478 }
458 .payImgbox{text-align: center;border: 1px solid #fff;padding: 20px;} 479 .payImgbox{text-align: center;border: 1px solid #fff;padding: 20px;}
480 .priceBar{padding: 0 0 20px;
481 .flex{display: flex;justify-content: right;align-items: baseline;
482 .item{font-size: 16px;margin-right: 15px;
483 label{color: #95A1A6;}
484 span{font-family: DIN Alternate;}
485 }
486 }
487 .size26{font-size: 26px;}
488 }
459 </style> 489 </style>
......
...@@ -11,12 +11,22 @@ ...@@ -11,12 +11,22 @@
11 <div style="margin: 20px"> 11 <div style="margin: 20px">
12 12
13 <div class="mt20"> 13 <div class="mt20">
14 <div class="leftboderTT">{{ language==0?'参赛人员清单':'Participant List' }}</div> 14 <div class="leftboderTT">{{ language==0?'参赛人员清单':'Participant List' }}
15 <sign-info-table class="mt20" :match-id="matchId" :list="signInfoList" :hasAction="false"/> 15 <div class="fr">
16 <el-input size="small" v-model="zuQuery.name" :prefix-icon="Search"
17 @change="getSignList" clearable/>
18 </div>
19 </div>
20 <sign-info-table class="mt20" :showSummary="true" :total="form.cptInsuranceFee?.totalFee" :match-id="matchId" :list="signInfoList" :hasAction="false"/>
16 </div> 21 </div>
17 <div class="mt20"> 22 <div class="mt20">
18 <div class="leftboderTT">{{ language==0?'设项报名清单':'Event Registration List' }}</div> 23 <div class="leftboderTT">{{ language==0?'设项报名清单':'Event Registration List' }}
19 <zu-table class="mt20" :list="zuTableList" :hasAction="false"/> 24 <div class="fr">
25 <el-input size="small" v-model="zuQuery.groupName" :prefix-icon="Search"
26 @change="getSignList" clearable/>
27 </div>
28 </div>
29 <zu-table class="mt20" :showSummary="true" :total="form.cptRegistrationFee?.totalFee" :list="zuTableList" :hasAction="false"/>
20 </div> 30 </div>
21 </div> 31 </div>
22 32
...@@ -26,9 +36,9 @@ ...@@ -26,9 +36,9 @@
26 <el-row class="priceBar"> 36 <el-row class="priceBar">
27 <el-col :lg="16" :xs="24" class="pd20"> 37 <el-col :lg="16" :xs="24" class="pd20">
28 <div class="flex"> 38 <div class="flex">
29 <div class="item"><label>{{ language==0?'报名费':'Registration Fee' }}</label><span>¥{{form.cptRegistrationFee?.totalFee}}</span></div> 39 <div class="item"><label>{{ language==0?'报名费':'Registration Fee' }}</label><span>{{ language==0?'¥':'£' }}{{form.cptRegistrationFee?.totalFee}}</span></div>
30 <div class="item"><label>{{ language==0?'保险费':'Insurance Fee' }}</label><span>¥{{form.cptInsuranceFee?.totalFee}}</span></div> 40 <div class="item"><label>{{ language==0?'保险费':'Insurance Fee' }}</label><span>{{ language==0?'¥':'£' }}{{form.cptInsuranceFee?.totalFee}}</span></div>
31 <div class="item"><label>{{ language==0?'费用总计':'Total Cost' }}</label><span>¥{{form.totalFee}}</span></div> 41 <div class="item"><label>{{ language==0?'费用总计':'Total Cost' }}</label><span>{{ language==0?'¥':'£' }}{{form.totalFee}}</span></div>
32 </div> 42 </div>
33 </el-col> 43 </el-col>
34 <el-col :lg="8" :xs="24" class="text-right pd20"> 44 <el-col :lg="8" :xs="24" class="text-right pd20">
...@@ -49,6 +59,7 @@ ...@@ -49,6 +59,7 @@
49 </template> 59 </template>
50 60
51 <script setup> 61 <script setup>
62 import {Search} from "@element-plus/icons-vue";
52 import TeamSignStep from './components/teamSignStep' 63 import TeamSignStep from './components/teamSignStep'
53 import MatchInfoRow from "@/viewsPc/match/components/matchInfo-row" 64 import MatchInfoRow from "@/viewsPc/match/components/matchInfo-row"
54 import GroupInfoRow from "@/viewsPc/match/components/groupInfo-row" 65 import GroupInfoRow from "@/viewsPc/match/components/groupInfo-row"
...@@ -68,32 +79,32 @@ const router = useRouter() ...@@ -68,32 +79,32 @@ const router = useRouter()
68 const activeStep = ref(3) 79 const activeStep = ref(3)
69 const groupInfo = useUserStore().group || {} 80 const groupInfo = useUserStore().group || {}
70 const language = ref(cache.local.get('language') || 0) 81 const language = ref(cache.local.get('language') || 0)
71 const groupId = ref() 82 const groupId = ref(route.query.groupId || 0)
72 const form = ref({}) 83 const form = ref({})
73 const matchId = ref(route.query.matchId) 84 const matchId = ref(route.query.matchId)
74 const signInfoList = ref([]) 85 const signInfoList = ref([])
75 const zuTableList = ref([]) 86 const zuTableList = ref([])
76 const {proxy} = getCurrentInstance() 87 const {proxy} = getCurrentInstance()
88 const zuQuery = ref({
89 cptId: matchId.value,
90 groupId: groupId.value,
91 name:'',
92 groupName:''
93 })
77 onMounted(()=>{ 94 onMounted(()=>{
78 // console.log(route.query) 95 // console.log(route.query)
79 matchId.value = route.query.matchId
80 groupId.value = route.query.groupId || 0
81 getSignList() 96 getSignList()
82 getFee(groupId.value) 97 getFee(groupId.value)
83 }) 98 })
84 99
85 100
86 function getSignList() { 101 function getSignList() {
87 match.getMySignInfoList({ 102 match.getMySignInfoList(zuQuery.value).then(res=>{
88 cptId: matchId.value,
89 groupId: groupId.value
90 }).then(res=>{
91 signInfoList.value = res.data.singleData 103 signInfoList.value = res.data.singleData
92 zuTableList.value = res.data.zuData 104 zuTableList.value = res.data.zuData
93 }) 105 })
94 } 106 }
95 const goPrev = () => { 107 const goPrev = () => {
96 // router.go(-1)
97 router.push({ 108 router.push({
98 name: 'chooseSportsman', 109 name: 'chooseSportsman',
99 query: { 110 query: {
...@@ -181,6 +192,7 @@ function exportSignList(n) { ...@@ -181,6 +192,7 @@ function exportSignList(n) {
181 .flex{display: flex; 192 .flex{display: flex;
182 .item{font-size: 16px;margin-right: 15px; 193 .item{font-size: 16px;margin-right: 15px;
183 label{color: #95A1A6;} 194 label{color: #95A1A6;}
195 span{font-family: DIN Alternate;}
184 } 196 }
185 } 197 }
186 } 198 }
......
...@@ -23,6 +23,9 @@ ...@@ -23,6 +23,9 @@
23 </el-form-item> 23 </el-form-item>
24 </el-col> 24 </el-col>
25 <el-col :lg="10"> 25 <el-col :lg="10">
26 <el-form-item :label="language==0?'参赛队名称':'Name of participating team'" required prop="abreviations">
27 <el-input type="text" v-model="form.abreviations" :placeholder="language==0?'请输入内容':''"/>
28 </el-form-item>
26 <el-form-item :label="language==0?'团体名称':'Team Name'" prop="name"> 29 <el-form-item :label="language==0?'团体名称':'Team Name'" prop="name">
27 <el-input v-model="form.name" :placeholder="language==0?'请输入团体名称':''" /> 30 <el-input v-model="form.name" :placeholder="language==0?'请输入团体名称':''" />
28 </el-form-item> 31 </el-form-item>
...@@ -32,9 +35,6 @@ ...@@ -32,9 +35,6 @@
32 <el-form-item :label="language==0?'邮箱':'Email'" required prop="contactEmail"> 35 <el-form-item :label="language==0?'邮箱':'Email'" required prop="contactEmail">
33 <el-input v-model="form.contactEmail" type="email" placeholder="请输入内容"/> 36 <el-input v-model="form.contactEmail" type="email" placeholder="请输入内容"/>
34 </el-form-item> 37 </el-form-item>
35 <el-form-item :label="language==0?'详细地址':'Detailed Address'" required prop="address">
36 <el-input type="textarea" v-model="form.address" class="mt10" placeholder="请输入详细地址"/>
37 </el-form-item>
38 <el-form-item :label="language==0?'团体类型':'Group type'" prop="type"> 38 <el-form-item :label="language==0?'团体类型':'Group type'" prop="type">
39 <el-select v-model="form.type" :placeholder="language==0?'请选择团体类型':''" style="width: 100%;"> 39 <el-select v-model="form.type" :placeholder="language==0?'请选择团体类型':''" style="width: 100%;">
40 <el-option :label="language==0?'普通院校':'School'" value="0" /> 40 <el-option :label="language==0?'普通院校':'School'" value="0" />
...@@ -44,10 +44,12 @@ ...@@ -44,10 +44,12 @@
44 <el-option :label="language==0?'国家协会':'National Association'" value="4" /> 44 <el-option :label="language==0?'国家协会':'National Association'" value="4" />
45 </el-select> 45 </el-select>
46 </el-form-item> 46 </el-form-item>
47 <el-form-item :label="language==0?'参赛队名称':'Name of participating team'" required prop="abreviations"> 47 <el-form-item :label="language==0?'详细地址':'Detailed Address'" required prop="address">
48 <el-input type="text" v-model="form.abreviations" :placeholder="language==0?'请输入内容':''"/> 48 <el-input type="textarea" v-model="form.address" class="mt10" placeholder="请输入详细地址"/>
49 </el-form-item> 49 </el-form-item>
50 50
51
52
51 </el-col> 53 </el-col>
52 </el-row> 54 </el-row>
53 <el-row v-if="participantsInfoArr&&participantsInfoArr.length>0"> 55 <el-row v-if="participantsInfoArr&&participantsInfoArr.length>0">
......
1 <template>
2 <el-card>
3 <el-steps :active="activeStep" finish-status="success" align-center>
4 <el-step :title="language==0?'创建账号':'Check WDSF ID'"/>
5 <el-step :title="language==0?'选手报名':'Participant Registration'" />
6 <el-step :title="language==0?'提交审核':'Submit for review'" />
7 <!-- <el-step :title="language==0?'注册完成':'stered successfully'" />-->
8 </el-steps>
9 </el-card>
10 </template>
11
12 <script setup>
13 import {ref} from "vue";
14 import cache from "@/plugins/cache";
15
16 const language = ref(cache.local.get('language') || 0)
17 const props = defineProps({
18 activeStep: {
19 type: Number,
20 required: true
21 }
22 })
23 </script>
24
25 <style scoped>
26
27 </style>
...@@ -2,21 +2,14 @@ ...@@ -2,21 +2,14 @@
2 <div> 2 <div>
3 <div class="mt30 mb60"> 3 <div class="mt30 mb60">
4 <div class="box"> 4 <div class="box">
5 <!-- 国内-机构注册--> 5 <personal-step :active-step="activeStep"/>
6 <el-card>
7 <el-steps :active="activeStep" finish-status="success" align-center>
8 <el-step :title="language==0?'创建账号':'create an account'"/>
9 <el-step :title="language==0?'注册完成':'stered successfully'" />
10 </el-steps>
11 </el-card>
12
13 <div class="mt20"></div> 6 <div class="mt20"></div>
14 <div v-if="activeStep==0"> 7 <div>
15 <el-card style="min-height: 50vh"> 8 <el-card style="min-height: 50vh">
16 <div class="pt30"> 9 <div class="pt30">
17 <el-form class="d-form" size="large" :label-width="language==0?120:180" 10 <el-form class="d-form" size="large" :label-width="language==0?120:180"
18 style="max-width: 500px;margin: auto"> 11 style="max-width: 560px;margin: auto">
19 <el-form-item :label="language==0?'WDSF卡号':'WDSF'" required> 12 <el-form-item :label="language==0?'WDSF卡号':'WDSF ID'" required>
20 <el-input type="text" v-model="form.card" @change="resetCode(0)" @blur="verifyCode"> 13 <el-input type="text" v-model="form.card" @change="resetCode(0)" @blur="verifyCode">
21 <template #append> 14 <template #append>
22 <el-button type="primary" plain style="width: 110px" @click="checkCard"> 15 <el-button type="primary" plain style="width: 110px" @click="checkCard">
...@@ -25,10 +18,73 @@ ...@@ -25,10 +18,73 @@
25 </el-button> 18 </el-button>
26 </template> 19 </template>
27 </el-input> 20 </el-input>
21 </el-form-item>
22 <div class="h30"></div>
23 <div class="leftboderTT">{{ language == 0 ? '个人信息' : 'Personal information' }}
24 <span v-if="language==0">(登录时需要验证,保护账户信息)</span>
25 <span v-else>(Obtain automatically according to the WDSF number)</span>
26 </div>
27 <div class="h20"></div>
28 <el-form-item :label="language==0?'姓氏':'surname'" prop="xing" required>
29 <el-input v-model="form.xing" disabled/>
30 </el-form-item>
31 <el-form-item :label="language==0?'名':'name'" prop="ming" required>
32 <el-input v-model="form.ming" disabled/>
33 </el-form-item>
34 <el-form-item label="Representing" required>
35 <el-input v-model="form.Representing" disabled/>
36 </el-form-item>
37 <el-form-item label="Age group" required>
38 <el-input v-model="form.ageGroup" disabled/>
39 </el-form-item>
40 <el-form-item label="Division" required>
41 <el-input v-model="form.division" disabled/>
42 </el-form-item>
43 <el-form-item label="Status" required>
44 <el-input v-model="form.status" disabled/>
45 </el-form-item>
46 <div class="h30"></div>
47 <div class="leftboderTT">
48 {{ language == 0 ? '补充信息' : 'Supplementary Information' }}
49 </div>
50 <div class="h20"></div>
51 <el-form-item :label="language==0?'性别':'Sex'" prop="sex" required>
52 <el-radio-group v-model="form.sex">
53 <el-radio label="0">{{ language==0?'女':'female' }}</el-radio>
54 <el-radio label="1">{{ language==0?'男':'male' }}</el-radio>
55 </el-radio-group>
56 </el-form-item>
28 57
58 <el-form-item :label="language==0?'出生日期':'Birthday'" prop="birth" required>
59 <el-date-picker
60 v-model="form.birth"
61 style="width: 100%;"
62 type="date" format="YYYY-MM-DD" value-format="YYYY-MM-DD"
63 />
64 </el-form-item>
65 <el-form-item label="Passport number" required prop="idcCode">
66 <el-input v-model="form.idcCode"/>
29 </el-form-item> 67 </el-form-item>
30 <el-form-item :label="language==0?'手机/邮箱':'E-mail / Phone number'" required> 68 <el-form-item label="Passport File">
31 <el-input type="text" v-model="form.account" @change="resetCode(1)" @blur="verifyCode"/> 69 <file-upload :is-show-tip="false" :button-text="'Upload'"/>
70 </el-form-item>
71
72
73 <div class="h30"></div>
74 <div class="leftboderTT">{{ language == 0 ? '登录密码' : 'Login Information' }} <span
75 v-if="language==0">(登录时需要验证,保护账户信息)</span></div>
76 <div class="h20"></div>
77 <el-form-item :label="language==0?'邮箱':'E-mail'" required>
78 <el-input type="text" v-model="form.account" @change="resetCode(1)"
79 @blur="verifyCode"/>
80 <div class="tip" v-if="language==0">
81 (请填写正确的邮箱信息,邮箱信息在注册完成后无法修改。
82 该邮箱后续会接收您报名审核、支付账单、比赛邀请函等。)
83 </div>
84 <div class="tip" v-else>
85 Please fill in a correct mailbox information, which cannot be modified after registration.
86 The mailbox will receive your registration review, payment of bills, competition invitation and so on.
87 </div>
32 </el-form-item> 88 </el-form-item>
33 <el-form-item :label="language==0?'验证码':'Code'" required> 89 <el-form-item :label="language==0?'验证码':'Code'" required>
34 <el-input v-model="form.code"> 90 <el-input v-model="form.code">
...@@ -42,31 +98,29 @@ ...@@ -42,31 +98,29 @@
42 </template> 98 </template>
43 </el-input> 99 </el-input>
44 </el-form-item> 100 </el-form-item>
45 <div class="h30"></div> 101
46 <div class="leftboderTT">{{ language == 0 ? '登录密码' : 'Password' }} <span
47 v-if="language==0">(登录时需要验证,保护账户信息)</span></div>
48 <div class="h20"></div>
49 <el-form-item :label="language==0?'密码':'Password'" required> 102 <el-form-item :label="language==0?'密码':'Password'" required>
50 <el-input type="password" show-password v-model="form.password" 103 <el-input type="password" show-password v-model="form.password"
51 :placeholder="language==0?'6-16位密码。区分大小写':''"/> 104 :placeholder="language==0?'6-16位密码。区分大小写':'Password'"/>
52 </el-form-item> 105 </el-form-item>
53 <el-form-item :label="language==0?'确认密码':'Confirm Password'" required> 106 <el-form-item :label="language==0?'确认密码':'Confirm Password'" required>
54 <el-input type="password" show-password v-model="form.confirmPassword" @blur="vconfirmPassword" 107 <el-input type="password" show-password v-model="form.confirmPassword" @change="vconfirmPassword"
55 :placeholder="language==0?'再次输入密码':'Confirm Password'"/> 108 :placeholder="language==0?'再次输入密码':'Confirm Password'"/>
109 <div class="text-danger" v-if="showError">{{ language==0?'密码不一致':'Password inconsistency' }}</div>
56 </el-form-item> 110 </el-form-item>
57 </el-form> 111 </el-form>
58 </div> 112 </div>
59 <div class="text-center"> 113 <div class="text-center">
60 <!-- <el-button class="primary-kx" round @click="goBack">取消</el-button>--> 114 <el-button class="primary-kx" round @click="goBack"> {{ language==0?'取消':'Cancel'}}</el-button>
61 <el-button type="primary" class="btn-lineG w200px" round @click="next"> 115 <el-button type="primary" class="btn-lineG w200px" round @click="next" v-if="matchId=='0'">
62 {{ language==0?'立即注册':'Register Now' }} 116 {{ language==0?'立即注册':'Register Now' }}
63 </el-button> 117 </el-button>
118 <el-button type="primary" class="btn-lineG w200px" round @click="next" v-else>
119 {{ language==0?'下一步':'Next' }}
120 </el-button>
64 </div> 121 </div>
65 </el-card> 122 </el-card>
66 </div> 123 </div>
67 <div v-if="activeStep==1">
68 <Step3 :accont="form.account"/>
69 </div>
70 124
71 <Vcode :show="isShow" @success="codeSuccess()"></Vcode> 125 <Vcode :show="isShow" @success="codeSuccess()"></Vcode>
72 </div> 126 </div>
...@@ -84,26 +138,35 @@ import CountDown from '@chenfengyuan/vue-countdown' ...@@ -84,26 +138,35 @@ import CountDown from '@chenfengyuan/vue-countdown'
84 import cache from '@/plugins/cache' 138 import cache from '@/plugins/cache'
85 import {checkWdsf, getCaptchaSms, registerSingle} from "@/apiPc/match"; 139 import {checkWdsf, getCaptchaSms, registerSingle} from "@/apiPc/match";
86 import {setToken} from "@/utils/auth"; 140 import {setToken} from "@/utils/auth";
141 import PersonalStep from "@/viewsPc/register/components/personal-step";
142 import FileUpload from "@/components/FileUpload";
143 import {useRouter,useRoute} from "vue-router";
87 const language = ref(cache.local.get('language') || 0) 144 const language = ref(cache.local.get('language') || 0)
88 145 const router = useRouter()
146 const route = useRoute()
89 const data = reactive({ 147 const data = reactive({
90 isShow:false, 148 isShow:false,
91 isCodeTrue:0, 149 isCodeTrue:0,
92 counting:false, 150 counting:false,
93 checkStatus:false, 151 checkStatus:false,
94 form:{}, 152 form:{
153 sex:'0'
154 },
95 activeStep: 0, 155 activeStep: 0,
96 failVcode:'验证失败,请重试', 156 failVcode:'验证失败,请重试',
97 successVcode:'验证通过!', 157 successVcode:'验证通过!',
98 sliderText: '拖动滑块完成拼图', 158 sliderText: '拖动滑块完成拼图',
159 showError: false
99 }) 160 })
100 const {isShow,isCodeTrue,counting,form,activeStep,failVcode,successVcode,sliderText,checkStatus} = toRefs(data) 161 const {isShow,isCodeTrue,counting,form,activeStep,failVcode,successVcode,sliderText,checkStatus,showError} = toRefs(data)
162 const matchId = ref('0')
101 onMounted(()=>{ 163 onMounted(()=>{
102 if(language.value==1){ 164 if(language.value==1){
103 failVcode.value = 'Error!' 165 failVcode.value = 'Error!'
104 successVcode.value = 'Success!' 166 successVcode.value = 'Success!'
105 sliderText.value = 'Drag the slider to complete the puzzle' 167 sliderText.value = 'Drag the slider to complete the puzzle'
106 } 168 }
169 matchId.value = route.query.matchId
107 }) 170 })
108 function sendsmsMsg() { 171 function sendsmsMsg() {
109 if(!form.value.account){ 172 if(!form.value.account){
...@@ -160,15 +223,43 @@ function codeSuccess(msg) { ...@@ -160,15 +223,43 @@ function codeSuccess(msg) {
160 function resetCode(n) { 223 function resetCode(n) {
161 isCodeTrue.value = n 224 isCodeTrue.value = n
162 } 225 }
226 function vconfirmPassword() {
227 if(form.value.password != form.value.confirmPassword){
228 showError.value = true
229 } else {
230 showError.value = false
231 }
232 }
233 function goBack() {
234 router.go(-1)
235 }
163 function next() { 236 function next() {
164 registerSingle(form.value).then(res=>{ 237 // registerSingle(form.value).then(res=>{
165 setToken(res.data.token) 238 // setToken(res.data.token)
166 activeStep.value = 1 239 if(matchId.value!='0'){
240 router.push({
241 name: 'chooseProject',
242 params:{
243 id: matchId.value
244 },
245 query: {
246 matchId: matchId.value
247 }
167 }) 248 })
249 } else {
250 router.push({
251 name: 'matchDetail',
252 params:{
253 id: 0
254 }
255 })
256 }
257 // })
168 } 258 }
169 </script> 259 </script>
170 260
171 <style scoped lang="scss"> 261 <style scoped lang="scss">
262 .tip{line-height: 1.6;font-size: 12px;margin-top: 6px;color: #666;}
172 .leftboderTT { 263 .leftboderTT {
173 color: var(--el-color-primary); 264 color: var(--el-color-primary);
174 font-size: 16px; 265 font-size: 16px;
...@@ -181,4 +272,12 @@ span { ...@@ -181,4 +272,12 @@ span {
181 } 272 }
182 .h20{height: 20px} 273 .h20{height: 20px}
183 .h30{height: 30px} 274 .h30{height: 30px}
275
276 .el-input-group__append{ flex: 1 1 auto;}
277 .el-input-group__append button.el-button, .el-input-group__append button.el-button:hover{
278 color: var(--el-color-primary);
279 background: #efefff;
280 border: var(--el-color-primary) solid 1px;
281 border-radius: 0;
282 }
184 </style> 283 </style>
......
...@@ -2,8 +2,9 @@ ...@@ -2,8 +2,9 @@
2 <el-card style="min-height: 50vh"> 2 <el-card style="min-height: 50vh">
3 <div class="pt30"> 3 <div class="pt30">
4 <el-form class="d-form" size="large" :label-width="language==0?120:200" style="max-width: 500px;margin: auto"> 4 <el-form class="d-form" size="large" :label-width="language==0?120:200" style="max-width: 500px;margin: auto">
5 <el-form-item :label="language==0?'手机/邮箱':'E-mail / Phone number'" required> 5 <el-form-item :label="language==0?'邮箱':'E-mail'" required>
6 <el-input type="text" v-model="form.account" @change="resetCode" @blur="verifyCode"/> 6 <el-input type="text" v-model="form.account" @change="resetCode" @blur="verifyCode"
7 />
7 </el-form-item> 8 </el-form-item>
8 <el-form-item :label="language==0?'验证码':'Code'" required> 9 <el-form-item :label="language==0?'验证码':'Code'" required>
9 <el-input v-model="form.code"> 10 <el-input v-model="form.code">
......
...@@ -42,6 +42,15 @@ ...@@ -42,6 +42,15 @@
42 <el-form-item :label="language==0?'机构名称':'Institution name'" required prop="teamName"> 42 <el-form-item :label="language==0?'机构名称':'Institution name'" required prop="teamName">
43 <el-input type="text" v-model="form.teamName" :placeholder="language==0?'请输入内容':''"/> 43 <el-input type="text" v-model="form.teamName" :placeholder="language==0?'请输入内容':''"/>
44 </el-form-item> 44 </el-form-item>
45 <el-form-item :label="language==0?'团体类型':'Group type'" prop="type" required>
46 <el-select v-model="form.type" :placeholder="language==0?'请选择团体类型':''" style="width: 100%;">
47 <el-option :label="language==0?'普通院校':'School'" value="0" />
48 <el-option :label="language==0?'专业舞蹈学校':'Professional dance school'" value="1" />
49 <el-option :label="language==0?'培训机构/俱乐部':'Company/Club'" value="2" />
50 <el-option :label="language==0?'地方协会':'Local Association'" value="3" />
51 <el-option :label="language==0?'国家协会':'National Association'" value="4" />
52 </el-select>
53 </el-form-item>
45 <el-form-item :label="language==0?'联系人姓名':'Contact Name'" required prop="contactName"> 54 <el-form-item :label="language==0?'联系人姓名':'Contact Name'" required prop="contactName">
46 <el-input type="text" v-model="form.contactName" :placeholder="language==0?'请输入内容':''"/> 55 <el-input type="text" v-model="form.contactName" :placeholder="language==0?'请输入内容':''"/>
47 </el-form-item> 56 </el-form-item>
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!