f9f418f2 by 杨炀

no message

1 parent b42d99dc
Showing 122 changed files with 2248 additions and 799 deletions
...@@ -54,9 +54,6 @@ onMounted(() => { ...@@ -54,9 +54,6 @@ onMounted(() => {
54 margin: auto; 54 margin: auto;
55 } 55 }
56 56
57 .app-container {
58 min-height: 100vh;
59 }
60 57
61 .app-main { 58 .app-main {
62 background: #F4F4F4; 59 background: #F4F4F4;
......
...@@ -2,7 +2,7 @@ import request from '@/utils/request' ...@@ -2,7 +2,7 @@ import request from '@/utils/request'
2 2
3 export function getMaList(params) { 3 export function getMaList(params) {
4 return request({ 4 return request({
5 url: `/ztx-match/league/competition/webList`, 5 url: `/league/competition/webList`,
6 method: 'get', 6 method: 'get',
7 params: params 7 params: params
8 }) 8 })
...@@ -18,7 +18,7 @@ export function getMatchById(params) { ...@@ -18,7 +18,7 @@ export function getMatchById(params) {
18 18
19 export function getMySignCptList(query) { 19 export function getMySignCptList(query) {
20 return request({ 20 return request({
21 url: 'ztx-match/league/competition/getMySignCptList', 21 url: '/league/competition/getMySignCptList',
22 method: 'get', 22 method: 'get',
23 params: query 23 params: query
24 }) 24 })
...@@ -35,35 +35,35 @@ export function getMySignDetailById(params) { ...@@ -35,35 +35,35 @@ export function getMySignDetailById(params) {
35 // 获取赛事下的已报团队 35 // 获取赛事下的已报团队
36 export function getGroupListByCptId(cptId) { 36 export function getGroupListByCptId(cptId) {
37 return request({ 37 return request({
38 url: `ztx-match/league/group/getGroupListByCptId/${cptId}`, 38 url: `/league/group/getGroupListByCptId/${cptId}`,
39 method: 'get' 39 method: 'get'
40 }) 40 })
41 } 41 }
42 42
43 export function getMyPersonInfoWithcptId(cptId) { 43 export function getMyPersonInfoWithcptId(cptId) {
44 return request({ 44 return request({
45 url: `ztx-match/systemj/personInfo/getMyPersonInfo/${cptId}`, 45 url: `/systemj/personInfo/getMyPersonInfo/${cptId}`,
46 method: 'get' 46 method: 'get'
47 }) 47 })
48 } 48 }
49 49
50 export function getMyPersonInfo() { 50 export function getMyPersonInfo() {
51 return request({ 51 return request({
52 url: `/ztx-match/systemj/personInfo/getMyPersonInfo`, 52 url: `/systemj/personInfo/getMyPersonInfo`,
53 method: 'get' 53 method: 'get'
54 }) 54 })
55 } 55 }
56 56
57 export function countryList() { 57 export function countryList() {
58 return request({ 58 return request({
59 url: `/ztx-match/systemj/country/countryList`, 59 url: `/systemj/country/countryList`,
60 method: 'get' 60 method: 'get'
61 }) 61 })
62 } 62 }
63 63
64 export function saveMyBaseInfo(data) { 64 export function saveMyBaseInfo(data) {
65 return request({ 65 return request({
66 url: `/ztx-match/systemj/personInfo/saveMyBaseInfo`, 66 url: `/systemj/personInfo/saveMyBaseInfo`,
67 method: 'post', 67 method: 'post',
68 data: data 68 data: data
69 }) 69 })
...@@ -87,7 +87,7 @@ export function checkRegisterCode(data) { ...@@ -87,7 +87,7 @@ export function checkRegisterCode(data) {
87 87
88 export function getMyGroupList() { 88 export function getMyGroupList() {
89 return request({ 89 return request({
90 url: `/ztx-match/league/group/getMyGroupList`, 90 url: `/league/group/getMyGroupList`,
91 method: 'get' 91 method: 'get'
92 }) 92 })
93 } 93 }
...@@ -115,6 +115,20 @@ export function saveMyGroup(data) { ...@@ -115,6 +115,20 @@ export function saveMyGroup(data) {
115 data: data 115 data: data
116 }) 116 })
117 } 117 }
118 export function saveMyGroupForCpt(data) {
119 return request({
120 url: `/league/group/saveMyGroupForCpt`,
121 method: 'post',
122 data: data
123 })
124 }
125 export function commitAudit(data) {
126 return request({
127 url: `/league/group/commitAudit`,
128 method: 'post',
129 data: data
130 })
131 }
118 132
119 // 退出团队 133 // 退出团队
120 export function leaveGroup(groupId) { 134 export function leaveGroup(groupId) {
...@@ -127,7 +141,7 @@ export function leaveGroup(groupId) { ...@@ -127,7 +141,7 @@ export function leaveGroup(groupId) {
127 // 根据Id获取人员信息 141 // 根据Id获取人员信息
128 export function getPersonInfoById(id) { 142 export function getPersonInfoById(id) {
129 return request({ 143 return request({
130 url: `ztx-match/systemj/personInfo/${id}`, 144 url: `/systemj/personInfo/${id}`,
131 method: 'get' 145 method: 'get'
132 }) 146 })
133 } 147 }
...@@ -135,7 +149,7 @@ export function getPersonInfoById(id) { ...@@ -135,7 +149,7 @@ export function getPersonInfoById(id) {
135 // 保存补充信息 149 // 保存补充信息
136 export function saveSupplementInfo(data) { 150 export function saveSupplementInfo(data) {
137 return request({ 151 return request({
138 url: `ztx-match/league/competitionPersonInfo/savePersonInfo`, 152 url: `/league/competitionPersonInfo/savePersonInfo`,
139 method: 'post', 153 method: 'post',
140 data: data 154 data: data
141 }) 155 })
...@@ -144,14 +158,14 @@ export function saveSupplementInfo(data) { ...@@ -144,14 +158,14 @@ export function saveSupplementInfo(data) {
144 // 获取补充信息 158 // 获取补充信息
145 export function getSupplementInfo(id) { 159 export function getSupplementInfo(id) {
146 return request({ 160 return request({
147 url: `ztx-match/league/competitionPersonInfo/${id}`, 161 url: `/league/competitionPersonInfo/${id}`,
148 method: 'get' 162 method: 'get'
149 }) 163 })
150 } 164 }
151 165
152 export function getMySignInfo(data) { 166 export function getMySignInfo(data) {
153 return request({ 167 return request({
154 url: `ztx-match/league/sign/getMySignInfo`, 168 url: `/league/sign/getMySignInfo`,
155 method: 'post', 169 method: 'post',
156 data: data 170 data: data
157 }) 171 })
...@@ -173,7 +187,7 @@ export function getLeveListByGroupId(cptGroupId) { ...@@ -173,7 +187,7 @@ export function getLeveListByGroupId(cptGroupId) {
173 187
174 export function saveMyTeam(data) { 188 export function saveMyTeam(data) {
175 return request({ 189 return request({
176 url: `ztx-match/league/team/saveMyTeam`, 190 url: `/league/team/saveMyTeam`,
177 method: 'post', 191 method: 'post',
178 data: data 192 data: data
179 }) 193 })
...@@ -181,7 +195,7 @@ export function saveMyTeam(data) { ...@@ -181,7 +195,7 @@ export function saveMyTeam(data) {
181 195
182 export function getMyOrderList(params) { 196 export function getMyOrderList(params) {
183 return request({ 197 return request({
184 url: `/ztx-match/league/signOrder/getMyOrderList`, 198 url: `/league/signOrder/getMyOrderList`,
185 method: 'get', 199 method: 'get',
186 params: params 200 params: params
187 }) 201 })
...@@ -196,7 +210,7 @@ export function getMySignListFromOrderList(orderId) { ...@@ -196,7 +210,7 @@ export function getMySignListFromOrderList(orderId) {
196 210
197 export function getMyOrderDetail(orderId) { 211 export function getMyOrderDetail(orderId) {
198 return request({ 212 return request({
199 url: `/ztx-match/league/signOrder/getMyOrderDetail/${orderId}`, 213 url: `/league/signOrder/getMyOrderDetail/${orderId}`,
200 method: 'get' 214 method: 'get'
201 }) 215 })
202 } 216 }
...@@ -219,30 +233,37 @@ export function getVenueDetail(id) { ...@@ -219,30 +233,37 @@ export function getVenueDetail(id) {
219 // 获取团队下的队伍 233 // 获取团队下的队伍
220 export function getMyTeamList(cptId, groupId) { 234 export function getMyTeamList(cptId, groupId) {
221 return request({ 235 return request({
222 url: `ztx-match/league/team/getTeamList/${cptId}/${groupId}`, 236 url: `/league/team/getTeamList/${cptId}/${groupId}`,
223 method: 'get' 237 method: 'get'
224 }) 238 })
225 } 239 }
226 240
227 export function getMyGroupForCpt(groupId, cptId) { 241 export function getMyGroupForCpt(groupId, cptId) {
228 return request({ 242 return request({
229 url: `ztx-match/league/group/getMyGroupForCpt/${groupId}/${cptId}`, 243 url: `/league/group/getMyGroupForCpt/${groupId}/${cptId}`,
230 method: 'get' 244 method: 'get'
231 }) 245 })
232 } 246 }
233 247
234 export function getMyGroupForCptFilter(groupId, cptId, query) { 248 export function getMyGroupForCptFilter(groupId, cptId, query) {
235 return request({ 249 return request({
236 url: `ztx-match/league/group/getMyGroupForCptFilter/${groupId}/${cptId}`, 250 url: `/league/group/getMyGroupForCptFilter/${groupId}/${cptId}`,
237 method: 'post', 251 method: 'post',
238 data: query 252 data: query
239 }) 253 })
240 } 254 }
255 export function getGroupPersonList(query,groupId) {
256 return request({
257 url: `/systemj/personInfo/getPersonInfoListByGroupIdNoLabel/${groupId}`,
258 method: 'get',
259 params: query
260 })
261 }
241 262
242 // 获取团队报名时已选人员 263 // 获取团队报名时已选人员
243 export function getChooseDoneGroupCoachs(cptId, groupId) { 264 export function getChooseDoneGroupCoachs(cptId, groupId) {
244 return request({ 265 return request({
245 url: `ztx-match/league/unitCompetitionRole/getGroupInfo/${cptId}/${groupId}`, 266 url: `/league/unitCompetitionRole/getGroupInfo/${cptId}/${groupId}`,
246 method: 'get' 267 method: 'get'
247 }) 268 })
248 } 269 }
...@@ -250,14 +271,14 @@ export function getChooseDoneGroupCoachs(cptId, groupId) { ...@@ -250,14 +271,14 @@ export function getChooseDoneGroupCoachs(cptId, groupId) {
250 // 获取个人报名时已选人员 271 // 获取个人报名时已选人员
251 export function getChooseDoneSingleCoachs(cptId) { 272 export function getChooseDoneSingleCoachs(cptId) {
252 return request({ 273 return request({
253 url: `ztx-match/league/unitCompetitionRole/getPersonInfo/${cptId}`, 274 url: `/league/unitCompetitionRole/getPersonInfo/${cptId}`,
254 method: 'get' 275 method: 'get'
255 }) 276 })
256 } 277 }
257 278
258 export function savePersonForMyGroup(data) { 279 export function savePersonForMyGroup(data) {
259 return request({ 280 return request({
260 url: `ztx-match/systemj/personInfo/savePersonForMyGroup`, 281 url: `/systemj/personInfo/savePersonForMyGroup`,
261 method: 'post', 282 method: 'post',
262 data: data 283 data: data
263 }) 284 })
...@@ -265,7 +286,7 @@ export function savePersonForMyGroup(data) { ...@@ -265,7 +286,7 @@ export function savePersonForMyGroup(data) {
265 286
266 export function savePersonForMyPerson(data) { 287 export function savePersonForMyPerson(data) {
267 return request({ 288 return request({
268 url: `ztx-match/systemj/personInfo/savePersonForMyPerson`, 289 url: `/systemj/personInfo/savePersonForMyPerson`,
269 method: 'post', 290 method: 'post',
270 data: data 291 data: data
271 }) 292 })
...@@ -283,14 +304,14 @@ export function editPersonInfo(params) { ...@@ -283,14 +304,14 @@ export function editPersonInfo(params) {
283 // 人员删除 304 // 人员删除
284 export function delPerson(id) { 305 export function delPerson(id) {
285 return request({ 306 return request({
286 url: `ztx-match/systemj/personInfo/${id}`, 307 url: `/systemj/personInfo/${id}`,
287 method: 'delete' 308 method: 'delete'
288 }) 309 })
289 } 310 }
290 311
291 export function singleSignSavePerson(data) { 312 export function singleSignSavePerson(data) {
292 return request({ 313 return request({
293 url: `ztx-match/league/unitCompetitionRole/savePersonInfo`, 314 url: `/league/unitCompetitionRole/savePersonInfo`,
294 method: 'post', 315 method: 'post',
295 data: data 316 data: data
296 }) 317 })
...@@ -298,7 +319,7 @@ export function singleSignSavePerson(data) { ...@@ -298,7 +319,7 @@ export function singleSignSavePerson(data) {
298 319
299 export function groupSignSavePerson(data) { 320 export function groupSignSavePerson(data) {
300 return request({ 321 return request({
301 url: `ztx-match/league/unitCompetitionRole/saveGroupInfo`, 322 url: `/league/unitCompetitionRole/saveGroupInfo`,
302 method: 'post', 323 method: 'post',
303 data: data 324 data: data
304 }) 325 })
...@@ -326,20 +347,20 @@ export function getCanSignlevelListFromSelectPerson(groupId, personId) { ...@@ -326,20 +347,20 @@ export function getCanSignlevelListFromSelectPerson(groupId, personId) {
326 } 347 }
327 export function delRank(id) { 348 export function delRank(id) {
328 return request({ 349 return request({
329 url: `ztx-match/league/team/${id}`, 350 url: `/league/team/${id}`,
330 method: 'delete' 351 method: 'delete'
331 }) 352 })
332 } 353 }
333 export function getCanSignLevelPerson(data) { 354 export function getCanSignLevelPerson(data) {
334 return request({ 355 return request({
335 url: `ztx-match/league/competitionLevel/getCanSignLevelPerson`, 356 url: `/league/competitionLevel/getCanSignLevelPerson`,
336 method: 'post', 357 method: 'post',
337 data: data 358 data: data
338 }) 359 })
339 } 360 }
340 export function sportsmanDone(data) { 361 export function sportsmanDone(data) {
341 return request({ 362 return request({
342 url: `ztx-match/league/sign/signUp`, 363 url: `/league/sign/signUp`,
343 method: 'post', 364 method: 'post',
344 data: data 365 data: data
345 }) 366 })
...@@ -347,20 +368,20 @@ export function sportsmanDone(data) { ...@@ -347,20 +368,20 @@ export function sportsmanDone(data) {
347 // 删除报名接口 368 // 删除报名接口
348 export function deleteSign(id) { 369 export function deleteSign(id) {
349 return request({ 370 return request({
350 url: `ztx-match/league/sign/deleteSign/${id}`, 371 url: `/league/sign/deleteSign/${id}`,
351 method: 'post' 372 method: 'post'
352 }) 373 })
353 } 374 }
354 // 选择运动员的补充信息表头 375 // 选择运动员的补充信息表头
355 export function getCptExtraInfo(cptId) { 376 export function getCptExtraInfo(cptId) {
356 return request({ 377 return request({
357 url: `ztx-match/league/competition/getCptExtraInfo/${cptId}`, 378 url: `/league/competition/getCptExtraInfo/${cptId}`,
358 method: 'get' 379 method: 'get'
359 }) 380 })
360 } 381 }
361 export function recoverMySign(data) { 382 export function recoverMySign(data) {
362 return request({ 383 return request({
363 url: `ztx-match/league/sign/recoverMySign`, 384 url: `/league/sign/recoverMySign`,
364 method: 'post', 385 method: 'post',
365 data: data 386 data: data
366 }) 387 })
...@@ -368,21 +389,21 @@ export function recoverMySign(data) { ...@@ -368,21 +389,21 @@ export function recoverMySign(data) {
368 // 生成订单 389 // 生成订单
369 export function commitSign(data) { 390 export function commitSign(data) {
370 return request({ 391 return request({
371 url: `ztx-match/league/sign/commitSign`, 392 url: `/league/sign/commitSign`,
372 method: 'post', 393 method: 'post',
373 data: data 394 data: data
374 }) 395 })
375 } 396 }
376 export function getTotalFee(data) { 397 export function getTotalFee(data) {
377 return request({ 398 return request({
378 url: `ztx-match/league/expenseConfig/getTotalFee`, 399 url: `/league/expenseConfig/getTotalFee`,
379 method: 'post', 400 method: 'post',
380 data: data 401 data: data
381 }) 402 })
382 } 403 }
383 export function getMemberInfoByCptId(cptId) { 404 export function getMemberInfoByCptId(cptId) {
384 return request({ 405 return request({
385 url: `ztx-match/systemj/member/editMemberCode/${cptId}`, 406 url: `/systemj/member/editMemberCode/${cptId}`,
386 method: 'get' 407 method: 'get'
387 }) 408 })
388 } 409 }
...@@ -395,20 +416,20 @@ export function getTemplate() { ...@@ -395,20 +416,20 @@ export function getTemplate() {
395 // 支付 orderId,payType 416 // 支付 orderId,payType
396 export function payMatch(data) { 417 export function payMatch(data) {
397 return request({ 418 return request({
398 url: `ztx-match/league/signOrder/payForOrderFromPc`, 419 url: `/league/signOrder/payForOrderFromPc`,
399 method: 'post', 420 method: 'post',
400 data: data 421 data: data
401 }) 422 })
402 } 423 }
403 export function cancelMyUnPayedOrder(orderId) { 424 export function cancelMyUnPayedOrder(orderId) {
404 return request({ 425 return request({
405 url: `ztx-match/league/signOrder/cancelMyUnPayedOrder/${orderId}`, 426 url: `/league/signOrder/cancelMyUnPayedOrder/${orderId}`,
406 method: 'post' 427 method: 'post'
407 }) 428 })
408 } 429 }
409 export function getMySignListFromBaoXiang(data) { 430 export function getMySignListFromBaoXiang(data) {
410 return request({ 431 return request({
411 url: `ztx-match/league/sign/getMySignListFromBaoXiang`, 432 url: `/league/sign/getMySignListFromBaoXiang`,
412 method: 'post', 433 method: 'post',
413 data: data 434 data: data
414 }) 435 })
...@@ -421,27 +442,27 @@ export function deleteMyGroup(groupId) { ...@@ -421,27 +442,27 @@ export function deleteMyGroup(groupId) {
421 } 442 }
422 export function checkPerson(data) { 443 export function checkPerson(data) {
423 return request({ 444 return request({
424 url: `ztx-match/systemj/personInfo/checkPersonInfoExist`, 445 url: `/systemj/personInfo/checkPersonInfoExist`,
425 method: 'post', 446 method: 'post',
426 data: data 447 data: data
427 }) 448 })
428 } 449 }
429 export function getMySignListTree(cptId, personId, teamId) { 450 export function getMySignListTree(cptId, personId, teamId) {
430 return request({ 451 return request({
431 url: `ztx-match/league/competitionProject/getAllInfoFromSelectPerson/${cptId}/${personId}/${teamId || 0}`, 452 url: `/league/competitionProject/getAllInfoFromSelectPerson/${cptId}/${personId}/${teamId || 0}`,
432 method: 'get' 453 method: 'get'
433 }) 454 })
434 } 455 }
435 export function getMySignInfoList(data) { 456 export function getMySignInfoList(data) {
436 return request({ 457 return request({
437 url: `ztx-match/league/sign/getMySignInfoList`, 458 url: `/league/sign/getMySignInfoList`,
438 method: 'post', 459 method: 'post',
439 data: data 460 data: data
440 }) 461 })
441 } 462 }
442 export function saveMyGroupExtraInfo(data) { 463 export function saveMyGroupExtraInfo(data) {
443 return request({ 464 return request({
444 url: `ztx-match/league/competitionGroupInfo/saveMyGroupExtraInfo`, 465 url: `/league/competitionGroupInfo/saveMyGroupExtraInfo`,
445 method: 'post', 466 method: 'post',
446 data: data 467 data: data
447 }) 468 })
...@@ -454,19 +475,19 @@ export function saveMyGroupExtraInfo(data) { ...@@ -454,19 +475,19 @@ export function saveMyGroupExtraInfo(data) {
454 } 475 }
455 export function getMySignIds(cptId, personId, teamId) { 476 export function getMySignIds(cptId, personId, teamId) {
456 return request({ 477 return request({
457 url: `ztx-match/league/sign/getSignEntityByPersonId/${cptId}/${personId}/${teamId || 0}`, 478 url: `/league/sign/getSignEntityByPersonId/${cptId}/${personId}/${teamId || 0}`,
458 method: 'get' 479 method: 'get'
459 }) 480 })
460 } 481 }
461 export function querySonLevel(parentId) { 482 export function querySonLevel(parentId) {
462 return request({ 483 return request({
463 url: `ztx-match/league/competitionSonLevel/querySonLevelByParentId/${parentId}`, 484 url: `/league/competitionSonLevel/querySonLevelByParentId/${parentId}`,
464 method: 'get' 485 method: 'get'
465 }) 486 })
466 } 487 }
467 export function getPayedOrderPdf(cptId, groupId) { 488 export function getPayedOrderPdf(cptId, groupId) {
468 return request({ 489 return request({
469 url: `ztx-match/pdf/getPayedOrderPdf/${cptId}/${groupId}`, 490 url: `/pdf/getPayedOrderPdf/${cptId}/${groupId}`,
470 method: 'get' 491 method: 'get'
471 }) 492 })
472 } 493 }
......
No preview for this file type
No preview for this file type
No preview for this file type

22.8 KB | W: | H:

20.5 KB | W: | H:

src/assets/img/order_no.png
src/assets/img/order_no.png
src/assets/img/order_no.png
src/assets/img/order_no.png
  • 2-up
  • Swipe
  • Onion skin
...@@ -74,7 +74,7 @@ div:focus { ...@@ -74,7 +74,7 @@ div:focus {
74 .pl-5 { 74 .pl-5 {
75 padding-left: 5px; 75 padding-left: 5px;
76 } 76 }
77 77 .mr5{margin-right: 5px;}
78 .block { 78 .block {
79 display: block; 79 display: block;
80 } 80 }
...@@ -123,7 +123,7 @@ aside { ...@@ -123,7 +123,7 @@ aside {
123 123
124 //main-container全局样式 124 //main-container全局样式
125 .app-container { 125 .app-container {
126 padding: 20px; 126 padding: 20px 0 0;
127 } 127 }
128 128
129 .components-container { 129 .components-container {
...@@ -138,7 +138,7 @@ aside { ...@@ -138,7 +138,7 @@ aside {
138 .text-center { 138 .text-center {
139 text-align: center 139 text-align: center
140 } 140 }
141 141 .h20{height: 20px;}
142 .sub-navbar { 142 .sub-navbar {
143 height: 50px; 143 height: 50px;
144 line-height: 50px; 144 line-height: 50px;
...@@ -186,9 +186,13 @@ aside { ...@@ -186,9 +186,13 @@ aside {
186 .primary-kx:hover{} 186 .primary-kx:hover{}
187 .border-info{background: rgba(69,61,234,0.04); 187 .border-info{background: rgba(69,61,234,0.04);
188 border: 1px solid #D3D1F6; 188 border: 1px solid #D3D1F6;
189 border-radius: 5px;padding: 20px;margin-bottom: 20px; 189 border-radius: 5px;padding: 10px;margin-bottom: 20px;
190 &.inline{display: inline-block;border-radius: 50px;padding: 10px 20px; 190 &.inline{display: inline-block;border-radius: 50px;padding: 10px 20px;
191 margin: 0 40% 20px;min-width: 200px;} 191 margin: 0 40% 20px;min-width: 200px;}
192 &.gray{background: #FAFBFD;
193 border: 1px solid #EEEFF0;}
194 label{margin-right: 10px;}
195 .item{margin: 10px}
192 } 196 }
193 .el-step__title.is-success{ 197 .el-step__title.is-success{
194 color: var(--el-color-primary)!important; 198 color: var(--el-color-primary)!important;
...@@ -198,6 +202,7 @@ aside { ...@@ -198,6 +202,7 @@ aside {
198 background: linear-gradient(90deg, #8623FC, #453DEA);} 202 background: linear-gradient(90deg, #8623FC, #453DEA);}
199 } 203 }
200 .el-step__line{border-top:1px dashed #D1D6D8;background: transparent!important; 204 .el-step__line{border-top:1px dashed #D1D6D8;background: transparent!important;
205 .el-step__line-inner{border-width: 0!important;}
201 } 206 }
202 .el-step__head.is-process{border-top: var(--el-color-primary); 207 .el-step__head.is-process{border-top: var(--el-color-primary);
203 .el-step__icon{color: #fff;border: none; 208 .el-step__icon{color: #fff;border: none;
...@@ -250,3 +255,75 @@ aside { ...@@ -250,3 +255,75 @@ aside {
250 h4{font-size: 18px;margin-top: -10px;} 255 h4{font-size: 18px;margin-top: -10px;}
251 &:hover{box-shadow:var(--el-box-shadow-dark);} 256 &:hover{box-shadow:var(--el-box-shadow-dark);}
252 } 257 }
258 .fieldset-form{ border: groove #eee 1px;
259 legend{
260 font-weight: 600;
261 color: #4C5359;
262 font-size: 14px;}
263 }
264
265 .el-button--primary.is-link, .el-button--primary.is-plain, .el-button--primary.is-text{
266 --el-button-border-color:var(--el-color-primary)!important;
267 --el-button-bg-color:#fff!important;
268 }
269 @media (max-width: 500px) {
270 .footAll{display: none;}
271 .app-container{padding: 0;overflow: auto;
272 min-height: auto;}
273 .rightPart{width: calc(100vw - 100px);left: 100px;position: fixed;
274 border: none!important;
275
276 height: calc(100vh - 80px);overflow: auto;top: 80px;
277 .indexTitle{display: none;}
278 .pd20{padding: 8px;}
279 .pt30{padding: 8px;}
280 .d-form-border{border: none}
281 .el-card{box-shadow: none!important; border: none!important;}
282 .fieldset-form{
283 .el-form-item{flex-direction: column;}
284 }
285 .el-form-item__label{width: auto!important;justify-content:flex-start}
286 }
287 }
288 .chooseForm {
289 .el-checkbox-group{
290 display: flex;
291 flex-wrap: wrap;
292 }
293 :deep(.el-form-item__content) {
294 background: rgba(245, 247, 249, 0.38);
295 padding: 20px 40px 10px;
296 }
297
298 .el-checkbox {
299 height: auto;position: relative;
300 }
301
302 :deep(.el-checkbox__input) {
303 position: absolute;
304 right: 0;
305 top: 0;
306 }
307
308 .name {
309 text-align: center;
310 }
311 }
312 .addBttn {margin-right: 20px;
313 width: 60px;
314 color: #7B7F83;
315 font-size: 20px;
316 height: 60px;
317 display: flex;
318 align-items: center;
319 justify-content: center;
320 background: #FFFFFF;
321 border: 1px dashed #95A1A6;
322 border-radius: 50%;
323
324 &:hover {
325 cursor: pointer;
326 color: var(--el-color-primary);
327 border-color: var(--el-color-primary);
328 }
329 }
......
...@@ -1006,16 +1006,22 @@ img{display: block;} ...@@ -1006,16 +1006,22 @@ img{display: block;}
1006 1006
1007 //赛事 1007 //赛事
1008 .ph-30{padding-top: 30px;padding-bottom: 30px;} 1008 .ph-30{padding-top: 30px;padding-bottom: 30px;}
1009 .panel{border-radius: 10px;background: #FFFFFF; 1009 .panel{border-radius: 0;background: #FFFFFF;padding: 1px 0 0;
1010 .panel-header{background: #FBFCFD;line-height: 50px;height: 50px;} 1010 .panel-header{line-height: 50px;height: 50px;border-bottom: 1px solid #EEEEEE;
1011 .panel-title{text-align: center;font-size: 18px;line-height: 50px;margin: 0;} 1011 padding: 0 20px;position: relative;
1012 .fr{position: absolute;right: 20px;top: 0px;font-size: 14px;color: #666;
1013 text-decoration: underline;}
1014 }
1015 .panel-title{font-size: 16px;line-height: 50px;margin: 0;
1016 color: var(--el-color-primary)}
1012 .panel-body{padding: 20px;} 1017 .panel-body{padding: 20px;}
1018 &.border{border: 1px solid #EEEEEE;}
1019 }
1013 .panel-footer{border-top: 1px solid #e1e1e1;height: 80px; 1020 .panel-footer{border-top: 1px solid #e1e1e1;height: 80px;
1014 display: flex; 1021 display: flex;
1015 justify-content: center; 1022 justify-content: center;
1016 align-items: center; 1023 align-items: center;
1017 } 1024 }
1018 }
1019 .panel-footer .el-button--danger{background: var(--el-color-primary);border: none; 1025 .panel-footer .el-button--danger{background: var(--el-color-primary);border: none;
1020 padding: 0 40px; 1026 padding: 0 40px;
1021 font-size: 16px; 1027 font-size: 16px;
...@@ -1394,3 +1400,10 @@ img{display: block;} ...@@ -1394,3 +1400,10 @@ img{display: block;}
1394 p{text-align: left;word-break: break-all;} 1400 p{text-align: left;word-break: break-all;}
1395 } 1401 }
1396 } 1402 }
1403 .chooseForm{
1404 :deep(.el-form-item__content){background: rgba(245, 247, 249, 0.38);
1405 padding: 20px 40px 10px;}
1406 .el-checkbox{height: auto;}
1407 :deep(.el-checkbox__input){position: absolute;right: 0;top: 0;}
1408 .name{text-align: center;}
1409 }
......
1 <template>
2 <div class="upload-file">
3 <el-upload
4 ref="fileUpload"
5 multiple
6 :action="uploadFileUrl"
7 :before-upload="handleBeforeUpload"
8 :file-list="fileList"
9 :limit="limit"
10 :on-error="handleUploadError"
11 :on-exceed="handleExceed"
12 :on-success="handleUploadSuccess"
13 :show-file-list="false"
14 :headers="headers"
15 class="upload-file-uploader"
16 :name="name"
17 :accept="accept"
18 >
19 <!-- 上传按钮 -->
20 <el-button type="primary">选取文件</el-button>
21 </el-upload>
22 <!-- 上传提示 -->
23 <div v-if="showTip" class="el-upload__tip">
24 请上传
25 <template v-if="fileSize">
26 大小不超过 <b style="color: #f56c6c">{{ fileSize }}MB</b>
27 </template>
28 <template v-if="fileType">
29 格式为 <b style="color: #f56c6c">{{ fileType.join("/") }}</b>
30 </template>
31 的文件
32 </div>
33 <!-- 文件列表 -->
34 <transition-group
35 class="upload-file-list el-upload-list el-upload-list--text"
36 name="el-fade-in-linear"
37 tag="ul"
38 >
39 <li
40 v-for="(file, index) in fileList"
41 :key="file.uid"
42 class="el-upload-list__item ele-upload-list__item-content"
43 >
44 <el-link
45 :href="`${file.url}`"
46 :underline="false"
47 target="_blank"
48 @click="downFN(file.url)"
49 >
50 <span class="el-icon-document"> {{ getFileName(file.name) }} </span>
51 </el-link>
52 <div class="ele-upload-list__item-content-action">
53 <el-link :underline="false" type="danger" @click="handleDelete(index)">删除</el-link>
54 </div>
55 </li>
56 </transition-group>
57 </div>
58 </template>
59
60 <script setup>
61 import { getToken } from '@/utils/auth'
62 import _ from 'lodash'
63 import { computed } from 'vue'
64
65 const props = defineProps({
66 modelValue: [String, Object, Array],
67 // 数量限制
68 limit: {
69 type: Number,
70 default: 5
71 },
72 // 大小限制(MB)
73 fileSize: {
74 type: Number,
75 default: 120
76 },
77 // 文件类型, 例如['png', 'jpg', 'jpeg']
78 fileType: {
79 type: Array,
80 default: () => ['xlsx']
81 },
82 // 是否显示提示
83 isShowTip: {
84 type: Boolean,
85 default: true
86 },
87 name: {
88 type: String,
89 default: 'file'
90 },
91 action: {
92 type: String,
93 default: '/upload/uploadFile'
94 }
95 })
96 const accept = computed(() => {
97 return _.map(props.fileType, (t) => {
98 if (t.indexOf('.') === 0) {
99 return t
100 } else {
101 return '.' + t
102 }
103 }).join(',')
104 })
105
106 const { proxy } = getCurrentInstance()
107 const emit = defineEmits(['update:modelValue', 'uploadSuccess'])
108 const number = ref(0)
109 const fileOriginalName = ref('')
110 const uploadList = ref([])
111 // const baseUrl = import.meta.env.VITE_APP_BASE_API;
112 const uploadFileUrl = ref(import.meta.env.VITE_APP_BASE_API + props.action) // 上传文件服务器地址
113 const headers = ref({ Authorization: 'Bearer ' + getToken() })
114 const fileList = ref([])
115 const showTip = computed(
116 () => props.isShowTip && (props.fileType || props.fileSize)
117 )
118
119 watch(
120 () => props.modelValue,
121 (val) => {
122 if (val) {
123 let temp = 1
124 // 首先将值转为数组
125 const list = Array.isArray(val) ? val : (_.isObject(props.modelValue) ? [props.modelValue] : props.modelValue.split(','))
126 console.log(list)
127
128 // 然后将数组转为对象数组
129 fileList.value = list.map((item) => {
130 if (typeof item === 'string') {
131 item = { name: item, url: item }
132 }
133 item.uid = item.uid || new Date().getTime() + temp++
134 return item
135 })
136 } else {
137 fileList.value = []
138 return []
139 }
140 },
141 { deep: true, immediate: true }
142 )
143
144 // 上传前校检格式和大小
145 function handleBeforeUpload(file) {
146 // 校检文件类型
147 if (props.fileType.length) {
148 let fileExtension = ''
149 if (file.name.lastIndexOf('.') > -1) {
150 fileExtension = file.name.slice(file.name.lastIndexOf('.') + 1)
151 }
152 const isTypeOk = props.fileType.some((type) => {
153 if (file.type.indexOf(type) > -1) return true
154 if (fileExtension && fileExtension.indexOf(type) > -1) return true
155 return false
156 })
157 if (!isTypeOk) {
158 proxy.$modal.msgError(
159 `文件格式不正确, 请上传${props.fileType.join('/')}格式文件!`
160 )
161 return false
162 }
163 }
164 // 校检文件大小
165 if (props.fileSize) {
166 const isLt = file.size / 1024 / 1024 < props.fileSize
167 if (!isLt) {
168 proxy.$modal.msgError(`上传文件大小不能超过 ${props.fileSize} MB!`)
169 return false
170 }
171 }
172 proxy.$modal.loading('正在上传文件,请稍候...')
173 number.value++
174 return true
175 }
176
177 // 文件个数超出
178 function handleExceed() {
179 proxy.$modal.msgError(`上传文件数量不能超过 ${props.limit} 个!`)
180 }
181
182 // 上传失败
183 function handleUploadError(err) {
184 proxy.$modal.msgError('上传文件失败')
185 proxy.$modal.closeLoading()
186 }
187
188 // 上传成功回调
189 function handleUploadSuccess(res, file) {
190 console.log(file)
191 fileOriginalName.value = file.name
192 if (res.code === 200) {
193 if (res.data) {
194 uploadList.value.push({ name: file.name, url: res.data.fileUrl })
195 uploadedSuccessfully()
196 } else {
197 proxy.$modal.closeLoading()
198 }
199 } else {
200 number.value--
201 proxy.$modal.closeLoading()
202 proxy.$modal.msgError(res.msg)
203 proxy.$refs.fileUpload.handleRemove(file)
204 uploadedSuccessfully()
205 }
206
207 emit('uploadSuccess', res)
208 }
209
210 // 删除文件
211 function handleDelete(index) {
212 fileList.value.splice(index, 1)
213 emit('update:modelValue', listToString(fileList.value))
214 }
215
216 function handleClear() {
217 fileList.value = []
218 emit('update:modelValue', listToString(fileList.value))
219 }
220
221 // 上传结束处理
222 function uploadedSuccessfully() {
223 if (number.value > 0 && uploadList.value.length === number.value) {
224 fileList.value = fileList.value
225 .filter((f) => f.url !== undefined)
226 .concat(uploadList.value)
227 uploadList.value = []
228 number.value = 0
229 emit('update:modelValue', listToString(fileList.value))
230 proxy.$modal.closeLoading()
231 }
232 }
233
234 // 获取文件名称
235 function getFileName(name) {
236 try {
237 if (name.lastIndexOf('/') > -1) {
238 return name.slice(name.lastIndexOf('/') + 1)
239 } else {
240 return name
241 }
242 } catch (ex) {
243 return ''
244 }
245 }
246
247 // 对象转成指定字符串分隔
248 function listToString(list, separator) {
249 // let strs = "";
250 // separator = separator || ",";
251 // for (const i in list) {
252 // if (list[i].url) {
253 // strs += list[i].url + separator;
254 // }
255 // }
256 // return strs != "" ? strs.substr(0, strs.length - 1) : "";
257
258 return fileList.value
259 }
260
261 // 文件下载
262 function downFN(row) {
263 console.log(row)
264 }
265
266 defineExpose({
267 handleClear
268 })
269 </script>
270
271 <style scoped lang="scss">
272 .upload-file-uploader {
273 margin-bottom: 5px;
274 }
275 .upload-file-list .el-upload-list__item {
276 border: 1px solid #e4e7ed;
277 line-height: 2;
278 margin-bottom: 10px;
279 position: relative;
280 }
281 .upload-file-list .ele-upload-list__item-content {
282 display: flex;
283 justify-content: space-between;
284 align-items: center;
285 color: inherit;
286 }
287 .ele-upload-list__item-content-action .el-link {
288 margin-right: 10px;
289 }
290 </style>
...@@ -73,12 +73,13 @@ function handleCurrentChange(val) { ...@@ -73,12 +73,13 @@ function handleCurrentChange(val) {
73 73
74 </script> 74 </script>
75 75
76 <style scoped> 76 <style scoped lang="scss">
77 .pagination-container { 77 .pagination-container1 {
78 background: #fff; 78 background: #fff;
79 padding: 32px 16px; 79 padding: 8px 16px;
80 .el-pagination{justify-content: end;}
80 } 81 }
81 .pagination-container.hidden { 82 .pagination-container1.hidden {
82 display: none; 83 display: none;
83 } 84 }
84 </style> 85 </style>
......
...@@ -35,6 +35,7 @@ import RightToolbar from '@/components/RightToolbar' ...@@ -35,6 +35,7 @@ import RightToolbar from '@/components/RightToolbar'
35 import Editor from '@/components/Editor' 35 import Editor from '@/components/Editor'
36 // 文件上传组件 36 // 文件上传组件
37 import FileUpload from '@/components/FileUpload' 37 import FileUpload from '@/components/FileUpload'
38 import FileImport from '@/components/FileImport'
38 // 图片上传组件 39 // 图片上传组件
39 import ImageUpload from '@/components/ImageUpload' 40 import ImageUpload from '@/components/ImageUpload'
40 import ImageUpload2 from '@/components/ImageUpload/index2' 41 import ImageUpload2 from '@/components/ImageUpload/index2'
...@@ -87,6 +88,7 @@ app.component('DictTag', DictTag) ...@@ -87,6 +88,7 @@ app.component('DictTag', DictTag)
87 app.component('PaginationPc', PaginationPc) 88 app.component('PaginationPc', PaginationPc)
88 app.component('TreeSelect', TreeSelect) 89 app.component('TreeSelect', TreeSelect)
89 app.component('FileUpload', FileUpload) 90 app.component('FileUpload', FileUpload)
91 app.component('FileImport', FileImport)
90 app.component('ImageUpload', ImageUpload) 92 app.component('ImageUpload', ImageUpload)
91 app.component('ImageUpload2', ImageUpload2) 93 app.component('ImageUpload2', ImageUpload2)
92 app.component('ImagePreview', ImagePreview) 94 app.component('ImagePreview', ImagePreview)
......
...@@ -401,6 +401,12 @@ export const constantRoutes = [ ...@@ -401,6 +401,12 @@ export const constantRoutes = [
401 redirect: '/match/list', 401 redirect: '/match/list',
402 children: [ 402 children: [
403 { 403 {
404 path: 'pay',
405 component: () => import('@/viewsPc/match/pay'),
406 name: 'signPay',
407 meta: { title: '缴费清单' }
408 },
409 {
404 path: 'list', 410 path: 'list',
405 component: () => import('@/viewsPc/match/index'), 411 component: () => import('@/viewsPc/match/index'),
406 name: 'matchList', 412 name: 'matchList',
...@@ -447,6 +453,12 @@ export const constantRoutes = [ ...@@ -447,6 +453,12 @@ export const constantRoutes = [
447 component: () => import('@/viewsPc/match/expenseDetails'), 453 component: () => import('@/viewsPc/match/expenseDetails'),
448 name: 'expenseDetails', 454 name: 'expenseDetails',
449 meta: { title: '费用明细' } 455 meta: { title: '费用明细' }
456 },
457 {
458 path: 'list/:id/signPreview',
459 component: () => import('@/viewsPc/match/signPreview'),
460 name: 'signPreview',
461 meta: { title: '提交审核' }
450 } 462 }
451 ] 463 ]
452 }, 464 },
...@@ -498,16 +510,22 @@ export const constantRoutes = [ ...@@ -498,16 +510,22 @@ export const constantRoutes = [
498 meta: { title: '团队认证' } 510 meta: { title: '团队认证' }
499 }, 511 },
500 { 512 {
513 path: 'myMember',
514 component: () => import('@/viewsPc/center/myMember'),
515 name: 'myMember',
516 meta: { title: '选手管理' }
517 },
518 {
501 path: 'myMatch', 519 path: 'myMatch',
502 component: () => import('@/viewsPc/center/myMatch'), 520 component: () => import('@/viewsPc/center/myMatch'),
503 name: 'myMatch', 521 name: 'myMatch',
504 meta: { title: '我的赛事' } 522 meta: { title: '我的报名' }
505 }, 523 },
506 { 524 {
507 path: 'myTrain', 525 path: 'myTrain',
508 component: () => import('@/viewsPc/center/myTrain'), 526 component: () => import('@/viewsPc/center/myTrain'),
509 name: 'myTrain', 527 name: 'myTrain',
510 meta: { title: '我的培训' } 528 meta: { title: '我的预定' }
511 } 529 }
512 ] 530 ]
513 } 531 }
......
...@@ -14,6 +14,7 @@ const useUserStore = defineStore( ...@@ -14,6 +14,7 @@ const useUserStore = defineStore(
14 state: () => ({ 14 state: () => ({
15 token: getToken(), 15 token: getToken(),
16 user: null, 16 user: null,
17 group: {},
17 name: '', 18 name: '',
18 nickName: '', 19 nickName: '',
19 avatar: '', 20 avatar: '',
...@@ -91,6 +92,7 @@ const useUserStore = defineStore( ...@@ -91,6 +92,7 @@ const useUserStore = defineStore(
91 this.roles = ['ROLE_DEFAULT'] 92 this.roles = ['ROLE_DEFAULT']
92 } 93 }
93 this.user = user 94 this.user = user
95 this.group = res.data.group
94 this.name = user.userName 96 this.name = user.userName
95 this.nickName = user.nickName 97 this.nickName = user.nickName
96 this.deptType = user.dept.deptType 98 this.deptType = user.dept.deptType
......
...@@ -144,7 +144,7 @@ service.interceptors.response.use( ...@@ -144,7 +144,7 @@ service.interceptors.response.use(
144 '登录状态已过期,您可以继续留在该页面,或者重新登录', 144 '登录状态已过期,您可以继续留在该页面,或者重新登录',
145 '系统提示', 145 '系统提示',
146 { 146 {
147 confirmButtonText: '重新登录', 147 confirmButtonText: '好的',
148 cancelButtonText: '取消', 148 cancelButtonText: '取消',
149 type: 'warning' 149 type: 'warning'
150 } 150 }
......
1 <template>
2 <el-dialog v-model="show" :title="title" width="500px" class="pcloginpop"
3 append-to-body :close-on-click-modal="false">
4 <el-form ref="dialogRef" label-width="100px">
5 <el-form-item label="下载模板">
6 <el-link href="/file/sportsmanTemplate.xlsx" type="primary" target="_blank">人员模板</el-link>
7 </el-form-item>
8
9 <el-form-item label="上传模板" prop="discount">
10 <fileUpload ref="upload" name="excel" :action="action" :accept="accept" @uploadSuccess="uploadSuccess"/>
11 </el-form-item>
12 </el-form>
13
14
15 </el-dialog>
16 </template>
17
18 <script setup>
19 import { getCurrentInstance } from '@vue/runtime-core'
20 import { reactive, ref, watch } from 'vue'
21 import { toRefs } from '@vueuse/shared'
22 import * as match from '@/api/match/pc'
23 import { ElMessage, ElMessageBox } from 'element-plus'
24
25 const { proxy } = getCurrentInstance()
26
27 const emit = defineEmits(['submitForm'])
28
29 const action = ref('')
30 const accept = ref('.xlsx')
31 const title = ref('')
32 const show = ref(false)
33
34 function uploadSuccess(res) {
35 console.log(res)
36 cancel()
37 if (res.code == 500) {
38 ElMessageBox.alert(res.data, '提示', {
39 confirmButtonText: '好的'
40 })
41 } else {
42 proxy.$modal.msgSuccess(`${res.msg}`)
43 }
44
45 emit('uploadSuccess')
46 proxy.$refs['upload'].handleClear()
47 }
48
49 const open = (params) => {
50 show.value = true
51 title.value = params.title
52 action.value = `/systemj/personInfo/importPerson/${params.groupId}`
53 }
54 defineExpose({
55 open
56 })
57
58 function cancel() {
59 show.value = false
60 }
61 </script>
62
63 <style scoped>
64 :deep(.el-upload__tip) {
65 display: none
66 }
67 </style>
...@@ -2,8 +2,8 @@ ...@@ -2,8 +2,8 @@
2 <div class="app-container"> 2 <div class="app-container">
3 <div class="box"> 3 <div class="box">
4 <el-row :gutter="20"> 4 <el-row :gutter="20">
5 <el-col :span="6"> 5 <el-col :lg="5" :md="5" :xl="6" :sm="8" :xs="8">
6 <el-card> 6 <el-card class="mb20">
7 <div class="center-menu"> 7 <div class="center-menu">
8 <ul v-if="user.utype=='2'"> 8 <ul v-if="user.utype=='2'">
9 <li 9 <li
...@@ -31,10 +31,9 @@ ...@@ -31,10 +31,9 @@
31 </ul> 31 </ul>
32 </div> 32 </div>
33 </el-card> 33 </el-card>
34
35 </el-col> 34 </el-col>
36 <el-col :span="18"> 35 <el-col :lg="19" :md="19" :xl="18" :sm="16" :xs="16">
37 <router-view :user="user"/> 36 <router-view :user="user" class="rightPart"/>
38 </el-col> 37 </el-col>
39 </el-row> 38 </el-row>
40 </div> 39 </div>
...@@ -64,7 +63,7 @@ const menus = ref([ ...@@ -64,7 +63,7 @@ const menus = ref([
64 name: '修改密码', 63 name: '修改密码',
65 routeName: 'myPassword', 64 routeName: 'myPassword',
66 picUrl1: '/img/nav_27.png', 65 picUrl1: '/img/nav_27.png',
67 picUrl2: '/img/nav_27.png', 66 picUrl2: '/img/nav_27_dwn.png',
68 isActive: false 67 isActive: false
69 }, 68 },
70 { 69 {
...@@ -76,7 +75,7 @@ const menus = ref([ ...@@ -76,7 +75,7 @@ const menus = ref([
76 }, 75 },
77 { 76 {
78 name: '选手管理', 77 name: '选手管理',
79 routeName: 'myMatch', 78 routeName: 'myMember',
80 picUrl1: '/img/nav_31.png', 79 picUrl1: '/img/nav_31.png',
81 picUrl2: '/img/nav_31_dwn.png', 80 picUrl2: '/img/nav_31_dwn.png',
82 isActive: false 81 isActive: false
...@@ -115,7 +114,7 @@ const menusPersonal = ref([ ...@@ -115,7 +114,7 @@ const menusPersonal = ref([
115 name: '修改密码', 114 name: '修改密码',
116 routeName: 'myPassword', 115 routeName: 'myPassword',
117 picUrl1: '/img/nav_27.png', 116 picUrl1: '/img/nav_27.png',
118 picUrl2: '/img/nav_27.png', 117 picUrl2: '/img/nav_27_dwn.png',
119 isActive: false 118 isActive: false
120 }, 119 },
121 { 120 {
...@@ -165,14 +164,6 @@ const toInfo = (item) => { ...@@ -165,14 +164,6 @@ const toInfo = (item) => {
165 </script> 164 </script>
166 165
167 <style scoped lang="scss"> 166 <style scoped lang="scss">
168 .app-container {
169 background: #f5f7f9;
170 }
171
172 .grid-content {
173 background: #fff;
174 }
175
176 :deep(.el-tabs__nav-wrap) { 167 :deep(.el-tabs__nav-wrap) {
177 padding: 0 15px; 168 padding: 0 15px;
178 } 169 }
...@@ -197,4 +188,23 @@ li img { ...@@ -197,4 +188,23 @@ li img {
197 background: linear-gradient(90deg, #8623FC, #453DEA); 188 background: linear-gradient(90deg, #8623FC, #453DEA);
198 border-radius: 20px; 189 border-radius: 20px;
199 } 190 }
191 @media (max-width: 500px) {
192 .pd20{padding: 8px;}
193 .el-card{box-shadow: none!important;
194 :deep(.el-card__body){padding: 0!important;}
195 }
196 .el-col{padding: 0!important;}
197 .center-menu{height: 100vh;padding: 20px 0;position: fixed;left: 0;
198 background: #F5F7F9;top: 80px;width: 100px;border-right: 1px solid #eee;
199 li{font-size: 13px;padding:8px 10px;border-radius: 0;
200 img{display: none}
201 &.active{background: #fff;
202 border-left: 2px solid var(--el-color-primary);
203 color: var(--el-color-primary);}
204 }
205 }
206 .rightPart{width: calc(100vw - 100px);left: 100px;position: fixed;
207 height: calc(100vh - 80px);overflow: auto;top: 80px;
208 }
209 }
200 </style> 210 </style>
......
1 <template> 1 <template>
2 <el-card :body-style="{'padding':'0'}"> 2 <el-card :body-style="{'padding':'0'}">
3 <div class="indexTitle"><h3 class="leftboderTT">团队认证</h3></div> 3 <div class="indexTitle"><h3 class="leftboderTT">团队认证</h3></div>
4
5 <div class="pd20">
6 <el-form :model="form" label-width="160px">
7 <fieldset class="fieldset-form">
8 <legend>机构类型</legend>
9 <div class="pt30">
10 <el-form-item label="选择机构类型" required>
11 <el-radio-group v-model="form.type">
12 <el-radio-button label="0">普通院校</el-radio-button>
13 <el-radio-button label="1">专业舞蹈学校</el-radio-button>
14 <el-radio-button label="2">培训机构/俱乐部</el-radio-button>
15 <el-radio-button label="3">地方协会</el-radio-button>
16 <el-radio-button label="4">国家协会</el-radio-button>
17 </el-radio-group>
18 </el-form-item>
19 </div>
20 </fieldset>
21 <fieldset class="fieldset-form mt30">
22 <legend>机构基础信息 </legend>
23 <div class="pt30" style="max-width: 500px">
24 <el-form-item label="所属国家" required>
25 <el-select filterable v-model="form.countryId">
26 <el-option v-for="item in countryList" :key="item.id" :label="item.name" :value="item.id" />
27 </el-select>
28 </el-form-item>
29 <el-form-item label="详细地址" required prop="address">
30 <el-cascader v-if="form.countryId == 240"
31 v-model="form.regionId"
32 style="width: 100%;"
33 :options="regionsList"
34 :props="{ label:'text' }"
35 />
36 <el-input type="textarea" v-model="form.address" class="mt10" placeholder="请输入详细地址"/>
37 </el-form-item>
38 <el-form-item label="机构名称" required prop="name">
39 <el-input type="text" v-model="form.name" placeholder="请输入内容"/>
40 </el-form-item>
41 <el-form-item label="联系人姓名" required prop="contactPerson">
42 <el-input type="text" v-model="form.contactPerson" placeholder="请输入内容"/>
43 </el-form-item>
44 <el-form-item label="联系人电话" required prop="contactTelno">
45 <el-input v-model="form.contactTelno" type="phone" placeholder="请输入内容"/>
46 </el-form-item>
47 <el-form-item label="联系人邮箱" required prop="contactEmail">
48 <el-input v-model="form.contactEmail" type="email" placeholder="请输入内容"/>
49 </el-form-item>
50
51 </div>
52 </fieldset>
53 <fieldset class="fieldset-form mt30">
54 <legend>机构认证信息 </legend>
55 <div class="pt30" style="max-width: 500px">
56 <el-form-item label="机构代码" required prop="orgCode">
57 <el-input type="text" v-model="form.orgCode" placeholder="请输入内容"/>
58 </el-form-item>
59 <el-form-item label="机构证件" required prop="orgCert">
60 <file-upload v-model="form.orgCert"/>
61 </el-form-item>
62
63 </div>
64 </fieldset>
65 <fieldset class="fieldset-form mt30">
66 <legend>机构法人信息 </legend>
67 <div class="pt30" style="max-width: 500px">
68 <el-form-item label="法人姓名" required prop="orgCode">
69 <el-input type="text" v-model="form.orgCode" placeholder="请输入内容"/>
70 </el-form-item>
71 <el-form-item label="法定代表人身份文件" required prop="orgCert">
72 <file-upload v-model="form.orgCert"/>
73 </el-form-item>
74
75 </div>
76 </fieldset>
77
78 </el-form>
79 <div class="text-center mt30">
80 <el-button type="primary" class="btn-lineG w200px" round>提交审核</el-button>
81 </div>
82 </div>
4 </el-card> 83 </el-card>
5 </template> 84 </template>
6 85
7 <script setup> 86 <script setup>
87 import {commitAudit, getGroupInfo} from "@/apiPc/match";
88 import {onMounted} from "@vue/runtime-core";
89 import {ref} from 'vue'
90 import {useRouter} from 'vue-router'
91 import {ElMessage, ElMessageBox} from 'element-plus'
92 import FileUpload from "@/components/FileUpload";
93 import * as match from "@/apiPc/match";
8 94
95 const form = ref({})
96 const regionsList = ref([])
97 function submit() {
98 commitAudit().then(res => {
99
100 })
101 }
102
103 onMounted(() => {
104 getRegionsList()
105 getData()
106 })
107 function getRegionsList() {
108 match.regionsList().then(res => {
109 regionsList.value = res.data
110 })
111 }
112 function getData() {
113 getGroupInfo().then(res => {
114 form.value = res.data
115 })
116 }
9 </script> 117 </script>
10 118
11 <style scoped lang="scss"> 119 <style scoped lang="scss">
12 .indexTitle{margin: 20px 0 12px;padding: 0 20px 15px;border-bottom: 1px solid #e5e5e5; 120 .indexTitle {
13 h3{ 121 margin: 20px 0 12px;
122 padding: 0 20px 15px;
123 border-bottom: 1px solid #e5e5e5;
124
125 h3 {
14 font-size: 16px; 126 font-size: 16px;
15 color:var(--el-color-primary); 127 color: var(--el-color-primary);
128 }
129 }
130
131 fieldset {
132 :deep(.el-radio-button.el-radio-button--default) {
133 margin-right: 8px;
134 border-radius: 5px;
135
136 .el-radio-button__inner {
137 background: rgba(69, 61, 234, 0.1);
138 border-radius: 5px;
139 color: #000000;
140 }
141
142 &.is-active {
143 background: linear-gradient(90deg, #8623FC, #453DEA);
144
145 .el-radio-button__inner {
146 color: #fff;
147 }
148 }
16 } 149 }
17 } 150 }
18 151
......
1 <template> 1 <template>
2 <el-card> 2 <el-card>
3 <div class="grid-content"> 3 <div class="grid-content">
4 <el-tabs v-model="activeName"> 4 <!-- <el-tabs v-model="activeName">-->
5 <el-tab-pane label="报项" name="first"> 5 <!-- <el-tab-pane label="报项" name="first">-->
6 <div class="pad20"> 6 <div class="pad20">
7 <el-form :model="query" :inline="true"> 7 <el-form :model="query" :inline="true">
8 <el-form-item label="赛事名称"> 8 <el-form-item label="赛事名称">
...@@ -67,137 +67,137 @@ ...@@ -67,137 +67,137 @@
67 @pagination="getList" 67 @pagination="getList"
68 /> 68 />
69 </div> 69 </div>
70 </el-tab-pane> 70 <!-- </el-tab-pane>-->
71 <el-tab-pane label="订单" name="two"> 71 <!-- <el-tab-pane label="订单" name="two">-->
72 <div class="pad20"> 72 <!-- <div class="pad20">-->
73 <el-form :model="query2" :inline="true"> 73 <!-- <el-form :model="query2" :inline="true">-->
74 <el-form-item label="订单状态"> 74 <!-- <el-form-item label="订单状态">-->
75 <el-select v-model="query2.payStatus" @change="getBillList"> 75 <!-- <el-select v-model="query2.payStatus" @change="getBillList">-->
76 <el-option value="" label="全部" /> 76 <!-- <el-option value="" label="全部" />-->
77 <el-option value="0" label="待支付" /> 77 <!-- <el-option value="0" label="待支付" />-->
78 <el-option value="3" label="已完成" /> 78 <!-- <el-option value="3" label="已完成" />-->
79 <el-option value="5" label="已退回" /> 79 <!-- <el-option value="5" label="已退回" />-->
80 </el-select> 80 <!-- </el-select>-->
81 </el-form-item> 81 <!-- </el-form-item>-->
82 <el-form-item label="支付方式"> 82 <!-- <el-form-item label="支付方式">-->
83 <el-select v-model="query2.payTypeParam" @change="getBillList"> 83 <!-- <el-select v-model="query2.payTypeParam" @change="getBillList">-->
84 <el-option value="" label="全部">全部</el-option> 84 <!-- <el-option value="" label="全部">全部</el-option>-->
85 <el-option value="0" label="线上支付">线上支付</el-option> 85 <!-- <el-option value="0" label="线上支付">线上支付</el-option>-->
86 <el-option value="1" label="线下支付">线下支付</el-option> 86 <!-- <el-option value="1" label="线下支付">线下支付</el-option>-->
87 <el-option value="2" label="会员卡支付">会员卡支付</el-option> 87 <!-- <el-option value="2" label="会员卡支付">会员卡支付</el-option>-->
88 <el-option value="3" label="微信支付">微信支付</el-option> 88 <!-- <el-option value="3" label="微信支付">微信支付</el-option>-->
89 </el-select> 89 <!-- </el-select>-->
90 </el-form-item> 90 <!-- </el-form-item>-->
91 <el-form-item label="订单号"> 91 <!-- <el-form-item label="订单号">-->
92 <el-input v-model="query2.code" /> 92 <!-- <el-input v-model="query2.code" />-->
93 </el-form-item> 93 <!-- </el-form-item>-->
94 <el-form-item label="订单名称"> 94 <!-- <el-form-item label="订单名称">-->
95 <el-input v-model="query2.cptName" style="width: 214px;" @change="getBillList" /> 95 <!-- <el-input v-model="query2.cptName" style="width: 214px;" @change="getBillList" />-->
96 </el-form-item> 96 <!-- </el-form-item>-->
97 <el-form-item label="付款时间"> 97 <!-- <el-form-item label="付款时间">-->
98 <el-date-picker 98 <!-- <el-date-picker-->
99 v-model="payTimeArr" 99 <!-- v-model="payTimeArr"-->
100 format="YYYY-MM-DD" type="daterange" 100 <!-- format="YYYY-MM-DD" type="daterange"-->
101 value-format="YYYY-MM-DD" range-separator="至" 101 <!-- value-format="YYYY-MM-DD" range-separator="至"-->
102 start-placeholder="开始时间" 102 <!-- start-placeholder="开始时间"-->
103 end-placeholder="结束时间" 103 <!-- end-placeholder="结束时间"-->
104 @change="getBillList" 104 <!-- @change="getBillList"-->
105 /> 105 <!-- />-->
106 </el-form-item> 106 <!-- </el-form-item>-->
107 <el-form-item label="下单时间"> 107 <!-- <el-form-item label="下单时间">-->
108 <el-date-picker 108 <!-- <el-date-picker-->
109 v-model="commitTimeArr" 109 <!-- v-model="commitTimeArr"-->
110 format="YYYY-MM-DD" type="daterange" 110 <!-- format="YYYY-MM-DD" type="daterange"-->
111 value-format="YYYY-MM-DD" range-separator="至" 111 <!-- value-format="YYYY-MM-DD" range-separator="至"-->
112 start-placeholder="开始时间" 112 <!-- start-placeholder="开始时间"-->
113 end-placeholder="结束时间" 113 <!-- end-placeholder="结束时间"-->
114 @change="getBillList" 114 <!-- @change="getBillList"-->
115 /> 115 <!-- />-->
116 </el-form-item> 116 <!-- </el-form-item>-->
117 <el-form-item> 117 <!-- <el-form-item>-->
118 <el-button type="primary" @click="getBillList">查询</el-button> 118 <!-- <el-button type="primary" @click="getBillList">查询</el-button>-->
119 <el-button type="info" @click="reset(query2)">重置</el-button> 119 <!-- <el-button type="info" @click="reset(query2)">重置</el-button>-->
120 </el-form-item> 120 <!-- </el-form-item>-->
121 121
122 </el-form> 122 <!-- </el-form>-->
123 123
124 <el-table v-if="billList.length>0" :data="billList" style="width: 100%"> 124 <!-- <el-table v-if="billList.length>0" :data="billList" style="width: 100%">-->
125 <!-- <el-table-column type="selection" width="80" />--> 125 <!-- &lt;!&ndash; <el-table-column type="selection" width="80" />&ndash;&gt;-->
126 <el-table-column prop="id" label="订单编号" min-width="200" /> 126 <!-- <el-table-column prop="id" label="订单编号" min-width="200" />-->
127 <el-table-column prop="cptName" label="订单名称" min-width="200" /> 127 <!-- <el-table-column prop="cptName" label="订单名称" min-width="200" />-->
128 <el-table-column prop="commitTime" label="下单时间" min-width="180" /> 128 <!-- <el-table-column prop="commitTime" label="下单时间" min-width="180" />-->
129 <el-table-column prop="payTime" label="付款时间" min-width="180" /> 129 <!-- <el-table-column prop="payTime" label="付款时间" min-width="180" />-->
130 <el-table-column label="支付金额" min-width="120" align="center"> 130 <!-- <el-table-column label="支付金额" min-width="120" align="center">-->
131 <template #default="scope"> 131 <!-- <template #default="scope">-->
132 <span v-if="scope.row.needPay=='0'" class="green">免费订单</span> 132 <!-- <span v-if="scope.row.needPay=='0'" class="green">免费订单</span>-->
133 <span v-else>¥{{ scope.row.totalAmount }}</span> 133 <!-- <span v-else>¥{{ scope.row.totalAmount }}</span>-->
134 </template> 134 <!-- </template>-->
135 </el-table-column> 135 <!-- </el-table-column>-->
136 <!-- <el-table-column label="已付金额" min-width="120" align="center">--> 136 <!-- &lt;!&ndash; <el-table-column label="已付金额" min-width="120" align="center">&ndash;&gt;-->
137 <!-- <template #default="scope">--> 137 <!-- &lt;!&ndash; <template #default="scope">&ndash;&gt;-->
138 <!-- <span v-if="scope.row.needPay=='0'" class="green">免费订单</span>--> 138 <!-- &lt;!&ndash; <span v-if="scope.row.needPay=='0'" class="green">免费订单</span>&ndash;&gt;-->
139 <!-- <span v-else-if="scope.row.totalPayAmount" class="orange">¥{{ scope.row.totalPayAmount }}</span>--> 139 <!-- &lt;!&ndash; <span v-else-if="scope.row.totalPayAmount" class="orange">¥{{ scope.row.totalPayAmount }}</span>&ndash;&gt;-->
140 <!-- <span v-else>&#45;&#45;</span>--> 140 <!-- &lt;!&ndash; <span v-else>&#45;&#45;</span>&ndash;&gt;-->
141 <!-- </template>--> 141 <!-- &lt;!&ndash; </template>&ndash;&gt;-->
142 <!-- </el-table-column>--> 142 <!-- &lt;!&ndash; </el-table-column>&ndash;&gt;-->
143 <el-table-column label="付款方式" min-width="120" align="center"> 143 <!-- <el-table-column label="付款方式" min-width="120" align="center">-->
144 <template #default="scope"> 144 <!-- <template #default="scope">-->
145 <span v-if="scope.row.payType=='0'">会员卡支付</span> 145 <!-- <span v-if="scope.row.payType=='0'">会员卡支付</span>-->
146 <span v-else-if="scope.row.payType=='1'">微信支付</span> 146 <!-- <span v-else-if="scope.row.payType=='1'">微信支付</span>-->
147 <span v-else-if="scope.row.payType=='2'">线下支付</span> 147 <!-- <span v-else-if="scope.row.payType=='2'">线下支付</span>-->
148 </template> 148 <!-- </template>-->
149 </el-table-column> 149 <!-- </el-table-column>-->
150 <el-table-column prop="name" label="支付状态" min-width="120" align="center"> 150 <!-- <el-table-column prop="name" label="支付状态" min-width="120" align="center">-->
151 <template #default="scope"> 151 <!-- <template #default="scope">-->
152 <span v-if="scope.row.needPay=='0'" class="green">免费订单</span> 152 <!-- <span v-if="scope.row.needPay=='0'" class="green">免费订单</span>-->
153 <div v-else> 153 <!-- <div v-else>-->
154 <span v-if="scope.row.payStatus=='0'">待支付</span> 154 <!-- <span v-if="scope.row.payStatus=='0'">待支付</span>-->
155 <span v-if="scope.row.payStatus=='1'">待核销</span> 155 <!-- <span v-if="scope.row.payStatus=='1'">待核销</span>-->
156 <span v-if="scope.row.payStatus=='2'">付款中</span> 156 <!-- <span v-if="scope.row.payStatus=='2'">付款中</span>-->
157 <span v-if="scope.row.payStatus=='3'" class="green">已完成</span> 157 <!-- <span v-if="scope.row.payStatus=='3'" class="green">已完成</span>-->
158 <span v-if="scope.row.payStatus=='4'">退款中</span> 158 <!-- <span v-if="scope.row.payStatus=='4'">退款中</span>-->
159 <span v-if="scope.row.payStatus=='5'" class="text-danger">已退回</span> 159 <!-- <span v-if="scope.row.payStatus=='5'" class="text-danger">已退回</span>-->
160 <span v-if="scope.row.payStatus=='6'">退款核销中</span> 160 <!-- <span v-if="scope.row.payStatus=='6'">退款核销中</span>-->
161 </div> 161 <!-- </div>-->
162 </template> 162 <!-- </template>-->
163 </el-table-column> 163 <!-- </el-table-column>-->
164 <el-table-column prop="name" label="审核状态" min-width="120" align="center"> 164 <!-- <el-table-column prop="name" label="审核状态" min-width="120" align="center">-->
165 <template #default="scope"> 165 <!-- <template #default="scope">-->
166 <!-- 待核销,待审核,审核拒绝,审核通过,已取消--> 166 <!-- &lt;!&ndash; 待核销,待审核,审核拒绝,审核通过,已取消&ndash;&gt;-->
167 <span v-if="scope.row.auditStatus=='1'" class="text-warning">审核中</span> 167 <!-- <span v-if="scope.row.auditStatus=='1'" class="text-warning">审核中</span>-->
168 <span v-if="scope.row.auditStatus=='2'" class="green">审核通过</span> 168 <!-- <span v-if="scope.row.auditStatus=='2'" class="green">审核通过</span>-->
169 <span v-if="scope.row.auditStatus=='3'" class="text-danger">审核拒绝</span> 169 <!-- <span v-if="scope.row.auditStatus=='3'" class="text-danger">审核拒绝</span>-->
170 <span v-if="scope.row.auditStatus=='4'">已取消</span> 170 <!-- <span v-if="scope.row.auditStatus=='4'">已取消</span>-->
171 </template> 171 <!-- </template>-->
172 </el-table-column> 172 <!-- </el-table-column>-->
173 <el-table-column label="操作" align="center" fixed="right" class-name="small-padding" width="150"> 173 <!-- <el-table-column label="操作" align="center" fixed="right" class-name="small-padding" width="150">-->
174 <template #default="scope"> 174 <!-- <template #default="scope">-->
175 <el-button type="text" @click="billDetail(scope.row)">详情</el-button> 175 <!-- <el-button type="text" @click="billDetail(scope.row)">详情</el-button>-->
176 <el-button 176 <!-- <el-button-->
177 v-if="scope.row.payType!='2'&&scope.row.payStatus=='0'&&scope.row.auditStatus=='0'" type="text" 177 <!-- v-if="scope.row.payType!='2'&&scope.row.payStatus=='0'&&scope.row.auditStatus=='0'" type="text"-->
178 @click="goPay(scope.row)" 178 <!-- @click="goPay(scope.row)"-->
179 >支付 179 <!-- >支付-->
180 </el-button> 180 <!-- </el-button>-->
181 <el-button 181 <!-- <el-button-->
182 v-if="scope.row.payStatus=='0'&&scope.row.auditStatus=='0'&&scope.row.payType!='2'" type="text" 182 <!-- v-if="scope.row.payStatus=='0'&&scope.row.auditStatus=='0'&&scope.row.payType!='2'" type="text"-->
183 @click="cancelBill(scope.row)" 183 <!-- @click="cancelBill(scope.row)"-->
184 >取消 184 <!-- >取消-->
185 </el-button> 185 <!-- </el-button>-->
186 </template> 186 <!-- </template>-->
187 </el-table-column> 187 <!-- </el-table-column>-->
188 </el-table> 188 <!-- </el-table>-->
189 <el-empty v-if="billList.length==0" description="暂无数据" /> 189 <!-- <el-empty v-if="billList.length==0" description="暂无数据" />-->
190 <pagination 190 <!-- <pagination-->
191 v-show="total > 0" 191 <!-- v-show="total > 0"-->
192 v-model:page="query2.pageNum" 192 <!-- v-model:page="query2.pageNum"-->
193 v-model:limit="query2.pageSize" 193 <!-- v-model:limit="query2.pageSize"-->
194 :total="total2" 194 <!-- :total="total2"-->
195 @pagination="getBillList" 195 <!-- @pagination="getBillList"-->
196 /> 196 <!-- />-->
197 </div> 197 <!-- </div>-->
198 </el-tab-pane> 198 <!-- </el-tab-pane>-->
199 199
200 </el-tabs> 200 <!-- </el-tabs>-->
201 201
202 <!-- 报项详情--> 202 <!-- 报项详情-->
203 <dialogModifySign :props="dialogModifySignProps" /> 203 <dialogModifySign :props="dialogModifySignProps" />
......
1 <template>
2 <el-card>
3 <div class="funcBtns">
4 <el-button type="primary" @click="addMember">添加选手</el-button>
5 <el-button type="primary" plain @click="importSportman">导入选手</el-button>
6 <el-button type="primary" plain>
7 <a href="/file/sportsmanTemplate.xlsx" target="_blank">下载模板</a>
8 </el-button>
9 </div>
10 <div class="from-Card">
11 <el-form :inline="true" :model="query" class="mt20" label-width="60" size="small">
12 <el-form-item label="姓名">
13 <el-input v-model="query.realName" style="width: 120px;" clearable/>
14 </el-form-item>
15 <el-form-item label="短名">
16 <el-input v-model="query.shortName" style="width: 120px;" clearable/>
17 </el-form-item>
18 <el-form-item label="手机号码">
19 <el-input v-model="query.phone" style="width: 120px;" clearable/>
20 </el-form-item>
21 <el-form-item label="邮箱">
22 <el-input v-model="query.email" style="width: 120px;" clearable/>
23 </el-form-item>
24 <el-form-item label="证件类型">
25 <el-input v-model="query.idcType" style="width: 120px;" clearable/>
26 </el-form-item>
27 <el-form-item label="证件号">
28 <el-input v-model="query.idcode" style="width: 120px;" clearable/>
29 </el-form-item>
30 <el-form-item label="角色">
31 <el-input v-model="query.label" style="width: 120px;" clearable/>
32 </el-form-item>
33 <el-form-item>
34 <el-button type="primary" @click="getList">查询</el-button>
35 </el-form-item>
36 </el-form>
37 </div>
38
39 <!-- 人员表格-->
40 <person-table :table-data="tableData" @edit="editCoach" @delete="delperson"/>
41 <el-table :data="tableData" class="mt20">
42 <el-table-column type="index" label="序号" width="80" align="center"/>
43 <el-table-column label="所属国家" prop="countryName"/>
44 <el-table-column label="姓氏" prop="xing"/>
45 <el-table-column label="名" prop="ming"/>
46 <el-table-column label="短名" prop="shortName"/>
47 <el-table-column label="性别" prop="sexStr"/>
48 <el-table-column label="年龄" prop="age"/>
49 <el-table-column label="出生日期" prop="birth" width="100"/>
50 <el-table-column label="手机号码" prop="phone" width="120"/>
51 <el-table-column label="邮箱" prop="email" width="150"/>
52 <el-table-column label="证件类型" prop="idcTypeStr"/>
53 <el-table-column label="证件号码" prop="idcCode" width="200"/>
54 <el-table-column label="会员角色">
55 <template #default="scope">
56 <span v-for="item in scope.row.label?.split(',')" :key="item.id">
57 <el-tag type="primary" size="mini" v-if="item==='0'" effect="dark" class="ml10">运动员</el-tag>
58 <el-tag type="info" size="mini" v-if="item==='1'" effect="dark" class="ml10">教练</el-tag>
59 <el-tag type="info" size="mini" v-if="item==='2'" effect="dark" class="ml10">领队</el-tag>
60 <el-tag type="info" size="mini" v-if="item==='3'" effect="dark" class="ml10">队医</el-tag>
61 <el-tag type="info" size="mini" v-if="item==='4'" effect="dark" class="ml10">翻译</el-tag>
62 <el-tag type="info" size="mini" v-if="item==='5'" effect="dark" class="ml10">官员</el-tag>
63 <el-tag type="info" size="mini" v-if="item==='6'" effect="dark" class="ml10">其他</el-tag>
64 </span>
65 </template>
66 </el-table-column>
67 <el-table-column label="详细地址" prop="address"/>
68 <el-table-column label="操作" fixed="right" width="160" header-align="center" align="center">
69 <template #default="scope">
70 <a class="text-primary pd10" @click="editCoach(scope.row)">编辑</a>
71 <a class="text-primary pd10" @click="delperson(scope.row)">删除</a>
72 </template>
73 </el-table-column>
74 </el-table>
75 <paginationPc
76 v-show="total>0"
77 v-model:page="query.pageNum"
78 v-model:limit="query.pageSize"
79 :total="total"
80 @pagination="getList"
81 />
82 </el-card>
83
84 <!-- 添加人员-->
85 <addCoach ref="dialogAddCoach" @submitForm="getList"/>
86 <Import ref="dialogImportProps"/>
87 </template>
88
89 <script setup>
90 import addCoach from '../match/components/addCoach'
91 import personTable from '../match/components/personTable'
92 import Import from '../match/components/import'
93 import {ref, watch} from 'vue'
94 import {useRouter} from 'vue-router'
95 import {getCurrentInstance, onMounted} from '@vue/runtime-core'
96
97 const router = useRouter()
98 const {proxy} = getCurrentInstance()
99 import * as match from '@/apiPc/match'
100 import {ElMessage, ElMessageBox} from 'element-plus'
101 import {getGroupPersonList} from "@/apiPc/match";
102 import PersonTable from "@/viewsPc/match/components/personTable";
103
104 const tableData = ref([])
105 const query = ref({
106 pageNum: 1, pageSize: 10
107 })
108 const total = ref(0)
109 const groupId = ref('1759813142128967681')
110 onMounted(() => {
111 getList(groupId.value)
112 })
113
114 function addMember() {
115 const params = {
116 title: '添加人员',
117 id: 0,
118 groupId: groupId.value
119 }
120 proxy.$refs['dialogAddCoach'].open(params)
121 }
122
123 function importSportman() {
124 const params = {
125 title: '批量导入选手',
126 groupId: groupId.value
127 }
128 proxy.$refs['dialogImportProps'].open(params)
129 }
130
131 function getList() {
132 getGroupPersonList(query.value, groupId.value).then(res => {
133 tableData.value = res.rows
134 total.value = res.total
135 })
136 }
137
138 function editCoach(row) {
139 const params = {
140 id: row.id,
141 groupId: row.groupId
142 }
143 proxy.$refs['dialogAddCoach'].open(params)
144 }
145
146 function delperson(p) {
147 //删除团队下的人
148 ElMessageBox.confirm(`确定删除${p.realName}吗?`, '提示', {
149 confirmButtonText: '确定',
150 cancelButtonText: '取消',
151 type: 'warning'
152 }).then(() => {
153 match.delPerson(p.id).then(res => {
154 ElMessage.success('操作成功')
155 getList(groupId.value)
156 })
157 })
158 }
159 </script>
160
161 <style scoped lang="scss">
162 .el-form--inline .el-form-item {
163 width: auto;
164 }
165 </style>
1 <template> 1 <template>
2 <div class="app-container"> 2 <div class="">
3 3
4 <div class="box ph-30"> 4 <div class="box ph-30">
5 <div class="panel"> 5 <el-card>
6 <div class="panel-header"> 6 <el-steps :active="activeStep" align-center>
7 <h3 class="panel-title">选择教练/领队/其他</h3> 7 <el-step title="团队信息"/>
8 </div> 8 <el-step title="教练/领队/其他"/>
9 <div class="panel-body"> 9 <el-step title="选手报名"/>
10 <span class="tip">*至少选择一个教练或领队</span> 10 <el-step title="提交审核"/>
11 <div class="text-right"> 11 </el-steps>
12 <el-button type="success" @click="addCoach">新建教练</el-button> 12 </el-card>
13 </div>
14 13
15 <el-form 14 <el-row class="mt20" :gutter="20">
16 ref="ruleFormRef" label-width="120px" label-position="top" class="chooseForm" :model="form" 15 <el-col :lg="12">
17 :rules="rules" 16 <el-card>
18 > 17 <template #header>
19 <el-form-item label="教练" prop="coachs"> 18 <div class="card-header">
19 <img src="@/assets/sign/tag01.png"/>
20 教练<span class="tip">(教练/领队,至少选择一项)</span>
21 </div>
22 </template>
23 <div class="chooseForm">
20 <el-checkbox-group v-model="form.coachs" @change="changecoachs"> 24 <el-checkbox-group v-model="form.coachs" @change="changecoachs">
25 <div class="addBttn" @click="addCoach(0)">+</div>
21 <el-checkbox v-for="c in coachList" :label="c.id"> 26 <el-checkbox v-for="c in coachList" :label="c.id">
22 <el-avatar :size="60" :src="c.picUrl" /> 27 <el-avatar fit="cover" :size="60" :src="fillImgUrl(c.picUrl)"/>
23 <p class="name">{{ c.realName }} 28 <p class="name">{{ c.shortName }}
24 <el-icon @click.stop="editPerson(c.id)"> 29 <el-icon @click.stop="editPerson(c.id)">
25 <Edit /> 30 <Edit/>
26 </el-icon> 31 </el-icon>
27 </p> 32 </p>
28 </el-checkbox> 33 </el-checkbox>
29 </el-checkbox-group> 34 </el-checkbox-group>
30 </el-form-item> 35 </div>
31 <el-form-item label="领队" prop="leader"> 36 </el-card>
37 </el-col>
38 <el-col :lg="12">
39 <el-card>
40 <template #header>
41 <div class="card-header">
42 <img src="@/assets/sign/tag02.png"/>
43 领队<span class="tip">(教练/领队,至少选择一项)</span>
44 </div>
45 </template>
46 <div class="chooseForm">
32 <el-checkbox-group v-model="form.leader"> 47 <el-checkbox-group v-model="form.leader">
48 <div class="addBttn" @click="addCoach(0)">+</div>
33 <el-checkbox v-for="c in leaderList" :label="c.id"> 49 <el-checkbox v-for="c in leaderList" :label="c.id">
34 <el-avatar :size="60" :src="c.picUrl" /> 50 <el-avatar fit="cover" :size="60" :src="fillImgUrl(c.picUrl)"/>
35 <p class="name">{{ c.realName }} 51 <p class="name">{{ c.shortName }}
36 <el-icon @click.stop="editPerson(c.id)"> 52 <el-icon @click.stop="editPerson(c.id)">
37 <Edit /> 53 <Edit/>
38 </el-icon> 54 </el-icon>
39 </p> 55 </p>
40 </el-checkbox> 56 </el-checkbox>
41 </el-checkbox-group> 57 </el-checkbox-group>
42 </el-form-item> 58 </div>
43 <el-form-item label="队医" prop="doctors"> 59 </el-card>
60 </el-col>
61 <el-col :lg="12">
62 <el-card class="mt20">
63 <template #header>
64 <div class="card-header">
65 <img src="@/assets/sign/tag03.png"/>
66 队医
67 </div>
68 </template>
69 <div class="chooseForm">
44 <el-checkbox-group v-model="form.doctor"> 70 <el-checkbox-group v-model="form.doctor">
71 <div class="addBttn" @click="addCoach(0)">+</div>
45 <el-checkbox v-for="c in doctorList" :label="c.id"> 72 <el-checkbox v-for="c in doctorList" :label="c.id">
46 <el-avatar :size="60" :src="c.picUrl" /> 73 <el-avatar fit="cover" :size="60" :src="fillImgUrl(c.picUrl)"/>
47 <p class="name">{{ c.realName }} 74 <p class="name">{{ c.shortName }}
48 <el-icon @click.stop="editPerson(c.id)"> 75 <el-icon @click.stop="editPerson(c.id)">
49 <Edit /> 76 <Edit/>
50 </el-icon> 77 </el-icon>
51 </p> 78 </p>
52 </el-checkbox> 79 </el-checkbox>
53 </el-checkbox-group> 80 </el-checkbox-group>
54 </el-form-item> 81 </div>
55 <el-form-item label="翻译" prop="translator"> 82 </el-card>
83 </el-col>
84 <el-col :lg="12">
85 <el-card class="mt20">
86 <template #header>
87 <div class="card-header">
88 <img src="@/assets/sign/tag04.png"/>
89 翻译
90 </div>
91 </template>
92 <div class="chooseForm">
56 <el-checkbox-group v-model="form.translator"> 93 <el-checkbox-group v-model="form.translator">
94 <div class="addBttn" @click="addCoach(0)">+</div>
57 <el-checkbox v-for="c in translatorList" :label="c.id"> 95 <el-checkbox v-for="c in translatorList" :label="c.id">
58 <el-avatar :size="60" :src="c.picUrl" /> 96 <el-avatar fit="cover" :size="60" :src="fillImgUrl(c.picUrl)"/>
59 <p class="name">{{ c.realName }} 97 <p class="name">{{ c.shortName }}
60 <el-icon @click.stop="editPerson(c.id)"> 98 <el-icon @click.stop="editPerson(c.id)">
61 <Edit /> 99 <Edit/>
62 </el-icon> 100 </el-icon>
63 </p> 101 </p>
64 </el-checkbox> 102 </el-checkbox>
65 </el-checkbox-group> 103 </el-checkbox-group>
66 </el-form-item> 104 </div>
67 <el-form-item label="官员" prop="official"> 105 </el-card>
106 </el-col>
107 <el-col :lg="12">
108 <el-card class="mt20">
109 <template #header>
110 <div class="card-header">
111 <img src="@/assets/sign/tag05.png"/>
112 官员
113 </div>
114 </template>
115 <div class="chooseForm">
68 <el-checkbox-group v-model="form.official"> 116 <el-checkbox-group v-model="form.official">
117 <div class="addBttn" @click="addCoach(0)">+</div>
69 <el-checkbox v-for="c in officialList" :label="c.id"> 118 <el-checkbox v-for="c in officialList" :label="c.id">
70 <el-avatar :size="60" :src="c.picUrl" /> 119 <el-avatar fit="cover" :size="60" :src="fillImgUrl(c.picUrl)"/>
71 <p class="name">{{ c.realName }} 120 <p class="name">{{ c.shortName }}
72 <el-icon @click.stop="editPerson(c.id)"> 121 <el-icon @click.stop="editPerson(c.id)">
73 <Edit /> 122 <Edit/>
74 </el-icon> 123 </el-icon>
75 </p> 124 </p>
76 </el-checkbox> 125 </el-checkbox>
77 </el-checkbox-group> 126 </el-checkbox-group>
78 </el-form-item> 127 </div>
79 <el-form-item label="其他" prop="other"> 128 </el-card>
129 </el-col>
130 <el-col :lg="12">
131 <el-card class="mt20">
132 <template #header>
133 <div class="card-header">
134 <img src="@/assets/sign/tag06.png"/>
135 其他
136 </div>
137 </template>
138 <div class="chooseForm">
80 <el-checkbox-group v-model="form.other"> 139 <el-checkbox-group v-model="form.other">
140 <div class="addBttn" @click="addCoach(0)">+</div>
81 <el-checkbox v-for="c in otherList" :label="c.id"> 141 <el-checkbox v-for="c in otherList" :label="c.id">
82 <el-avatar :size="60" :src="c.picUrl" /> 142 <el-avatar fit="cover" :size="60" :src="fillImgUrl(c.picUrl)"/>
83 <p class="name">{{ c.realName }} 143 <p class="name">{{ c.shortName }}
84 <el-icon @click.stop="editPerson(c.id)"> 144 <el-icon @click.stop="editPerson(c.id)">
85 <Edit /> 145 <Edit/>
86 </el-icon> 146 </el-icon>
87 </p> 147 </p>
88 </el-checkbox> 148 </el-checkbox>
89 </el-checkbox-group> 149 </el-checkbox-group>
90 </el-form-item>
91
92 </el-form>
93
94 </div>
95 <div class="panel-footer text-center">
96 <el-button type="success" plain round @click="goPrev()">上一步</el-button>
97 <el-button v-if="signType!='2'" type="success" round @click="goNext()">下一步</el-button>
98 <el-button v-else type="success" round @click="chooseDone()">确定</el-button>
99 </div> 150 </div>
151 </el-card>
152 </el-col>
153 </el-row>
154 <el-card class="mt20">
155 <div class="text-center">
156 <el-button type="primary" class="w200px" plain round @click="goPrev()">上一步</el-button>
157 <el-button type="primary" class="btn-lineG w200px" round @click="goNext()">下一步</el-button>
100 </div> 158 </div>
159 </el-card>
160
161
101 </div> 162 </div>
102 163
103 <dialogAddCoach ref="dialogAddCoachRef" @submitForm="getList" /> 164 <dialogAddCoach ref="dialogAddCoachRef" @submitForm="getList"/>
104 165
105 </div> 166 </div>
106 </template> 167 </template>
107 168
108 <script setup> 169 <script setup>
109 import { ref, reactive } from 'vue' 170 import {ref, reactive} from 'vue'
110 import { getCurrentInstance, onMounted } from '@vue/runtime-core' 171 import {getCurrentInstance, onMounted} from '@vue/runtime-core'
111 import * as match from '@/apiPc/match' 172 import * as match from '@/apiPc/match'
112 import dialogAddCoach from './components/addCoach' 173 import dialogAddCoach from './components/addCoach'
113 const { proxy } = getCurrentInstance() 174
175 const {proxy} = getCurrentInstance()
114 const router = useRouter() 176 const router = useRouter()
115 const route = useRoute() 177 const route = useRoute()
116 import { ElMessage } from 'element-plus' 178 import {ElMessage} from 'element-plus'
117 import { useRoute, useRouter } from 'vue-router' 179 import {useRoute, useRouter} from 'vue-router'
180
118 const data = reactive({ 181 const data = reactive({
119 form: { 182 form: {
120 coachs: [], 183 coachs: [],
...@@ -129,12 +192,21 @@ const data = reactive({ ...@@ -129,12 +192,21 @@ const data = reactive({
129 hasChooseObj: {}, 192 hasChooseObj: {},
130 groupId: '0', 193 groupId: '0',
131 signType: '', 194 signType: '',
132 rules: { 195 activeStep: 1
133 // coachs: { required: true, message: '至少选择一个', trigger: 'change' },
134 // leader: { required: true, message: '至少选择一个', trigger: 'change' }
135 }
136 }) 196 })
137 const { form, coachList, leaderList, otherList, doctorList, translatorList, officialList, rules, signType, groupId, hasChooseObj } = toRefs(data) 197 const {
198 form,
199 coachList,
200 leaderList,
201 otherList,
202 doctorList,
203 translatorList,
204 officialList,
205 rules,
206 signType,
207 groupId,
208 hasChooseObj,activeStep
209 } = toRefs(data)
138 let matchId = '' 210 let matchId = ''
139 onMounted(() => { 211 onMounted(() => {
140 matchId = route.query.matchId 212 matchId = route.query.matchId
...@@ -142,6 +214,7 @@ onMounted(() => { ...@@ -142,6 +214,7 @@ onMounted(() => {
142 signType.value = route.query.signType || '' 214 signType.value = route.query.signType || ''
143 getList() 215 getList()
144 }) 216 })
217
145 function getList() { 218 function getList() {
146 if (signType.value == '0') { 219 if (signType.value == '0') {
147 geren() 220 geren()
...@@ -149,11 +222,14 @@ function getList() { ...@@ -149,11 +222,14 @@ function getList() {
149 tuandui() 222 tuandui()
150 } 223 }
151 } 224 }
225
152 function changecoachs(e) { 226 function changecoachs(e) {
153 console.log(e) 227 console.log(e)
154 } 228 }
229
155 // 获取报名时是否已选过 230 // 获取报名时是否已选过
156 let hasChooseId 231 let hasChooseId
232
157 function tuandui() { 233 function tuandui() {
158 Promise.all([ 234 Promise.all([
159 match.getMyGroupForCpt(groupId.value, matchId), 235 match.getMyGroupForCpt(groupId.value, matchId),
...@@ -186,6 +262,7 @@ function tuandui() { ...@@ -186,6 +262,7 @@ function tuandui() {
186 } 262 }
187 }) 263 })
188 } 264 }
265
189 function geren() { 266 function geren() {
190 Promise.all([ 267 Promise.all([
191 match.getMyPersonInfoWithcptId(matchId), 268 match.getMyPersonInfoWithcptId(matchId),
...@@ -210,10 +287,12 @@ function geren() { ...@@ -210,10 +287,12 @@ function geren() {
210 } 287 }
211 }) 288 })
212 } 289 }
290
213 function chooseDone() { 291 function chooseDone() {
214 // 返回团队报名 292 // 返回团队报名
215 router.go(-1) 293 router.go(-1)
216 } 294 }
295
217 function goNext() { 296 function goNext() {
218 console.log(form.value) 297 console.log(form.value)
219 if ((form.value.coachs.length < 1) && (form.value.leader.length < 1)) { 298 if ((form.value.coachs.length < 1) && (form.value.leader.length < 1)) {
...@@ -262,9 +341,11 @@ function goNext() { ...@@ -262,9 +341,11 @@ function goNext() {
262 341
263 console.log(form.value) 342 console.log(form.value)
264 } 343 }
344
265 function goPrev() { 345 function goPrev() {
266 router.back() 346 router.back()
267 } 347 }
348
268 function editPerson(id) { 349 function editPerson(id) {
269 proxy.$refs['dialogAddCoachRef'].open({ 350 proxy.$refs['dialogAddCoachRef'].open({
270 title: '编辑人员', 351 title: '编辑人员',
...@@ -272,6 +353,7 @@ function editPerson(id) { ...@@ -272,6 +353,7 @@ function editPerson(id) {
272 groupId: groupId.value 353 groupId: groupId.value
273 }) 354 })
274 } 355 }
356
275 function addCoach() { 357 function addCoach() {
276 proxy.$refs['dialogAddCoachRef'].open({ 358 proxy.$refs['dialogAddCoachRef'].open({
277 title: '新建人员', 359 title: '新建人员',
...@@ -282,15 +364,45 @@ function addCoach() { ...@@ -282,15 +364,45 @@ function addCoach() {
282 </script> 364 </script>
283 365
284 <style scoped lang="scss"> 366 <style scoped lang="scss">
285 .app-container{ padding: 0;background: #F5F7F9;} 367 .addBttn {margin-right: 20px;
286 .panel-footer .el-button--success { 368 width: 60px;
287 padding: 0 40px; 369 color: #7B7F83;
370 font-size: 20px;
371 height: 60px;
372 display: flex;
373 align-items: center;
374 justify-content: center;
375 background: #FFFFFF;
376 border: 1px dashed #95A1A6;
377 border-radius: 50%;
378
379 &:hover {
380 cursor: pointer;
381 color: var(--el-color-primary);
382 border-color: var(--el-color-primary);
288 } 383 }
289 .chooseForm{ 384 }
385
386 .card-header {
387 display: flex;
388 align-items: center;color: var(--el-color-primary);
389
390 img {
391 margin-right: 8px;
392 flex: 0 0 auto;
393 }
394 }
395
396 .panel-footer .el-button--success {
397 padding: 0 40px;
398 }
399 .chooseForm{
290 :deep(.el-form-item__content){background: rgba(245, 247, 249, 0.38); 400 :deep(.el-form-item__content){background: rgba(245, 247, 249, 0.38);
291 padding: 20px 40px 10px;} 401 padding: 20px 40px 10px;}
292 .el-checkbox{height: auto;} 402 .el-checkbox{height: auto;}
293 :deep(.el-checkbox__input){position: absolute;right: 0;top: 0;} 403 :deep(.el-checkbox__input){position: absolute;right: 0;top: 0;}
294 .name{text-align: center;} 404 .name{text-align: center;}
295 } 405 }
406 :deep(.el-avatar)>img{width: 100%;}
407
296 </style> 408 </style>
......
1 <template> 1 <template>
2 <div class="app-container"> 2 <div>
3 <div class="box ph-30"> 3 <div class="box ph-30">
4 <div class="panel"> 4 <el-card class="mb20">
5 <div class="panel-header"> 5 <el-steps :active="activeStep" align-center>
6 <h3 class="panel-title">选择运动员</h3> 6 <el-step title="团队信息"/>
7 <el-step title="教练/领队/其他"/>
8 <el-step title="选手报名"/>
9 <el-step title="提交审核"/>
10 </el-steps>
11 </el-card>
12
13 <el-card :body-style="{'padding-top': '0'}">
14 <el-row class="mt20" :gutter="20">
15 <el-col :lg="8">
16 <div class="panel border">
17 <div class="panel-header ">
18 <h3 class="panel-title">选择参赛运动员清单</h3>
19 <a class="fr" @click="emptyChoosed">清空</a>
7 </div> 20 </div>
8 <div class="panel-body"> 21 <div class="panel-body">
9 <div class="text-right mb20"> 22 <div class="chooseForm">
10 <el-button type="success" @click="chooseSportman">选择参赛运动员</el-button> 23 <el-checkbox-group v-model="choosedchoosed" @change="changechoosed">
11 <el-button type="success" @click="importSportman">批量导入人员</el-button> 24 <div class="addBttn" @click="chooseSportman">+</div>
12 <el-button type="success" @click="addCoach">新增运动员</el-button> 25 <el-checkbox v-for="c in choosedList" :label="c.id">
13 </div> 26 <el-avatar fit="cover" v-if="c.picUrl" :size="60" :src="fillImgUrl(c.picUrl)"/>
27 <el-avatar fit="cover" v-else-if="c.sex == 0" :size="60" src="@/assets/img/head1.png"/>
28 <el-avatar fit="cover" v-else-if="c.sex == 1" :size="60" src="@/assets/img/head0.png"/>
14 29
15 <el-tabs 30 <p class="name">{{ c.shortName }}
16 v-if="signType=='2'" 31 <el-icon @click.stop="editPerson(c.id)">
17 v-model="activeTeam" 32 <Edit/>
18 type="card" 33 </el-icon>
19 class="demo-tabs" 34 <!-- <el-icon @click.stop="delthischoosed(c)">-->
20 @tab-click="teamClick" 35 <!-- <Delete/>-->
21 > 36 <!-- </el-icon>-->
22 <el-tab-pane v-for="t in teamList" :key="t.id" :label="t.name" :name="t.id" /> 37 </p>
23 </el-tabs>
24
25 <!-- 已选运动员列表-->
26 <div v-if="choosedList.length > 0" class="hasChoose">
27 <el-checkbox-group v-model="choosedchoosed" style="display: flex;flex-wrap: wrap;">
28 <div v-for="p in choosedList" class="choseItem">
29 <a class="poClose" @click.stop="delthischoosed(p)">
30 <el-icon :size="20" color="#999"><CircleClose /></el-icon>
31 </a>
32 <el-checkbox border :label="p.id" @click="signForThisMan(p)">
33 {{ p.realName }}
34 <span v-if="p.sex=='1'">(男)</span>
35 <span v-if="p.sex=='0'">(女)</span>
36 </el-checkbox> 38 </el-checkbox>
39 </el-checkbox-group>
37 </div> 40 </div>
38 41 </div>
42 </div>
43 </el-col>
44 <el-col :lg="8">
45 <div class="panel border">
46 <div class="panel-header ">
47 <h3 class="panel-title">选择一个参赛组合</h3>
48 </div>
49 <div class="panel-body">
50 <div class="chooseForm">
51 <el-checkbox-group v-model="choosedchoosed" @change="changechoosed">
52 <!-- v-show="choosedchoosed.indexOf(c.id) !== -1"-->
53 <el-checkbox v-for="c in choosed2List" :label="c.id" checked>
54 <el-avatar fit="cover" v-if="c.picUrl" :size="60" :src="fillImgUrl(c.picUrl)"/>
55 <el-avatar fit="cover" v-else-if="c.sex == 0" :size="60" src="@/assets/img/head1.png"/>
56 <el-avatar fit="cover" v-else-if="c.sex == 1" :size="60" src="@/assets/img/head0.png"/>
57 <p class="name">{{ c.shortName }}
58 <el-icon @click.stop="editPerson(c.id)">
59 <Edit/>
60 </el-icon>
61 </p>
62 </el-checkbox>
39 </el-checkbox-group> 63 </el-checkbox-group>
40 <el-button size="small" type="warning" plain @click="delchoosedchoosed">批量删除</el-button>
41 </div> 64 </div>
42 <ul class="mb20 namesUl"> 65 </div>
43 <li v-show="names.coachList?.length>0"><label>教练:</label><span v-for="c in names.coachList">{{ c.realName }}</span> </li> 66 </div>
44 <li v-show="names.leaderList?.length>0"><label>领队:</label><span v-for="c in names.leaderList">{{ c.realName }}</span></li> 67 </el-col>
45 <li v-show="names.teamDoctorList?.length>0"><label>队医:</label><span v-for="c in names.teamDoctorList">{{ c.realName }}</span></li> 68 <el-col :lg="8">
46 <li v-show="names.translatorList?.length>0"><label>翻译:</label><span v-for="c in names.translatorList">{{ c.realName }}</span></li> 69 <div class="panel border">
47 <li v-show="names.officialList?.length>0"><label>官员:</label><span v-for="c in names.officialList">{{ c.realName }}</span></li> 70 <div class="panel-header ">
48 <li v-show="names.otherList?.length>0"><label>其他:</label><span v-for="c in names.otherList">{{ c.realName }}</span></li> 71 <h3 class="panel-title">可参与报名的项目</h3>
49 </ul> 72 <div class="fr">
50 73 <el-input size="small" v-model="projectQuery.name" :prefix-icon="Search" @change="getProjectList" clearable/>
51 <el-table :data="signInfoTable" style="width: 100%"> 74 </div>
75 </div>
76 <div class="panel-body" v-loading="loadingProject">
77 <el-empty v-if="projectList.length==0" image="@/assets/img/order_no.png" image-size="228" description="无可选项目" />
78 </div>
79 </div>
80 </el-col>
81 </el-row>
82 <el-row class="mt20">
83 <el-col :span="24">
84 <div class="text-center">
85 <el-button type="primary" class="btn-lineG w200px" round>确定</el-button>
86 </div>
87 </el-col>
88 </el-row>
89 </el-card>
90
91 <el-card class="mt20" :body-style="{'padding-top': '0'}">
92 <div class="border-info mt20">
93 <el-row>
94 <el-col :lg="8">
95 <div class="item"><label>教练</label>
96 <span v-for="c in names.coachList">{{ c.shortName }}</span>
97 </div>
98 <div class="item"><label>翻译</label>
99 <span v-for="c in names.translatorList">{{ c.shortName }}</span>
100 </div>
101 </el-col>
102 <el-col :lg="8">
103 <div class="item"><label>领队</label>
104 <span v-for="c in names.leaderList">{{ c.shortName }}</span>
105 </div>
106 <div class="item"><label>官员</label>
107 <span class="mr5" v-for="c in names.officialList">{{ c.shortName }}</span>
108 <span v-if="!names.officialList">--</span>
109 </div>
110 </el-col>
111 <el-col :lg="8">
112 <div class="item"><label>队医</label><span class="mr5" v-for="c in names.teamDoctorList">{{
113 c.shortName
114 }}</span></div>
115 <div class="item"><label>其他</label><span class="mr5" v-for="c in names.otherList">{{
116 c.shortName
117 }}</span></div>
118 </el-col>
119 </el-row>
120 </div>
121
122 <div>
123
124 <!-- <el-button type="success" @click="importSportman">批量导入人员</el-button>-->
125 <!-- <el-button type="success" @click="addCoach">新增运动员</el-button>-->
126
127 <div class="fr mb20" @click="switchTabletype">
128 <el-button plain type="primary" :icon="Switch" v-if="tableType==1">按人员查看报项</el-button>
129 <el-button plain type="primary" :icon="Switch" v-else>按组别查看报项</el-button>
130 </div>
131 <el-table :data="signInfoTable" border style="width: 100%" v-if="tableType==0">
52 <el-table-column label="运动员" width="240px"> 132 <el-table-column label="运动员" width="240px">
53 <template #default="scope"> 133 <template #default="scope">
54 <div style="display: flex;align-items: center;"> 134 <div style="display: flex;align-items: center;">
55 <!-- <el-image v-if="scope.row.personInfo.picUrl" style="width: 50px; height: 50px" fit="contain" :src="scope.row.personInfo.picUrl" />--> 135 <!-- <el-image v-if="scope.row.personInfo.picUrl" style="width: 50px; height: 50px" fit="contain" :src="scope.row.personInfo.picUrl" />-->
56 <p>{{ scope.row.personInfo.realName }}({{ scope.row.personInfo.sexStr }})</p> 136 <p>{{ scope.row.personInfo.shortName }}({{ scope.row.personInfo.sexStr }})</p>
57 </div> 137 </div>
58 </template> 138 </template>
59 </el-table-column> 139 </el-table-column>
...@@ -72,7 +152,6 @@ ...@@ -72,7 +152,6 @@
72 </li> 152 </li>
73 </ol> 153 </ol>
74 </template> 154 </template>
75
76 </el-table-column> 155 </el-table-column>
77 156
78 <!-- 补充信息--> 157 <!-- 补充信息-->
...@@ -95,21 +174,42 @@ ...@@ -95,21 +174,42 @@
95 </el-table-column> 174 </el-table-column>
96 </el-table> 175 </el-table>
97 176
98 </div> 177 <el-table v-if="tableType==1" :data="signInfoTable" border style="width: 100%">
99 <div class="panel-footer text-center"> 178 <el-table-column label="组别代码" width="120px">
100 <el-button type="success" plain round @click="goPrev()">上一步</el-button> 179 <template #default="scope">
101 <el-button type="success" round @click="submitForm()">下一步</el-button> 180 NO.1
181 </template>
182 </el-table-column>
183 <el-table-column label="组别" />
184 <el-table-column label="舞种" width="120px"/>
185 <el-table-column label="参赛说明" />
186 <el-table-column label="参赛运动员" width="120px"/>
187 <el-table-column label="报名费" width="120px"/>
188 <el-table-column label="操作" fixed="right" width="150" align="center">
189 <template #default="scope">
190 <el-button v-if="extraform&&extraform.length>0" type="text" @click="goPersonInfo(scope.row)">
191 <span v-if="scope.row.extraPersonInfo">修改</span>
192 <span v-else class="red">完善补充信息</span>
193 </el-button>
194 <el-button type="text" @click="goPersonInfo(scope.row)">删除</el-button>
195 </template>
196 </el-table-column>
197 </el-table>
198 <div class="text-center mt20">
199 <el-button type="primary" class="w200px" plain round @click="goPrev()">上一步</el-button>
200 <el-button type="primary" class="btn-lineG w200px" round @click="submitForm()">预览报名信息</el-button>
102 </div> 201 </div>
103 </div> 202 </div>
203 </el-card>
104 </div> 204 </div>
105 205
106 <dialogAddCoach ref="dialogAddCoachRef" /> 206 <dialogAddCoach ref="dialogAddCoachRef"/>
107 <dialogSportsmanList ref="dialogSportsmanListRef" @submitForm="getSignInfoList" /> 207 <dialogSportsmanList ref="dialogSportsmanListRef" @submitForm="getSignInfoList"/>
108 <dialogAllSportsmanList ref="dialogAllSportsmanListRef" @transfer="getChoosed" @submitForm="getSignInfoList" /> 208 <dialogAllSportsmanList ref="dialogAllSportsmanListRef" @transfer="getChoosed" @submitForm="getSignInfoList"/>
109 209
110 <dialogMates ref="dialogMatesRef" @submitForm="getSignInfoList" /> 210 <dialogMates ref="dialogMatesRef" @submitForm="getSignInfoList"/>
111 211
112 <dialogImport ref="dialogImportProps" @submitForm="getMySignInfo" /> 212 <dialogImport ref="dialogImportProps" @submitForm="getMySignInfo"/>
113 213
114 <el-dialog v-model="showResult" :close-on-click-modal="false" :show-close="false"> 214 <el-dialog v-model="showResult" :close-on-click-modal="false" :show-close="false">
115 <el-result icon="success" title="报名成功"> 215 <el-result icon="success" title="报名成功">
...@@ -121,16 +221,16 @@ ...@@ -121,16 +221,16 @@
121 221
122 </el-dialog> 222 </el-dialog>
123 223
124 <dialogChangeCoach ref="popChangeCoach" @submitForm="getMySignInfo" /> 224 <!-- <dialogChangeCoach ref="popChangeCoach" @submitForm="getMySignInfo"/>-->
125 225
126 <dialogExtraForm ref="popExtraForm" @submitForm="getSignInfoList" /> 226 <dialogExtraForm ref="popExtraForm" @submitForm="getSignInfoList"/>
127 </div> 227 </div>
128 </template> 228 </template>
129 229
130 <script setup> 230 <script setup>
131 import { ref, reactive } from 'vue' 231 import {ref, reactive} from 'vue'
132 import * as match from '@/apiPc/match' 232 import * as match from '@/apiPc/match'
133 import { getCurrentInstance, onMounted } from '@vue/runtime-core' 233 import {getCurrentInstance, onMounted} from '@vue/runtime-core'
134 import dialogAddCoach from './components/addCoach' 234 import dialogAddCoach from './components/addCoach'
135 import dialogSportsmanList from './components/sportsmanList' 235 import dialogSportsmanList from './components/sportsmanList'
136 import dialogAllSportsmanList from './components/allSportsmanList' 236 import dialogAllSportsmanList from './components/allSportsmanList'
...@@ -138,13 +238,15 @@ import dialogImport from './components/import' ...@@ -138,13 +238,15 @@ import dialogImport from './components/import'
138 import dialogChangeCoach from './components/changeCoach' 238 import dialogChangeCoach from './components/changeCoach'
139 import dialogExtraForm from './components/extraForm' 239 import dialogExtraForm from './components/extraForm'
140 import dialogMates from './components/dialogMates' 240 import dialogMates from './components/dialogMates'
141 const { proxy } = getCurrentInstance() 241 import {Search,Switch} from "@element-plus/icons-vue";
242 const {proxy} = getCurrentInstance()
142 const router = useRouter() 243 const router = useRouter()
143 const route = useRoute() 244 const route = useRoute()
144 import _ from 'lodash' 245 import _ from 'lodash'
145 import { ElMessage, ElMessageBox } from 'element-plus' 246 import {ElMessage, ElMessageBox} from 'element-plus'
247
146 const data = reactive({ 248 const data = reactive({
147 coachForm: {}, 249 coachForm: {}, activeStep: 2,
148 tableData: [], signInfoTable: [], choosedList: [], 250 tableData: [], signInfoTable: [], choosedList: [],
149 extraPersonInfoMapList: [], 251 extraPersonInfoMapList: [],
150 teamList: [], 252 teamList: [],
...@@ -155,14 +257,19 @@ const data = reactive({ ...@@ -155,14 +257,19 @@ const data = reactive({
155 noPhotoCanSign: null, 257 noPhotoCanSign: null,
156 showResult: false, 258 showResult: false,
157 showExtraForm: false, 259 showExtraForm: false,
260 loadingProject: false,
158 extraTableHead: [], 261 extraTableHead: [],
159 activeTeam: '', 262 activeTeam: '',
160 names: {}, 263 names: {},
161 choosedchoosed: [] 264 choosedchoosed: [],
265 projectList: [],
266 choosed2List:[],projectQuery:{},tableType:0
162 }) 267 })
163 const { activeTeam, names, tableData, signInfoTable, choosedList, showExtraForm, extraPersonInfoMapList, teamList, 268 const {
269 activeTeam, names, tableData, signInfoTable, choosedList, showExtraForm, extraPersonInfoMapList, teamList,
164 extraform, groupId, signType, coachOrLeaderFlag, showResult, noPhotoCanSign, extraTableHead, 270 extraform, groupId, signType, coachOrLeaderFlag, showResult, noPhotoCanSign, extraTableHead,
165 coachForm, choosedchoosed } = toRefs(data) 271 coachForm, choosedchoosed, activeStep,projectList,choosed2List,loadingProject,projectQuery,tableType
272 } = toRefs(data)
166 let matchId = '' 273 let matchId = ''
167 let signInfoType = null 274 let signInfoType = null
168 onMounted(() => { 275 onMounted(() => {
...@@ -184,11 +291,13 @@ onMounted(() => { ...@@ -184,11 +291,13 @@ onMounted(() => {
184 getTableHead() 291 getTableHead()
185 getMySignInfo() 292 getMySignInfo()
186 }) 293 })
294
187 function geren() { 295 function geren() {
188 match.getChooseDoneSingleCoachs(matchId).then(res => { 296 match.getChooseDoneSingleCoachs(matchId).then(res => {
189 names.value = res.data 297 names.value = res.data
190 }) 298 })
191 } 299 }
300
192 function tuandui() { 301 function tuandui() {
193 match.getChooseDoneGroupCoachs(matchId, groupId.value).then(res => { 302 match.getChooseDoneGroupCoachs(matchId, groupId.value).then(res => {
194 names.value = res.data 303 names.value = res.data
...@@ -196,6 +305,7 @@ function tuandui() { ...@@ -196,6 +305,7 @@ function tuandui() {
196 } 305 }
197 306
198 let chargeFlag 307 let chargeFlag
308
199 function getMatch(id) { 309 function getMatch(id) {
200 match.getMatchById({ 310 match.getMatchById({
201 id: id 311 id: id
...@@ -206,6 +316,7 @@ function getMatch(id) { ...@@ -206,6 +316,7 @@ function getMatch(id) {
206 extraform.value = JSON.parse(res.data.participantsInfo) 316 extraform.value = JSON.parse(res.data.participantsInfo)
207 }) 317 })
208 } 318 }
319
209 function getMySignInfo() { 320 function getMySignInfo() {
210 // 获取已报 321 // 获取已报
211 match.getMySignInfo({ 322 match.getMySignInfo({
...@@ -216,6 +327,7 @@ function getMySignInfo() { ...@@ -216,6 +327,7 @@ function getMySignInfo() {
216 signInfoType = res.data.type 327 signInfoType = res.data.type
217 }) 328 })
218 } 329 }
330
219 function getSignInfoList() { 331 function getSignInfoList() {
220 // console.log(activeTeam.value) 332 // console.log(activeTeam.value)
221 match.getMySignInfoList({ 333 match.getMySignInfoList({
...@@ -238,12 +350,14 @@ function getSignInfoList() { ...@@ -238,12 +350,14 @@ function getSignInfoList() {
238 // } 350 // }
239 }) 351 })
240 } 352 }
353
241 function getTableHead() { 354 function getTableHead() {
242 match.getCptExtraInfo(matchId).then(res => { 355 match.getCptExtraInfo(matchId).then(res => {
243 // console.log(res.data) 356 // console.log(res.data)
244 extraTableHead.value = res.data 357 extraTableHead.value = res.data
245 }) 358 })
246 } 359 }
360
247 function getTeamList(a, b) { 361 function getTeamList(a, b) {
248 match.getMyTeamList(a, b).then(res => { 362 match.getMyTeamList(a, b).then(res => {
249 teamList.value = res.data 363 teamList.value = res.data
...@@ -251,18 +365,28 @@ function getTeamList(a, b) { ...@@ -251,18 +365,28 @@ function getTeamList(a, b) {
251 getSignInfoList() 365 getSignInfoList()
252 }) 366 })
253 } 367 }
368
254 function teamClick(tab, event) { 369 function teamClick(tab, event) {
255 activeTeam.value = tab.props.name 370 activeTeam.value = tab.props.name
256 getSignInfoList() 371 getSignInfoList()
257 } 372 }
373
258 function submitForm() { 374 function submitForm() {
375 router.push({
376 name: 'signPreview',
377 query: {
378 matchId: matchId,
379 groupId: groupId.value,
380 teamId: activeTeam.value
381 }
382 })
259 if (signInfoType == '1') { 383 if (signInfoType == '1') {
260 ElMessageBox.confirm('已报项,前往我的报项', '提示', { 384 ElMessageBox.confirm('已报项,前往我的报项', '提示', {
261 confirmButtonText: '确定', 385 confirmButtonText: '确定',
262 cancelButtonText: '取消', 386 cancelButtonText: '取消',
263 type: 'warning' 387 type: 'warning'
264 }).then(() => { 388 }).then(() => {
265 router.push({ name: 'myMatch' }) 389 router.push({name: 'myMatch'})
266 }) 390 })
267 return 391 return
268 } 392 }
...@@ -281,7 +405,7 @@ function submitForm() { ...@@ -281,7 +405,7 @@ function submitForm() {
281 } 405 }
282 } 406 }
283 if (signInfoType == '2') { 407 if (signInfoType == '2') {
284 match.recoverMySign({ cptId: matchId, groupId: groupId.value }).then(res => { 408 match.recoverMySign({cptId: matchId, groupId: groupId.value}).then(res => {
285 if (res.msg.indexOf('Exception:') > -1) { 409 if (res.msg.indexOf('Exception:') > -1) {
286 const msg = res.msg.slice(10) 410 const msg = res.msg.slice(10)
287 ElMessageBox.confirm(msg, '提示', { 411 ElMessageBox.confirm(msg, '提示', {
...@@ -300,6 +424,7 @@ function submitForm() { ...@@ -300,6 +424,7 @@ function submitForm() {
300 afterRecover() 424 afterRecover()
301 } 425 }
302 } 426 }
427
303 function afterRecover() { 428 function afterRecover() {
304 if (signInfoTable.value.length == 0) { 429 if (signInfoTable.value.length == 0) {
305 ElMessage.error('请至少选择一个项目') 430 ElMessage.error('请至少选择一个项目')
...@@ -330,6 +455,7 @@ function afterRecover() { ...@@ -330,6 +455,7 @@ function afterRecover() {
330 function goPrev() { 455 function goPrev() {
331 router.go(-1) 456 router.go(-1)
332 } 457 }
458
333 function chooseSportman() { 459 function chooseSportman() {
334 if (signInfoType == '2') { 460 if (signInfoType == '2') {
335 match.recoverMySign({ 461 match.recoverMySign({
...@@ -363,8 +489,34 @@ function chooseSportman() { ...@@ -363,8 +489,34 @@ function chooseSportman() {
363 } 489 }
364 proxy.$refs['dialogAllSportsmanListRef'].open(params) 490 proxy.$refs['dialogAllSportsmanListRef'].open(params)
365 } 491 }
492
493 function changechoosed(e) {
494 console.log(e)
495 choosed2List.value = []
496 for(var c of choosedList.value){
497 if (choosedchoosed.value.indexOf(c.id) > -1) {
498 choosed2List.value.push(c)
499 }
500 }
501 getProjectList()
502
503 }
504 function getProjectList() {
505 if(choosed2List.value.length==0){
506 ElMessage.error('请先选择运动员')
507 return
508 }
509 loadingProject.value = true
510 //根据已选人员id 获取项目列表
511 match.getCanSignProjectList(matchId).then(res=>{
512 projectList.value = res.data
513 loadingProject.value = false
514 })
515 }
366 function getChoosed(list) { 516 function getChoosed(list) {
517 console.log(list)
367 choosedList.value = list 518 choosedList.value = list
519 console.log('选好了',choosedchoosed.value)
368 } 520 }
369 521
370 function addCoach() { 522 function addCoach() {
...@@ -394,6 +546,7 @@ function addCoach() { ...@@ -394,6 +546,7 @@ function addCoach() {
394 } 546 }
395 proxy.$refs['dialogAddCoachRef'].open(params) 547 proxy.$refs['dialogAddCoachRef'].open(params)
396 } 548 }
549
397 function signForThisMan(p) { 550 function signForThisMan(p) {
398 const params = { 551 const params = {
399 title: '选择报项', 552 title: '选择报项',
...@@ -412,6 +565,11 @@ function signForThisMan(p) { ...@@ -412,6 +565,11 @@ function signForThisMan(p) {
412 function delthischoosed(p) { 565 function delthischoosed(p) {
413 choosedList.value = _.without(choosedList.value, p) 566 choosedList.value = _.without(choosedList.value, p)
414 } 567 }
568
569 function emptyChoosed() {
570 choosedList.value = []
571 }
572
415 function delchoosedchoosed() { 573 function delchoosedchoosed() {
416 console.log(choosedchoosed.value) 574 console.log(choosedchoosed.value)
417 for (var c of choosedList.value) { 575 for (var c of choosedList.value) {
...@@ -421,6 +579,7 @@ function delchoosedchoosed() { ...@@ -421,6 +579,7 @@ function delchoosedchoosed() {
421 } 579 }
422 choosedchoosed.value = [] 580 choosedchoosed.value = []
423 } 581 }
582
424 function editThis(row) { 583 function editThis(row) {
425 const params = { 584 const params = {
426 title: '修改报项', 585 title: '修改报项',
...@@ -434,6 +593,7 @@ function editThis(row) { ...@@ -434,6 +593,7 @@ function editThis(row) {
434 } 593 }
435 proxy.$refs['dialogSportsmanListRef'].open(params) 594 proxy.$refs['dialogSportsmanListRef'].open(params)
436 } 595 }
596
437 function editMates(row) { 597 function editMates(row) {
438 const params = { 598 const params = {
439 title: '更换队友' 599 title: '更换队友'
...@@ -454,6 +614,7 @@ function removeThis(id) { ...@@ -454,6 +614,7 @@ function removeThis(id) {
454 }) 614 })
455 }) 615 })
456 } 616 }
617
457 function changeCoach(cptId, groupId) { 618 function changeCoach(cptId, groupId) {
458 // 更换教练 619 // 更换教练
459 const params = { 620 const params = {
...@@ -463,6 +624,7 @@ function changeCoach(cptId, groupId) { ...@@ -463,6 +624,7 @@ function changeCoach(cptId, groupId) {
463 } 624 }
464 proxy.$refs['popChangeCoach'].open(params) 625 proxy.$refs['popChangeCoach'].open(params)
465 } 626 }
627
466 function importSportman() { 628 function importSportman() {
467 const params = { 629 const params = {
468 title: '批量导入人员', 630 title: '批量导入人员',
...@@ -470,6 +632,7 @@ function importSportman() { ...@@ -470,6 +632,7 @@ function importSportman() {
470 } 632 }
471 proxy.$refs['dialogImportProps'].open(params) 633 proxy.$refs['dialogImportProps'].open(params)
472 } 634 }
635
473 function goMySign() { 636 function goMySign() {
474 router.push({ 637 router.push({
475 name: 'myMatch' 638 name: 'myMatch'
...@@ -481,7 +644,7 @@ const goPersonInfo = (row) => { ...@@ -481,7 +644,7 @@ const goPersonInfo = (row) => {
481 ElMessageBox.alert('已报项,前往我的报项', '提示', { 644 ElMessageBox.alert('已报项,前往我的报项', '提示', {
482 confirmButtonText: 'OK', 645 confirmButtonText: 'OK',
483 callback: (Action) => { 646 callback: (Action) => {
484 router.push({ name: 'myMatch' }) 647 router.push({name: 'myMatch'})
485 } 648 }
486 }) 649 })
487 return 650 return
...@@ -497,41 +660,95 @@ const goPersonInfo = (row) => { ...@@ -497,41 +660,95 @@ const goPersonInfo = (row) => {
497 } 660 }
498 proxy.$refs['popExtraForm'].open(_.cloneDeep(params)) 661 proxy.$refs['popExtraForm'].open(_.cloneDeep(params))
499 } 662 }
663
500 function downloadVoucher() { 664 function downloadVoucher() {
501 // 下载凭证 665 // 下载凭证
502 proxy.download( 666 proxy.download(
503 `/pdf/getPayedOrderPdf/${matchId}/${groupId.value || 0}`, {}, '报项凭证.pdf' 667 `/pdf/getPayedOrderPdf/${matchId}/${groupId.value || 0}`, {}, '报项凭证.pdf'
504 ) 668 )
505 } 669 }
670
671 function editPerson(id) {
672 proxy.$refs['dialogAddCoachRef'].open({
673 title: '编辑人员',
674 id: id,
675 groupId: groupId.value
676 })
677 }
678 function switchTabletype() {
679 if(tableType.value == 0){
680 tableType.value = 1
681 }else{
682 tableType.value = 0
683 }
684 }
506 </script> 685 </script>
507 686
508 <style scoped lang="scss"> 687 <style scoped lang="scss">
509 .app-container{ padding: 0;background: #F5F7F9;} 688 .app-container {
510 .panel-footer .el-button--success{background: #254385;border: none; 689 padding: 0;
690 background: #F5F7F9;
691 }
692
693 .panel-footer .el-button--success {
694 background: #254385;
695 border: none;
511 padding: 0 40px; 696 padding: 0 40px;
512 font-size: 16px; 697 font-size: 16px;
698 }
699
700 .panel-footer .el-button--success.is-plain {
701 background: #fff;
702 border: 1px solid #2ED981;
703 color: #2ED981;
704 }
705
706 .hasChoose {
707 margin: 0 0 20px;
708 display: flex;
709 justify-content: space-between;
710
711 button {
712 position: relative;
713 margin: 10px;
513 } 714 }
514 .panel-footer .el-button--success.is-plain{background: #fff;border:1px solid #2ED981;color: #2ED981;} 715
515 .hasChoose{margin: 0 0 20px;display: flex;justify-content: space-between; 716 .choseItem {
516 button{ position: relative;margin: 10px;} 717 margin: 10px;
517 .choseItem{margin: 10px;position: relative; 718 position: relative;
518 .poClose{position: absolute; right: -6px;top: -12px;z-index: 1;} 719
720 .poClose {
721 position: absolute;
722 right: -6px;
723 top: -12px;
724 z-index: 1;
519 } 725 }
520 } 726 }
521 .chooseForm{ 727 }
522 :deep(.el-form-item__content){background: rgba(245, 247, 249, 0.38);padding: 20px 40px 10px;} 728
523 .el-checkbox{height: auto;} 729 .chooseForm {
524 :deep(.el-checkbox__input){position: absolute;right: 0;top: 0;} 730 :deep(.el-form-item__content) {
525 .name{text-align: center;} 731 background: rgba(245, 247, 249, 0.38);
732 padding: 20px 40px 10px;
526 } 733 }
527 .namesUl{ display: flex; 734
528 flex-wrap: wrap; 735 .el-checkbox {
529 justify-content: space-between; 736 height: auto;
530 li{margin-bottom: 6px}
531 label{margin-right: 4px;}
532 span{margin-right: 10px;color: #666;
533 &:after{content: '、';}
534 &:last-child:after{display: none;}
535 } 737 }
738
739 :deep(.el-checkbox__input) {
740 position: absolute;
741 right: 0;
742 top: 0;
743 }
744
745 .name {
746 text-align: center;
536 } 747 }
748 }
749
750 :deep(.el-avatar) > img {
751 width: 100%;
752 }
753 .panel{height: 100%;}
537 </style> 754 </style>
......
1 <template> 1 <template>
2 <el-dialog 2 <el-dialog
3 v-model="show" :title="title" width="1100px" append-to-body 3 v-model="show" :title="title" width="1100px" append-to-body close-icon="CircleClose" center
4 :close-on-click-modal="false" 4 :close-on-click-modal="false" class="pcloginpop"
5 destroy-on-close 5 destroy-on-close
6 class="boxDialog"
7 > 6 >
8 <el-form ref="dialogRef" :model="form" :rules="rules" label-width="110px" inline> 7 <el-form ref="dialogRef" :model="form" :rules="rules" label-width="120px" inline>
9 <el-row> 8 <el-row :gutter="30">
10 <el-col :span="4" class="touxiang"> 9 <el-col :lg="12" class="touxiang">
11 <el-form-item prop="picUrl"> 10 <el-form-item prop="picUrl" label="个人照片" required>
12 <ImageUpload2 11 <ImageUpload2
13 v-model="form.picUrl" :crop-height="280" :crop-width="200" class="threeFour" :limit="1" 12 v-model="form.picUrl" :crop-height="280" :crop-width="200" class="threeFour" :limit="1"
14 :is-show-tip="false" 13 :is-show-tip="false"
15 /> 14 />
16 </el-form-item> 15 </el-form-item>
17 </el-col> 16 <el-form-item label="姓氏" prop="xing" required>
18 <el-col :span="20"> 17 <el-input v-model="form.xing"/>
19 <el-row>
20 <el-col :span="8">
21 <el-form-item label="姓名" prop="realName">
22 <el-input v-model="form.realName" />
23 </el-form-item> 18 </el-form-item>
24 </el-col> 19 <el-form-item label="短名" prop="shortName" required>
25 <el-col :span="8"> 20 <el-input v-model="form.shortName" placeholder="赛事用名"/>
26 <el-form-item label="国籍" prop="countryId">
27 <el-select v-model="form.countryId" style="width: 100%;" @change="changeCountryId">
28 <el-option v-for="item in countryList" :key="item.id" :label="item.name" :value="item.id" />
29 </el-select>
30 </el-form-item> 21 </el-form-item>
31 </el-col> 22 <el-form-item label="出生日期" prop="birth" required>
32 <el-col :span="8"> 23 <el-date-picker
33 <el-form-item label="民族" prop="nation"> 24 v-model="form.birth"
34 <el-select v-model="form.nation" style="width: 100%;"> 25 style="width: 100%;"
35 <el-option 26 type="date" format="YYYY-MM-DD" value-format="YYYY-MM-DD"
36 v-for="item in nationList" 27 placeholder="请选择出生日期"
37 :key="item.name"
38 :label="item.name"
39 :value="item.name"
40 /> 28 />
41 </el-select>
42 </el-form-item> 29 </el-form-item>
43 </el-col> 30 <el-form-item label="证件类型" prop="idcType" required>
44 <el-col :span="8">
45 <el-form-item label="证件类型" prop="idcType">
46 <el-select v-model="form.idcType" style="width: 100%;"> 31 <el-select v-model="form.idcType" style="width: 100%;">
47 <el-option 32 <el-option
48 v-for="item in certificates" 33 v-for="item in certificates"
...@@ -52,151 +37,104 @@ ...@@ -52,151 +37,104 @@
52 /> 37 />
53 </el-select> 38 </el-select>
54 </el-form-item> 39 </el-form-item>
55 </el-col> 40 <el-form-item label="手机号码" prop="phone" required>
56 <el-col :span="8"> 41 <el-input v-model="form.phone" type="number"/>
57 <el-form-item label="证件号码" prop="idcCode">
58 <el-input v-model="form.idcCode" @blur="checkCode" />
59 </el-form-item>
60 </el-col>
61 <el-col :span="8" />
62 <el-col :span="8">
63 <el-form-item label="性别" prop="sex">
64 <el-radio-group v-model="form.sex">
65 <el-radio label="0"></el-radio>
66 <el-radio label="1"></el-radio>
67 </el-radio-group>
68 </el-form-item>
69 </el-col>
70 <el-col :span="8">
71 <el-form-item label="出生日期" prop="birth">
72 <el-date-picker
73 v-model="form.birth"
74 style="width: 100%;"
75 type="date" format="YYYY-MM-DD" value-format="YYYY-MM-DD"
76 placeholder="请选择出生日期"
77 />
78 </el-form-item>
79 </el-col>
80 <el-col v-if="showRequire" :span="8">
81 <el-form-item label="联系方式" prop="phone">
82 <el-input v-model="form.phone" type="number" />
83 </el-form-item> 42 </el-form-item>
84 </el-col> 43 </el-col>
85 <el-col v-else :span="8"> 44 <el-col :lg="12">
86 <el-form-item label="联系方式"> 45 <el-form-item label="所属国家" prop="countryId" required>
87 <el-input v-model="form.phone" type="number" /> 46 <el-select v-model="form.countryId" style="width: 100%;" @change="changeCountryId">
47 <el-option v-for="item in countryList" :key="item.id" :label="item.name" :value="item.id"/>
48 </el-select>
88 </el-form-item> 49 </el-form-item>
89 </el-col> 50 <el-form-item label="详细地址" prop="address" required>
90 <el-col :span="16"> 51 <el-cascader v-if="form.countryId == 240"
91 <el-form-item label="所在地区" prop="regionId">
92 <el-cascader
93 v-model="form.regionId" 52 v-model="form.regionId"
94 style="width: 100%;" 53 style="width: 100%;margin-bottom: 15px"
95 :options="regionsList" 54 :options="regionsList"
96 :props="{ label:'text' }" 55 :props="{ label:'text' }"
97 /> 56 />
57 <el-input v-model="form.address" type="textarea" :rows="4"/>
58
98 </el-form-item> 59 </el-form-item>
99 </el-col> 60 <el-form-item label="名" prop="ming" required>
100 <el-col :span="8" /> 61 <el-input v-model="form.ming"/>
101 <el-col :span="16">
102 <el-form-item label="详细地址" prop="address">
103 <el-input v-model="form.address" type="textarea" :rows="2" />
104 </el-form-item>
105 </el-col>
106 <el-col :span="8" />
107 <el-col :span="8">
108 <el-form-item label="紧急联系人">
109 <el-input v-model="form.ecName" />
110 </el-form-item> 62 </el-form-item>
111 </el-col> 63 <el-form-item label="性别" prop="sex">
112 <el-col :span="8"> 64 <el-radio-group v-model="form.sex">
113 <el-form-item label="紧急联系电话"> 65 <el-radio label="0"></el-radio>
114 <el-input v-model="form.ecPhone" /> 66 <el-radio label="1"></el-radio>
67 </el-radio-group>
115 </el-form-item> 68 </el-form-item>
116 </el-col> 69 <el-form-item label="邮箱" prop="idcCode" required>
117 <el-col :span="8"> 70 <el-input v-model="form.email"/>
118 <el-form-item label="与本人关系">
119 <el-input v-model="form.ecRelationship" />
120 </el-form-item> 71 </el-form-item>
121 </el-col> 72 <el-form-item label="证件号码" prop="idcCode" required>
122 <el-col :span="24"> 73 <el-input v-model="form.idcCode" @blur="checkCode"/>
123 <el-form-item label="身份标签" prop="labelArr">
124 <el-checkbox-group v-model="form.labelArr" @change="labelvalue">
125 <el-checkbox label="0">运动员</el-checkbox>
126 <el-checkbox label="1">教练</el-checkbox>
127 <el-checkbox label="2">领队</el-checkbox>
128 <el-checkbox label="4">队医</el-checkbox>
129 <el-checkbox label="5">翻译</el-checkbox>
130 <el-checkbox label="6">官员</el-checkbox>
131 <el-checkbox label="3">其他</el-checkbox>
132 </el-checkbox-group>
133 </el-form-item> 74 </el-form-item>
134 </el-col> 75 <el-form-item label="主要会员角色" prop="labelArr">
135 </el-row> 76 <el-select v-model="form.labelArr" multiple @change="labelvalue">
136 </el-col> 77 <el-option v-for="l in labels" :key="l.value" :value="l.value" :label="l.label"/>
137 </el-row> 78 </el-select>
138 <el-row>
139 <el-col :span="20" :offset="4">
140 <el-form-item label="实名认证">
141 <el-row class="shenfen">
142 <el-col :span="12">
143 <ImageUpload v-model="form.idcFrontImg" :limit="1" :is-show-tip="false" />
144 </el-col>
145 <el-col :span="12">
146 <ImageUpload v-model="form.idcBackImg" :limit="1" :is-show-tip="false" />
147 </el-col>
148 </el-row>
149 </el-form-item> 79 </el-form-item>
150 </el-col> 80 </el-col>
151 </el-row> 81 </el-row>
152
153 </el-form> 82 </el-form>
154 <template #footer> 83 <template #footer>
155 <div class="dialog-footer text-center"> 84 <div class="dialog-footer text-center">
156 <el-button type="primary" @click="submitForm">保 存</el-button> 85 <el-button type="primary" class="btn-lineG w200px" round @click="submitForm">确定</el-button>
157 <el-button @click="cancel">取 消</el-button>
158 </div> 86 </div>
159 </template> 87 </template>
160 </el-dialog> 88 </el-dialog>
161
162 </template> 89 </template>
163 90
164 <script setup> 91 <script setup>
165 import { reactive, toRefs, watch } from 'vue' 92 import {reactive, toRefs, watch} from 'vue'
166 import { getCurrentInstance, nextTick, onMounted } from '@vue/runtime-core' 93 import {getCurrentInstance, nextTick, onMounted} from '@vue/runtime-core'
167 import * as match from '@/apiPc/match' 94 import * as match from '@/apiPc/match'
168 import { certificates } from '@/assets/lib/nation' 95 import {certificates} from '@/assets/lib/nation'
169 import { ElMessage } from 'element-plus' 96 import {ElMessage} from 'element-plus'
170 import { nationList } from '@/assets/js/data' 97 import {nationList} from '@/assets/js/data'
171 import _ from 'lodash' 98 import _ from 'lodash'
172 const { proxy } = getCurrentInstance() 99
100 const {proxy} = getCurrentInstance()
173 const emit = defineEmits(['submitForm']) 101 const emit = defineEmits(['submitForm'])
174 const data = reactive({ 102 const data = reactive({
175 form: { 103 form: {
176 countryId: 240 104 countryId: 240
177 }, 105 },
178 rules: { 106 rules: {
179 realName: [{ required: true, message: '必填', trigger: 'blur' }], 107 xing: [{required: true, message: '必填', trigger: 'blur'}],
180 nation: [{ required: true, message: '必填', trigger: 'blur' }], 108 ming: [{required: true, message: '必填', trigger: 'blur'}],
181 countryId: [{ required: true, message: '必填', trigger: 'change' }], 109 shortName: [{required: true, message: '必填', trigger: 'blur'}],
182 idcType: [{ required: true, message: '必填', trigger: 'change' }], 110 email: [{required: true, message: '必填', trigger: 'blur'}],
183 idcCode: [{ required: true, message: '必填', trigger: 'blur' }], 111 countryId: [{required: true, message: '必填', trigger: 'change'}],
184 phone: [{ required: true, message: '必填', trigger: 'blur' }], 112 idcType: [{required: true, message: '必填', trigger: 'change'}],
113 idcCode: [{required: true, message: '必填', trigger: 'blur'}],
114 phone: [{required: true, message: '必填', trigger: 'blur'}],
185 // regionId: [{ required: true, message: '必填', trigger: 'change' }], 115 // regionId: [{ required: true, message: '必填', trigger: 'change' }],
186 birth: [{ required: true, message: '必填', trigger: 'change' }], 116 birth: [{required: true, message: '必填', trigger: 'change'}],
187 // address: [{ required: true, message: '必填', trigger: 'blur' }], 117 address: [{ required: true, message: '必填', trigger: 'blur' }],
188 picUrl: [{ required: true, message: '必填', trigger: 'blur' }], 118 picUrl: [{required: true, message: '必填', trigger: 'blur'}],
189 sex: [{ required: true, message: '必填', trigger: 'change' }], 119 sex: [{required: true, message: '必填', trigger: 'change'}],
190 labelArr: [{ required: true, message: '必填', trigger: 'change' }] 120 labelArr: [{required: true, message: '必填', trigger: 'change'}]
191 }, 121 },
192 show: false, 122 show: false,
193 countryList: [], 123 countryList: [],
194 regionsList: [], 124 regionsList: [],
195 title: '添加人员', 125 labels: [{value: '0', label: '运动员'},
126 {value: '1', label: '教练'},
127 {value: '2', label: '领队'},
128 {value: '3', label: '队医'},
129 {value: '4', label: '翻译'},
130 {value: '5', label: '官员'},
131 {value: '6', label: '其他'}
132 ],
133 title: '添加选手信息',
196 groupId: '0', 134 groupId: '0',
197 showRequire: false 135 showRequire: false
198 }) 136 })
199 const { showRequire, form, rules, show, countryList, regionsList, title, groupId } = toRefs(data) 137 const {showRequire, form, rules, show, countryList, regionsList, title, groupId, labels} = toRefs(data)
200 onMounted(() => { 138 onMounted(() => {
201 getCountryList() 139 getCountryList()
202 getRegionsList() 140 getRegionsList()
...@@ -220,7 +158,7 @@ const open = (params) => { ...@@ -220,7 +158,7 @@ const open = (params) => {
220 }) 158 })
221 } 159 }
222 } 160 }
223 defineExpose({ open }) 161 defineExpose({open})
224 watch(show, (value) => { 162 watch(show, (value) => {
225 if (!value) { 163 if (!value) {
226 form.value = {} 164 form.value = {}
...@@ -399,14 +337,16 @@ function cancel() { ...@@ -399,14 +337,16 @@ function cancel() {
399 height: 200px; 337 height: 200px;
400 } 338 }
401 } 339 }
340
402 .touxiang { 341 .touxiang {
403 :deep(.el-upload--picture-card ){ 342 :deep(.el-upload--picture-card ) {
404 width: 140px; 343 width: 140px;
405 height: 200px; 344 height: 200px;
406 } 345 }
407 } 346 }
347
408 .touxiang { 348 .touxiang {
409 :deep(.el-upload-list__item ){ 349 :deep(.el-upload-list__item ) {
410 width: 140px; 350 width: 140px;
411 height: 200px; 351 height: 200px;
412 } 352 }
...@@ -418,12 +358,13 @@ function cancel() { ...@@ -418,12 +358,13 @@ function cancel() {
418 } 358 }
419 359
420 360
421 .boxDialog{ 361 .boxDialog {
422 .el-dialog__header{ 362 .el-dialog__header {
423 background:linear-gradient(#ed2c22,#fe6d45); 363 background: linear-gradient(#ed2c22, #fe6d45);
424 margin-right: 0; 364 margin-right: 0;
425 height: 52px; 365 height: 52px;
426 span{ 366
367 span {
427 color: #fff; 368 color: #fff;
428 } 369 }
429 } 370 }
......
1 <template> 1 <template>
2 <el-dialog v-model="show" :title="title" width="1000px" append-to-body> 2 <el-dialog v-model="show" :title="title" width="1000px" append-to-body>
3 <el-form :inline="true" :model="query" style="display: flex;"> 3 <div class="funcBtns">
4 <el-button type="primary" @click="addMember">添加选手</el-button>
5 <el-button type="primary" plain @click="importSportman">导入选手</el-button>
6 </div>
7 <div class="from-Card">
8 <el-form :inline="true" :model="query" class="mt20" label-width="60" size="small">
4 <el-form-item label="姓名"> 9 <el-form-item label="姓名">
5 <el-input v-model="query.name" style="width: 120px;" clearable /> 10 <el-input v-model="query.realName" style="width: 120px;" clearable/>
11 </el-form-item>
12 <el-form-item label="短名">
13 <el-input v-model="query.shortName" style="width: 120px;" clearable/>
14 </el-form-item>
15 <el-form-item label="手机号码">
16 <el-input v-model="query.phone" style="width: 120px;" clearable/>
17 </el-form-item>
18 <el-form-item label="邮箱">
19 <el-input v-model="query.email" style="width: 120px;" clearable/>
6 </el-form-item> 20 </el-form-item>
7 <el-form-item label="性别"> 21 <el-form-item label="证件类型">
8 <el-select v-model="query.sex" placeholder="请选择" style="width: 100px;" clearable @change="getList"> 22 <el-input v-model="query.idcType" style="width: 120px;" clearable/>
9 <el-option label="全部" value="" />
10 <el-option label="男" value="1" />
11 <el-option label="女" value="0" />
12 </el-select>
13 </el-form-item> 23 </el-form-item>
14 <el-form-item label="出生日期"> 24 <el-form-item label="证件号">
15 <el-date-picker 25 <el-input v-model="query.idcode" style="width: 120px;" clearable/>
16 v-model="birthArr" clearable 26 </el-form-item>
17 format="YYYY-MM-DD" value-format="YYYY-MM-DD" 27 <el-form-item label="角色">
18 type="daterange" 28 <el-input v-model="query.label" style="width: 120px;" clearable/>
19 range-separator="至"
20 start-placeholder="开始日期"
21 end-placeholder="结束日期"
22 @change="getList"
23 />
24 </el-form-item> 29 </el-form-item>
25 <el-form-item> 30 <el-form-item>
26 <el-button type="primary" @click="getList">查询</el-button> 31 <el-button type="primary" @click="getList">查询</el-button>
27 </el-form-item> 32 </el-form-item>
28 </el-form> 33 </el-form>
34 </div>
29 <p v-if="noPhotoCanSign == 0" class="text-danger">*需上传照片才可报名</p> 35 <p v-if="noPhotoCanSign == 0" class="text-danger">*需上传照片才可报名</p>
30 <el-table ref="allSportmenTable" v-loading="loading" :data="tableData" height="60vh" @selection-change="handleSelectionChange"> 36 <el-table ref="allSportmenTable" v-loading="loading" :data="tableData" height="60vh"
31 <el-table-column type="selection" label="选择" :selectable="selectable" /> 37 @selection-change="handleSelectionChange">
32 <el-table-column label="照片" width="70"> 38 <el-table-column type="selection" label="选择" :selectable="selectable"/>
33 <template #default="scope"> 39 <el-table-column label="所属国家" prop="countryName"/>
34 <img :src="scope.row.picUrl" style="width: 50px"> 40 <el-table-column label="姓氏" prop="xing"/>
35 </template> 41 <el-table-column label="名" prop="ming"/>
36 </el-table-column> 42 <el-table-column label="短名" prop="shortName"/>
37 <el-table-column prop="realName" label="姓名" width="120" /> 43 <el-table-column label="性别" prop="sexStr"/>
38 <el-table-column prop="sex" label="性别" width="50"> 44 <el-table-column label="年龄" prop="age"/>
39 <template #default="scope"> 45 <el-table-column label="出生日期" prop="birth" width="100"/>
40 <span v-if="scope.row.sex=='0'"></span> 46 <el-table-column label="手机号码" prop="phone" width="120"/>
41 <span v-if="scope.row.sex=='1'"></span> 47 <el-table-column label="邮箱" prop="email" width="150"/>
42 </template> 48 <el-table-column label="证件类型" prop="idcTypeStr"/>
43 </el-table-column> 49 <el-table-column label="证件号码" prop="idcCode" width="200"/>
44 <el-table-column label="证件号码" width="80"> 50 <el-table-column label="会员角色" width="200">
45 <template #default="scope"> 51 <template #default="scope">
46 <span v-if="scope.row.idcType=='0'">身份证 </span> 52 <div>
47 <span v-if="scope.row.idcType=='1'">护照 </span> 53 <div style="white-space: nowrap" class="esp">
48 <span v-if="scope.row.idcType=='2'">其他 </span> 54 <span v-for="item in scope.row.label?.split(',')" :key="item.id">
49 </template> 55 <el-tag type="warning" size="small" v-if="item==='0'" effect="plain" class="ml10">运动员</el-tag>
50 </el-table-column> 56 <el-tag type="warning" size="small" v-if="item==='1'" effect="plain" class="ml10">教练</el-tag>
51 <el-table-column prop="idcCode" label="证件号码" width="200" /> 57 <el-tag type="warning" size="small" v-if="item==='2'" effect="plain" class="ml10">领队</el-tag>
52 <el-table-column label="出生日期" width="120"> 58 <el-tag type="warning" size="small" v-if="item==='3'" effect="plain" class="ml10">队医</el-tag>
53 <template #default="scope"> 59 <el-tag type="warning" size="small" v-if="item==='4'" effect="plain" class="ml10">翻译</el-tag>
54 <span>{{ scope.row.birth.substring(0,10) }}</span> 60 <el-tag type="warning" size="small" v-if="item==='5'" effect="plain" class="ml10">官员</el-tag>
61 <el-tag type="warning" size="small" v-if="item==='6'" effect="plain" class="ml10">其他</el-tag>
62 </span>
63 </div>
64 </div>
55 </template> 65 </template>
56 </el-table-column> 66 </el-table-column>
57 <el-table-column prop="phone" label="联系方式" /> 67 <el-table-column label="详细地址" prop="address"/>
58 68
59 <el-table-column label="操作" width="120"> 69 <el-table-column label="操作" width="120" fixed="right" align="center">
60 <template #default="scope"> 70 <template #default="scope">
61 <el-button type="text" @click="editPerson(scope.row)">编辑</el-button> 71 <el-button type="text" @click="editPerson(scope.row)">编辑</el-button>
62 </template> 72 </template>
...@@ -70,17 +80,19 @@ ...@@ -70,17 +80,19 @@
70 </template> 80 </template>
71 </el-dialog> 81 </el-dialog>
72 82
73 <dialogPersonInfo ref="editPersonInfoRef" @submitForm="getList" /> 83 <addCoach ref="dialogAddCoach" @submitForm="getList"/>
74 84 <Import ref="dialogImportProps"/>
75 </template> 85 </template>
76 86
77 <script setup> 87 <script setup>
78 import { reactive, ref, toRefs, watch } from 'vue' 88 import {reactive, ref, toRefs, watch} from 'vue'
79 import { getCurrentInstance, nextTick, onMounted } from '@vue/runtime-core' 89 import {getCurrentInstance, nextTick, onMounted} from '@vue/runtime-core'
80 import * as match from '@/apiPc/match' 90 import * as match from '@/apiPc/match'
81 import dialogPersonInfo from '../components/addCoach' 91 import addCoach from '../components/addCoach'
92 import {getGroupPersonList} from "@/apiPc/match";
93 import Import from '../components/import'
82 94
83 const { proxy } = getCurrentInstance() 95 const {proxy} = getCurrentInstance()
84 const emit = defineEmits(['submitForm', 'transfer']) 96 const emit = defineEmits(['submitForm', 'transfer'])
85 const data = reactive({ 97 const data = reactive({
86 query: {}, 98 query: {},
...@@ -91,7 +103,7 @@ const data = reactive({ ...@@ -91,7 +103,7 @@ const data = reactive({
91 title: '选择运动员', 103 title: '选择运动员',
92 noPhotoCanSign: 0 104 noPhotoCanSign: 0
93 }) 105 })
94 const { query, tableData, show, title, birthArr, loading, noPhotoCanSign } = toRefs(data) 106 const {query, tableData, show, title, birthArr, loading, noPhotoCanSign} = toRefs(data)
95 let matchId 107 let matchId
96 let groupId 108 let groupId
97 let choosedList = [] 109 let choosedList = []
...@@ -123,8 +135,8 @@ const getList = () => { ...@@ -123,8 +135,8 @@ const getList = () => {
123 query.value.birthBegin = birthArr.value[0] 135 query.value.birthBegin = birthArr.value[0]
124 query.value.birthEnd = birthArr.value[1] 136 query.value.birthEnd = birthArr.value[1]
125 } 137 }
126 match.getMyGroupForCptFilter(groupId, matchId, query.value).then(res => { 138 match.getGroupPersonList(query.value, groupId).then(res => {
127 tableData.value = res.data.athletes 139 tableData.value = res.rows
128 nextTick(() => { 140 nextTick(() => {
129 for (const n in tableData.value) { 141 for (const n in tableData.value) {
130 if (choosedIds.indexOf(tableData.value[n].id) > -1) { 142 if (choosedIds.indexOf(tableData.value[n].id) > -1) {
...@@ -140,24 +152,44 @@ function handleSelectionChange(val) { ...@@ -140,24 +152,44 @@ function handleSelectionChange(val) {
140 // console.log(val) 152 // console.log(val)
141 choosedList = val 153 choosedList = val
142 } 154 }
155
143 function submitForm() { 156 function submitForm() {
144 emit('transfer', choosedList) 157 emit('transfer', choosedList)
145 // emit('submitForm', choosedList) 158 // emit('submitForm', choosedList)
146 show.value = false 159 show.value = false
147 } 160 }
161
148 function cancel() { 162 function cancel() {
149 show.value = false 163 show.value = false
150 } 164 }
165
151 function editPerson(row) { 166 function editPerson(row) {
152 const params = { 167 const params = {
153 id: row.id, 168 id: row.id,
154 groupId: groupId 169 groupId: groupId
155 } 170 }
156 proxy.$refs['editPersonInfoRef'].open(params) 171 proxy.$refs['dialogAddCoach'].open(params)
157 } 172 }
158 173
159 </script> 174 function addMember() {
160 175 const params = {
161 <style scoped> 176 title: '添加人员',
177 id: 0,
178 groupId: groupId.value
179 }
180 proxy.$refs['dialogAddCoach'].open(params)
181 }
162 182
183 function importSportman() {
184 const params = {
185 title: '批量导入选手',
186 groupId: groupId.value
187 }
188 proxy.$refs['dialogImportProps'].open(params)
189 }
190 </script>
191 <style scoped lang="scss">
192 .el-form--inline .el-form-item {
193 width: auto;
194 }
163 </style> 195 </style>
......
1 <template> 1 <template>
2 <el-dialog v-model="show" :title="title" width="500px" append-to-body :close-on-click-modal="false"> 2 <el-dialog v-model="show" :title="title" width="500px" close-icon="CircleClose"
3 append-to-body :close-on-click-modal="false" class="pcloginpop" center>
3 <el-form ref="dialogRef" label-width="100px"> 4 <el-form ref="dialogRef" label-width="100px">
4 <el-form-item label="下载模板"> 5 <el-form-item label="下载模板">
5 <el-link href="/file/sportsmanTemplate.xlsx" type="primary" target="_blank">人员模板</el-link> 6 <el-link href="/file/sportsmanTemplate.xlsx" type="primary" target="_blank">人员模板</el-link>
6 </el-form-item> 7 </el-form-item>
7 8
8 <el-form-item label="上传模板" prop="discount"> 9 <el-form-item label="上传模板" prop="discount">
9 <fileUpload ref="upload" name="excel" :action="action" :accept="accept" @uploadSuccess="uploadSuccess" /> 10 <fileImport ref="upload" name="excel" :action="action" @uploadSuccess="uploadSuccess" />
10 </el-form-item> 11 </el-form-item>
11 </el-form> 12 </el-form>
12 13
...@@ -22,14 +23,15 @@ import * as match from '@/apiPc/match' ...@@ -22,14 +23,15 @@ import * as match from '@/apiPc/match'
22 import { ElMessage, ElMessageBox } from 'element-plus' 23 import { ElMessage, ElMessageBox } from 'element-plus'
23 24
24 const { proxy } = getCurrentInstance() 25 const { proxy } = getCurrentInstance()
25 26 import useUserStore from '@/store/modules/user'
26 const emit = defineEmits(['submitForm']) 27 const emit = defineEmits(['submitForm'])
27 28
28 const action = ref('') 29 const action = ref('')
29 const accept = ref('.xlsx') 30 const accept = ref('.xlsx')
30 const title = ref('') 31 const title = ref('')
31 const show = ref(false) 32 const show = ref(false)
32 33 const userStore = useUserStore()
34 const groupId = useUserStore().group.id || 0
33 function uploadSuccess(res) { 35 function uploadSuccess(res) {
34 console.log(res) 36 console.log(res)
35 cancel() 37 cancel()
...@@ -48,7 +50,7 @@ function uploadSuccess(res) { ...@@ -48,7 +50,7 @@ function uploadSuccess(res) {
48 const open = (params) => { 50 const open = (params) => {
49 show.value = true 51 show.value = true
50 title.value = params.title 52 title.value = params.title
51 action.value = `/systemj/personInfo/importPerson/${params.groupId}` 53 action.value = `/systemj/personInfo/importPerson/${groupId}`
52 } 54 }
53 defineExpose({ 55 defineExpose({
54 open 56 open
......
...@@ -24,7 +24,7 @@ ...@@ -24,7 +24,7 @@
24 </el-timeline-item> 24 </el-timeline-item>
25 </el-timeline> 25 </el-timeline>
26 26
27 <el-empty image="@/assets/img/order_no.png" image-size="228" v-if="matchData.cptScheduleList?.length==0" description=" " /> 27 <el-empty image="@/assets/img/order_no.png" image-size="228" v-if="matchData.cptScheduleList?.length==0" description="" />
28 28
29 </div> 29 </div>
30 </template> 30 </template>
......
1 <template>
2 <!-- 人员表格-->
3 <el-table :data="tableData" class="mt20">
4 <el-table-column type="index" label="序号" width="80" align="center"/>
5 <el-table-column label="所属国家" prop="countryName"/>
6 <el-table-column label="姓氏" prop="xing"/>
7 <el-table-column label="名" prop="ming"/>
8 <el-table-column label="短名" prop="shortName"/>
9 <el-table-column label="性别" prop="sexStr"/>
10 <el-table-column label="年龄" prop="age"/>
11 <el-table-column label="出生日期" prop="birth" width="100"/>
12 <el-table-column label="手机号码" prop="phone" width="120"/>
13 <el-table-column label="邮箱" prop="email" width="150"/>
14 <el-table-column label="证件类型" prop="idcTypeStr"/>
15 <el-table-column label="证件号码" prop="idcCode" width="200"/>
16 <el-table-column label="会员角色">
17 <template #default="scope">
18 <span v-for="item in scope.row.label?.split(',')" :key="item.id">
19 <el-tag type="primary" size="mini" v-if="item==='0'" effect="dark" class="ml10">运动员</el-tag>
20 <el-tag type="info" size="mini" v-if="item==='1'" effect="dark" class="ml10">教练</el-tag>
21 <el-tag type="info" size="mini" v-if="item==='2'" effect="dark" class="ml10">领队</el-tag>
22 <el-tag type="info" size="mini" v-if="item==='3'" effect="dark" class="ml10">队医</el-tag>
23 <el-tag type="info" size="mini" v-if="item==='4'" effect="dark" class="ml10">翻译</el-tag>
24 <el-tag type="info" size="mini" v-if="item==='5'" effect="dark" class="ml10">官员</el-tag>
25 <el-tag type="info" size="mini" v-if="item==='6'" effect="dark" class="ml10">其他</el-tag>
26 </span>
27 </template>
28 </el-table-column>
29 <el-table-column label="详细地址" prop="address"/>
30 <el-table-column label="操作" fixed="right" width="160" header-align="center" align="center">
31 <template #default="scope">
32 <a class="text-primary pd10" @click="editCoach(scope.row.id,scope.row.groupId)">编辑</a>
33 <a class="text-primary pd10" @click="delperson(scope.row)">删除</a>
34 </template>
35 </el-table-column>
36 </el-table>
37 <!-- <paginationPc-->
38 <!-- v-show="total>0"-->
39 <!-- v-model:page="query.pageNum"-->
40 <!-- v-model:limit="query.pageSize"-->
41 <!-- :total="total"-->
42 <!-- @pagination="getList"-->
43 <!-- />-->
44 </template>
45
46 <script setup>
47 const props = defineProps({
48 tableData:{
49 type:Array,
50 required:true
51 }
52 })
53 const editCoach = () => {
54
55 }
56 </script>
57
58 <style scoped>
59
60 </style>
...@@ -16,7 +16,8 @@ ...@@ -16,7 +16,8 @@
16 </el-radio> 16 </el-radio>
17 </div> 17 </div>
18 </el-radio-group> 18 </el-radio-group>
19 <el-empty v-if="projectList.length==0" description="无可选项目" /> 19 <el-empty v-if="projectList.length==0" image="@/assets/img/order_no.png" image-size="228" description="无可选项目" />
20
20 </el-form-item> 21 </el-form-item>
21 </el-col> 22 </el-col>
22 <el-col :span="8"> 23 <el-col :span="8">
......
...@@ -11,10 +11,10 @@ ...@@ -11,10 +11,10 @@
11 <h3> 11 <h3>
12 {{ matchData.name }} 12 {{ matchData.name }}
13 </h3> 13 </h3>
14 <p class="ppl"><label class="bm1">比赛时间:</label>2024.07.21-{{ matchData.endTime }}</p> 14 <p class="ppl"><label class="bm1">比赛时间:</label>{{matchData.beginTime?.slice(0,10)}}{{ matchData.endTime?.slice(0,10) }}</p>
15 <p class="ppl"><label class="bm2">赛事级别:</label>{{ matchData.level }}</p> 15 <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> 16 <p class="ppl"><label class="bm3">&ensp;&ensp;&ensp;&ensp;点:</label>{{ matchData.address }}</p>
17 <p class="ppl"><label class="bm4">报名截止:</label>{{ matchData.signEndTime }}</p> 17 <p class="ppl"><label class="bm4">报名截止:</label>{{ matchData.signEndTime?.slice(0,10) }}</p>
18 </el-col> 18 </el-col>
19 <el-col :lg="8" :md="12" :xl="8" v-if="matchData.type=='0'"> 19 <el-col :lg="8" :md="12" :xl="8" v-if="matchData.type=='0'">
20 <p class="countDownTitle"><span>报名截止倒计时</span></p> 20 <p class="countDownTitle"><span>报名截止倒计时</span></p>
...@@ -40,37 +40,37 @@ ...@@ -40,37 +40,37 @@
40 40
41 <el-row gutter="14"> 41 <el-row gutter="14">
42 <el-col :lg="4"> 42 <el-col :lg="4">
43 <div class="funcBtn"> 43 <div class="funcBtn" @click="building">
44 <img src="@/assets/dance/btn04.png"/> 44 <img src="@/assets/dance/btn04.png"/>
45 <h4>票务预订</h4> 45 <h4>票务预订</h4>
46 </div> 46 </div>
47 </el-col> 47 </el-col>
48 <el-col :lg="4"> 48 <el-col :lg="4">
49 <div class="funcBtn"> 49 <div class="funcBtn" @click="building">
50 <img src="@/assets/dance/btn01.png"/> 50 <img src="@/assets/dance/btn01.png"/>
51 <h4>酒店预约</h4> 51 <h4>酒店预约</h4>
52 </div> 52 </div>
53 </el-col> 53 </el-col>
54 <el-col :lg="4"> 54 <el-col :lg="4">
55 <div class="funcBtn"> 55 <div class="funcBtn" @click="building">
56 <img src="@/assets/dance/btn02.png"/> 56 <img src="@/assets/dance/btn02.png"/>
57 <h4>车辆预约</h4> 57 <h4>车辆预约</h4>
58 </div> 58 </div>
59 </el-col> 59 </el-col>
60 <el-col :lg="4"> 60 <el-col :lg="4">
61 <div class="funcBtn"> 61 <div class="funcBtn" @click="building">
62 <img src="@/assets/dance/btn03.png"/> 62 <img src="@/assets/dance/btn03.png"/>
63 <h4>餐饮预订</h4> 63 <h4>餐饮预订</h4>
64 </div> 64 </div>
65 </el-col> 65 </el-col>
66 <el-col :lg="4"> 66 <el-col :lg="4">
67 <div class="funcBtn"> 67 <div class="funcBtn" @click="building">
68 <img src="@/assets/dance/btn05.png"/> 68 <img src="@/assets/dance/btn05.png"/>
69 <h4>化妆预约</h4> 69 <h4>化妆预约</h4>
70 </div> 70 </div>
71 </el-col> 71 </el-col>
72 <el-col :lg="4"> 72 <el-col :lg="4">
73 <div class="funcBtn"> 73 <div class="funcBtn" @click="building">
74 <img src="@/assets/dance/btn06.png"/> 74 <img src="@/assets/dance/btn06.png"/>
75 <h4>拍照预约</h4> 75 <h4>拍照预约</h4>
76 </div> 76 </div>
...@@ -86,7 +86,6 @@ ...@@ -86,7 +86,6 @@
86 </ul> 86 </ul>
87 </div> 87 </div>
88 <matchInfo :form="matchData" v-if="menu[0].active==1"/> 88 <matchInfo :form="matchData" v-if="menu[0].active==1"/>
89 <match-schedule-list :match-data="matchData" v-if="menu[2].active==1"/>
90 <div v-if="menu[1].active==1"> 89 <div v-if="menu[1].active==1">
91 <div class="collapsebox"> 90 <div class="collapsebox">
92 <el-collapse v-if="matchData.cptProjectList?.length > 0"> 91 <el-collapse v-if="matchData.cptProjectList?.length > 0">
...@@ -176,6 +175,44 @@ ...@@ -176,6 +175,44 @@
176 <el-empty image="@/assets/img/order_no.png" image-size="228" v-if="matchData.cptProjectList?.length == 0" description=" "/> 175 <el-empty image="@/assets/img/order_no.png" image-size="228" v-if="matchData.cptProjectList?.length == 0" description=" "/>
177 </div> 176 </div>
178 </div> 177 </div>
178 <match-schedule-list :match-data="matchData" v-if="menu[2].active==1"/>
179 <div v-if="menu[3].active==1">
180 <el-row :gutter="20" v-if="matchData.signType == '0'">
181 <el-col v-for="t in signDoneGroupList" :key="t.id" :span="8">
182 <div class="teamItem">
183 <el-avatar :size="60" :src="t.imgUrl||t.avatar" />
184 <span class="name">{{ t.name }}</span>
185 </div>
186 </el-col>
187 </el-row>
188 <el-row :gutter="20" v-else>
189 <el-col :span="24" v-for="(t,index) in signDoneGroupList" :key="t.id">
190 <div class="nowteamItem">
191 <span>{{index+1}}.</span>
192 <el-avatar :size="80" :src="t.imgUrl||t.avatar" :fit="cover"/>
193 <div class="info">
194 <h3 class="name">{{ t.name }}</h3>
195 <p v-if="t.extraInfo">
196 <span v-for="(ee,index) in JSON.parse(t.extraInfo)" :key="index" v-show="(ee?.type == '0'||ee?.type == '4')&&index<2">
197 {{ee.value}}&ensp;&ensp;
198 </span>
199 </p>
200 </div>
201 <p class="rr"><span>{{t.renCi}}</span> 人参赛</p>
202 </div>
203 </el-col>
204 </el-row>
205 <el-empty image="@/assets/img/order_no.png" image-size="228" v-if="(signDoneGroupList==null)||(signDoneGroupList.length==0)" description="" />
206 </div>
207 <div v-if="menu[4].active==1">
208 <!-- 成绩-->
209 <el-empty image="@/assets/img/order_no.png" image-size="228" description="暂无成绩" />
210 </div>
211 <div v-if="menu[5].active==1" class="pd20">
212 <div class="xzbox" v-html="matchData.signKnow">
213
214 </div>
215 </div>
179 </el-card> 216 </el-card>
180 <div style="height: 20px"></div> 217 <div style="height: 20px"></div>
181 218
...@@ -232,24 +269,6 @@ ...@@ -232,24 +269,6 @@
232 </el-col> 269 </el-col>
233 </el-row> 270 </el-row>
234 </div> 271 </div>
235
236 <el-dialog v-model="popupGroupList" title="请选择参赛队" width="600px">
237 <div class="popList">
238 <div v-for="(t,index) in groups" :key="index" class="teamItem" @click="getThisGroupId(t)">
239 <el-avatar :size="60" :src="t.imgUrl" />
240 <span class="name">{{ t.name }}({{ t.abreviations }})</span>
241 ({{ t.typeStr }})
242 </div>
243 <el-button plain style="width: 100%;height: 50px;font-size:16px;" type="success" @click="goAddgroup()">
244 <el-icon>
245 <Plus />
246 </el-icon>
247 新建参赛队
248 </el-button>
249 </div>
250 </el-dialog>
251
252 <groupDetail ref="dialogEditGroup" @submitForm="getMyGroupList" />
253 </div> 272 </div>
254 </template> 273 </template>
255 274
...@@ -276,20 +295,30 @@ const data = reactive({ ...@@ -276,20 +295,30 @@ const data = reactive({
276 activeName2:'first', 295 activeName2:'first',
277 popupGroupList:false, 296 popupGroupList:false,
278 menu:[{name:'赛事详情',active:1},{name:'赛事设项',active:0},{name:'日程',active:0},{name:'参赛队',active:0},{name:'成绩',active:0},{name:'报名须知',active:0}], 297 menu:[{name:'赛事详情',active:1},{name:'赛事设项',active:0},{name:'日程',active:0},{name:'参赛队',active:0},{name:'成绩',active:0},{name:'报名须知',active:0}],
279 menu1:[{name:'分站赛',active:1},{name:'赛事详情',active:0},{name:'日程',active:0}] 298 menu1:[{name:'分站赛',active:1},{name:'赛事详情',active:0},{name:'日程',active:0}],
299 signDoneGroupList: []
280 }) 300 })
281 const {matchData,matchId,groupId,activeName2,popupGroupList,menu,menu1} = toRefs(data) 301 const {matchData,matchId,groupId,activeName2,popupGroupList,menu,menu1,signDoneGroupList} = toRefs(data)
282 onMounted(() => { 302 onMounted(() => {
283 // matchId.value = route.params.id 303 // matchId.value = route.params.id
284 matchId.value = '1759477811976183809' 304 matchId.value = '1759477811976183809'
285 getMatch(matchId.value) 305 getMatch(matchId.value)
306 getGroupListByCptId(matchId.value)
286 }) 307 })
308 function building() {
309 ElMessage.warning('暂未开发,敬请期待!')
310 }
287 function getMatch(id) { 311 function getMatch(id) {
288 if(id!=0) 312 if(id!=0)
289 match.getMatchById({ id: id }).then(res => { 313 match.getMatchById({ id: id }).then(res => {
290 matchData.value = res.data 314 matchData.value = res.data
291 }) 315 })
292 } 316 }
317 function getGroupListByCptId(id) {
318 match.getGroupListByCptId(id).then(res => {
319 signDoneGroupList.value = res.data
320 })
321 }
293 function changeMenu(menu,l){ 322 function changeMenu(menu,l){
294 for(const n of menu){ 323 for(const n of menu){
295 if(n==l){ 324 if(n==l){
...@@ -309,40 +338,37 @@ function choseSignType() { ...@@ -309,40 +338,37 @@ function choseSignType() {
309 }) 338 })
310 } else { 339 } else {
311 // 团队报名 团体-队伍报名 340 // 团队报名 团体-队伍报名
312 getMyGroupList() 341 match.getMyGroupList().then(res => {
342 checkIsSign(matchData.value.signType,res.data[0].id).then(() => {
343 goSignType2(res.data[0].id)
344 })
345 })
346
313 } 347 }
314 } 348 }
349 function goSignType2(groupId) {
350 router.push({
351 path: `${route.params.id}/teamSign`,
352 query: {
353 matchId: matchId.value,
354 groupId: groupId,
355 signType: matchData.value.signType
356 }
357 })
358 }
315 // 获取已报信息 359 // 获取已报信息
316 function checkIsSign(signType) { 360 function checkIsSign(signType,groupId) {
317 var obj = { 361 var obj = {
318 cptId: matchId.value, 362 cptId: matchId.value,
319 groupId: groupId.value || '' 363 groupId: groupId
320 } 364 }
321 return match.getMySignInfo(obj).then(res => { 365 return match.getMySignInfo(obj).then(res => {
322 if (res.data.type == '1') { 366 if (res.data.type == '1') {
323 let str = '' 367 ElMessage.error('已报名,不能重复报名')
324 if (signType == '0') {
325 str = '已报名,不能重复报名'
326 } else {
327 str = '该参赛队已报名,请选择其他参赛队'
328 }
329 ElMessage.error(str)
330 return Promise.reject('rejected message') 368 return Promise.reject('rejected message')
331 } 369 }
332 }) 370 })
333 } 371 }
334 function getMyGroupList(){
335 match.getMyGroupList().then(res => {
336 groups.value = res.data
337 popupGroupList.value = true
338 })
339 }
340 function goAddgroup() {
341 // 新团
342 proxy.$refs['dialogEditGroup'].open({
343 title: '新建参赛队'
344 })
345 }
346 </script> 372 </script>
347 373
348 <style scoped lang="scss"> 374 <style scoped lang="scss">
......
...@@ -66,46 +66,7 @@ ...@@ -66,46 +66,7 @@
66 <div style="padding: 0 20px 20px"> 66 <div style="padding: 0 20px 20px">
67 <!-- 赛事详情--> 67 <!-- 赛事详情-->
68 <div class="indexTitle"><h3 class="leftboderTT">Organization</h3></div> 68 <div class="indexTitle"><h3 class="leftboderTT">Organization</h3></div>
69 <el-row :gutter="20"> 69 <div class="xzbox"></div>
70 <el-col :lg="8">
71 <div class="dlbox">
72 <dl>
73 <dt>Organizer</dt>
74 <dd>World Sports Dance Federation(WDSF)</dd>
75 <dd>Asian Sports Dance Federation(DSA)</dd>
76 <dd>China Sports Federation(CDSF)</dd>
77 </dl>
78 </div>
79 </el-col>
80 <el-col :lg="8">
81 <div class="dlbox">
82 <dl>
83 <dt>Undertaker</dt>
84 <dd>Jiangsu Provincial Sports Federation</dd>
85 <dd>Wuxi Municipal People's Government</dd>
86 </dl>
87 </div>
88 </el-col>
89 <el-col :lg="8">
90 <div class="dlbox">
91 <dl>
92 <dt>Co-organizer</dt>
93 <dd>Wuxi Sports Bureau</dd>
94 <dd>Jiangsu Wuxi Economic Development Zone Management Committee</dd>
95 <dd>Jiangsu Provincial Sports Dance Association</dd>
96 </dl>
97 </div>
98 </el-col>
99 <el-col :lg="8">
100 <div class="dlbox">
101 <dl>
102 <dt>Operator</dt>
103 <dd>Jijin Wuxi Sports and Health Co., Ltd</dd>
104 </dl>
105 </div>
106 </el-col>
107
108 </el-row>
109 <div class="indexTitle"><h3 class="leftboderTT">Notes</h3></div> 70 <div class="indexTitle"><h3 class="leftboderTT">Notes</h3></div>
110 <div class="xzbox"> 71 <div class="xzbox">
111 1. Each unit is limited to reporting one team, each team needs to report one leader (athletes can also serve), and athletes are limited to reporting four<br> 72 1. Each unit is limited to reporting one team, each team needs to report one leader (athletes can also serve), and athletes are limited to reporting four<br>
......
1 <template>
2 <div>
3 <div class="box">
4 <el-card :body-style="{ padding: '0px' }" class="mt20 mb60">
5 <div slot="header">
6 <div class="bg-lineg">报名缴费清单</div>
7 </div>
8 <div class="pd20">
9 <div class="border-info">
10 <el-row>
11 <el-col :lg="8">
12 <div class="item"><label>赛事名称</label>{{ matchInfo.name }}</div>
13 </el-col>
14 <el-col :lg="8">
15 <div class="item"><label>赛事类型</label>{{ matchInfo.name }}</div>
16 </el-col>
17 <el-col :lg="8">
18 <div class="item"><label>赛事时间</label>{{ matchInfo.beginTime?.slice(0, 10) }}
19 {{ matchInfo.endTime?.slice(0, 10) }}
20 </div>
21 </el-col>
22 <el-col :lg="8">
23 <div class="item"><label>报名时间</label>{{ matchInfo.signBeginTime?.slice(0, 10) }}
24 {{ matchInfo.signEndTime?.slice(0, 10) }}
25 </div>
26 </el-col>
27 <el-col :lg="16">
28 <div class="item"><label>比赛地址</label>{{ matchInfo.address }}</div>
29 </el-col>
30 </el-row>
31
32 </div>
33 <div class="border-info gray mt20">
34 <el-row>
35 <el-col :lg="8">
36 <div class="item"><label>团队名称</label>{{ matchInfo.signFee }}</div>
37 <div class="item"><label>团队类型</label>{{ matchInfo.signFee }}</div>
38 </el-col>
39 <el-col :lg="8">
40 <div class="item"><label>负责人姓名</label>{{ matchInfo.signFee }}</div>
41 <div class="item"><label>参赛队名称</label>{{ matchInfo.signFee }}</div>
42
43 </el-col>
44 <el-col :lg="8">
45 <div class="item"><label>邮箱</label>{{ matchInfo.signFee }}</div>
46 <div class="item"><label>详细地址</label>{{ matchInfo.signFee }}</div>
47 </el-col>
48 </el-row>
49 </div>
50 <div class="border-info mt20">
51 <el-row>
52 <el-col :lg="8">
53 <div class="item"><label>教练</label>{{ matchInfo.signFee }}</div>
54 <div class="item"><label>翻译</label>{{ matchInfo.signFee }}</div>
55 </el-col>
56 <el-col :lg="8">
57 <div class="item"><label>领队</label>{{ matchInfo.signFee }}</div>
58 <div class="item"><label>官员</label>{{ matchInfo.signFee }}</div>
59 </el-col>
60 <el-col :lg="8">
61 <div class="item"><label>队医</label>{{ matchInfo.signFee }}</div>
62 <div class="item"><label>其他</label>{{ matchInfo.signFee }}</div>
63 </el-col>
64 </el-row>
65 </div>
66
67 <div class="mt20">
68 <div class="leftboderTT">参赛人员保险费</div>
69 <!-- 人员列表-->
70 <el-table :data="tableData" border style="width: 100%" class="mt20" :span-method="arraySpanMethod">
71 <el-table-column label="所属国家"/>
72 <el-table-column prop="name" label="姓氏" width="180" align="center"></el-table-column>
73 <el-table-column label="名"/>
74 <el-table-column label="短名"/>
75 <el-table-column prop="sex" label="性别" width="180" align="center"></el-table-column>
76 <el-table-column prop="age" label="年龄" width="180" align="center"></el-table-column>
77 <el-table-column label="出生日期" align="center"/>
78 <el-table-column prop="phone" label="手机号码" width="180" align="center"></el-table-column>
79 <el-table-column label="邮箱"/>
80 <el-table-column label="证件类型" align="center"/>
81 <el-table-column label="证件号码"/>
82 <el-table-column label="报项" fixed="right">
83 <template #default="scope">
84 <ol>
85 <li v-for="item in scope.row.items" :key="item.id">{{ item.name }}</li>
86 </ol>
87 </template>
88 </el-table-column>
89 <el-table-column label="保险费" fixed="right" align="center">
90 <template #default="scope">
91 <span class="text-primary">¥{{ scope.row.signFee }}/人</span>
92 </template>
93 </el-table-column>
94 </el-table>
95 </div>
96
97 <div class="mt20">
98 <div class="leftboderTT">参赛设项报名费</div>
99 <!-- 报项列表-->
100 <el-table :data="tableData" border style="width: 100%" class="mt20">
101 <el-table-column label="组别代码" align="center"/>
102 <el-table-column label="组别" align="center"/>
103 <el-table-column label="舞种" align="center"/>
104 <el-table-column label="参赛说明"/>
105 <el-table-column label="参赛运动员"/>
106 <el-table-column label="补充信息"/>
107 <el-table-column label="报名费" align="center">
108 <template #default="scope">
109 <span class="text-primary">¥{{ scope.row.signFee }}/人</span>
110 </template>
111 </el-table-column>
112 </el-table>
113 </div>
114 </div>
115
116 </el-card>
117
118 </div>
119
120 </div>
121 </template>
122
123 <script setup>
124 import {ref} from 'vue'
125
126 const matchInfo = ref({})
127 const tableData = ref([])
128
129 </script>
130
131 <style scoped lang="scss">
132 .leftboderTT{font-weight: 600;
133 font-size: 16px;
134 color: #453DEA;}
135 .bg-lineg {
136 height: 40px;
137 line-height: 40px;
138 font-size: 18px;
139 text-align: center;
140 }
141 </style>
1 <template>
2 <div>
3 <div class="box ph-30">
4 <el-card class="mb20">
5 <el-steps :active="activeStep" align-center>
6 <el-step title="团队信息"/>
7 <el-step title="教练/领队/其他"/>
8 <el-step title="选手报名"/>
9 <el-step title="提交审核"/>
10 </el-steps>
11 </el-card>
12 <el-card>
13 <div class="border-info">
14 <el-row>
15 <el-col :lg="8">
16 <div class="item"><label>赛事名称</label>{{ matchInfo.name }}</div>
17 </el-col>
18 <el-col :lg="8">
19 <div class="item"><label>赛事类型</label>{{ matchInfo.name }}</div>
20 </el-col>
21 <el-col :lg="8">
22 <div class="item"><label>赛事时间</label>{{ matchInfo.beginTime?.slice(0, 10) }}
23 {{ matchInfo.endTime?.slice(0, 10) }}
24 </div>
25 </el-col>
26 <el-col :lg="8">
27 <div class="item"><label>报名时间</label>{{ matchInfo.signBeginTime?.slice(0, 10) }}
28 {{ matchInfo.signEndTime?.slice(0, 10) }}
29 </div>
30 </el-col>
31 <el-col :lg="16">
32 <div class="item"><label>比赛地址</label>{{ matchInfo.address }}</div>
33 </el-col>
34 </el-row>
35
36 </div>
37 <div class="border-info gray mt20">
38 <el-row>
39 <el-col :lg="8">
40 <div class="item"><label>团队名称</label>{{ matchInfo.signFee }}</div>
41 <div class="item"><label>团队类型</label>{{ matchInfo.signFee }}</div>
42 </el-col>
43 <el-col :lg="8">
44 <div class="item"><label>负责人姓名</label>{{ matchInfo.signFee }}</div>
45 <div class="item"><label>参赛队名称</label>{{ matchInfo.signFee }}</div>
46
47 </el-col>
48 <el-col :lg="8">
49 <div class="item"><label>邮箱</label>{{ matchInfo.signFee }}</div>
50 <div class="item"><label>详细地址</label>{{ matchInfo.signFee }}</div>
51 </el-col>
52 </el-row>
53 </div>
54 <div class="border-info mt20">
55 <el-row>
56 <el-col :lg="8">
57 <div class="item"><label>教练</label>{{ matchInfo.signFee }}</div>
58 <div class="item"><label>翻译</label>{{ matchInfo.signFee }}</div>
59 </el-col>
60 <el-col :lg="8">
61 <div class="item"><label>领队</label>{{ matchInfo.signFee }}</div>
62 <div class="item"><label>官员</label>{{ matchInfo.signFee }}</div>
63 </el-col>
64 <el-col :lg="8">
65 <div class="item"><label>队医</label>{{ matchInfo.signFee }}</div>
66 <div class="item"><label>其他</label>{{ matchInfo.signFee }}</div>
67 </el-col>
68 </el-row>
69 </div>
70
71 <div class="mt20">
72 <div class="leftboderTT">参赛人员清单</div>
73 <el-table :data="tableData" border style="width: 100%" class="mt20" :span-method="arraySpanMethod">
74 <el-table-column label="所属国家"/>
75 <el-table-column prop="name" label="姓氏" width="180" align="center"></el-table-column>
76 <el-table-column label="名"/>
77 <el-table-column label="短名"/>
78 <el-table-column prop="sex" label="性别" width="180" align="center"></el-table-column>
79 <el-table-column prop="age" label="年龄" width="180" align="center"></el-table-column>
80 <el-table-column label="出生日期" align="center"/>
81 <el-table-column prop="phone" label="手机号码" width="180" align="center"></el-table-column>
82 <el-table-column label="邮箱"/>
83 <el-table-column label="证件类型" align="center"/>
84 <el-table-column label="证件号码"/>
85 <el-table-column label="报项" fixed="right">
86 <template #default="scope">
87 <ol>
88 <li v-for="item in scope.row.items" :key="item.id">{{ item.name }}</li>
89 </ol>
90 </template>
91 </el-table-column>
92 <el-table-column label="保险费" fixed="right" align="center">
93 <template #default="scope">
94 <span class="text-primary">¥{{ scope.row.signFee }}/人</span>
95 </template>
96 </el-table-column>
97 </el-table>
98
99 </div>
100 <div class="mt20">
101 <div class="leftboderTT">设项报名清单</div>
102 <!-- 报项列表-->
103 <el-table :data="tableData" border style="width: 100%" class="mt20">
104 <el-table-column label="组别代码" align="center"/>
105 <el-table-column label="组别" align="center"/>
106 <el-table-column label="舞种" align="center"/>
107 <el-table-column label="参赛说明"/>
108 <el-table-column label="参赛运动员"/>
109 <el-table-column label="补充信息"/>
110 <el-table-column label="报名费" align="center">
111 <template #default="scope">
112 <span class="text-primary">¥{{ scope.row.signFee }}/人</span>
113 </template>
114 </el-table-column>
115 </el-table>
116 </div>
117
118
119 </el-card>
120 <el-card class="mt20">
121 <el-row>
122 <el-col :lg="16">
123 <div>
124 <div class="item"><label>报名费:</label><span>¥{{ matchInfo.signFee }}</span></div>
125 <div class="item"><label>保险费:</label><span>¥{{ matchInfo.signFee }}</span></div>
126 <div class="item"><label>费用总计:</label><span>¥{{ matchInfo.signFee }}</span></div>
127 </div>
128 </el-col>
129 <el-col :lg="8">
130 <el-link type="primary"><el-icon><Upload /></el-icon>导出参赛人员清单</el-link>
131 <el-link type="primary"><el-icon><Upload /></el-icon>导出设项报名清单</el-link>
132 </el-col>
133 </el-row>
134 <div class="text-center">
135 <el-button type="primary" class="" plain round @click="goPrev()">上一步</el-button>
136 <el-button type="primary" class="" plain round @click="submitForm()">保存暂不提交审核</el-button>
137 <el-button type="primary" class="btn-lineG w200px" round @click="submitForm()">提交审核</el-button>
138 </div>
139 </el-card>
140 </div>
141 </div>
142 </template>
143
144 <script setup>
145 import {ref} from "vue"
146 const activeStep = ref(3)
147 const matchInfo = ref({})
148 </script>
149
150 <style scoped lang="scss">
151 .leftboderTT{font-weight: 600;
152 font-size: 16px;
153 color: #453DEA;}
154 .bg-lineg {
155 height: 40px;
156 line-height: 40px;
157 font-size: 18px;
158 text-align: center;
159 }
160 </style>
...@@ -2,67 +2,60 @@ ...@@ -2,67 +2,60 @@
2 <div class="app-container"> 2 <div class="app-container">
3 3
4 <div class="box ph-30"> 4 <div class="box ph-30">
5 <div class="panel"> 5 <el-card>
6 <div class="panel-header"> 6 <el-steps active="1" align-center>
7 <h3 class="panel-title">填写报名信息</h3> 7 <el-step title="团队信息" />
8 <el-step title="教练/领队/其他" />
9 <el-step title="选手报名" />
10 <el-step title="提交审核" />
11 </el-steps>
12 </el-card>
13 <div class="h20"></div>
14 <div class="panel" style="box-shadow: var(--el-box-shadow)">
15 <div class="border-info" style="margin: 20px">
16 <el-row>
17 <el-col :lg="8">
18 <div class="item"><label>赛事名称</label>{{matchInfo.name}}</div></el-col>
19 <el-col :lg="8"><div class="item"><label>赛事类型</label>{{matchInfo.name}}</div></el-col>
20 <el-col :lg="8"><div class="item"><label>赛事时间</label>{{matchInfo.beginTime?.slice(0,10)}}{{ matchInfo.endTime?.slice(0,10) }}</div></el-col>
21 <el-col :lg="8"><div class="item"><label>报名时间</label>{{ matchInfo.signBeginTime?.slice(0,10) }}{{ matchInfo.signEndTime?.slice(0,10) }}</div></el-col>
22 <el-col :lg="16"><div class="item"><label>比赛地址</label>{{matchInfo.address}}</div></el-col>
23 </el-row>
24
8 </div> 25 </div>
9 <div class="panel-body"> 26 <div class="h20"></div>
10 <el-form ref="ruleFormRef" label-width="120px" class="signForm" :model="form" :rules="rules"> 27 <el-form ref="ruleFormRef" label-width="120px" class="signForm" :model="form" :rules="rules">
11 <el-row> 28 <el-row>
12 <el-col :span="8" :offset="2"> 29 <el-col :lg="8" :offset="2">
13 <el-form-item label="参赛队logo" prop="imgUrl"> 30 <el-form-item label="团体Logo" prop="imgUrl">
14 <ImageUpload2 v-model="form.imgUrl" class="bili43" :crop-width="400" :crop-height="300" :limit="1" /> 31 <ImageUpload2 v-model="form.imgUrl" :crop-width="200" :crop-height="200" :limit="1"/>
15 <!-- <span class="tip"><i>*</i>请上传近期 彩色免冠照片</span> --> 32 <span class="tip">请上传不超过 <i>5M</i> 的文件 格式为 <i>png/jpg/jpeg</i> 的文件</span>
16 </el-form-item> 33 </el-form-item>
17 </el-col> 34 </el-col>
18 <el-col :span="10"> 35 <el-col :lg="10">
19 <el-form-item label="参赛队名称" prop="name"> 36 <el-form-item label="团体名称" prop="name">
20 <el-input v-model="form.name" placeholder="请输入参赛队名称" /> 37 <el-input v-model="form.name" placeholder="请输入团体名称" />
21 </el-form-item> 38 </el-form-item>
22 <el-form-item label="参赛队简称" prop="abreviations"> 39 <el-form-item label="负责人姓名" prop="contactPerson">
23 <el-input v-model="form.abreviations" />
24 </el-form-item>
25 <el-form-item label="参赛队类型" prop="type">
26 <el-select v-model="form.type" placeholder="请选择参赛队类型" style="width: 100%;">
27 <el-option label="俱乐部" value="0" />
28 <el-option label="事业单位" value="1" />
29 <el-option label="道馆" value="2" />
30 <el-option label="企业" value="3" />
31 <el-option label="机关" value="4" />
32 <el-option label="其他" value="5" />
33 </el-select>
34 </el-form-item>
35 <!-- <el-form-item v-if="form.type==3" label="企业性质" prop="ctype">-->
36 <!-- <el-select v-model="form.ctype" placeholder="请选择企业性质" style="width: 100%;">-->
37 <!-- <el-option label="国资企业(含央企和本地)" value="0" />-->
38 <!-- <el-option label="外商投资企业" value="1" />-->
39 <!-- <el-option label="港澳台企业" value="2" />-->
40 <!-- <el-option label="民营企业" value="3" />-->
41 <!-- <el-option label="商会组织" value="4" />-->
42 <!-- <el-option label="其他" value="5" />-->
43 <!-- </el-select>-->
44 <!-- </el-form-item>-->
45
46 <el-form-item label="联系人" prop="contactPerson">
47 <el-input v-model="form.contactPerson" placeholder="请输入联系人" /> 40 <el-input v-model="form.contactPerson" placeholder="请输入联系人" />
48 </el-form-item> 41 </el-form-item>
49 <el-form-item label="联系电话" prop="contactTelno"> 42 <el-form-item label="邮箱" required prop="contactEmail">
50 <el-input v-model="form.contactTelno" placeholder="请输入联系电话" /> 43 <el-input v-model="form.contactEmail" type="email" placeholder="请输入内容"/>
51 </el-form-item> 44 </el-form-item>
52 <el-form-item label="所在地区" prop="regionId"> 45 <el-form-item label="详细地址" required prop="address">
53 <el-cascader 46 <el-input type="textarea" v-model="form.address" class="mt10" placeholder="请输入详细地址"/>
54 v-model="form.regionId" 47 </el-form-item>
55 style="width: 100%;" 48 <el-form-item label="团体类型" prop="type">
56 :options="regionsList" 49 <el-select v-model="form.type" placeholder="请选择团体类型" style="width: 100%;">
57 :props="{ label:'text' }" 50 <el-option label="普通院校" value="0" />
58 /> 51 <el-option label="专业舞蹈学校" value="1" />
52 <el-option label="培训机构/俱乐部" value="2" />
53 <el-option label="地方协会" value="3" />
54 <el-option label="国家协会" value="4" />
55 </el-select>
59 </el-form-item> 56 </el-form-item>
60 <el-form-item label="详细地址" prop="address"> 57 <el-form-item label="参赛队名称" required prop="abreviations">
61 <el-input 58 <el-input type="text" v-model="form.abreviations" placeholder="请输入内容"/>
62 v-model="form.address" placeholder="请输入详细地址"
63 :rows="2"
64 type="textarea"
65 />
66 </el-form-item> 59 </el-form-item>
67 60
68 </el-col> 61 </el-col>
...@@ -86,16 +79,11 @@ ...@@ -86,16 +79,11 @@
86 </el-form-item> 79 </el-form-item>
87 </el-col> 80 </el-col>
88 </el-row> 81 </el-row>
89
90 <!-- 队伍 -->
91 <Ranks v-if="isRanks" :coach-or-leader-flag="coachOrLeaderFlag" />
92 </el-form> 82 </el-form>
93 83
94 </div>
95 <div class="panel-footer text-center">
96 <el-button type="success" plain round @click="goPrev()">上一步</el-button>
97 84
98 <el-button type="success" round @click="submitForm()">下一步</el-button> 85 <div class="panel-footer text-center">
86 <el-button type="primary" class="btn-lineG w200px" round @click="submitForm()">下一步</el-button>
99 </div> 87 </div>
100 </div> 88 </div>
101 </div> 89 </div>
...@@ -108,7 +96,6 @@ import { reactive, ref } from 'vue' ...@@ -108,7 +96,6 @@ import { reactive, ref } from 'vue'
108 import { getCurrentInstance, onMounted } from '@vue/runtime-core' 96 import { getCurrentInstance, onMounted } from '@vue/runtime-core'
109 import { useRoute, useRouter } from 'vue-router' 97 import { useRoute, useRouter } from 'vue-router'
110 import { toRefs } from '@vueuse/shared' 98 import { toRefs } from '@vueuse/shared'
111 import Ranks from './components/isRanks'
112 99
113 const { proxy } = getCurrentInstance() 100 const { proxy } = getCurrentInstance()
114 const router = useRouter() 101 const router = useRouter()
...@@ -116,9 +103,11 @@ const route = useRoute() ...@@ -116,9 +103,11 @@ const route = useRoute()
116 import * as match from '@/apiPc/match' 103 import * as match from '@/apiPc/match'
117 import { ElMessage } from 'element-plus' 104 import { ElMessage } from 'element-plus'
118 import _ from 'lodash' 105 import _ from 'lodash'
106 import {saveMyGroupForCpt} from "@/apiPc/match";
119 107
120 const data = reactive({ 108 const data = reactive({
121 isRanks: false, 109 isRanks: false,
110 matchData:{},
122 form: {}, 111 form: {},
123 groupId: 0, 112 groupId: 0,
124 cptId: 0, 113 cptId: 0,
...@@ -128,20 +117,19 @@ const data = reactive({ ...@@ -128,20 +117,19 @@ const data = reactive({
128 rankList: [], 117 rankList: [],
129 accept: '.doc, .pdf, .docx, .zip', 118 accept: '.doc, .pdf, .docx, .zip',
130 rules: { 119 rules: {
131 imgUrl: { required: true, message: '请上传参赛队图标', trigger: 'blur' }, 120 imgUrl: { required: true, message: '请上传', trigger: 'blur' },
132 name: { required: true, message: '请填写参赛队名称', trigger: 'blur' }, 121 name: { required: true, message: '请填写', trigger: 'blur' },
133 type: { required: true, message: '请选择参赛队类型', trigger: 'change' }, 122 type: { required: true, message: '请选择', trigger: 'change' },
134 // ctype: { required: true, message: '请选择企业性质', trigger: 'change' }, 123 contactPerson: { required: true, message: '请填写内容', trigger: 'blur' },
135 regionId: { required: true, message: '请选择所在地区', trigger: 'change' }, 124 contactEmail: { required: true, message: '请填写内容', trigger: 'blur' },
136 contactPerson: { required: true, message: '请填写联系人', trigger: 'blur' }, 125 abreviations: { required: true, message: '请填写内容', trigger: 'blur' },
137 contactTelno: { required: true, message: '请填写联系方式', trigger: 'blur' }, 126 address: { required: true, message: '请填写内容', trigger: 'blur' }
138 abreviations: { required: true, message: '请填写参赛队简称', trigger: 'blur' },
139 address: { required: true, message: '请填写详细地址', trigger: 'blur' }
140 }, 127 },
141 coachOrLeaderFlag: '' 128 coachOrLeaderFlag: '',
129 matchInfo:{}
142 }) 130 })
143 const { 131 const {
144 isRanks, 132 isRanks,matchData,
145 rankList, 133 rankList,
146 form, 134 form,
147 groupId, 135 groupId,
...@@ -149,23 +137,22 @@ const { ...@@ -149,23 +137,22 @@ const {
149 participantsInfoArr, 137 participantsInfoArr,
150 cptId, 138 cptId,
151 rules, 139 rules,
152 regionsList, 140 regionsList,matchInfo,
153 coachOrLeaderFlag, accept 141 coachOrLeaderFlag, accept
154 } = toRefs(data) 142 } = toRefs(data)
155 const uploadUrl = ref('/upload/upLoadToFileServer') 143 const uploadUrl = ref('/upload/upLoadToFileServer')
156 144
157 onMounted(() => { 145 onMounted(() => {
158 // 获取参赛队信息 146 // 获取团体信息
159 groupId.value = route.query.groupId 147 groupId.value = route.query.groupId
160 getGroupInfo() 148 getGroupInfo()
161 cptId.value = route.query.matchId 149 cptId.value = route.query.matchId
162 signType.value = route.query.signType 150 signType.value = route.query.signType
163 if (signType.value == 2) { 151
164 isRanks.value = true
165 }
166 getRegionsList() 152 getRegionsList()
167 match.getMatchById({ id: cptId.value }).then(res => { 153 match.getMatchById({ id: cptId.value }).then(res => {
168 coachOrLeaderFlag.value = res.data.coachOrLeaderFlag 154 coachOrLeaderFlag.value = res.data.coachOrLeaderFlag
155 matchInfo.value = res.data
169 if (res.data.groupInfo) { 156 if (res.data.groupInfo) {
170 participantsInfoArr.value = JSON.parse(res.data.groupInfo) 157 participantsInfoArr.value = JSON.parse(res.data.groupInfo)
171 } 158 }
...@@ -204,11 +191,7 @@ function getRegionsList() { ...@@ -204,11 +191,7 @@ function getRegionsList() {
204 } 191 }
205 192
206 function getGroupInfo() { 193 function getGroupInfo() {
207 if (groupId.value == 0) { 194 match.getGroupInfo().then(res => {
208 // 新参赛队
209 return
210 }
211 match.getGroupById(groupId.value).then(res => {
212 form.value = res.data 195 form.value = res.data
213 }) 196 })
214 } 197 }
...@@ -227,10 +210,6 @@ function submitForm() { ...@@ -227,10 +210,6 @@ function submitForm() {
227 proxy.$refs['ruleFormRef'].validate((valid, fields) => { 210 proxy.$refs['ruleFormRef'].validate((valid, fields) => {
228 if (valid) { 211 if (valid) {
229 console.log(form.value) 212 console.log(form.value)
230 if (typeof (form.value.regionId) === 'object') {
231 form.value.regionId = _.last(form.value.regionId)
232 }
233
234 for (const n of participantsInfoArr.value) { 213 for (const n of participantsInfoArr.value) {
235 if (n.status == 0 && (!n.value && !n.fixWxFile)) { 214 if (n.status == 0 && (!n.value && !n.fixWxFile)) {
236 ElMessage.error(`请完善${n.name}信息`) 215 ElMessage.error(`请完善${n.name}信息`)
...@@ -238,7 +217,7 @@ function submitForm() { ...@@ -238,7 +217,7 @@ function submitForm() {
238 } 217 }
239 } 218 }
240 219
241 if (participantsInfoArr.value) { 220 if (participantsInfoArr.value.length>0) {
242 // 保存补充信息 221 // 保存补充信息
243 let fileInfo = {} 222 let fileInfo = {}
244 for (var p of participantsInfoArr.value) { 223 for (var p of participantsInfoArr.value) {
...@@ -261,17 +240,12 @@ function submitForm() { ...@@ -261,17 +240,12 @@ function submitForm() {
261 240
262 }) 241 })
263 } 242 }
264 // 保存参赛队信息 243 // 保存团体信息
265 match.saveMyGroup(form.value).then(res => { 244 form.value.cptId = cptId.value
266 groupId.value = res.data 245 form.value.groupId = groupId.value
267 getTeamList().then(res => { 246 match.saveMyGroupForCpt(form.value).then(res => {
268 if (isRanks.value && rankList.value.length == 0) {
269 ElMessage.error('至少有一个队伍')
270 return
271 }
272 goNext() 247 goNext()
273 }) 248 })
274 })
275 } else { 249 } else {
276 console.log(form.value, fields) 250 console.log(form.value, fields)
277 } 251 }
...@@ -279,7 +253,6 @@ function submitForm() { ...@@ -279,7 +253,6 @@ function submitForm() {
279 } 253 }
280 254
281 function goNext() { 255 function goNext() {
282 if (coachOrLeaderFlag.value == '1' && !isRanks.value) {
283 // 选教练 256 // 选教练
284 router.push({ 257 router.push({
285 name: `chooseCoach`, 258 name: `chooseCoach`,
...@@ -289,17 +262,6 @@ function goNext() { ...@@ -289,17 +262,6 @@ function goNext() {
289 signType: signType.value 262 signType: signType.value
290 } 263 }
291 }) 264 })
292 } else {
293 // 选运动员
294 router.push({
295 name: `chooseSportsman`,
296 query: {
297 matchId: cptId.value,
298 groupId: groupId.value,
299 signType: signType.value
300 }
301 })
302 }
303 } 265 }
304 </script> 266 </script>
305 267
...@@ -308,7 +270,11 @@ function goNext() { ...@@ -308,7 +270,11 @@ function goNext() {
308 padding: 0; 270 padding: 0;
309 background: #F5F7F9; 271 background: #F5F7F9;
310 } 272 }
311 273 .border-info{
274 .item{margin: 5px 0;color: #4C5359; font-size: 14px;
275 label{font-size: 14px;margin-right: 14px}
276 }
277 }
312 .panel-footer .el-button--success { 278 .panel-footer .el-button--success {
313 padding: 0 40px; 279 padding: 0 40px;
314 } 280 }
...@@ -335,7 +301,7 @@ function goNext() { ...@@ -335,7 +301,7 @@ function goNext() {
335 margin: 10px 0; 301 margin: 10px 0;
336 302
337 i { 303 i {
338 color: red; 304 color: red;font-style: normal;
339 margin: 0 4px 0 0; 305 margin: 0 4px 0 0;
340 } 306 }
341 } 307 }
......
...@@ -6,15 +6,48 @@ ...@@ -6,15 +6,48 @@
6 <el-card> 6 <el-card>
7 <el-steps :active="activeStep" finish-status="success" align-center> 7 <el-steps :active="activeStep" finish-status="success" align-center>
8 <el-step title="创建账号" /> 8 <el-step title="创建账号" />
9 <el-step title="账号信息" />
10 <el-step title="注册完成" /> 9 <el-step title="注册完成" />
11 </el-steps> 10 </el-steps>
12 </el-card> 11 </el-card>
13 12
14 <div class="mt20"></div> 13 <div class="mt20"></div>
15 <Step1 v-if="activeStep==0" @submit="toStep2" @userName="getUserName" /> 14 <div v-if="activeStep==0">
16 <Step2 v-if="activeStep==1" @submit="toStep3" @prev="toStep1"/> 15 <el-card style="min-height: 50vh">
17 16 <div class="pt30">
17 <el-form class="d-form" size="large" label-width="120" style="max-width: 500px;margin: auto">
18 <el-form-item label="WDSF卡号" required>
19 <el-input type="text" v-model="form.WDSF" @change="resetCode" @blur="verifyCode"/>
20 </el-form-item>
21 <el-form-item label="手机/邮箱" required>
22 <el-input type="text" v-model="form.account" @change="resetCode" @blur="verifyCode"/>
23 </el-form-item>
24 <el-form-item label="验证码" required>
25 <el-input v-model="form.code">
26 <template #append>
27 <el-button type="primary" plain style="width: 110px" @click="sendsmsMsg">
28 <count-down v-if="counting" v-slot="{ totalSeconds }" :time="60000" @end="counting=false">
29 {{ totalSeconds }}
30 </count-down>
31 <span v-else>
32 发送验证码
33 </span>
34 </el-button>
35 </template>
36 </el-input>
37 <div class="vcodeBox" :style="isShow?'height:240px':'height:0'">
38 <Vcode :show="isShow" type="inside" @success="codeSuccess" @close="codeClose" @fail='codeFail'></Vcode>
39 </div>
40 </el-form-item>
41 </el-form>
42 </div>
43 <div class="text-center">
44 <!-- <el-button class="primary-kx" round @click="goBack">取消</el-button>-->
45 <el-button type="primary" class="btn-lineG w200px" round @click="next">下一步</el-button>
46 </div>
47 </el-card>
48 </div>
49 <div v-if="activeStep==1">
50 </div>
18 51
19 52
20 </div> 53 </div>
...@@ -22,10 +55,9 @@ ...@@ -22,10 +55,9 @@
22 </div> 55 </div>
23 </template> 56 </template>
24 57
25 <script> 58 <script setup>
26 export default { 59 import {ref} from "vue"
27 name: "peraonal" 60 const activeStep = ref(0)
28 }
29 </script> 61 </script>
30 62
31 <style scoped> 63 <style scoped>
......
...@@ -4,10 +4,10 @@ ...@@ -4,10 +4,10 @@
4 <img src="@/assets/dance/ok.png"/> 4 <img src="@/assets/dance/ok.png"/>
5 <h3>注册成功</h3> 5 <h3>注册成功</h3>
6 </div> 6 </div>
7 <div class="border-info text-center"> 7 <div>
8 8 <div class="border-info text-center inline">
9 <label>登录账号</label> 321 9 <label>登录账号</label> 321
10 10 </div>
11 </div> 11 </div>
12 <div class="text-center"> 12 <div class="text-center">
13 <el-button class="primary-kx" @click="goHome">返回首页</el-button> 13 <el-button class="primary-kx" @click="goHome">返回首页</el-button>
...@@ -20,24 +20,26 @@ ...@@ -20,24 +20,26 @@
20 import {reactive} from "@vue/runtime-core"; 20 import {reactive} from "@vue/runtime-core";
21 import {toRefs} from "@vueuse/shared/index"; 21 import {toRefs} from "@vueuse/shared/index";
22 import Vcode from "vue3-puzzle-vcode" 22 import Vcode from "vue3-puzzle-vcode"
23 import { ElMessage } from 'element-plus' 23 import {ElMessage} from 'element-plus'
24 import CountDown from '@chenfengyuan/vue-countdown' 24 import CountDown from '@chenfengyuan/vue-countdown'
25 import {getCaptchaSms,checkRegisterCode} from "@/apiPc/match"; 25 import {getCaptchaSms, checkRegisterCode} from "@/apiPc/match";
26
26 const data = reactive({ 27 const data = reactive({
27 isShow:false, 28 isShow: false,
28 isCodeTrue:false, 29 isCodeTrue: false,
29 counting:false, 30 counting: false,
30 form:{}, 31 form: {},
31 activeStep: 0 32 activeStep: 0
32 }) 33 })
33 const {isShow,isCodeTrue,counting,form,activeStep} = toRefs(data) 34 const {isShow, isCodeTrue, counting, form, activeStep} = toRefs(data)
34 const emit = defineEmits(['submit','userName']) 35 const emit = defineEmits(['submit', 'userName'])
36
35 function sendsmsMsg() { 37 function sendsmsMsg() {
36 if(!form.value.account){ 38 if (!form.value.account) {
37 ElMessage.error('请填写手机/邮箱') 39 ElMessage.error('请填写手机/邮箱')
38 return 40 return
39 } 41 }
40 if(counting.value){ 42 if (counting.value) {
41 return 43 return
42 } else { 44 } else {
43 isShow.value = true 45 isShow.value = true
...@@ -55,7 +57,7 @@ const goSign = () => { ...@@ -55,7 +57,7 @@ const goSign = () => {
55 </script> 57 </script>
56 58
57 <style scoped lang="scss"> 59 <style scoped lang="scss">
58 .el-input-group__append button.el-button, .el-input-group__append button.el-button:hover{ 60 .el-input-group__append button.el-button, .el-input-group__append button.el-button:hover {
59 color: var(--el-color-primary); 61 color: var(--el-color-primary);
60 background: #efefff; 62 background: #efefff;
61 border: var(--el-color-primary) solid 1px; 63 border: var(--el-color-primary) solid 1px;
......
...@@ -77,12 +77,12 @@ export default defineConfig(({ mode, command }) => { ...@@ -77,12 +77,12 @@ export default defineConfig(({ mode, command }) => {
77 }, 77 },
78 '/dev-api/ztx-webSite': { 78 '/dev-api/ztx-webSite': {
79 // target: 'http://123.60.96.243:1897/stage-api/', 79 // target: 'http://123.60.96.243:1897/stage-api/',
80 target: 'http://192.168.1.132:8083/', 80 target: 'http://192.168.1.130:8083/',
81 changeOrigin: true, 81 changeOrigin: true,
82 rewrite: (p) => p.replace(/^\/dev-api\/ztx-webSite/, '') 82 rewrite: (p) => p.replace(/^\/dev-api\/ztx-webSite/, '')
83 }, 83 },
84 '/dev-api': { 84 '/dev-api': {
85 target: 'http://192.168.1.132:8083', 85 target: 'http://192.168.1.130:8083',
86 // target: 'http://localhost:8787', 86 // target: 'http://localhost:8787',
87 changeOrigin: true, 87 changeOrigin: true,
88 rewrite: (p) => p.replace(/^\/dev-api/, '') 88 rewrite: (p) => p.replace(/^\/dev-api/, '')
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!