add: 个人中心-机构-个人信息
Showing
41 changed files
with
1605 additions
and
828 deletions
public/img/gg.png
deleted
100644 → 0
222 KB
public/img/nav_26.png
0 → 100644
503 Bytes
public/img/nav_26_dwn.png
0 → 100644
399 Bytes
public/img/nav_27.png
0 → 100644
565 Bytes
public/img/nav_27_dwn.png
0 → 100644
460 Bytes
public/img/nav_28.png
0 → 100644
762 Bytes
public/img/nav_28_dwn.png
0 → 100644
567 Bytes
public/img/nav_29.png
0 → 100644
504 Bytes
public/img/nav_30.png
0 → 100644
523 Bytes
public/img/nav_31.png
0 → 100644
1000 Bytes
public/img/nav_31_dwn.png
0 → 100644
741 Bytes
public/img/nav_32.png
0 → 100644
801 Bytes
public/img/nav_32_dwn.png
0 → 100644
616 Bytes
public/img/tool01_dwn.png
deleted
100644 → 0
1.55 KB
public/img/tool02.png
deleted
100644 → 0
985 Bytes
public/img/tool02_dwn.png
deleted
100644 → 0
1.91 KB
public/img/tool03.png
deleted
100644 → 0
664 Bytes
public/img/tool03_dwn.png
deleted
100644 → 0
1.75 KB
public/img/tool04_dwn.png
deleted
100644 → 0
1.63 KB
| ... | @@ -72,7 +72,16 @@ export function getCodeImg() { | ... | @@ -72,7 +72,16 @@ export function getCodeImg() { |
| 72 | timeout: 20000 | 72 | timeout: 20000 |
| 73 | }) | 73 | }) |
| 74 | } | 74 | } |
| 75 | 75 | export function forgetPassword(data) { | |
| 76 | return request({ | ||
| 77 | url: '/forgetPassword', | ||
| 78 | headers: { | ||
| 79 | isToken: false | ||
| 80 | }, | ||
| 81 | method: 'post', | ||
| 82 | data: data | ||
| 83 | }) | ||
| 84 | } | ||
| 76 | // 代退图形认证的获取手机验证码 | 85 | // 代退图形认证的获取手机验证码 |
| 77 | export function captchaSmsWithCaptchaImage(data) { | 86 | export function captchaSmsWithCaptchaImage(data) { |
| 78 | return request({ | 87 | return request({ | ... | ... |
| ... | @@ -93,9 +93,9 @@ export function getMyGroupList() { | ... | @@ -93,9 +93,9 @@ export function getMyGroupList() { |
| 93 | } | 93 | } |
| 94 | 94 | ||
| 95 | // 根据Id获取我的团队 | 95 | // 根据Id获取我的团队 |
| 96 | export function getGroupById(groupId) { | 96 | export function getGroupInfo() { |
| 97 | return request({ | 97 | return request({ |
| 98 | url: `ztx-match/league/group/getMyGroup/${groupId}`, | 98 | url: `/league/group/getMyGroup`, |
| 99 | method: 'get' | 99 | method: 'get' |
| 100 | }) | 100 | }) |
| 101 | } | 101 | } |
| ... | @@ -110,7 +110,7 @@ export function regionsList() { | ... | @@ -110,7 +110,7 @@ export function regionsList() { |
| 110 | // 新建团队 | 110 | // 新建团队 |
| 111 | export function saveMyGroup(data) { | 111 | export function saveMyGroup(data) { |
| 112 | return request({ | 112 | return request({ |
| 113 | url: `ztx-match/league/group/saveMyGroup`, | 113 | url: `/league/group/saveMyGroup`, |
| 114 | method: 'post', | 114 | method: 'post', |
| 115 | data: data | 115 | data: data |
| 116 | }) | 116 | }) | ... | ... |
src/assets/dance/funcBg.png
0 → 100644
12.9 KB
src/assets/img/order_no.png
0 → 100644
22.8 KB
| ... | @@ -221,3 +221,32 @@ aside { | ... | @@ -221,3 +221,32 @@ aside { |
| 221 | .pt30{padding-top: 30px;} | 221 | .pt30{padding-top: 30px;} |
| 222 | .d-form-border{ | 222 | .d-form-border{ |
| 223 | border: 1px solid #E5E5E5;margin: 20px 0;padding: 20px} | 223 | border: 1px solid #E5E5E5;margin: 20px 0;padding: 20px} |
| 224 | |||
| 225 | |||
| 226 | .dlbox{background: url("@/assets/dance/ds_bg.png") no-repeat left;background-size: 100% 100%; | ||
| 227 | padding: 0 0 20px;margin: 0 0 20px; | ||
| 228 | dl{height: 120px;margin: 0; | ||
| 229 | dt{ | ||
| 230 | height: 30px; | ||
| 231 | font-size: 16px;margin: 0 0 18px; | ||
| 232 | font-weight: 600;line-height: 30px;display: inline-block;padding:0 20px 0 14px; | ||
| 233 | background: linear-gradient(90deg, #8623FC, #453DEA); | ||
| 234 | border-radius: 0px 0px 15px 0px;color: #fff;} | ||
| 235 | } | ||
| 236 | dd{ | ||
| 237 | font-size: 14px;line-height: 1.6; | ||
| 238 | color: #29343C;} | ||
| 239 | } | ||
| 240 | .xzbox{border: 2px solid #DDECFB;padding: 20px;line-height: 2; | ||
| 241 | color: #29343C; | ||
| 242 | font-size: 16px;} | ||
| 243 | .funcBtn{width: 100%;cursor: pointer; | ||
| 244 | background:url("@/assets/dance/funcBg.png") no-repeat left; | ||
| 245 | background-size: cover; | ||
| 246 | border-radius: 16px;box-shadow:var(--el-box-shadow-light); | ||
| 247 | text-align: center;position: relative; | ||
| 248 | margin: 24px 0 24px;padding: 0 0 1px; | ||
| 249 | img{margin: auto;position: relative;top: -20px} | ||
| 250 | h4{font-size: 18px;margin-top: -10px;} | ||
| 251 | &:hover{box-shadow:var(--el-box-shadow-dark);} | ||
| 252 | } | ... | ... |
| ... | @@ -486,10 +486,16 @@ export const constantRoutes = [ | ... | @@ -486,10 +486,16 @@ export const constantRoutes = [ |
| 486 | meta: { title: '个人中心' } | 486 | meta: { title: '个人中心' } |
| 487 | }, | 487 | }, |
| 488 | { | 488 | { |
| 489 | path: 'myTeam', | 489 | path: 'myPassword', |
| 490 | component: () => import('@/viewsPc/center/teamInfo'), | 490 | component: () => import('@/viewsPc/center/myPassword'), |
| 491 | name: 'myTeam', | 491 | name: 'myPassword', |
| 492 | meta: { title: '我的团队' } | 492 | meta: { title: '修改密码' } |
| 493 | }, | ||
| 494 | { | ||
| 495 | path: 'myCertification', | ||
| 496 | component: () => import('@/viewsPc/center/myCertification'), | ||
| 497 | name: 'myCertification', | ||
| 498 | meta: { title: '团队认证' } | ||
| 493 | }, | 499 | }, |
| 494 | { | 500 | { |
| 495 | path: 'myMatch', | 501 | path: 'myMatch', | ... | ... |
| ... | @@ -126,7 +126,7 @@ service.interceptors.response.use( | ... | @@ -126,7 +126,7 @@ service.interceptors.response.use( |
| 126 | const msg = errorCode[code] || res.data.msg || errorCode['default'] | 126 | const msg = errorCode[code] || res.data.msg || errorCode['default'] |
| 127 | // 二进制数据则直接返回 | 127 | // 二进制数据则直接返回 |
| 128 | // debugger | 128 | // debugger |
| 129 | 129 | ||
| 130 | if ( | 130 | if ( |
| 131 | res.request.responseType === 'blob' || | 131 | res.request.responseType === 'blob' || |
| 132 | res.request.responseType === 'arraybuffer' | 132 | res.request.responseType === 'arraybuffer' | ... | ... |
| ... | @@ -3,15 +3,25 @@ | ... | @@ -3,15 +3,25 @@ |
| 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 :span="6"> |
| 6 | <el-card class="mt30"> | 6 | <el-card> |
| 7 | <div class="center-menu"> | 7 | <div class="center-menu"> |
| 8 | <!-- <el-avatar :size="100" :src="fillImgUrl(myform.avatar)" />--> | 8 | <ul v-if="user.utype=='2'"> |
| 9 | <h3>{{ myform.nickName }}</h3> | ||
| 10 | <ul> | ||
| 11 | <li | 9 | <li |
| 12 | v-for="(m, i) in menus" | 10 | v-for="(m, i) in menus" |
| 13 | :key="i" | 11 | :key="i" |
| 14 | :class="{ active: m.isActive }" | 12 | :class="{ active: m.isActive }" |
| 13 | > | ||
| 14 | <a href="javascript:void(0)" @click="toInfo(m)"> | ||
| 15 | <img :src="m.isActive ? m.picUrl2 : m.picUrl1"> | ||
| 16 | {{ m.name }} | ||
| 17 | </a> | ||
| 18 | </li> | ||
| 19 | </ul> | ||
| 20 | <ul v-if="user.utype=='1'"> | ||
| 21 | <li | ||
| 22 | v-for="(m, i) in menusPersonal" | ||
| 23 | :key="i" | ||
| 24 | :class="{ active: m.isActive }" | ||
| 15 | > | 25 | > |
| 16 | <a href="javascript:void(0)" @click="toInfo(m)"> | 26 | <a href="javascript:void(0)" @click="toInfo(m)"> |
| 17 | <img :src="m.isActive ? m.picUrl2 : m.picUrl1"> | 27 | <img :src="m.isActive ? m.picUrl2 : m.picUrl1"> |
| ... | @@ -24,7 +34,7 @@ | ... | @@ -24,7 +34,7 @@ |
| 24 | 34 | ||
| 25 | </el-col> | 35 | </el-col> |
| 26 | <el-col :span="18"> | 36 | <el-col :span="18"> |
| 27 | <router-view /> | 37 | <router-view :user="user"/> |
| 28 | </el-col> | 38 | </el-col> |
| 29 | </el-row> | 39 | </el-row> |
| 30 | </div> | 40 | </div> |
| ... | @@ -32,48 +42,107 @@ | ... | @@ -32,48 +42,107 @@ |
| 32 | </template> | 42 | </template> |
| 33 | 43 | ||
| 34 | <script setup> | 44 | <script setup> |
| 35 | import { ref } from 'vue' | 45 | import {ref} from 'vue' |
| 36 | import { useRoute, useRouter } from 'vue-router' | 46 | import {useRoute, useRouter} from 'vue-router' |
| 37 | import { onMounted } from '@vue/runtime-core' | 47 | import {onMounted} from '@vue/runtime-core' |
| 38 | import useUserStore from '@/store/modules/user' | 48 | import useUserStore from '@/store/modules/user' |
| 39 | import _ from 'lodash' | 49 | import _ from 'lodash' |
| 50 | |||
| 40 | const route = useRoute() | 51 | const route = useRoute() |
| 41 | const router = useRouter() | 52 | const router = useRouter() |
| 42 | 53 | ||
| 43 | const myform = ref({}) | 54 | const user = ref({}) |
| 44 | const menus = ref([ | 55 | const menus = ref([ |
| 45 | { | 56 | { |
| 46 | name: '基础信息', | 57 | name: '基础信息', |
| 47 | routeName: 'myInfo', | 58 | routeName: 'myInfo', |
| 48 | picUrl1: '/img/tool01.png', | 59 | picUrl1: '/img/nav_26.png', |
| 49 | picUrl2: '/img/tool01_dwn.png', | 60 | picUrl2: '/img/nav_26_dwn.png', |
| 50 | isActive: false | 61 | isActive: false |
| 51 | }, | 62 | }, |
| 52 | { | 63 | { |
| 53 | name: '修改密码', | 64 | name: '修改密码', |
| 54 | routeName: 'myTeam', | 65 | routeName: 'myPassword', |
| 55 | picUrl1: '/img/tool02.png', | 66 | picUrl1: '/img/nav_27.png', |
| 56 | picUrl2: '/img/tool02_dwn.png', | 67 | picUrl2: '/img/nav_27.png', |
| 68 | isActive: false | ||
| 69 | }, | ||
| 70 | { | ||
| 71 | name: '团队认证', | ||
| 72 | routeName: 'myCertification', | ||
| 73 | picUrl1: '/img/nav_32.png', | ||
| 74 | picUrl2: '/img/nav_32_dwn.png', | ||
| 57 | isActive: false | 75 | isActive: false |
| 58 | }, | 76 | }, |
| 59 | { | 77 | { |
| 60 | name: '我的赛事', | 78 | name: '选手管理', |
| 61 | routeName: 'myMatch', | 79 | routeName: 'myMatch', |
| 62 | picUrl1: '/img/tool03.png', | 80 | picUrl1: '/img/nav_31.png', |
| 63 | picUrl2: '/img/tool03_dwn.png', | 81 | picUrl2: '/img/nav_31_dwn.png', |
| 64 | isActive: false | 82 | isActive: false |
| 65 | }, | 83 | }, |
| 66 | { | 84 | { |
| 67 | name: '我的培训', | 85 | name: '我的报名', |
| 86 | routeName: 'myMatch', | ||
| 87 | picUrl1: '/img/nav_28.png', | ||
| 88 | picUrl2: '/img/nav_28_dwn.png', | ||
| 89 | isActive: false | ||
| 90 | }, | ||
| 91 | { | ||
| 92 | name: '我的预定', | ||
| 93 | routeName: 'myMatch', | ||
| 94 | picUrl1: '/img/nav_29.png', | ||
| 95 | picUrl2: '/img/nav_29_dwn.png', | ||
| 96 | isActive: false | ||
| 97 | }, | ||
| 98 | { | ||
| 99 | name: '系统消息', | ||
| 68 | routeName: 'myTrain', | 100 | routeName: 'myTrain', |
| 69 | picUrl1: '/img/tool04.png', | 101 | picUrl1: '/img/nav_30.png', |
| 70 | picUrl2: '/img/tool04_dwn.png', | 102 | picUrl2: '/img/nav_30_dwn.png', |
| 71 | isActive: false | 103 | isActive: false |
| 72 | } | 104 | } |
| 73 | ]) | 105 | ]) |
| 106 | const menusPersonal = ref([ | ||
| 107 | { | ||
| 108 | name: '基础信息', | ||
| 109 | routeName: 'myInfo', | ||
| 110 | picUrl1: '/img/nav_26.png', | ||
| 111 | picUrl2: '/img/nav_26_dwn.png', | ||
| 112 | isActive: false | ||
| 113 | }, | ||
| 114 | { | ||
| 115 | name: '修改密码', | ||
| 116 | routeName: 'myPassword', | ||
| 117 | picUrl1: '/img/nav_27.png', | ||
| 118 | picUrl2: '/img/nav_27.png', | ||
| 119 | isActive: false | ||
| 120 | }, | ||
| 121 | { | ||
| 122 | name: '我的报名', | ||
| 123 | routeName: 'myMatch', | ||
| 124 | picUrl1: '/img/nav_28.png', | ||
| 125 | picUrl2: '/img/nav_28_dwn.png', | ||
| 126 | isActive: false | ||
| 127 | }, | ||
| 128 | { | ||
| 129 | name: '我的预定', | ||
| 130 | routeName: 'myMatch', | ||
| 131 | picUrl1: '/img/nav_29.png', | ||
| 132 | picUrl2: '/img/nav_29_dwn.png', | ||
| 133 | isActive: false | ||
| 134 | }, | ||
| 135 | { | ||
| 136 | name: '系统消息', | ||
| 137 | routeName: 'myTrain', | ||
| 138 | picUrl1: '/img/nav_30.png', | ||
| 139 | picUrl2: '/img/nav_30_dwn.png', | ||
| 140 | isActive: false | ||
| 141 | } | ||
| 142 | ]) | ||
| 74 | 143 | ||
| 75 | onMounted(() => { | 144 | onMounted(() => { |
| 76 | myform.value = useUserStore().user || {} | 145 | user.value = useUserStore().user || {} |
| 77 | 146 | ||
| 78 | const currMenu = _.find(menus.value, (m) => { | 147 | const currMenu = _.find(menus.value, (m) => { |
| 79 | return m.routeName === route.name | 148 | return m.routeName === route.name |
| ... | @@ -108,19 +177,24 @@ const toInfo = (item) => { | ... | @@ -108,19 +177,24 @@ const toInfo = (item) => { |
| 108 | padding: 0 15px; | 177 | padding: 0 15px; |
| 109 | } | 178 | } |
| 110 | 179 | ||
| 111 | .center-menu{ | 180 | .center-menu { |
| 112 | text-align: center; | 181 | text-align: center; |
| 113 | li{margin-bottom: 15px;} | 182 | |
| 183 | li { | ||
| 184 | margin-bottom: 15px; | ||
| 185 | } | ||
| 114 | } | 186 | } |
| 115 | li img{ | 187 | |
| 188 | li img { | ||
| 116 | display: inline-block; | 189 | display: inline-block; |
| 117 | vertical-align:middle; | 190 | vertical-align: middle; |
| 118 | margin-right: 20px; | 191 | margin-right: 20px; |
| 119 | padding: 5px; | 192 | padding: 5px; |
| 120 | } | 193 | } |
| 121 | .active{ | 194 | |
| 122 | color:var(--el-color-primary); | 195 | .active { |
| 123 | background-color: #f9e7e8; | 196 | color: #fff; |
| 197 | background: linear-gradient(90deg, #8623FC, #453DEA); | ||
| 124 | border-radius: 20px; | 198 | border-radius: 20px; |
| 125 | } | 199 | } |
| 126 | </style> | 200 | </style> | ... | ... |
src/viewsPc/center/myCertification.vue
0 → 100644
| 1 | <template> | ||
| 2 | <el-card :body-style="{'padding':'0'}"> | ||
| 3 | <div class="indexTitle"><h3 class="leftboderTT">团队认证</h3></div> | ||
| 4 | </el-card> | ||
| 5 | </template> | ||
| 6 | |||
| 7 | <script setup> | ||
| 8 | |||
| 9 | </script> | ||
| 10 | |||
| 11 | <style scoped lang="scss"> | ||
| 12 | .indexTitle{margin: 20px 0 12px;padding: 0 20px 15px;border-bottom: 1px solid #e5e5e5; | ||
| 13 | h3{ | ||
| 14 | font-size: 16px; | ||
| 15 | color:var(--el-color-primary); | ||
| 16 | } | ||
| 17 | } | ||
| 18 | |||
| 19 | |||
| 20 | </style> |
| 1 | <template> | 1 | <template> |
| 2 | <div class="grid-content"> | 2 | <div> |
| 3 | <el-tabs v-model="activeName"> | 3 | <el-card :body-style="{'padding':'0'}"> |
| 4 | <el-tab-pane label="个人基本信息" name="first"> | 4 | <div class="indexTitle"><h3 class="leftboderTT">机构基础信息</h3></div> |
| 5 | <el-form ref="myformRef" :model="myform" label-width="120px"> | 5 | <!-- uType字段 1 是个人 2是团体--> |
| 6 | <el-row v-if="labelArr?.length>0"> | 6 | <!-- {{user}}--> |
| 7 | <el-col :span="14"> | 7 | <team-info :form="myform" v-if="user.utype=='2'"/> |
| 8 | <el-form-item label="姓名"> | ||
| 9 | <el-input v-model="myform.realName" /> | ||
| 10 | </el-form-item> | ||
| 11 | <el-form-item label="性别" prop="sex"> | ||
| 12 | <el-radio-group v-model="myform.sex"> | ||
| 13 | <el-radio label="0" size="large">男</el-radio> | ||
| 14 | <el-radio label="1" size="large">女</el-radio> | ||
| 15 | </el-radio-group> | ||
| 16 | </el-form-item> | ||
| 17 | <!-- <el-form-item label="身份标签">--> | ||
| 18 | <!-- <el-checkbox-group v-model="myform.labelArr" size="small">--> | ||
| 19 | <!-- <el-checkbox-button label="0">运动员</el-checkbox-button>--> | ||
| 20 | <!-- <el-checkbox-button label="1">教练</el-checkbox-button>--> | ||
| 21 | <!-- <el-checkbox-button label="2">领队</el-checkbox-button>--> | ||
| 22 | <!-- <el-checkbox-button label="4">队医</el-checkbox-button>--> | ||
| 23 | <!-- <el-checkbox-button label="5">翻译</el-checkbox-button>--> | ||
| 24 | <!-- <el-checkbox-button label="6">官员</el-checkbox-button>--> | ||
| 25 | <!-- <el-checkbox-button label="3">其他</el-checkbox-button>--> | ||
| 26 | <!-- </el-checkbox-group>--> | ||
| 27 | <!-- </el-form-item>--> | ||
| 28 | 8 | ||
| 29 | <el-form-item label="证件类型"> | 9 | </el-card> |
| 30 | <el-select v-model="myform.idcType" placeholder="请选择证件类型" style="width: 100%"> | ||
| 31 | <el-option | ||
| 32 | v-for="item in certificates" | ||
| 33 | :key="item.value" | ||
| 34 | :label="item.label" | ||
| 35 | :value="item.value" | ||
| 36 | /> | ||
| 37 | </el-select> | ||
| 38 | </el-form-item> | ||
| 39 | <el-form-item label="证件号码"> | ||
| 40 | <el-input v-model="myform.idcCode" @blur="checkCode" /> | ||
| 41 | </el-form-item> | ||
| 42 | <el-form-item label="出生日期"> | ||
| 43 | <el-date-picker | ||
| 44 | v-model="myform.birth" | ||
| 45 | style="width: 100%" | ||
| 46 | type="date" format="YYYY-MM-DD" value-format="YYYY-MM-DD" | ||
| 47 | placeholder="请选择出生日期" | ||
| 48 | /> | ||
| 49 | </el-form-item> | ||
| 50 | <el-form-item label="国籍" @change="changeCountryId"> | ||
| 51 | <el-select v-model="myform.countryId" style="width: 100%" :disabled="myform.idcType==0"> | ||
| 52 | <el-option v-for="item in countryList" :key="item.id" :label="item.name" :value="item.id" /> | ||
| 53 | </el-select> | ||
| 54 | </el-form-item> | ||
| 55 | <el-form-item label="民族"> | ||
| 56 | <el-select v-model="myform.nation" style="width: 100%;"> | ||
| 57 | <el-option | ||
| 58 | v-for="item in nationList" | ||
| 59 | :key="item.name" | ||
| 60 | :label="item.name" | ||
| 61 | :value="item.name" | ||
| 62 | /> | ||
| 63 | </el-select> | ||
| 64 | </el-form-item> | ||
| 65 | <el-form-item label="联系方式"> | ||
| 66 | <el-input v-model="myform.phone" /> | ||
| 67 | </el-form-item> | ||
| 68 | </el-col> | ||
| 69 | <el-col :span="6"> | ||
| 70 | <el-form-item label="头像" prop="picUrl"> | ||
| 71 | <ImageUpload v-model="myform.picUrl" :limit="1" /> | ||
| 72 | </el-form-item> | ||
| 73 | </el-col> | ||
| 74 | </el-row> | ||
| 75 | <el-row v-else> | ||
| 76 | <el-col :span="14"> | ||
| 77 | <!-- <el-form-item label="身份标签">--> | ||
| 78 | <!-- <el-checkbox-group v-model="myform.labelArr" size="small">--> | ||
| 79 | <!-- <el-checkbox-button label="0">运动员</el-checkbox-button>--> | ||
| 80 | <!-- <el-checkbox-button label="1">教练</el-checkbox-button>--> | ||
| 81 | <!-- <el-checkbox-button label="2">领队</el-checkbox-button>--> | ||
| 82 | <!-- <el-checkbox-button label="4">队医</el-checkbox-button>--> | ||
| 83 | <!-- <el-checkbox-button label="5">翻译</el-checkbox-button>--> | ||
| 84 | <!-- <el-checkbox-button label="6">官员</el-checkbox-button>--> | ||
| 85 | <!-- <el-checkbox-button label="3">其他</el-checkbox-button>--> | ||
| 86 | <!-- </el-checkbox-group>--> | ||
| 87 | <!-- </el-form-item>--> | ||
| 88 | <el-form-item label="性别" prop="sex"> | ||
| 89 | <el-radio-group v-model="myform.sex"> | ||
| 90 | <el-radio label="0" size="large">男</el-radio> | ||
| 91 | <el-radio label="1" size="large">女</el-radio> | ||
| 92 | </el-radio-group> | ||
| 93 | </el-form-item> | ||
| 94 | <el-form-item label="国籍" @change="changeCountryId"> | ||
| 95 | <el-select v-model="myform.countryId" style="width: 100%" :disabled="myform.idcType==0"> | ||
| 96 | <el-option v-for="item in countryList" :key="item.id" :label="item.name" :value="item.id" /> | ||
| 97 | </el-select> | ||
| 98 | </el-form-item> | ||
| 99 | <el-form-item label="民族"> | ||
| 100 | <el-select v-model="myform.nation" style="width: 100%;"> | ||
| 101 | <el-option | ||
| 102 | v-for="item in nationList" | ||
| 103 | :key="item.name" | ||
| 104 | :label="item.name" | ||
| 105 | :value="item.name" | ||
| 106 | /> | ||
| 107 | </el-select> | ||
| 108 | </el-form-item> | ||
| 109 | </el-col> | ||
| 110 | </el-row> | ||
| 111 | </el-form> | ||
| 112 | <div class="text-center"> | ||
| 113 | <el-button type="primary" round @click="save">保存</el-button> | ||
| 114 | </div> | ||
| 115 | <el-divider /> | ||
| 116 | <h3 style="padding: 0 20px;">所属参赛队信息</h3> | ||
| 117 | <el-row :gutter="20" style="padding: 0 20px"> | ||
| 118 | <el-col v-for="(g,index) in groupList" :key="index" :span="8"> | ||
| 119 | <div class="matchItem"> | ||
| 120 | <div class="flex"> | ||
| 121 | <div class="leftImg"> | ||
| 122 | <img class="roundImg" :src="g.imgUrl" mode="aspectFill"> | ||
| 123 | </div> | ||
| 124 | <div class="rightWen"> | ||
| 125 | <div class="name">{{ g.name }}</div> | ||
| 126 | <div class="pp">地区:{{ g.regionStr }} | ||
| 127 | </div> | ||
| 128 | <div class="pp">类型: | ||
| 129 | <span>{{ g.typeStr }}</span> | ||
| 130 | </div> | ||
| 131 | </div> | ||
| 132 | </div> | ||
| 133 | <view class="bottomFunc"> | ||
| 134 | <view class="textButtom" @click="exitGroup(g)">退出参赛队</view> | ||
| 135 | </view> | ||
| 136 | </div> | ||
| 137 | </el-col> | ||
| 138 | </el-row> | ||
| 139 | <el-empty v-if="groupList.length==0" description="还没有所属参赛队" /> | ||
| 140 | 10 | ||
| 141 | </el-tab-pane> | ||
| 142 | </el-tabs> | ||
| 143 | </div> | 11 | </div> |
| 144 | </template> | 12 | </template> |
| 145 | 13 | ||
| ... | @@ -150,9 +18,18 @@ import { getCurrentInstance, onMounted } from '@vue/runtime-core' | ... | @@ -150,9 +18,18 @@ import { getCurrentInstance, onMounted } from '@vue/runtime-core' |
| 150 | import * as match from '@/apiPc/match' | 18 | import * as match from '@/apiPc/match' |
| 151 | import { ElMessage, ElMessageBox } from 'element-plus' | 19 | import { ElMessage, ElMessageBox } from 'element-plus' |
| 152 | import { nationList } from '@/assets/js/data' | 20 | import { nationList } from '@/assets/js/data' |
| 21 | import {getGroupInfo} from "@/apiPc/match"; | ||
| 22 | import TeamInfo from "@/viewsPc/center/teamInfo"; | ||
| 153 | 23 | ||
| 154 | const router = useRouter() | 24 | const router = useRouter() |
| 155 | const { proxy } = getCurrentInstance() | 25 | const { proxy } = getCurrentInstance() |
| 26 | const props = defineProps({ | ||
| 27 | user:{ | ||
| 28 | type:Object, | ||
| 29 | required:true | ||
| 30 | } | ||
| 31 | }) | ||
| 32 | |||
| 156 | const activeName = ref('first') | 33 | const activeName = ref('first') |
| 157 | const myform = ref({ | 34 | const myform = ref({ |
| 158 | idcType: 0, | 35 | idcType: 0, |
| ... | @@ -161,8 +38,7 @@ const myform = ref({ | ... | @@ -161,8 +38,7 @@ const myform = ref({ |
| 161 | }) | 38 | }) |
| 162 | const labelArr = ref([]) | 39 | const labelArr = ref([]) |
| 163 | const groupList = ref([]) | 40 | const groupList = ref([]) |
| 164 | const countryList = ref([]) | 41 | |
| 165 | const regionsList = ref([]) | ||
| 166 | const certificates = ref([ | 42 | const certificates = ref([ |
| 167 | { | 43 | { |
| 168 | value: '0', | 44 | value: '0', |
| ... | @@ -179,27 +55,14 @@ const certificates = ref([ | ... | @@ -179,27 +55,14 @@ const certificates = ref([ |
| 179 | ]) | 55 | ]) |
| 180 | 56 | ||
| 181 | onMounted(() => { | 57 | onMounted(() => { |
| 182 | match.regionsList().then(res => { | ||
| 183 | regionsList.value = res.data | ||
| 184 | }) | ||
| 185 | getCountryList() | ||
| 186 | getData() | 58 | getData() |
| 187 | }) | 59 | }) |
| 188 | 60 | ||
| 189 | function getData() { | 61 | function getData() { |
| 190 | match.getMyPersonInfo().then(res => { | 62 | match.getGroupInfo().then(res => { |
| 191 | myform.value = res.data | 63 | myform.value = res.data |
| 192 | myform.value.labelArr = myform.value.label ? myform.value.label.split(',') : [] | ||
| 193 | labelArr.value = myform.value.label ? myform.value.label.split(',') : [] | ||
| 194 | groupList.value = myform.value.groups || [] | ||
| 195 | // if (labelArr.value.length <= 0)proxy.$modal.msgError('请维护身份标签信息!') | ||
| 196 | }) | 64 | }) |
| 197 | } | 65 | } |
| 198 | function changeCountryId() { | ||
| 199 | if (myform.value.countryId != 240) { | ||
| 200 | myform.value.nation = '其他' | ||
| 201 | } | ||
| 202 | } | ||
| 203 | function checkCode() { | 66 | function checkCode() { |
| 204 | if (myform.value.idcType == 0 && myform.value.idcCode) { | 67 | if (myform.value.idcType == 0 && myform.value.idcCode) { |
| 205 | if (!(/(^\d{15}$)|(^\d{17}([0-9]|X)$)/.test(myform.value.idcCode))) { | 68 | if (!(/(^\d{15}$)|(^\d{17}([0-9]|X)$)/.test(myform.value.idcCode))) { |
| ... | @@ -228,47 +91,18 @@ function checkCode() { | ... | @@ -228,47 +91,18 @@ function checkCode() { |
| 228 | } | 91 | } |
| 229 | } | 92 | } |
| 230 | } | 93 | } |
| 231 | function getCountryList() { | ||
| 232 | match.countryList().then(res => { | ||
| 233 | countryList.value = res.data | ||
| 234 | }) | ||
| 235 | } | ||
| 236 | 94 | ||
| 237 | function save() { | 95 | |
| 238 | myform.value.label = myform.value.labelArr.toString() | 96 | |
| 239 | match.saveMyBaseInfo(myform.value).then(res => { | ||
| 240 | ElMessage({ | ||
| 241 | message: '保存成功', | ||
| 242 | type: 'success' | ||
| 243 | }) | ||
| 244 | getData() | ||
| 245 | }) | ||
| 246 | } | ||
| 247 | function exitGroup(g) { | ||
| 248 | ElMessageBox.confirm('确定退出这个参赛队吗?', '提示', { | ||
| 249 | confirmButtonText: '确定', | ||
| 250 | cancelButtonText: '取消', | ||
| 251 | type: 'warning' | ||
| 252 | }).then(() => { | ||
| 253 | match.leaveGroup(g.id).then(response => { | ||
| 254 | ElMessage.success('操作成功') | ||
| 255 | getData() | ||
| 256 | }) | ||
| 257 | }) | ||
| 258 | } | ||
| 259 | </script> | 97 | </script> |
| 260 | 98 | ||
| 261 | <style scoped lang="scss"> | 99 | <style scoped lang="scss"> |
| 262 | .app-container { | 100 | .indexTitle{margin: 20px 0 12px;padding: 0 20px 15px;border-bottom: 1px solid #e5e5e5; |
| 263 | background: #F5F7F9; | 101 | h3{ |
| 264 | } | 102 | font-size: 16px; |
| 265 | 103 | color:var(--el-color-primary); | |
| 266 | .grid-content { | 104 | } |
| 267 | background: #fff; | ||
| 268 | } | 105 | } |
| 269 | 106 | ||
| 270 | :deep(.el-tabs__nav-wrap) { | ||
| 271 | padding: 0 15px; | ||
| 272 | } | ||
| 273 | 107 | ||
| 274 | </style> | 108 | </style> | ... | ... |
src/viewsPc/center/myPassword.vue
0 → 100644
| 1 | <template> | ||
| 2 | <div> | ||
| 3 | <el-card :body-style="{'padding':'0'}"> | ||
| 4 | <div class="indexTitle"><h3 class="leftboderTT">修改密码</h3></div> | ||
| 5 | |||
| 6 | <div class="pd20"> | ||
| 7 | <div class="d-form-border" style="margin-top: 0"> | ||
| 8 | <el-form class="d-form" ref="pwdRef" :model="user" :rules="rules" label-width="120px" | ||
| 9 | style="max-width: 500px;margin: auto"> | ||
| 10 | <el-form-item label="旧密码" prop="oldPassword"> | ||
| 11 | <el-input v-model="user.oldPassword" placeholder="请输入旧密码" type="password" show-password/> | ||
| 12 | </el-form-item> | ||
| 13 | <el-form-item label="新密码" prop="newPassword"> | ||
| 14 | <el-input v-model="user.newPassword" placeholder="请设置8位以上大小写字母、数字、特殊符号" type="password" | ||
| 15 | show-password/> | ||
| 16 | </el-form-item> | ||
| 17 | <el-form-item label="确认密码" prop="confirmPassword"> | ||
| 18 | <el-input v-model="user.confirmPassword" placeholder="请确认新密码" type="password" show-password/> | ||
| 19 | </el-form-item> | ||
| 20 | |||
| 21 | </el-form> | ||
| 22 | </div> | ||
| 23 | <el-row justify="center"> | ||
| 24 | <el-button type="primary" class="btn-lineG" @click="submit">保存</el-button> | ||
| 25 | </el-row> | ||
| 26 | </div> | ||
| 27 | </el-card> | ||
| 28 | </div> | ||
| 29 | </template> | ||
| 30 | |||
| 31 | <script setup> | ||
| 32 | import {updateUserPwd} from '@/api/system/user' | ||
| 33 | import useUserStore from '@/store/modules/user' | ||
| 34 | import {reactive, ref, getCurrentInstance} from 'vue' | ||
| 35 | import {validPassword} from '@/utils/validate' | ||
| 36 | |||
| 37 | const show = ref(false) | ||
| 38 | const {proxy} = getCurrentInstance() | ||
| 39 | const userStore = useUserStore() | ||
| 40 | |||
| 41 | const user = reactive({ | ||
| 42 | oldPassword: undefined, | ||
| 43 | newPassword: undefined, | ||
| 44 | confirmPassword: undefined | ||
| 45 | }) | ||
| 46 | |||
| 47 | const equalToPassword = (rule, value, callback) => { | ||
| 48 | if (user.newPassword !== value) { | ||
| 49 | callback(new Error('两次输入的密码不一致')) | ||
| 50 | } else { | ||
| 51 | callback() | ||
| 52 | } | ||
| 53 | } | ||
| 54 | |||
| 55 | const validPwd = (rule, value, callback) => { | ||
| 56 | if (import.meta.env.DEV) { | ||
| 57 | callback() | ||
| 58 | } else { | ||
| 59 | if (!validPassword(value)) { | ||
| 60 | callback(new Error('请设置8位以上大小写字母、数字、特殊符号组合的密码')) | ||
| 61 | } else { | ||
| 62 | callback() | ||
| 63 | } | ||
| 64 | } | ||
| 65 | } | ||
| 66 | |||
| 67 | const rules = ref({ | ||
| 68 | oldPassword: [{required: true, message: '旧密码不能为空', trigger: 'blur'}], | ||
| 69 | newPassword: [ | ||
| 70 | {required: true, message: '新密码不能为空', trigger: 'blur'}, | ||
| 71 | {validator: validPwd, trigger: 'blur'} | ||
| 72 | ], | ||
| 73 | confirmPassword: [ | ||
| 74 | {required: true, message: '确认密码不能为空', trigger: 'blur'}, | ||
| 75 | {required: true, validator: equalToPassword, trigger: 'blur'} | ||
| 76 | ] | ||
| 77 | }) | ||
| 78 | |||
| 79 | /** 提交按钮 */ | ||
| 80 | function submit() { | ||
| 81 | proxy.$refs['pwdRef'].validate(valid => { | ||
| 82 | if (valid) { | ||
| 83 | updateUserPwd(user.oldPassword, user.newPassword).then(response => { | ||
| 84 | proxy.$modal.msgSuccess('修改成功') | ||
| 85 | |||
| 86 | userStore.logOut().then(() => { | ||
| 87 | setTimeout(() => { | ||
| 88 | location.reload() | ||
| 89 | }, 1000) | ||
| 90 | }) | ||
| 91 | }) | ||
| 92 | } | ||
| 93 | }) | ||
| 94 | }; | ||
| 95 | |||
| 96 | </script> | ||
| 97 | |||
| 98 | <style scoped lang="scss"> | ||
| 99 | .indexTitle { | ||
| 100 | margin: 20px 0 12px; | ||
| 101 | padding: 0 20px 15px; | ||
| 102 | border-bottom: 1px solid #e5e5e5; | ||
| 103 | |||
| 104 | h3 { | ||
| 105 | font-size: 16px; | ||
| 106 | color: var(--el-color-primary); | ||
| 107 | } | ||
| 108 | } | ||
| 109 | |||
| 110 | |||
| 111 | </style> |
| 1 | <template> | 1 | <template> |
| 2 | <div> | 2 | <div class="pd20"> |
| 3 | <div v-if="!showSingle" class="grid-content"> | 3 | <div class="d-form-border" style="margin-top: 0"> |
| 4 | <el-tabs v-model="activeName"> | 4 | <el-form class="d-form" size="large" :model="form" ref="registerRef" :rules="registerRules" label-width="120" |
| 5 | <el-tab-pane label="我的参赛队" name="first"> | 5 | style="max-width: 500px;margin: auto"> |
| 6 | <div style="margin: 0 15px;"> | 6 | <el-form-item label="用户名"> |
| 7 | <el-button type="primary" @click="newGroup">+新建参赛队</el-button> | 7 | {{userName}} |
| 8 | </div> | 8 | </el-form-item> |
| 9 | <div style="padding: 20px"> | 9 | <el-form-item label="所属国家" required> |
| 10 | <el-row :gutter="20"> | 10 | <el-select filterable v-model="form.countryId"> |
| 11 | <el-col v-for="(g,index) in dataList" :key="index" :span="8" class="mTop"> | 11 | <el-option v-for="item in countryList" :key="item.id" :label="item.name" :value="item.id" /> |
| 12 | <div class="matchItem bg"> | 12 | </el-select> |
| 13 | <div class="flex"> | 13 | </el-form-item> |
| 14 | <div v-if="g.imgUrl" class="leftImg"> | 14 | <el-form-item label="详细地址" required prop="address"> |
| 15 | <img :src="fillImgUrl(g.imgUrl) " mode="aspectFill"> | 15 | <el-cascader v-if="form.countryId == 240" |
| 16 | </div> | 16 | v-model="form.regionId" |
| 17 | <div class="rightWen"> | 17 | style="width: 100%;" |
| 18 | <div class="name">{{ g.name }}</div> | 18 | :options="regionsList" |
| 19 | <div class="pp"> <span class="labe">联系人:</span> | 19 | :props="{ label:'text' }" |
| 20 | {{ g.contactPerson }} | 20 | /> |
| 21 | </div> | 21 | <el-input type="textarea" v-model="form.address" class="mt10" placeholder="请输入详细地址"/> |
| 22 | <div class="pp"><span class="labe">类型:</span>{{ g.typeStr }} | 22 | </el-form-item> |
| 23 | </div> | 23 | <el-form-item label="机构名称" required prop="name"> |
| 24 | </div> | 24 | <el-input type="text" v-model="form.name" placeholder="请输入内容"/> |
| 25 | </div> | 25 | </el-form-item> |
| 26 | <div class="bottomFunc"> | 26 | <el-form-item label="联系人姓名" required prop="contactPerson"> |
| 27 | <div class="textButtom" @click="viewSingle(g)">查看</div> | 27 | <el-input type="text" v-model="form.contactPerson" placeholder="请输入内容"/> |
| 28 | <span class="greenline">|</span> | 28 | </el-form-item> |
| 29 | <div class="textButtom" @click="del(g)">删除</div> | 29 | <el-form-item label="联系人电话" required prop="contactTelno"> |
| 30 | </div> | 30 | <el-input v-model="form.contactTelno" type="phone" placeholder="请输入内容"/> |
| 31 | </div> | 31 | </el-form-item> |
| 32 | </el-col> | 32 | <el-form-item label="联系人邮箱" required prop="contactEmail"> |
| 33 | </el-row> | 33 | <el-input v-model="form.contactEmail" type="email" placeholder="请输入内容"/> |
| 34 | <el-empty v-if="dataList.length==0" description="还没有参赛队,点击新建参赛队立即创建吧~" /> | 34 | </el-form-item> |
| 35 | </div> | 35 | <el-form-item prop="imgUrl" required label="机构LOGO"> |
| 36 | </el-tab-pane> | 36 | <ImageUpload2 |
| 37 | </el-tabs> | 37 | v-model="form.imgUrl" :crop-height="200" :crop-width="200" :limit="1" |
| 38 | :is-show-tip="false" | ||
| 39 | /> | ||
| 40 | </el-form-item> | ||
| 41 | </el-form> | ||
| 38 | </div> | 42 | </div> |
| 39 | <div v-if="showSingle" class="teamSingle"> | 43 | <div class="text-center"> |
| 40 | <div class="head"> | 44 | <el-button type="primary" class="btn-lineG" round @click="save">确定修改</el-button> |
| 41 | <span @click="showSingle=false"> | ||
| 42 | <el-icon> | ||
| 43 | <ArrowLeft /> | ||
| 44 | </el-icon> | ||
| 45 | 返回列表 | ||
| 46 | </span> | ||
| 47 | |||
| 48 | <div class="fr"> | ||
| 49 | <el-button type="text" @click="editThisTeam">修改</el-button> | ||
| 50 | </div> | ||
| 51 | </div> | ||
| 52 | <div class="team-body"> | ||
| 53 | <div class="flex"> | ||
| 54 | <div class="leftIMg"> | ||
| 55 | <img width="100" :src="fillImgUrl(baseFormData.imgUrl) "> | ||
| 56 | </div> | ||
| 57 | <div class="rightContent"> | ||
| 58 | <div class="rightTop"> | ||
| 59 | <div> {{ baseFormData.name }}</div> | ||
| 60 | </div> | ||
| 61 | <el-row> | ||
| 62 | <el-col :span="12">参赛队简称: {{ baseFormData.abreviations }}</el-col> | ||
| 63 | <el-col :span="12">参赛队类型:{{ baseFormData.typeStr }}</el-col> | ||
| 64 | <el-col :span="12">联系人:{{ baseFormData.contactPerson }}</el-col> | ||
| 65 | <el-col :span="12">联系方式: {{ baseFormData.contactTelno }}</el-col> | ||
| 66 | <el-col :span="12">所在地区: {{ baseFormData.regionStr }}</el-col> | ||
| 67 | <el-col :span="12">详细地址: {{ baseFormData.address }}</el-col> | ||
| 68 | </el-row> | ||
| 69 | </div> | ||
| 70 | <!-- <el-descriptions border> | ||
| 71 | <el-descriptions-item label="logo"> | ||
| 72 | <img width="100" :src="baseFormData.imgUrl"> | ||
| 73 | </el-descriptions-item> | ||
| 74 | <el-descriptions-item label="参赛队名称"> | ||
| 75 | {{ baseFormData.name }} | ||
| 76 | </el-descriptions-item> | ||
| 77 | <el-descriptions-item label="参赛队简称"> | ||
| 78 | {{ baseFormData.abreviations }} | ||
| 79 | </el-descriptions-item> | ||
| 80 | <el-descriptions-item label="参赛队类型"> | ||
| 81 | <span>{{ baseFormData.typeStr }}</span> | ||
| 82 | </el-descriptions-item> | ||
| 83 | <el-descriptions-item label="联系人"> | ||
| 84 | {{ baseFormData.contactPerson }} | ||
| 85 | </el-descriptions-item> | ||
| 86 | <el-descriptions-item label="联系方式"> | ||
| 87 | {{ baseFormData.contactTelno }} | ||
| 88 | </el-descriptions-item> | ||
| 89 | <el-descriptions-item label="参赛队名称"> | ||
| 90 | {{ baseFormData.name }} | ||
| 91 | </el-descriptions-item> | ||
| 92 | <el-descriptions-item label="所在地区"> | ||
| 93 | {{ baseFormData.regionStr }} | ||
| 94 | </el-descriptions-item> | ||
| 95 | <el-descriptions-item label="详细地址"> | ||
| 96 | {{ baseFormData.address }} | ||
| 97 | </el-descriptions-item> | ||
| 98 | </el-descriptions> --> | ||
| 99 | </div> | ||
| 100 | <el-divider /> | ||
| 101 | |||
| 102 | <h3 style="padding: 0 20px;">人员管理 | ||
| 103 | <div class="fr"> | ||
| 104 | <el-button type="primary" @click="addMember">+添加人员</el-button> | ||
| 105 | </div> | ||
| 106 | </h3> | ||
| 107 | <div class="memberList"> | ||
| 108 | <ul> | ||
| 109 | <li | ||
| 110 | v-for="(k,index) in kindList" :key="index" :class="current==index?'active':''" | ||
| 111 | @click="changeKind(index)" | ||
| 112 | >{{ k }} | ||
| 113 | </li> | ||
| 114 | </ul> | ||
| 115 | |||
| 116 | |||
| 117 | <el-row :gutter="20" class="paddingRow"> | ||
| 118 | <el-col v-for="(p, index) in memberList" :key="index" :span="8" class="padding-10"> | ||
| 119 | <div class="matchItem"> | ||
| 120 | <div class="flex m-height"> | ||
| 121 | <div v-if="p.picUrl" class="leftImg"> | ||
| 122 | <img class="roundImg" :src="fillImgUrl(p.picUrl)" mode="aspectFill"> | ||
| 123 | </div> | ||
| 124 | <div class="rightWen"> | ||
| 125 | <div class="name"> | ||
| 126 | <span> | ||
| 127 | {{ p.realName }} | ||
| 128 | </span> | ||
| 129 | <span v-for="l in p.labelArr" v-show="l==current" :key="l" class="tag-view"> | ||
| 130 | <el-tag v-if="l == 2" type="warning">领队</el-tag> | ||
| 131 | <el-tag v-if="l == 1" type="primary">教练</el-tag> | ||
| 132 | <el-tag v-if="l == 0" type="success">运动员</el-tag> | ||
| 133 | <el-tag v-if="l == 4" type="primary">队医</el-tag> | ||
| 134 | <el-tag v-if="l == 5" type="warning">翻译</el-tag> | ||
| 135 | <el-tag v-if="l == 6" type="error">官员</el-tag> | ||
| 136 | <el-tag v-if="l == 3" type="info">其他</el-tag> | ||
| 137 | </span> | ||
| 138 | <!-- <span v-if="p.sex==0">(女)</span> | ||
| 139 | <span v-if="p.sex==1">(男)</span> --> | ||
| 140 | </div> | ||
| 141 | <div class="pp"> | ||
| 142 | <span class="labe">证件类型:</span> | ||
| 143 | <span v-if="p.idcType == 0">居民身份证</span> | ||
| 144 | <span v-else-if="p.idcType == 1">护照</span> | ||
| 145 | <span v-else>其他</span> | ||
| 146 | </div> | ||
| 147 | <div class="pp"> | ||
| 148 | <span class="labe">证件号:</span>{{ p.idcCode.replace(/^(\d{6})\d{8}(.{4}$)/g, `$1${Array(9).join('*')}$2`) }} | ||
| 149 | </div> | ||
| 150 | <div class="pp"><span class="labe">联系方式:</span>{{ p.phone }}</div> | ||
| 151 | </div> | ||
| 152 | </div> | ||
| 153 | <div class="bottomFunc"> | ||
| 154 | <div class="textButtom" @click="goEditCoach(p.id, groupId)">编辑</div> | ||
| 155 | <span class="greenline">|</span> | ||
| 156 | <div class="textButtom" @click="delperson(p)">删除</div> | ||
| 157 | </div> | ||
| 158 | </div> | ||
| 159 | </el-col> | ||
| 160 | </el-row> | ||
| 161 | <el-empty v-if="memberList.length==0" description="还没有成员" /> | ||
| 162 | </div> | ||
| 163 | </div> | ||
| 164 | </div> | 45 | </div> |
| 165 | <!-- 新建团队--> | ||
| 166 | <dialogEditTeam ref="diaEditTeamRef" @submitForm="saveTeam" /> | ||
| 167 | |||
| 168 | <!-- 添加人员--> | ||
| 169 | <addCoach ref="dialogAddCoach" @submitForm="addCoachDone" /> | ||
| 170 | 46 | ||
| 171 | </div> | 47 | </div> |
| 172 | </template> | 48 | </template> |
| ... | @@ -180,170 +56,57 @@ const router = useRouter() | ... | @@ -180,170 +56,57 @@ const router = useRouter() |
| 180 | const { proxy } = getCurrentInstance() | 56 | const { proxy } = getCurrentInstance() |
| 181 | import * as match from '@/apiPc/match' | 57 | import * as match from '@/apiPc/match' |
| 182 | import { ElMessage, ElMessageBox } from 'element-plus' | 58 | import { ElMessage, ElMessageBox } from 'element-plus' |
| 183 | import dialogEditTeam from './component/teamInfo_form' | 59 | import useUserStore from '@/store/modules/user' |
| 184 | import addCoach from '../match/components/addCoach' | 60 | import _ from "lodash"; |
| 185 | 61 | const props = defineProps({ | |
| 186 | const kindList = ref(['运动员', '教练', '领队', '其他', '队医', '翻译', '官员']) | 62 | form:{ |
| 187 | const typeList = ref([{ text: '学校', value: '0' }, { text: '场馆', value: '1' }, { | 63 | type:Object, |
| 188 | text: '俱乐部', | 64 | required:true |
| 189 | value: '2' | 65 | } |
| 190 | }, { text: '机构', value: '3' }]) | 66 | }) |
| 191 | const activeName = ref('first') | 67 | const countryList = ref([]) |
| 192 | const current = ref(0) | ||
| 193 | const myform = ref({}) | ||
| 194 | const showSingle = ref(false) | ||
| 195 | const baseFormData = ref({}) | ||
| 196 | const groupId = ref('') | ||
| 197 | |||
| 198 | const regionsList = ref([]) | 68 | const regionsList = ref([]) |
| 199 | const dataList = ref([]) | 69 | const regionsArr = ref([]) |
| 200 | const memberList = ref([]) | 70 | const userName = ref('') |
| 201 | 71 | const registerRules = ref( | |
| 72 | { | ||
| 73 | countryId: [{ required: true, trigger: 'blur', message: '请选择所属国家' },], | ||
| 74 | address: [{ required: true, trigger: 'blur', message: '请输入地址' },], | ||
| 75 | name: [{ required: true, trigger: 'blur', message: '请输入' },], | ||
| 76 | contactPerson: [{ required: true, trigger: 'blur', message: '请输入' },], | ||
| 77 | contactTelno: [{ required: true, trigger: 'blur', message: '请输入' },], | ||
| 78 | contactEmail: [{ required: true, trigger: 'blur', message: '请输入' },], | ||
| 79 | imgUrl: [{ required: true, trigger: 'blur', message: '请上传' },], | ||
| 80 | }) | ||
| 202 | onMounted(() => { | 81 | onMounted(() => { |
| 203 | getList() | 82 | getRegionsList() |
| 204 | // getRegionsList() | 83 | getCountryList() |
| 84 | regionsArr.value = props.form.regionId | ||
| 85 | userName.value = useUserStore().user.userName | ||
| 205 | }) | 86 | }) |
| 206 | function addMember() { | ||
| 207 | const params = { | ||
| 208 | title: '添加人员', | ||
| 209 | id: 0, | ||
| 210 | groupId: groupId.value | ||
| 211 | } | ||
| 212 | proxy.$refs['dialogAddCoach'].open(params) | ||
| 213 | } | ||
| 214 | function goEditCoach(id, groupId) { | ||
| 215 | const params = { | ||
| 216 | id: id, | ||
| 217 | groupId: groupId | ||
| 218 | } | ||
| 219 | proxy.$refs['dialogAddCoach'].open(params) | ||
| 220 | } | ||
| 221 | function addCoachDone() { | ||
| 222 | getInfo(groupId.value) | ||
| 223 | } | ||
| 224 | 87 | ||
| 225 | function getRegionsList() { | 88 | function getRegionsList() { |
| 226 | match.regionsList().then(res => { | 89 | match.regionsList().then(res => { |
| 227 | regionsList.value = res.data | 90 | regionsList.value = res.data |
| 228 | }) | 91 | }) |
| 229 | } | 92 | } |
| 230 | 93 | function getCountryList() { | |
| 231 | function getList() { | 94 | match.countryList().then(res => { |
| 232 | match.getMyGroupList().then(res => { | 95 | countryList.value = res.data |
| 233 | dataList.value = res.data | ||
| 234 | }) | ||
| 235 | } | ||
| 236 | |||
| 237 | function newGroup() { | ||
| 238 | proxy.$refs['diaEditTeamRef'].open({ | ||
| 239 | title: '新建参赛队' | ||
| 240 | }) | 96 | }) |
| 241 | } | 97 | } |
| 98 | function save() { | ||
| 99 | proxy.$refs['registerRef'].validate((valid) => { | ||
| 100 | if (valid) { | ||
| 101 | if (typeof (props.form.regionId) === 'object') { | ||
| 102 | props.form.regionId = _.last(props.form.regionId) | ||
| 103 | } | ||
| 104 | match.saveMyGroup(props.form).then(res => { | ||
| 242 | 105 | ||
| 243 | function editThisTeam() { | 106 | }) |
| 244 | proxy.$refs['diaEditTeamRef'].open({ | ||
| 245 | data: baseFormData.value, | ||
| 246 | title: '编辑参赛队' | ||
| 247 | }) | ||
| 248 | } | ||
| 249 | |||
| 250 | |||
| 251 | function changeKind(n) { | ||
| 252 | // debugger | ||
| 253 | current.value = n | ||
| 254 | switch (current.value) { | ||
| 255 | case 0: { | ||
| 256 | memberList.value = baseFormData.value.athletes | ||
| 257 | getLabel(memberList.value) | ||
| 258 | break | ||
| 259 | } | ||
| 260 | case 1: { | ||
| 261 | memberList.value = baseFormData.value.coaches | ||
| 262 | getLabel(memberList.value) | ||
| 263 | break | ||
| 264 | } | ||
| 265 | case 2: { | ||
| 266 | memberList.value = baseFormData.value.leaders | ||
| 267 | getLabel(memberList.value) | ||
| 268 | break | ||
| 269 | } | ||
| 270 | case 3: { | ||
| 271 | memberList.value = baseFormData.value.others | ||
| 272 | getLabel(memberList.value) | ||
| 273 | break | ||
| 274 | } | ||
| 275 | case 4: { | ||
| 276 | memberList.value = baseFormData.value.teamDoctors | ||
| 277 | getLabel(memberList.value) | ||
| 278 | break | ||
| 279 | } | ||
| 280 | case 5: { | ||
| 281 | memberList.value = baseFormData.value.translators | ||
| 282 | getLabel(memberList.value) | ||
| 283 | break | ||
| 284 | } | ||
| 285 | case 6: { | ||
| 286 | memberList.value = baseFormData.value.officials | ||
| 287 | getLabel(memberList.value) | ||
| 288 | break | ||
| 289 | } | ||
| 290 | } | ||
| 291 | } | ||
| 292 | |||
| 293 | function getLabel(list) { | ||
| 294 | if (list.length > 0) { | ||
| 295 | for (const m of list) { | ||
| 296 | m.labelArr = m.label.split(',') | ||
| 297 | } | 107 | } |
| 298 | } | ||
| 299 | } | ||
| 300 | |||
| 301 | function viewSingle(n) { | ||
| 302 | groupId.value = n.id | ||
| 303 | showSingle.value = true | ||
| 304 | getInfo(groupId.value) | ||
| 305 | } | ||
| 306 | function getInfo(id) { | ||
| 307 | match.getGroupById(id).then(res => { | ||
| 308 | baseFormData.value = res.data | ||
| 309 | memberList.value = baseFormData.value.athletes | ||
| 310 | getLabel(memberList.value) | ||
| 311 | }) | 108 | }) |
| 312 | } | 109 | } |
| 313 | function saveTeam() { | ||
| 314 | if (showSingle.value) { | ||
| 315 | getInfo(groupId.value) | ||
| 316 | } else { | ||
| 317 | getList() | ||
| 318 | } | ||
| 319 | } | ||
| 320 | function del(g) { | ||
| 321 | // 删除团 | ||
| 322 | ElMessageBox.confirm('确定删除这个参赛队吗?', '提示', { | ||
| 323 | confirmButtonText: '确定', | ||
| 324 | cancelButtonText: '取消', | ||
| 325 | type: 'warning' | ||
| 326 | }).then(() => { | ||
| 327 | match.deleteMyGroup(g.id).then(res => { | ||
| 328 | ElMessage.success('操作成功') | ||
| 329 | getList() | ||
| 330 | }) | ||
| 331 | }) | ||
| 332 | } | ||
| 333 | function delperson(p) { | ||
| 334 | // 删除团队下的人 | ||
| 335 | ElMessageBox.confirm(`确定删除${p.realName}吗?`, '提示', { | ||
| 336 | confirmButtonText: '确定', | ||
| 337 | cancelButtonText: '取消', | ||
| 338 | type: 'warning' | ||
| 339 | }).then(() => { | ||
| 340 | match.delPerson(p.id).then(res => { | ||
| 341 | ElMessage.success('操作成功') | ||
| 342 | getInfo(groupId.value) | ||
| 343 | }) | ||
| 344 | }) | ||
| 345 | } | ||
| 346 | |||
| 347 | </script> | 110 | </script> |
| 348 | 111 | ||
| 349 | <style scoped lang="scss"> | 112 | <style scoped lang="scss"> |
| ... | @@ -374,7 +137,7 @@ function delperson(p) { | ... | @@ -374,7 +137,7 @@ function delperson(p) { |
| 374 | border-radius: 4px; | 137 | border-radius: 4px; |
| 375 | display: flex; | 138 | display: flex; |
| 376 | justify-content: center; | 139 | justify-content: center; |
| 377 | 140 | ||
| 378 | img{ | 141 | img{ |
| 379 | width: 60px; | 142 | width: 60px; |
| 380 | height: 60px; | 143 | height: 60px; |
| ... | @@ -401,7 +164,7 @@ function delperson(p) { | ... | @@ -401,7 +164,7 @@ function delperson(p) { |
| 401 | font-size: 14px; | 164 | font-size: 14px; |
| 402 | color: #000; | 165 | color: #000; |
| 403 | cursor:pointer; | 166 | cursor:pointer; |
| 404 | 167 | ||
| 405 | } | 168 | } |
| 406 | .active{ | 169 | .active{ |
| 407 | color: #fff; | 170 | color: #fff; |
| ... | @@ -495,7 +258,7 @@ function delperson(p) { | ... | @@ -495,7 +258,7 @@ function delperson(p) { |
| 495 | } | 258 | } |
| 496 | } | 259 | } |
| 497 | } | 260 | } |
| 498 | 261 | ||
| 499 | } | 262 | } |
| 500 | .name{ | 263 | .name{ |
| 501 | height: 25px; | 264 | height: 25px; | ... | ... |
| ... | @@ -79,8 +79,8 @@ | ... | @@ -79,8 +79,8 @@ |
| 79 | </div> | 79 | </div> |
| 80 | <!--赛事日历--> | 80 | <!--赛事日历--> |
| 81 | <el-card :body-style="{'padding':'20px 20px'}"> | 81 | <el-card :body-style="{'padding':'20px 20px'}"> |
| 82 | <!-- <el-calendar v-model="calendarValue" :range="calendarRange">--> | 82 | <el-calendar v-model="calendarValue" :range="calendarRange"> |
| 83 | <el-calendar> | 83 | <!-- <el-calendar>--> |
| 84 | <template #date-cell="data"> | 84 | <template #date-cell="data"> |
| 85 | <div v-if="data.data.day.slice(8,10)==22" class="primaryDate date">22</div> | 85 | <div v-if="data.data.day.slice(8,10)==22" class="primaryDate date">22</div> |
| 86 | <div v-else class="date"> | 86 | <div v-else class="date"> |
| ... | @@ -417,8 +417,8 @@ const scores = ref([]) | ... | @@ -417,8 +417,8 @@ const scores = ref([]) |
| 417 | const nowscores = ref([]) | 417 | const nowscores = ref([]) |
| 418 | const livelist = ref([]) | 418 | const livelist = ref([]) |
| 419 | const picList = ref([]) | 419 | const picList = ref([]) |
| 420 | // const calendarValue = ref('2024-07-22') | 420 | const calendarValue = ref('2024-07-22') |
| 421 | // const calendarRange = ref(['2024-07-21','2024-07-27']) | 421 | const calendarRange = ref(['2024-07-21','2024-07-27']) |
| 422 | const showgg = ref(true) | 422 | const showgg = ref(true) |
| 423 | onMounted(() => { | 423 | onMounted(() => { |
| 424 | init() | 424 | init() | ... | ... |
| ... | @@ -88,7 +88,7 @@ | ... | @@ -88,7 +88,7 @@ |
| 88 | <el-input | 88 | <el-input |
| 89 | v-model.trim="changePasswordForm.username" | 89 | v-model.trim="changePasswordForm.username" |
| 90 | size="large" | 90 | size="large" |
| 91 | auto-complete="off" | 91 | auto-complete="off" @change="changePasswordFormUsername" |
| 92 | placeholder="注册时使用的邮箱/手机号码" | 92 | placeholder="注册时使用的邮箱/手机号码" |
| 93 | > | 93 | > |
| 94 | 94 | ||
| ... | @@ -113,9 +113,9 @@ | ... | @@ -113,9 +113,9 @@ |
| 113 | </el-button> | 113 | </el-button> |
| 114 | </template> | 114 | </template> |
| 115 | </el-input> | 115 | </el-input> |
| 116 | <div class="vcodeBox" :style="isShow?'height:240px':'height:0'"> | 116 | <!-- <div class="vcodeBox" :style="isShow?'height:240px':'height:0'">--> |
| 117 | <Vcode :show="isShow" type="inside" @success="codeSuccess" @close="codeClose" @fail='codeFail'></Vcode> | 117 | <Vcode :zIndex="9999" :show="isShow" @success="codeSuccess"></Vcode> |
| 118 | </div> | 118 | <!-- </div>--> |
| 119 | </el-form-item> | 119 | </el-form-item> |
| 120 | 120 | ||
| 121 | <el-form-item prop="password"> | 121 | <el-form-item prop="password"> |
| ... | @@ -129,7 +129,7 @@ | ... | @@ -129,7 +129,7 @@ |
| 129 | > | 129 | > |
| 130 | </el-input> | 130 | </el-input> |
| 131 | </el-form-item> | 131 | </el-form-item> |
| 132 | <el-form-item prop="password"> | 132 | <el-form-item prop="confirmPassword"> |
| 133 | <el-input | 133 | <el-input |
| 134 | v-model.trim="changePasswordForm.confirmPassword" | 134 | v-model.trim="changePasswordForm.confirmPassword" |
| 135 | type="password" | 135 | type="password" |
| ... | @@ -146,7 +146,7 @@ | ... | @@ -146,7 +146,7 @@ |
| 146 | size="large" | 146 | size="large" |
| 147 | type="primary" | 147 | type="primary" |
| 148 | style="width:100%;" | 148 | style="width:100%;" |
| 149 | @click.prevent="handleLogin" | 149 | @click.prevent="handleChangePassword" |
| 150 | > | 150 | > |
| 151 | <span>确定</span> | 151 | <span>确定</span> |
| 152 | </el-button> | 152 | </el-button> |
| ... | @@ -159,7 +159,7 @@ | ... | @@ -159,7 +159,7 @@ |
| 159 | <script setup> | 159 | <script setup> |
| 160 | import Vcode from "vue3-puzzle-vcode" | 160 | import Vcode from "vue3-puzzle-vcode" |
| 161 | import CountDown from '@chenfengyuan/vue-countdown' | 161 | import CountDown from '@chenfengyuan/vue-countdown' |
| 162 | import { getCodeImg } from '@/api/login' | 162 | import {forgetPassword, getCodeImg} from '@/api/login' |
| 163 | import * as match from '@/apiPc/match' | 163 | import * as match from '@/apiPc/match' |
| 164 | import Cookies from 'js-cookie' | 164 | import Cookies from 'js-cookie' |
| 165 | import useUserStore from '@/store/modules/user' | 165 | import useUserStore from '@/store/modules/user' |
| ... | @@ -183,6 +183,12 @@ const loginRules = { | ... | @@ -183,6 +183,12 @@ const loginRules = { |
| 183 | password: [{ required: true, trigger: 'change', message: '请输入您账号密码' }], | 183 | password: [{ required: true, trigger: 'change', message: '请输入您账号密码' }], |
| 184 | code: [{ required: true, trigger: 'change', message: '请输入验证码' }] | 184 | code: [{ required: true, trigger: 'change', message: '请输入验证码' }] |
| 185 | } | 185 | } |
| 186 | const changePasswordRules = { | ||
| 187 | username: [{ required: true, trigger: 'change', message: '请输入您的账号' }], | ||
| 188 | password: [{ required: true, trigger: 'change', message: '请输入您的密码' }], | ||
| 189 | confirmPassword: [{ required: true, trigger: 'change', message: '请再次输入您的密码' }], | ||
| 190 | code: [{ required: true, trigger: 'change', message: '请输入验证码' }] | ||
| 191 | } | ||
| 186 | 192 | ||
| 187 | const show = ref(false) | 193 | const show = ref(false) |
| 188 | const loginStatus = ref(0) | 194 | const loginStatus = ref(0) |
| ... | @@ -284,7 +290,7 @@ function getCookie() { | ... | @@ -284,7 +290,7 @@ function getCookie() { |
| 284 | } | 290 | } |
| 285 | } | 291 | } |
| 286 | function sendsmsMsg() { | 292 | function sendsmsMsg() { |
| 287 | if(!changePasswordForm.value.account){ | 293 | if(!changePasswordForm.value.username){ |
| 288 | ElMessage.error('请填写手机/邮箱') | 294 | ElMessage.error('请填写手机/邮箱') |
| 289 | return | 295 | return |
| 290 | } | 296 | } |
| ... | @@ -294,6 +300,30 @@ function sendsmsMsg() { | ... | @@ -294,6 +300,30 @@ function sendsmsMsg() { |
| 294 | isShow.value = true | 300 | isShow.value = true |
| 295 | } | 301 | } |
| 296 | } | 302 | } |
| 303 | function codeSuccess() { | ||
| 304 | isShow.value = false | ||
| 305 | isCodeTrue.value = true | ||
| 306 | counting.value = true | ||
| 307 | } | ||
| 308 | function changePasswordFormUsername() { | ||
| 309 | isCodeTrue.value = false | ||
| 310 | } | ||
| 311 | function handleChangePassword() { | ||
| 312 | proxy.$refs.changePasswordRef.validate(valid => { | ||
| 313 | if (valid) { | ||
| 314 | if(isCodeTrue.value){ | ||
| 315 | delete changePasswordForm.value.confirmPassword | ||
| 316 | forgetPassword(changePasswordForm.value).then(res=>{ | ||
| 317 | ElMessage.success('操作成功,请登录') | ||
| 318 | close() | ||
| 319 | }) | ||
| 320 | } else { | ||
| 321 | ElMessage.error('请发送验证码') | ||
| 322 | } | ||
| 323 | } | ||
| 324 | }) | ||
| 325 | |||
| 326 | } | ||
| 297 | </script> | 327 | </script> |
| 298 | 328 | ||
| 299 | <style lang="scss" scoped> | 329 | <style lang="scss" scoped> | ... | ... |
| 1 | <template> | 1 | <template> |
| 2 | <div style="padding: 0 20px 20px"> | 2 | <div style="padding: 0 20px 20px"> |
| 3 | <!-- 赛事详情--> | 3 | <!--赛事详情--> |
| 4 | <div class="indexTitle"><h3 class="leftboderTT">组织机构</h3></div> | 4 | <div class="indexTitle"><h3 class="leftboderTT">组织机构</h3></div> |
| 5 | <el-row :gutter="20"> | ||
| 6 | <el-col :lg="8"> | ||
| 7 | <div class="dlbox"> | ||
| 8 | <dl> | ||
| 9 | <dt>主办单位</dt> | ||
| 10 | <dd>世界体育舞蹈联合会(WDSF)</dd> | ||
| 11 | <dd>亚洲体育舞蹈联合会(DSA)</dd> | ||
| 12 | <dd>中国体育联合会(CDSF)</dd> | ||
| 13 | </dl> | ||
| 14 | </div> | ||
| 15 | </el-col> | ||
| 16 | <el-col :lg="8"> | ||
| 17 | <div class="dlbox"> | ||
| 18 | <dl> | ||
| 19 | <dt>承办单位</dt> | ||
| 20 | <dd>江苏省体育总会</dd> | ||
| 21 | <dd>无锡市人民政府</dd> | ||
| 22 | </dl> | ||
| 23 | </div> | ||
| 24 | </el-col> | ||
| 25 | <el-col :lg="8"> | ||
| 26 | <div class="dlbox"> | ||
| 27 | <dl> | ||
| 28 | <dt>协办单位</dt> | ||
| 29 | <dd>无锡市体育局</dd> | ||
| 30 | <dd>江苏无锡经济开发区管理委员会</dd> | ||
| 31 | <dd>江苏省体育舞蹈运动协会</dd> | ||
| 32 | </dl> | ||
| 33 | </div> | ||
| 34 | </el-col> | ||
| 35 | <el-col :lg="8"> | ||
| 36 | <div class="dlbox"> | ||
| 37 | <dl> | ||
| 38 | <dt>运营单位</dt> | ||
| 39 | <dd>吉金无锡运动健康有限公司</dd> | ||
| 40 | </dl> | ||
| 41 | </div> | ||
| 42 | </el-col> | ||
| 43 | |||
| 44 | </el-row> | ||
| 45 | <div class="indexTitle"><h3 class="leftboderTT">报名须知</h3></div> | ||
| 46 | <div class="xzbox"> | 5 | <div class="xzbox"> |
| 47 | 1.各单位限报1支队伍,每队需报领队1名(运动员可兼任),运动员限报4名<br> | 6 | 1.各单位限报1支队伍,每队需报领队1名(运动员可兼任),运动员限报4名<br> |
| 48 | 2.参赛运动员必须是参赛企业的员工(包括劳务派遣和外籍员工)<br> | 7 | 2.参赛运动员必须是参赛企业的员工(包括劳务派遣和外籍员工)<br> |
| 49 | 3.参赛运动员必须年满18至50周岁,50周岁以上者不建议参加此次比赛<br> | 8 | 3.参赛运动员必须年满18至50周岁,50周岁以上者不建议参加此次比赛<br> |
| 50 | 4.参赛运动员必须身体健康 | 9 | 4.参赛运动员必须身体健康 |
| 51 | </div> | 10 | </div> |
| 11 | <div class="indexTitle"><h3 class="leftboderTT">报名须知</h3></div> | ||
| 12 | <div class="xzbox" v-html="form.signKnow"> | ||
| 52 | 13 | ||
| 53 | <div class="indexTitle"><h3 class="leftboderTT">竞赛项目</h3></div> | 14 | </div> |
| 54 | <div class="collapsebox"> | 15 | <div class="indexTitle" v-if="form.type==0"><h3 class="leftboderTT">赛事规程</h3></div> |
| 55 | <el-collapse v-model="activeNames" @change="handleChange"> | 16 | <div class="xzbox" v-if="form.type==0" v-html="form.ruleUrl"></div> |
| 56 | <el-collapse-item title="霹雳舞" name="1"> | 17 | <div class="indexTitle" v-if="form.type==1"><h3 class="leftboderTT">竞赛项目</h3></div> |
| 18 | <div class="collapsebox" v-if="form.type==1"> | ||
| 19 | <el-collapse v-if="form.cptProjectList?.length > 0"> | ||
| 20 | <el-collapse-item :title="p.name" :name="index" :key="index" v-for="(p,index) in form.cptProjectList"> | ||
| 57 | <div class="pd20"> | 21 | <div class="pd20"> |
| 58 | <table class="table"> | 22 | <table class="table"> |
| 59 | <tr> | 23 | <tr> |
| ... | @@ -135,171 +99,39 @@ | ... | @@ -135,171 +99,39 @@ |
| 135 | </table> | 99 | </table> |
| 136 | </div> | 100 | </div> |
| 137 | </el-collapse-item> | 101 | </el-collapse-item> |
| 138 | <el-collapse-item title="拉丁舞" name="2"> | ||
| 139 | <div class="pd20"> | ||
| 140 | <table class="table"> | ||
| 141 | <tr> | ||
| 142 | <td>日期</td> | ||
| 143 | <td>单元</td> | ||
| 144 | <td>组别</td> | ||
| 145 | <td>时间</td> | ||
| 146 | <td>阶段</td> | ||
| 147 | </tr> | ||
| 148 | <tr> | ||
| 149 | <td rowspan="4">2023/10/6(星期五)</td> | ||
| 150 | <td rowspan="4">BRK01</td> | ||
| 151 | <td>男子</td> | ||
| 152 | <td>14:30 - 15:30</td> | ||
| 153 | <td>资格赛</td> | ||
| 154 | </tr> | ||
| 155 | <tr> | ||
| 156 | <td>女子</td> | ||
| 157 | <td>14:30 - 15:30</td> | ||
| 158 | <td>资格赛</td> | ||
| 159 | </tr> | ||
| 160 | <tr> | ||
| 161 | <td>男子</td> | ||
| 162 | <td>14:30 - 15:30</td> | ||
| 163 | <td>循环赛</td> | ||
| 164 | </tr> | ||
| 165 | <tr> | ||
| 166 | <td>女子</td> | ||
| 167 | <td>14:30 - 15:30</td> | ||
| 168 | <td>循环赛</td> | ||
| 169 | </tr> | ||
| 170 | <tr> | ||
| 171 | <td rowspan="8">2023/10/7(星期六)</td> | ||
| 172 | <td rowspan="8">BRK02</td> | ||
| 173 | <td>男子</td> | ||
| 174 | <td>14:30 - 15:30</td> | ||
| 175 | <td>四分之一决赛</td> | ||
| 176 | </tr> | ||
| 177 | <tr> | ||
| 178 | <td>男子</td> | ||
| 179 | <td>14:30 - 15:30</td> | ||
| 180 | <td>四分之一决赛</td> | ||
| 181 | </tr> | ||
| 182 | <tr> | ||
| 183 | <td>女子</td> | ||
| 184 | <td>14:30 - 15:30</td> | ||
| 185 | <td>半决赛</td> | ||
| 186 | </tr> | ||
| 187 | <tr> | ||
| 188 | <td>女子</td> | ||
| 189 | <td>14:30 - 15:30</td> | ||
| 190 | <td>半决赛</td> | ||
| 191 | </tr> | ||
| 192 | <tr> | ||
| 193 | <td>男子</td> | ||
| 194 | <td>14:30 - 15:30</td> | ||
| 195 | <td>季军赛</td> | ||
| 196 | </tr> | ||
| 197 | <tr> | ||
| 198 | <td>女子</td> | ||
| 199 | <td>14:30 - 15:30</td> | ||
| 200 | <td>季军赛</td> | ||
| 201 | </tr> | ||
| 202 | <tr> | ||
| 203 | <td>男子</td> | ||
| 204 | <td>14:30 - 15:30</td> | ||
| 205 | <td>决赛</td> | ||
| 206 | </tr> | ||
| 207 | <tr> | ||
| 208 | <td>女子</td> | ||
| 209 | <td>14:30 - 15:30</td> | ||
| 210 | <td>决赛</td> | ||
| 211 | </tr> | ||
| 212 | |||
| 213 | </table> | ||
| 214 | </div> | ||
| 215 | </el-collapse-item> | ||
| 216 | <el-collapse-item title="国际舞" name="3"> | ||
| 217 | <div class="pd20"> | ||
| 218 | <table class="table"> | ||
| 219 | <tr> | ||
| 220 | <td>日期</td> | ||
| 221 | <td>单元</td> | ||
| 222 | <td>组别</td> | ||
| 223 | <td>时间</td> | ||
| 224 | <td>阶段</td> | ||
| 225 | </tr> | ||
| 226 | <tr> | ||
| 227 | <td rowspan="4">2023/10/6(星期五)</td> | ||
| 228 | <td rowspan="4">BRK01</td> | ||
| 229 | <td>男子</td> | ||
| 230 | <td>14:30 - 15:30</td> | ||
| 231 | <td>资格赛</td> | ||
| 232 | </tr> | ||
| 233 | <tr> | ||
| 234 | <td>女子</td> | ||
| 235 | <td>14:30 - 15:30</td> | ||
| 236 | <td>资格赛</td> | ||
| 237 | </tr> | ||
| 238 | <tr> | ||
| 239 | <td>男子</td> | ||
| 240 | <td>14:30 - 15:30</td> | ||
| 241 | <td>循环赛</td> | ||
| 242 | </tr> | ||
| 243 | <tr> | ||
| 244 | <td>女子</td> | ||
| 245 | <td>14:30 - 15:30</td> | ||
| 246 | <td>循环赛</td> | ||
| 247 | </tr> | ||
| 248 | <tr> | ||
| 249 | <td rowspan="8">2023/10/7(星期六)</td> | ||
| 250 | <td rowspan="8">BRK02</td> | ||
| 251 | <td>男子</td> | ||
| 252 | <td>14:30 - 15:30</td> | ||
| 253 | <td>四分之一决赛</td> | ||
| 254 | </tr> | ||
| 255 | <tr> | ||
| 256 | <td>男子</td> | ||
| 257 | <td>14:30 - 15:30</td> | ||
| 258 | <td>四分之一决赛</td> | ||
| 259 | </tr> | ||
| 260 | <tr> | ||
| 261 | <td>女子</td> | ||
| 262 | <td>14:30 - 15:30</td> | ||
| 263 | <td>半决赛</td> | ||
| 264 | </tr> | ||
| 265 | <tr> | ||
| 266 | <td>女子</td> | ||
| 267 | <td>14:30 - 15:30</td> | ||
| 268 | <td>半决赛</td> | ||
| 269 | </tr> | ||
| 270 | <tr> | ||
| 271 | <td>男子</td> | ||
| 272 | <td>14:30 - 15:30</td> | ||
| 273 | <td>季军赛</td> | ||
| 274 | </tr> | ||
| 275 | <tr> | ||
| 276 | <td>女子</td> | ||
| 277 | <td>14:30 - 15:30</td> | ||
| 278 | <td>季军赛</td> | ||
| 279 | </tr> | ||
| 280 | <tr> | ||
| 281 | <td>男子</td> | ||
| 282 | <td>14:30 - 15:30</td> | ||
| 283 | <td>决赛</td> | ||
| 284 | </tr> | ||
| 285 | <tr> | ||
| 286 | <td>女子</td> | ||
| 287 | <td>14:30 - 15:30</td> | ||
| 288 | <td>决赛</td> | ||
| 289 | </tr> | ||
| 290 | |||
| 291 | </table> | ||
| 292 | </div> | ||
| 293 | </el-collapse-item> | ||
| 294 | </el-collapse> | 102 | </el-collapse> |
| 103 | <el-empty image="@/assets/img/order_no.png" image-size="228" v-if="form.cptProjectList?.length == 0" description=" "/> | ||
| 295 | </div> | 104 | </div> |
| 296 | </div> | 105 | </div> |
| 297 | </template> | 106 | </template> |
| 298 | 107 | ||
| 299 | <script setup> | 108 | <script setup> |
| 300 | 109 | const props = defineProps({ | |
| 110 | form:{ | ||
| 111 | type:Object, | ||
| 112 | required:true | ||
| 113 | } | ||
| 114 | }) | ||
| 301 | </script> | 115 | </script> |
| 302 | 116 | ||
| 303 | <style scoped> | 117 | <style scoped lang="scss"> |
| 304 | 118 | .indexTitle{margin: 20px 0 12px; | |
| 119 | h3{ | ||
| 120 | font-size: 20px; | ||
| 121 | color:var(--el-color-primary); | ||
| 122 | } | ||
| 123 | } | ||
| 124 | .table{width: 100%;border-left: 1px solid #e1e1e1;border-top:1px solid #e1e1e1; | ||
| 125 | th{background: #eee;padding: 6px 10px; | ||
| 126 | border-right: 1px solid #e1e1e1; | ||
| 127 | border-bottom:1px solid #e1e1e1; | ||
| 128 | font-size: 15px; | ||
| 129 | } | ||
| 130 | td{padding: 6px 10px;border-right: 1px solid #e1e1e1;font-size: 15px; | ||
| 131 | border-bottom:1px solid #e1e1e1;vertical-align: middle;text-align: center; | ||
| 132 | span{margin-right: 10px} | ||
| 133 | span::after{content: ','} | ||
| 134 | span:last-child::after{content: ''} | ||
| 135 | } | ||
| 136 | } | ||
| 305 | </style> | 137 | </style> | ... | ... |
src/viewsPc/match/components/matchNews.vue
0 → 100644
| 1 | <template> | ||
| 2 | <el-card :body-style="{padding: '10px'}" class="mb20"> | ||
| 3 | <div> | ||
| 4 | <div class="liveImgbox" @click="goDetail(newsList[0])"> | ||
| 5 | <i class="ii">直播中</i> | ||
| 6 | <img :src="fillImgUrl_webSite(newsList[0]?.picUrl)"> | ||
| 7 | </div> | ||
| 8 | </div> | ||
| 9 | |||
| 10 | <div class="indexTitle"> | ||
| 11 | <h3 class="leftboderTT">赛事报道</h3> | ||
| 12 | <a class="more" @click="goList(query2.sortId,'专题报道')">MORE</a> | ||
| 13 | </div> | ||
| 14 | <div> | ||
| 15 | <div class="item" v-for="n in newsList2" :key="n.id"> | ||
| 16 | <p class="esp">{{ n.name }}</p> | ||
| 17 | </div> | ||
| 18 | </div> | ||
| 19 | |||
| 20 | <div class="indexTitle"><h3 class="leftboderTT">赛事视频</h3> | ||
| 21 | <a class="more" @click="goList(10000006,'赛事视频')">MORE</a> | ||
| 22 | </div> | ||
| 23 | <div> | ||
| 24 | <div class="videoImgbox" @click="goDetail(newsList[1])"> | ||
| 25 | <img :src="fillImgUrl_webSite(newsList[1]?.picUrl)"> | ||
| 26 | </div> | ||
| 27 | </div> | ||
| 28 | <div class="indexTitle"><h3 class="leftboderTT">赛事图片</h3> | ||
| 29 | <a class="more" @click="goList(10000007,'赛事图片')">MORE</a> | ||
| 30 | </div> | ||
| 31 | <div> | ||
| 32 | <div class="picbox" @click="goDetail(newsList[0])"><img :src="fillImgUrl_webSite(newsList[0]?.picUrl)"/></div> | ||
| 33 | </div> | ||
| 34 | </el-card> | ||
| 35 | </template> | ||
| 36 | |||
| 37 | <script setup> | ||
| 38 | import {getNewsListById} from "@/apiPc/webSite"; | ||
| 39 | import {onMounted, ref} from "vue"; | ||
| 40 | const newsList = ref([]) | ||
| 41 | const newsList2 = ref([]) | ||
| 42 | const query1 = ref({ | ||
| 43 | pageSize: 5, | ||
| 44 | pageNum: 1, | ||
| 45 | sortId: '10000006' | ||
| 46 | }) | ||
| 47 | const query2 = ref({ | ||
| 48 | pageSize: 3, | ||
| 49 | pageNum: 1, | ||
| 50 | sortId: '10000003' | ||
| 51 | }) | ||
| 52 | onMounted(() => { | ||
| 53 | getList(query1.value) | ||
| 54 | getList2(query2.value) | ||
| 55 | }) | ||
| 56 | const getList = (obj) => { | ||
| 57 | getNewsListById(obj).then(res => { | ||
| 58 | newsList.value = res.rows | ||
| 59 | }) | ||
| 60 | } | ||
| 61 | const getList2 = (obj) => { | ||
| 62 | getNewsListById(obj).then(res => { | ||
| 63 | newsList2.value = res.rows | ||
| 64 | }) | ||
| 65 | } | ||
| 66 | const goList = (sortId,name) => { | ||
| 67 | router.push({ | ||
| 68 | path: `/news/list/${sortId}`, | ||
| 69 | query:{ | ||
| 70 | kindName:name | ||
| 71 | } | ||
| 72 | }) | ||
| 73 | } | ||
| 74 | </script> | ||
| 75 | |||
| 76 | <style scoped lang="scss"> | ||
| 77 | .indexTitle{margin: 20px 0 12px; | ||
| 78 | h3{ | ||
| 79 | font-size: 20px; | ||
| 80 | color:var(--el-color-primary); | ||
| 81 | } | ||
| 82 | } | ||
| 83 | .item:hover{cursor: pointer;color: var(--el-color-primary)} | ||
| 84 | .indexTitle a.more{top: 0;} | ||
| 85 | </style> |
| 1 | <template> | ||
| 2 | <div style="padding: 0 20px 20px"> | ||
| 3 | <!--日程--> | ||
| 4 | <el-timeline> | ||
| 5 | <el-timeline-item | ||
| 6 | v-for="s in matchData.cptScheduleList" | ||
| 7 | :key="s.id" hide-timestamp | ||
| 8 | placement="top" | ||
| 9 | > | ||
| 10 | <p style="font-size: 16px;margin: 0"> | ||
| 11 | {{ s.timeRange?.split(',')[0].substring(0, 16) }} | ||
| 12 | ~ | ||
| 13 | {{ s.timeRange?.split(',')[1].substring(0, 16) }} | ||
| 14 | </p> | ||
| 15 | |||
| 16 | <p style="font-size: 16px;">{{ s.name }}</p> | ||
| 17 | <p v-if="s.introduction" v-html="s.introduction"></p> | ||
| 18 | <div class="time-address"> | ||
| 19 | <el-icon> | ||
| 20 | <Position /> | ||
| 21 | </el-icon> | ||
| 22 | {{ s.address }} | ||
| 23 | </div> | ||
| 24 | </el-timeline-item> | ||
| 25 | </el-timeline> | ||
| 26 | |||
| 27 | <el-empty image="@/assets/img/order_no.png" image-size="228" v-if="matchData.cptScheduleList?.length==0" description=" " /> | ||
| 28 | |||
| 29 | </div> | ||
| 30 | </template> | ||
| 31 | |||
| 32 | <script setup> | ||
| 33 | const props = defineProps({ | ||
| 34 | matchData:{ | ||
| 35 | type:Object, | ||
| 36 | required:true | ||
| 37 | } | ||
| 38 | }) | ||
| 39 | </script> | ||
| 40 | |||
| 41 | <style scoped lang="scss"> | ||
| 42 | .indexTitle{margin: 20px 0 12px; | ||
| 43 | h3{ | ||
| 44 | font-size: 20px; | ||
| 45 | color:var(--el-color-primary); | ||
| 46 | } | ||
| 47 | } | ||
| 48 | .table{width: 100%;border-left: 1px solid #e1e1e1;border-top:1px solid #e1e1e1; | ||
| 49 | th{background: #eee;padding: 6px 10px; | ||
| 50 | border-right: 1px solid #e1e1e1; | ||
| 51 | border-bottom:1px solid #e1e1e1; | ||
| 52 | font-size: 15px; | ||
| 53 | } | ||
| 54 | td{padding: 6px 10px;border-right: 1px solid #e1e1e1;font-size: 15px; | ||
| 55 | border-bottom:1px solid #e1e1e1;vertical-align: middle;text-align: center; | ||
| 56 | span{margin-right: 10px} | ||
| 57 | span::after{content: ','} | ||
| 58 | span:last-child::after{content: ''} | ||
| 59 | } | ||
| 60 | } | ||
| 61 | </style> |
| ... | @@ -5,16 +5,16 @@ | ... | @@ -5,16 +5,16 @@ |
| 5 | <el-card class="mb20"> | 5 | <el-card class="mb20"> |
| 6 | <el-row :gutter="20"> | 6 | <el-row :gutter="20"> |
| 7 | <el-col :lg="7" :md="24" :xl="6" > | 7 | <el-col :lg="7" :md="24" :xl="6" > |
| 8 | <img class="mauto" src="@/assets/dance/fm.jpg"> | 8 | <img class="mauto" :src="matchData.bgImgUrl" > |
| 9 | </el-col> | 9 | </el-col> |
| 10 | <el-col :lg="9" :md="12" :xl="10"> | 10 | <el-col :lg="9" :md="12" :xl="10"> |
| 11 | <h3> | 11 | <h3> |
| 12 | 2024年WDSF亚洲体育舞蹈节亚洲体育 舞蹈节 | 12 | {{ matchData.name }} |
| 13 | </h3> | 13 | </h3> |
| 14 | <p class="ppl"><label class="bm1">比赛时间:</label>2024.07.21-2024.07.23</p> | 14 | <p class="ppl"><label class="bm1">比赛时间:</label>2024.07.21-{{ matchData.endTime }}</p> |
| 15 | <p class="ppl"><label class="bm2">赛事级别:</label>联赛</p> | 15 | <p class="ppl"><label class="bm2">赛事级别:</label>{{ matchData.level }}</p> |
| 16 | <p class="ppl"><label class="bm3">地    点:</label>江苏省无锡市滨湖区体育中心A区201</p> | 16 | <p class="ppl"><label class="bm3">地    点:</label>{{ matchData.address }}</p> |
| 17 | <p class="ppl"><label class="bm4">报名截止:</label>2024-06-30 13:00</p> | 17 | <p class="ppl"><label class="bm4">报名截止:</label>{{ matchData.signEndTime }}</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> |
| ... | @@ -31,12 +31,14 @@ | ... | @@ -31,12 +31,14 @@ |
| 31 | </template> | 31 | </template> |
| 32 | </van-count-down> | 32 | </van-count-down> |
| 33 | 33 | ||
| 34 | 34 | <div> | |
| 35 | <a class="btn-lineG mb20" @click="choseSignType" style="display: block;text-align: center;">我要报名</a> | ||
| 36 | </div> | ||
| 35 | </el-col> | 37 | </el-col> |
| 36 | </el-row> | 38 | </el-row> |
| 37 | </el-card> | 39 | </el-card> |
| 38 | 40 | ||
| 39 | <el-row gutter="10"> | 41 | <el-row gutter="14"> |
| 40 | <el-col :lg="4"> | 42 | <el-col :lg="4"> |
| 41 | <div class="funcBtn"> | 43 | <div class="funcBtn"> |
| 42 | <img src="@/assets/dance/btn04.png"/> | 44 | <img src="@/assets/dance/btn04.png"/> |
| ... | @@ -80,41 +82,115 @@ | ... | @@ -80,41 +82,115 @@ |
| 80 | <el-card :body-style="{'padding':'0'}"> | 82 | <el-card :body-style="{'padding':'0'}"> |
| 81 | <div class="lineHead"> | 83 | <div class="lineHead"> |
| 82 | <ul> | 84 | <ul> |
| 83 | <li class="active">赛事详情</li> | 85 | <li v-for="l in menu" :key="l.name" @click="changeMenu(menu,l)" :class="l.active==1?'active':''">{{l.name}}</li> |
| 84 | <li>日程</li> | ||
| 85 | <li>参赛队</li> | ||
| 86 | <li>成绩</li> | ||
| 87 | <li>报名须知</li> | ||
| 88 | </ul> | 86 | </ul> |
| 89 | </div> | 87 | </div> |
| 90 | <matchInfo/> | 88 | <matchInfo :form="matchData" v-if="menu[0].active==1"/> |
| 91 | 89 | <match-schedule-list :match-data="matchData" v-if="menu[2].active==1"/> | |
| 90 | <div v-if="menu[1].active==1"> | ||
| 91 | <div class="collapsebox"> | ||
| 92 | <el-collapse v-if="matchData.cptProjectList?.length > 0"> | ||
| 93 | <el-collapse-item :title="p.name" :name="index" :key="index" v-for="(p,index) in matchData.cptProjectList"> | ||
| 94 | <div class="pd20"> | ||
| 95 | <table class="table"> | ||
| 96 | <tr> | ||
| 97 | <td>日期</td> | ||
| 98 | <td>单元</td> | ||
| 99 | <td>组别</td> | ||
| 100 | <td>时间</td> | ||
| 101 | <td>阶段</td> | ||
| 102 | </tr> | ||
| 103 | <tr> | ||
| 104 | <td rowspan="4">2023/10/6(星期五)</td> | ||
| 105 | <td rowspan="4">BRK01</td> | ||
| 106 | <td>男子</td> | ||
| 107 | <td>14:30 - 15:30</td> | ||
| 108 | <td>资格赛</td> | ||
| 109 | </tr> | ||
| 110 | <tr> | ||
| 111 | <td>女子</td> | ||
| 112 | <td>14:30 - 15:30</td> | ||
| 113 | <td>资格赛</td> | ||
| 114 | </tr> | ||
| 115 | <tr> | ||
| 116 | <td>男子</td> | ||
| 117 | <td>14:30 - 15:30</td> | ||
| 118 | <td>循环赛</td> | ||
| 119 | </tr> | ||
| 120 | <tr> | ||
| 121 | <td>女子</td> | ||
| 122 | <td>14:30 - 15:30</td> | ||
| 123 | <td>循环赛</td> | ||
| 124 | </tr> | ||
| 125 | <tr> | ||
| 126 | <td rowspan="8">2023/10/7(星期六)</td> | ||
| 127 | <td rowspan="8">BRK02</td> | ||
| 128 | <td>男子</td> | ||
| 129 | <td>14:30 - 15:30</td> | ||
| 130 | <td>四分之一决赛</td> | ||
| 131 | </tr> | ||
| 132 | <tr> | ||
| 133 | <td>男子</td> | ||
| 134 | <td>14:30 - 15:30</td> | ||
| 135 | <td>四分之一决赛</td> | ||
| 136 | </tr> | ||
| 137 | <tr> | ||
| 138 | <td>女子</td> | ||
| 139 | <td>14:30 - 15:30</td> | ||
| 140 | <td>半决赛</td> | ||
| 141 | </tr> | ||
| 142 | <tr> | ||
| 143 | <td>女子</td> | ||
| 144 | <td>14:30 - 15:30</td> | ||
| 145 | <td>半决赛</td> | ||
| 146 | </tr> | ||
| 147 | <tr> | ||
| 148 | <td>男子</td> | ||
| 149 | <td>14:30 - 15:30</td> | ||
| 150 | <td>季军赛</td> | ||
| 151 | </tr> | ||
| 152 | <tr> | ||
| 153 | <td>女子</td> | ||
| 154 | <td>14:30 - 15:30</td> | ||
| 155 | <td>季军赛</td> | ||
| 156 | </tr> | ||
| 157 | <tr> | ||
| 158 | <td>男子</td> | ||
| 159 | <td>14:30 - 15:30</td> | ||
| 160 | <td>决赛</td> | ||
| 161 | </tr> | ||
| 162 | <tr> | ||
| 163 | <td>女子</td> | ||
| 164 | <td>14:30 - 15:30</td> | ||
| 165 | <td>决赛</td> | ||
| 166 | </tr> | ||
| 167 | <tr> | ||
| 168 | <td colspan="5" style="text-align: left"> | ||
| 169 | 注:竞赛日程将根据最终参赛人数和电视转播的要求进行调整 | ||
| 170 | </td> | ||
| 171 | </tr> | ||
| 172 | </table> | ||
| 173 | </div> | ||
| 174 | </el-collapse-item> | ||
| 175 | </el-collapse> | ||
| 176 | <el-empty image="@/assets/img/order_no.png" image-size="228" v-if="matchData.cptProjectList?.length == 0" description=" "/> | ||
| 177 | </div> | ||
| 178 | </div> | ||
| 92 | </el-card> | 179 | </el-card> |
| 93 | <div style="height: 20px"></div> | 180 | <div style="height: 20px"></div> |
| 94 | 181 | ||
| 95 | </el-col> | 182 | </el-col> |
| 96 | <el-col :lg="6"> | 183 | <el-col :lg="6"> |
| 97 | <a class="btn-lineG mb20" @click="choseSignType" style="display: block;text-align: center;">我要报名</a> | 184 | <match-news/> |
| 98 | <el-card :body-style="{padding: 0}"> | ||
| 99 | <el-tabs v-model="activeName2" class="match-tabs" @tab-click="handleClick"> | ||
| 100 | <el-tab-pane label="报名时间" name="first"> | ||
| 101 | <div class="gg"> | ||
| 102 | <p><label>报名时间:</label>2023-03-23至2023-05-09</p> | ||
| 103 | <p><label>比赛时间:</label>2023-05-14至2023-05-14</p> | ||
| 104 | <p><label>联系方式:</label>13915234567</p> | ||
| 105 | </div> | ||
| 106 | </el-tab-pane> | ||
| 107 | </el-tabs> | ||
| 108 | </el-card> | ||
| 109 | </el-col> | 185 | </el-col> |
| 110 | </el-row> | 186 | </el-row> |
| 111 | 187 | ||
| 112 | <el-row v-if="matchData.type=='1'"> | 188 | <el-row v-if="matchData.type=='1'" class="mb20"> |
| 113 | <el-col :lg="24"> | 189 | <el-col :lg="24"> |
| 114 | <el-card :body-style="{'padding':'0'}"> | 190 | <el-card :body-style="{'padding':'0'}"> |
| 115 | <div class="lineHead"> | 191 | <div class="lineHead"> |
| 116 | <ul> | 192 | <ul> |
| 117 | <li v-for="l in menu1" :key="l.name" @click="changeMenu1(l)" :class="l.active==1?'active':''">{{l.name}}</li> | 193 | <li v-for="l in menu1" :key="l.name" @click="changeMenu(menu1,l)" :class="l.active==1?'active':''">{{l.name}}</li> |
| 118 | </ul> | 194 | </ul> |
| 119 | </div> | 195 | </div> |
| 120 | <!-- 分站赛--> | 196 | <!-- 分站赛--> |
| ... | @@ -148,9 +224,10 @@ | ... | @@ -148,9 +224,10 @@ |
| 148 | <el-button v-else round type="warning" @click="goDetail(n.id)">查看详情</el-button> | 224 | <el-button v-else round type="warning" @click="goDetail(n.id)">查看详情</el-button> |
| 149 | </div> | 225 | </div> |
| 150 | </div> | 226 | </div> |
| 151 | 227 | <el-empty image="@/assets/img/order_no.png" image-size="228" v-if="matchData.cpts?.length == 0" description=" "/> | |
| 152 | </div> | 228 | </div> |
| 153 | 229 | <matchInfo :form="matchData" v-if="menu1[1].active==1"/> | |
| 230 | <match-schedule-list :match-data="matchData" v-if="menu1[2].active==1"/> | ||
| 154 | </el-card> | 231 | </el-card> |
| 155 | </el-col> | 232 | </el-col> |
| 156 | </el-row> | 233 | </el-row> |
| ... | @@ -179,6 +256,9 @@ | ... | @@ -179,6 +256,9 @@ |
| 179 | <script setup> | 256 | <script setup> |
| 180 | import groupDetail from '@/viewsPc/center/component/teamInfo_form' | 257 | import groupDetail from '@/viewsPc/center/component/teamInfo_form' |
| 181 | import matchInfo from '@/viewsPc/match/components/matchInfo' | 258 | import matchInfo from '@/viewsPc/match/components/matchInfo' |
| 259 | import MatchScheduleList from "@/viewsPc/match/components/matchScheduleList"; | ||
| 260 | import MatchNews from "@/viewsPc/match/components/matchNews"; | ||
| 261 | |||
| 182 | import { getCurrentInstance, ref } from 'vue' | 262 | import { getCurrentInstance, ref } from 'vue' |
| 183 | import { reactive, onMounted } from '@vue/runtime-core' | 263 | import { reactive, onMounted } from '@vue/runtime-core' |
| 184 | import { useRoute, useRouter } from 'vue-router' | 264 | import { useRoute, useRouter } from 'vue-router' |
| ... | @@ -195,9 +275,10 @@ const data = reactive({ | ... | @@ -195,9 +275,10 @@ const data = reactive({ |
| 195 | groupId: '', | 275 | groupId: '', |
| 196 | activeName2:'first', | 276 | activeName2:'first', |
| 197 | popupGroupList:false, | 277 | popupGroupList:false, |
| 278 | menu:[{name:'赛事详情',active:1},{name:'赛事设项',active:0},{name:'日程',active:0},{name:'参赛队',active:0},{name:'成绩',active:0},{name:'报名须知',active:0}], | ||
| 198 | menu1:[{name:'分站赛',active:1},{name:'赛事详情',active:0},{name:'日程',active:0}] | 279 | menu1:[{name:'分站赛',active:1},{name:'赛事详情',active:0},{name:'日程',active:0}] |
| 199 | }) | 280 | }) |
| 200 | const {matchData,matchId,groupId,activeName2,popupGroupList,menu1} = toRefs(data) | 281 | const {matchData,matchId,groupId,activeName2,popupGroupList,menu,menu1} = toRefs(data) |
| 201 | onMounted(() => { | 282 | onMounted(() => { |
| 202 | // matchId.value = route.params.id | 283 | // matchId.value = route.params.id |
| 203 | matchId.value = '1759477811976183809' | 284 | matchId.value = '1759477811976183809' |
| ... | @@ -209,8 +290,8 @@ function getMatch(id) { | ... | @@ -209,8 +290,8 @@ function getMatch(id) { |
| 209 | matchData.value = res.data | 290 | matchData.value = res.data |
| 210 | }) | 291 | }) |
| 211 | } | 292 | } |
| 212 | function changeMenu1(l){ | 293 | function changeMenu(menu,l){ |
| 213 | for(const n of menu1.value){ | 294 | for(const n of menu){ |
| 214 | if(n==l){ | 295 | if(n==l){ |
| 215 | n.active = 1 | 296 | n.active = 1 |
| 216 | } else { | 297 | } else { |
| ... | @@ -265,34 +346,15 @@ function goAddgroup() { | ... | @@ -265,34 +346,15 @@ function goAddgroup() { |
| 265 | </script> | 346 | </script> |
| 266 | 347 | ||
| 267 | <style scoped lang="scss"> | 348 | <style scoped lang="scss"> |
| 268 | .funcBtn{width: 100%;background: #fff;text-align: center;position: relative; | 349 | |
| 269 | margin: 0 0 24px;padding: 0 0 20px; | ||
| 270 | img{margin: auto;} | ||
| 271 | h4{font-size: 18px;margin: 0;} | ||
| 272 | } | ||
| 273 | .indexTitle{margin: 20px 0 12px; | 350 | .indexTitle{margin: 20px 0 12px; |
| 274 | h3{ | 351 | h3{ |
| 275 | font-size: 20px; | 352 | font-size: 20px; |
| 276 | color:var(--el-color-primary); | 353 | color:var(--el-color-primary); |
| 277 | } | 354 | } |
| 278 | } | 355 | } |
| 279 | .xzbox{border: 2px solid #DDECFB;padding: 20px;line-height: 2; | 356 | |
| 280 | color: #29343C; | 357 | |
| 281 | font-size: 16px;} | ||
| 282 | .dlbox{background: url("@/assets/dance/ds_bg.png") no-repeat left;background-size: 100% 100%; | ||
| 283 | padding: 0 0 20px;margin: 0 0 20px; | ||
| 284 | dl{height: 120px;margin: 0; | ||
| 285 | dt{ | ||
| 286 | height: 30px; | ||
| 287 | font-size: 16px;margin: 0 0 18px; | ||
| 288 | font-weight: 600;line-height: 30px;display: inline-block;padding:0 20px 0 14px; | ||
| 289 | background: linear-gradient(90deg, #8623FC, #453DEA); | ||
| 290 | border-radius: 0px 0px 15px 0px;color: #fff;} | ||
| 291 | } | ||
| 292 | dd{ | ||
| 293 | font-size: 14px;line-height: 1.6; | ||
| 294 | color: #29343C;} | ||
| 295 | } | ||
| 296 | .ppl{color: #29343C; | 358 | .ppl{color: #29343C; |
| 297 | label{color: #929AA0;} | 359 | label{color: #929AA0;} |
| 298 | } | 360 | } | ... | ... |
| ... | @@ -33,16 +33,16 @@ | ... | @@ -33,16 +33,16 @@ |
| 33 | 33 | ||
| 34 | <div class="funcBtns"> | 34 | <div class="funcBtns"> |
| 35 | <div> | 35 | <div> |
| 36 | <img src="@/assets/dance/ds01.png"/> | 36 | <img src="@/assets/dance/btn01.png"/> |
| 37 | <h4>TICKET BOOKING</h4> | 37 | <h4>酒店预约</h4> |
| 38 | </div> | 38 | </div> |
| 39 | <div> | 39 | <div> |
| 40 | <img src="@/assets/dance/ds02.png"/> | 40 | <img src="@/assets/dance/btn02.png"/> |
| 41 | <h4>HOTEL RESERVATIONS</h4> | 41 | <h4>接送预约</h4> |
| 42 | </div> | 42 | </div> |
| 43 | <div> | 43 | <div> |
| 44 | <img src="@/assets/dance/ds03.png"/> | 44 | <img src="@/assets/dance/btn03.png"/> |
| 45 | <h4>MAKEUP APPOINTMENTS</h4> | 45 | <h4>餐饮预约</h4> |
| 46 | </div> | 46 | </div> |
| 47 | </div> | 47 | </div> |
| 48 | </el-col> | 48 | </el-col> | ... | ... |
src/viewsPc/match/detail_fake.vue
0 → 100644
| 1 | <template> | ||
| 2 | <div class="app-container"> | ||
| 3 | <div class="mt30" /> | ||
| 4 | <div class="box mb20 "> | ||
| 5 | <el-card class="mb20"> | ||
| 6 | <el-row :gutter="20"> | ||
| 7 | <el-col :lg="7" :md="24" :xl="6" > | ||
| 8 | <img class="mauto" src="@/assets/dance/fm.jpg"> | ||
| 9 | </el-col> | ||
| 10 | <el-col :lg="9" :md="12" :xl="10"> | ||
| 11 | <h3> | ||
| 12 | 2024年WDSF亚洲体育舞蹈节亚洲体育 舞蹈节 | ||
| 13 | </h3> | ||
| 14 | <p class="ppl"><label class="bm1">比赛时间:</label>2024.07.21-2024.07.23</p> | ||
| 15 | <p class="ppl"><label class="bm2">赛事级别:</label>联赛</p> | ||
| 16 | <p class="ppl"><label class="bm3">地    点:</label>江苏省无锡市滨湖区体育中心A区201</p> | ||
| 17 | <p class="ppl"><label class="bm4">报名截止:</label>2024-06-30 13:00</p> | ||
| 18 | </el-col> | ||
| 19 | <el-col :lg="8" :md="12" :xl="8"> | ||
| 20 | <p class="countDownTitle"><span>报名截止倒计时</span></p> | ||
| 21 | <van-count-down :time="time" format="DD 天 HH 时 mm 分 ss 秒"> | ||
| 22 | <template #default="timeData"> | ||
| 23 | <span class="block">{{ timeData.days }}</span> | ||
| 24 | <span class="colon">天</span> | ||
| 25 | <span class="block">{{ timeData.hours }}</span> | ||
| 26 | <span class="colon">时</span> | ||
| 27 | <span class="block">{{ timeData.minutes }}</span> | ||
| 28 | <span class="colon">分</span> | ||
| 29 | <span class="block">{{ timeData.seconds }}</span> | ||
| 30 | <span class="colon">秒</span> | ||
| 31 | </template> | ||
| 32 | </van-count-down> | ||
| 33 | |||
| 34 | <div class="funcBtns"> | ||
| 35 | <div> | ||
| 36 | <img src="@/assets/dance/btn01.png"/> | ||
| 37 | <h4>酒店预约</h4> | ||
| 38 | </div> | ||
| 39 | <div> | ||
| 40 | <img src="@/assets/dance/btn02.png"/> | ||
| 41 | <h4>接送预约</h4> | ||
| 42 | </div> | ||
| 43 | <div> | ||
| 44 | <img src="@/assets/dance/btn03.png"/> | ||
| 45 | <h4>餐饮预约</h4> | ||
| 46 | </div> | ||
| 47 | </div> | ||
| 48 | </el-col> | ||
| 49 | </el-row> | ||
| 50 | </el-card> | ||
| 51 | |||
| 52 | <el-row :gutter="20"> | ||
| 53 | <el-col :lg="18"> | ||
| 54 | <el-card :body-style="{'padding':'0'}"> | ||
| 55 | |||
| 56 | <div class="lineHead"> | ||
| 57 | <ul> | ||
| 58 | <li class="active">赛事详情</li> | ||
| 59 | <li>日程</li> | ||
| 60 | <li>参赛队</li> | ||
| 61 | <li>成绩</li> | ||
| 62 | <li>报名须知</li> | ||
| 63 | </ul> | ||
| 64 | </div> | ||
| 65 | |||
| 66 | <div style="padding: 0 20px 20px"> | ||
| 67 | <!-- 赛事详情--> | ||
| 68 | <div class="indexTitle"><h3 class="leftboderTT">组织机构</h3></div> | ||
| 69 | <el-row :gutter="20"> | ||
| 70 | <el-col :lg="8"> | ||
| 71 | <div class="dlbox"> | ||
| 72 | <dl> | ||
| 73 | <dt>主办单位</dt> | ||
| 74 | <dd>世界体育舞蹈联合会(WDSF)</dd> | ||
| 75 | <dd>亚洲体育舞蹈联合会(DSA)</dd> | ||
| 76 | <dd>中国体育联合会(CDSF)</dd> | ||
| 77 | </dl> | ||
| 78 | </div> | ||
| 79 | </el-col> | ||
| 80 | <el-col :lg="8"> | ||
| 81 | <div class="dlbox"> | ||
| 82 | <dl> | ||
| 83 | <dt>承办单位</dt> | ||
| 84 | <dd>江苏省体育总会</dd> | ||
| 85 | <dd>无锡市人民政府</dd> | ||
| 86 | </dl> | ||
| 87 | </div> | ||
| 88 | </el-col> | ||
| 89 | <el-col :lg="8"> | ||
| 90 | <div class="dlbox"> | ||
| 91 | <dl> | ||
| 92 | <dt>协办单位</dt> | ||
| 93 | <dd>无锡市体育局</dd> | ||
| 94 | <dd>江苏无锡经济开发区管理委员会</dd> | ||
| 95 | <dd>江苏省体育舞蹈运动协会</dd> | ||
| 96 | </dl> | ||
| 97 | </div> | ||
| 98 | </el-col> | ||
| 99 | <el-col :lg="8"> | ||
| 100 | <div class="dlbox"> | ||
| 101 | <dl> | ||
| 102 | <dt>运营单位</dt> | ||
| 103 | <dd>吉金无锡运动健康有限公司</dd> | ||
| 104 | </dl> | ||
| 105 | </div> | ||
| 106 | </el-col> | ||
| 107 | |||
| 108 | </el-row> | ||
| 109 | <div class="indexTitle"><h3 class="leftboderTT">报名须知</h3></div> | ||
| 110 | <div class="xzbox"> | ||
| 111 | 1.各单位限报1支队伍,每队需报领队1名(运动员可兼任),运动员限报4名<br> | ||
| 112 | 2.参赛运动员必须是参赛企业的员工(包括劳务派遣和外籍员工)<br> | ||
| 113 | 3.参赛运动员必须年满18至50周岁,50周岁以上者不建议参加此次比赛<br> | ||
| 114 | 4.参赛运动员必须身体健康 | ||
| 115 | </div> | ||
| 116 | |||
| 117 | <div class="indexTitle"><h3 class="leftboderTT">竞赛项目</h3></div> | ||
| 118 | <div class="collapsebox"> | ||
| 119 | <el-collapse v-model="activeNames" @change="handleChange"> | ||
| 120 | <el-collapse-item title="霹雳舞" name="1"> | ||
| 121 | <div class="pd20"> | ||
| 122 | <table class="table"> | ||
| 123 | <tr> | ||
| 124 | <td>日期</td> | ||
| 125 | <td>单元</td> | ||
| 126 | <td>组别</td> | ||
| 127 | <td>时间</td> | ||
| 128 | <td>阶段</td> | ||
| 129 | </tr> | ||
| 130 | <tr> | ||
| 131 | <td rowspan="4">2023/10/6(星期五)</td> | ||
| 132 | <td rowspan="4">BRK01</td> | ||
| 133 | <td>男子</td> | ||
| 134 | <td>14:30 - 15:30</td> | ||
| 135 | <td>资格赛</td> | ||
| 136 | </tr> | ||
| 137 | <tr> | ||
| 138 | <td>女子</td> | ||
| 139 | <td>14:30 - 15:30</td> | ||
| 140 | <td>资格赛</td> | ||
| 141 | </tr> | ||
| 142 | <tr> | ||
| 143 | <td>男子</td> | ||
| 144 | <td>14:30 - 15:30</td> | ||
| 145 | <td>循环赛</td> | ||
| 146 | </tr> | ||
| 147 | <tr> | ||
| 148 | <td>女子</td> | ||
| 149 | <td>14:30 - 15:30</td> | ||
| 150 | <td>循环赛</td> | ||
| 151 | </tr> | ||
| 152 | <tr> | ||
| 153 | <td rowspan="8">2023/10/7(星期六)</td> | ||
| 154 | <td rowspan="8">BRK02</td> | ||
| 155 | <td>男子</td> | ||
| 156 | <td>14:30 - 15:30</td> | ||
| 157 | <td>四分之一决赛</td> | ||
| 158 | </tr> | ||
| 159 | <tr> | ||
| 160 | <td>男子</td> | ||
| 161 | <td>14:30 - 15:30</td> | ||
| 162 | <td>四分之一决赛</td> | ||
| 163 | </tr> | ||
| 164 | <tr> | ||
| 165 | <td>女子</td> | ||
| 166 | <td>14:30 - 15:30</td> | ||
| 167 | <td>半决赛</td> | ||
| 168 | </tr> | ||
| 169 | <tr> | ||
| 170 | <td>女子</td> | ||
| 171 | <td>14:30 - 15:30</td> | ||
| 172 | <td>半决赛</td> | ||
| 173 | </tr> | ||
| 174 | <tr> | ||
| 175 | <td>男子</td> | ||
| 176 | <td>14:30 - 15:30</td> | ||
| 177 | <td>季军赛</td> | ||
| 178 | </tr> | ||
| 179 | <tr> | ||
| 180 | <td>女子</td> | ||
| 181 | <td>14:30 - 15:30</td> | ||
| 182 | <td>季军赛</td> | ||
| 183 | </tr> | ||
| 184 | <tr> | ||
| 185 | <td>男子</td> | ||
| 186 | <td>14:30 - 15:30</td> | ||
| 187 | <td>决赛</td> | ||
| 188 | </tr> | ||
| 189 | <tr> | ||
| 190 | <td>女子</td> | ||
| 191 | <td>14:30 - 15:30</td> | ||
| 192 | <td>决赛</td> | ||
| 193 | </tr> | ||
| 194 | <tr> | ||
| 195 | <td colspan="5" style="text-align: left"> | ||
| 196 | 注:竞赛日程将根据最终参赛人数和电视转播的要求进行调整 | ||
| 197 | </td> | ||
| 198 | </tr> | ||
| 199 | </table> | ||
| 200 | </div> | ||
| 201 | </el-collapse-item> | ||
| 202 | <el-collapse-item title="拉丁舞" name="2"> | ||
| 203 | <div class="pd20"> | ||
| 204 | <table class="table"> | ||
| 205 | <tr> | ||
| 206 | <td>日期</td> | ||
| 207 | <td>单元</td> | ||
| 208 | <td>组别</td> | ||
| 209 | <td>时间</td> | ||
| 210 | <td>阶段</td> | ||
| 211 | </tr> | ||
| 212 | <tr> | ||
| 213 | <td rowspan="4">2023/10/6(星期五)</td> | ||
| 214 | <td rowspan="4">BRK01</td> | ||
| 215 | <td>男子</td> | ||
| 216 | <td>14:30 - 15:30</td> | ||
| 217 | <td>资格赛</td> | ||
| 218 | </tr> | ||
| 219 | <tr> | ||
| 220 | <td>女子</td> | ||
| 221 | <td>14:30 - 15:30</td> | ||
| 222 | <td>资格赛</td> | ||
| 223 | </tr> | ||
| 224 | <tr> | ||
| 225 | <td>男子</td> | ||
| 226 | <td>14:30 - 15:30</td> | ||
| 227 | <td>循环赛</td> | ||
| 228 | </tr> | ||
| 229 | <tr> | ||
| 230 | <td>女子</td> | ||
| 231 | <td>14:30 - 15:30</td> | ||
| 232 | <td>循环赛</td> | ||
| 233 | </tr> | ||
| 234 | <tr> | ||
| 235 | <td rowspan="8">2023/10/7(星期六)</td> | ||
| 236 | <td rowspan="8">BRK02</td> | ||
| 237 | <td>男子</td> | ||
| 238 | <td>14:30 - 15:30</td> | ||
| 239 | <td>四分之一决赛</td> | ||
| 240 | </tr> | ||
| 241 | <tr> | ||
| 242 | <td>男子</td> | ||
| 243 | <td>14:30 - 15:30</td> | ||
| 244 | <td>四分之一决赛</td> | ||
| 245 | </tr> | ||
| 246 | <tr> | ||
| 247 | <td>女子</td> | ||
| 248 | <td>14:30 - 15:30</td> | ||
| 249 | <td>半决赛</td> | ||
| 250 | </tr> | ||
| 251 | <tr> | ||
| 252 | <td>女子</td> | ||
| 253 | <td>14:30 - 15:30</td> | ||
| 254 | <td>半决赛</td> | ||
| 255 | </tr> | ||
| 256 | <tr> | ||
| 257 | <td>男子</td> | ||
| 258 | <td>14:30 - 15:30</td> | ||
| 259 | <td>季军赛</td> | ||
| 260 | </tr> | ||
| 261 | <tr> | ||
| 262 | <td>女子</td> | ||
| 263 | <td>14:30 - 15:30</td> | ||
| 264 | <td>季军赛</td> | ||
| 265 | </tr> | ||
| 266 | <tr> | ||
| 267 | <td>男子</td> | ||
| 268 | <td>14:30 - 15:30</td> | ||
| 269 | <td>决赛</td> | ||
| 270 | </tr> | ||
| 271 | <tr> | ||
| 272 | <td>女子</td> | ||
| 273 | <td>14:30 - 15:30</td> | ||
| 274 | <td>决赛</td> | ||
| 275 | </tr> | ||
| 276 | |||
| 277 | </table> | ||
| 278 | </div> | ||
| 279 | </el-collapse-item> | ||
| 280 | <el-collapse-item title="国际舞" name="3"> | ||
| 281 | <div class="pd20"> | ||
| 282 | <table class="table"> | ||
| 283 | <tr> | ||
| 284 | <td>日期</td> | ||
| 285 | <td>单元</td> | ||
| 286 | <td>组别</td> | ||
| 287 | <td>时间</td> | ||
| 288 | <td>阶段</td> | ||
| 289 | </tr> | ||
| 290 | <tr> | ||
| 291 | <td rowspan="4">2023/10/6(星期五)</td> | ||
| 292 | <td rowspan="4">BRK01</td> | ||
| 293 | <td>男子</td> | ||
| 294 | <td>14:30 - 15:30</td> | ||
| 295 | <td>资格赛</td> | ||
| 296 | </tr> | ||
| 297 | <tr> | ||
| 298 | <td>女子</td> | ||
| 299 | <td>14:30 - 15:30</td> | ||
| 300 | <td>资格赛</td> | ||
| 301 | </tr> | ||
| 302 | <tr> | ||
| 303 | <td>男子</td> | ||
| 304 | <td>14:30 - 15:30</td> | ||
| 305 | <td>循环赛</td> | ||
| 306 | </tr> | ||
| 307 | <tr> | ||
| 308 | <td>女子</td> | ||
| 309 | <td>14:30 - 15:30</td> | ||
| 310 | <td>循环赛</td> | ||
| 311 | </tr> | ||
| 312 | <tr> | ||
| 313 | <td rowspan="8">2023/10/7(星期六)</td> | ||
| 314 | <td rowspan="8">BRK02</td> | ||
| 315 | <td>男子</td> | ||
| 316 | <td>14:30 - 15:30</td> | ||
| 317 | <td>四分之一决赛</td> | ||
| 318 | </tr> | ||
| 319 | <tr> | ||
| 320 | <td>男子</td> | ||
| 321 | <td>14:30 - 15:30</td> | ||
| 322 | <td>四分之一决赛</td> | ||
| 323 | </tr> | ||
| 324 | <tr> | ||
| 325 | <td>女子</td> | ||
| 326 | <td>14:30 - 15:30</td> | ||
| 327 | <td>半决赛</td> | ||
| 328 | </tr> | ||
| 329 | <tr> | ||
| 330 | <td>女子</td> | ||
| 331 | <td>14:30 - 15:30</td> | ||
| 332 | <td>半决赛</td> | ||
| 333 | </tr> | ||
| 334 | <tr> | ||
| 335 | <td>男子</td> | ||
| 336 | <td>14:30 - 15:30</td> | ||
| 337 | <td>季军赛</td> | ||
| 338 | </tr> | ||
| 339 | <tr> | ||
| 340 | <td>女子</td> | ||
| 341 | <td>14:30 - 15:30</td> | ||
| 342 | <td>季军赛</td> | ||
| 343 | </tr> | ||
| 344 | <tr> | ||
| 345 | <td>男子</td> | ||
| 346 | <td>14:30 - 15:30</td> | ||
| 347 | <td>决赛</td> | ||
| 348 | </tr> | ||
| 349 | <tr> | ||
| 350 | <td>女子</td> | ||
| 351 | <td>14:30 - 15:30</td> | ||
| 352 | <td>决赛</td> | ||
| 353 | </tr> | ||
| 354 | |||
| 355 | </table> | ||
| 356 | </div> | ||
| 357 | </el-collapse-item> | ||
| 358 | </el-collapse> | ||
| 359 | </div> | ||
| 360 | </div> | ||
| 361 | </el-card> | ||
| 362 | <div style="height: 20px"></div> | ||
| 363 | |||
| 364 | </el-col> | ||
| 365 | <el-col :lg="6"> | ||
| 366 | <a class="btn-lineG mb20" style="display: block;text-align: center;">我要报名</a> | ||
| 367 | <el-card :body-style="{padding: 0}"> | ||
| 368 | <el-tabs v-model="activeName2" class="match-tabs" @tab-click="handleClick"> | ||
| 369 | <el-tab-pane label="报名时间" name="first"> | ||
| 370 | <div class="gg"> | ||
| 371 | <p><label>报名时间:</label>2023-03-23至2023-05-09</p> | ||
| 372 | <p><label>比赛时间:</label>2023-05-14至2023-05-14</p> | ||
| 373 | <p><label>联系方式:</label>13915234567</p> | ||
| 374 | </div> | ||
| 375 | </el-tab-pane> | ||
| 376 | </el-tabs> | ||
| 377 | </el-card> | ||
| 378 | </el-col> | ||
| 379 | </el-row> | ||
| 380 | </div> | ||
| 381 | |||
| 382 | <el-dialog v-model="popupGroupList" title="请选择参赛队" width="600px"> | ||
| 383 | <div class="popList"> | ||
| 384 | <div v-for="(t,index) in groups" :key="index" class="teamItem" @click="getThisGroupId(t)"> | ||
| 385 | <el-avatar :size="60" :src="t.imgUrl" /> | ||
| 386 | <span class="name">{{ t.name }}({{ t.abreviations }})</span> | ||
| 387 | ({{ t.typeStr }}) | ||
| 388 | </div> | ||
| 389 | <el-button plain style="width: 100%;height: 50px;font-size:16px;" type="success" @click="goAddgroup()"> | ||
| 390 | <el-icon> | ||
| 391 | <Plus /> | ||
| 392 | </el-icon> | ||
| 393 | 新建参赛队 | ||
| 394 | </el-button> | ||
| 395 | </div> | ||
| 396 | </el-dialog> | ||
| 397 | |||
| 398 | |||
| 399 | </div> | ||
| 400 | </template> | ||
| 401 | |||
| 402 | <script setup> | ||
| 403 | import { getCurrentInstance, ref } from 'vue' | ||
| 404 | import { reactive, onMounted } from '@vue/runtime-core' | ||
| 405 | import { useRoute, useRouter } from 'vue-router' | ||
| 406 | |||
| 407 | const route = useRoute() | ||
| 408 | const router = useRouter() | ||
| 409 | const { proxy } = getCurrentInstance() | ||
| 410 | import * as match from '@/apiPc/match' | ||
| 411 | import { toRefs } from '@vueuse/shared' | ||
| 412 | import { ElMessage } from 'element-plus' | ||
| 413 | import groupDetail from '../center/component/teamInfo_form' | ||
| 414 | const activeName2 = ref('first') | ||
| 415 | |||
| 416 | </script> | ||
| 417 | |||
| 418 | <style scoped lang="scss"> | ||
| 419 | .indexTitle{margin: 20px 0 12px; | ||
| 420 | h3{ | ||
| 421 | font-size: 20px; | ||
| 422 | color:var(--el-color-primary); | ||
| 423 | } | ||
| 424 | } | ||
| 425 | .xzbox{border: 2px solid #DDECFB;padding: 20px;line-height: 2; | ||
| 426 | color: #29343C; | ||
| 427 | font-size: 16px;} | ||
| 428 | .dlbox{background: url("@/assets/dance/ds_bg.png") no-repeat left;background-size: 100% 100%; | ||
| 429 | padding: 0 0 20px;margin: 0 0 20px; | ||
| 430 | dl{height: 120px;margin: 0; | ||
| 431 | dt{ | ||
| 432 | height: 30px; | ||
| 433 | font-size: 16px;margin: 0 0 18px; | ||
| 434 | font-weight: 600;line-height: 30px;display: inline-block;padding:0 20px 0 14px; | ||
| 435 | background: linear-gradient(90deg, #8623FC, #453DEA); | ||
| 436 | border-radius: 0px 0px 15px 0px;color: #fff;} | ||
| 437 | } | ||
| 438 | dd{ | ||
| 439 | font-size: 14px;line-height: 1.6; | ||
| 440 | color: #29343C;} | ||
| 441 | } | ||
| 442 | .ppl{color: #29343C; | ||
| 443 | label{color: #929AA0;} | ||
| 444 | } | ||
| 445 | .bm1{background: url("@/assets/dance/bm1.png") no-repeat left;background-size: contain;padding-left: 24px;} | ||
| 446 | .bm2{background: url("@/assets/dance/bm2.png") no-repeat left;background-size: contain;padding-left: 24px;} | ||
| 447 | .bm3{background: url("@/assets/dance/bm3.png") no-repeat left;background-size: contain;padding-left: 24px;} | ||
| 448 | .bm4{background: url("@/assets/dance/bm4.png") no-repeat left;background-size: contain;padding-left: 24px;} | ||
| 449 | .app-container { | ||
| 450 | padding: 0; | ||
| 451 | background: #F5F7F9; | ||
| 452 | } | ||
| 453 | |||
| 454 | .countDownTitle { | ||
| 455 | text-align: center; | ||
| 456 | color: #525F6B; | ||
| 457 | position: relative; | ||
| 458 | width: 100%; | ||
| 459 | left: 0; | ||
| 460 | font-size: 14px; | ||
| 461 | } | ||
| 462 | |||
| 463 | .countDownTitle span { | ||
| 464 | background: #fff; | ||
| 465 | padding: 0 10px; | ||
| 466 | position: relative; | ||
| 467 | z-index: 1; | ||
| 468 | } | ||
| 469 | |||
| 470 | .countDownTitle::after { | ||
| 471 | position: absolute; | ||
| 472 | background: #ccc; | ||
| 473 | height: 1px; | ||
| 474 | content: ''; | ||
| 475 | top: 0; | ||
| 476 | bottom: 0; | ||
| 477 | margin: auto; | ||
| 478 | width: 100%; | ||
| 479 | left: 0; | ||
| 480 | } | ||
| 481 | |||
| 482 | .typeTag { | ||
| 483 | border-radius: 10px 10px 10px 0px; | ||
| 484 | padding: 2px 12px; | ||
| 485 | background: #FF8124; | ||
| 486 | font-size: 14px; | ||
| 487 | color: #fff; | ||
| 488 | } | ||
| 489 | |||
| 490 | .matchItem { | ||
| 491 | cursor: pointer; | ||
| 492 | margin-bottom: 40px; | ||
| 493 | height: 180px; | ||
| 494 | background: #FFFFFF; | ||
| 495 | position: relative; | ||
| 496 | border-radius: 10px; | ||
| 497 | |||
| 498 | .el-avatar { | ||
| 499 | position: absolute; | ||
| 500 | left: 20px; | ||
| 501 | top: 30px; | ||
| 502 | |||
| 503 | img { | ||
| 504 | background: #fff; | ||
| 505 | } | ||
| 506 | } | ||
| 507 | |||
| 508 | .info { | ||
| 509 | padding: 12px 0 0 140px; | ||
| 510 | |||
| 511 | p { | ||
| 512 | font-size: 14px; | ||
| 513 | } | ||
| 514 | } | ||
| 515 | |||
| 516 | .typeTag { | ||
| 517 | position: absolute; | ||
| 518 | right: 0; | ||
| 519 | top: 0; | ||
| 520 | } | ||
| 521 | |||
| 522 | h3 { | ||
| 523 | font-weight: 500; | ||
| 524 | font-size: 18px; | ||
| 525 | color: #000000; | ||
| 526 | text-overflow: ellipsis; | ||
| 527 | } | ||
| 528 | |||
| 529 | &:hover h3 { | ||
| 530 | font-weight: bold; | ||
| 531 | } | ||
| 532 | } | ||
| 533 | |||
| 534 | .el-pagination { | ||
| 535 | justify-content: center; | ||
| 536 | --el-pagination-bg-color: none; | ||
| 537 | } | ||
| 538 | |||
| 539 | .kind { | ||
| 540 | background: #fff; | ||
| 541 | margin: 0 0 30px; | ||
| 542 | |||
| 543 | ul { | ||
| 544 | list-style: none; | ||
| 545 | padding: 30px 0 10px; | ||
| 546 | |||
| 547 | li { | ||
| 548 | margin: 0 0 20px; | ||
| 549 | display: flex; | ||
| 550 | align-items: center; | ||
| 551 | } | ||
| 552 | } | ||
| 553 | } | ||
| 554 | |||
| 555 | .listTitle { | ||
| 556 | display: flex; | ||
| 557 | justify-content: space-between; | ||
| 558 | align-items: center; | ||
| 559 | } | ||
| 560 | |||
| 561 | .match-tabs { | ||
| 562 | background: #fff; | ||
| 563 | padding: 10px 20px 20px; | ||
| 564 | } | ||
| 565 | |||
| 566 | .teamItem { | ||
| 567 | height: 80px; | ||
| 568 | background: #FBFCFD; | ||
| 569 | border-radius: 10px; | ||
| 570 | margin: 10px 0; | ||
| 571 | display: flex; | ||
| 572 | align-items: center; | ||
| 573 | padding: 0 20px; | ||
| 574 | overflow: hidden; | ||
| 575 | text-overflow: ellipsis; | ||
| 576 | |||
| 577 | .el-avatar { | ||
| 578 | border: 1px solid #EEEEEE; | ||
| 579 | } | ||
| 580 | |||
| 581 | .name { | ||
| 582 | margin-left: 15px; | ||
| 583 | flex: 1; | ||
| 584 | font-size: 14px; | ||
| 585 | } | ||
| 586 | } | ||
| 587 | |||
| 588 | .grid-top { | ||
| 589 | background: #fff; | ||
| 590 | min-height: 300px; | ||
| 591 | padding: 28px 28px 10px; | ||
| 592 | border-radius: 10px; | ||
| 593 | margin: 30px auto; | ||
| 594 | position: relative; | ||
| 595 | |||
| 596 | .cover { | ||
| 597 | width: 420px; | ||
| 598 | height: 250px; | ||
| 599 | position: absolute; | ||
| 600 | border-radius: 10px; | ||
| 601 | background: #fff; | ||
| 602 | object-fit: cover; | ||
| 603 | } | ||
| 604 | |||
| 605 | .info { | ||
| 606 | padding-left: 440px; | ||
| 607 | |||
| 608 | h3 { | ||
| 609 | font-weight: 500; | ||
| 610 | color: #000000; | ||
| 611 | margin: 0 0 10px; | ||
| 612 | font-size: 24px; | ||
| 613 | img{margin-right: 10px} | ||
| 614 | .typeTag { | ||
| 615 | border-radius: 13px 13px 13px 0; | ||
| 616 | margin-left: 10px; | ||
| 617 | } | ||
| 618 | } | ||
| 619 | |||
| 620 | p { | ||
| 621 | color: #7B7F83; | ||
| 622 | font-size: 16px; | ||
| 623 | } | ||
| 624 | .countDownTitle{font-size: 14px;} | ||
| 625 | .el-button.el-button--primary { | ||
| 626 | background: #CA171D; | ||
| 627 | border: none; | ||
| 628 | } | ||
| 629 | } | ||
| 630 | } | ||
| 631 | |||
| 632 | .gg { | ||
| 633 | margin: 0 0 28px; | ||
| 634 | |||
| 635 | h3 {border-left: 2px solid #BA2E29; padding: 0 0 0 12px; | ||
| 636 | margin: 20px 0 8px; | ||
| 637 | font-weight: 500; | ||
| 638 | font-size: 16px; | ||
| 639 | } | ||
| 640 | |||
| 641 | p { | ||
| 642 | font-size: 16px; | ||
| 643 | color: #000; | ||
| 644 | margin: 0 0 8px; | ||
| 645 | line-height: 24px; | ||
| 646 | label{color: #7D8790;} | ||
| 647 | } | ||
| 648 | |||
| 649 | .pp { | ||
| 650 | border: 1px solid rgba(186, 46, 41, 0.3); | ||
| 651 | padding: 20px; | ||
| 652 | } | ||
| 653 | } | ||
| 654 | |||
| 655 | .van-count-down { | ||
| 656 | text-align: center; | ||
| 657 | margin: 20px 0; | ||
| 658 | } | ||
| 659 | |||
| 660 | .colon { | ||
| 661 | display: inline-block; | ||
| 662 | font-size: 16px; | ||
| 663 | margin: 0 8px; | ||
| 664 | color: #7B7F83; | ||
| 665 | } | ||
| 666 | |||
| 667 | .block { | ||
| 668 | display: inline-block; | ||
| 669 | width: 52px; | ||
| 670 | color: #fff; | ||
| 671 | font-size: 26px; | ||
| 672 | font-weight: bold; | ||
| 673 | border-radius: 10px; | ||
| 674 | background: url(@/assets/img/djs_bg.png) left; | ||
| 675 | background-size: 100% 100%; | ||
| 676 | line-height: 50px; | ||
| 677 | text-align: center; | ||
| 678 | } | ||
| 679 | |||
| 680 | |||
| 681 | .time-address { | ||
| 682 | font-size: 15px; | ||
| 683 | margin: 10px 0 0; | ||
| 684 | color: #999; | ||
| 685 | } | ||
| 686 | |||
| 687 | .popList .teamItem { | ||
| 688 | cursor: pointer; | ||
| 689 | } | ||
| 690 | |||
| 691 | .popList .teamItem:hover { | ||
| 692 | background: #e7e7e7; | ||
| 693 | } | ||
| 694 | |||
| 695 | .richContent { | ||
| 696 | overflow: hidden; | ||
| 697 | } | ||
| 698 | |||
| 699 | .richContent img { | ||
| 700 | max-width: 100%; | ||
| 701 | } | ||
| 702 | |||
| 703 | .red-center { | ||
| 704 | font-size: 24px; | ||
| 705 | text-align: center; | ||
| 706 | font-family: DIN Alternate; | ||
| 707 | padding: 30px 0; | ||
| 708 | font-weight: bold; | ||
| 709 | color: #E60012; | ||
| 710 | } | ||
| 711 | |||
| 712 | .plist { | ||
| 713 | dt { | ||
| 714 | font-size: 14px; | ||
| 715 | } | ||
| 716 | |||
| 717 | dd { | ||
| 718 | display: inline-block; | ||
| 719 | margin: 0 15px 0 0; | ||
| 720 | } | ||
| 721 | |||
| 722 | dd.t { | ||
| 723 | display: block; | ||
| 724 | margin: 15px 0 6px; | ||
| 725 | border-left: 3px solid #1ec886; | ||
| 726 | line-height: 1; | ||
| 727 | padding: 6px; | ||
| 728 | background: #f5f5f5; | ||
| 729 | } | ||
| 730 | |||
| 731 | li { | ||
| 732 | line-height: 40px; | ||
| 733 | display: flex; | ||
| 734 | justify-content: space-between; | ||
| 735 | padding: 0 20px; | ||
| 736 | align-items: center; | ||
| 737 | cursor: pointer; | ||
| 738 | } | ||
| 739 | |||
| 740 | li:hover { | ||
| 741 | background: #eee; | ||
| 742 | } | ||
| 743 | } | ||
| 744 | |||
| 745 | .pp .el-link { | ||
| 746 | margin-right: 15px; | ||
| 747 | font-size: 16px; | ||
| 748 | } | ||
| 749 | |||
| 750 | :deep(.el-collapse-item__header) { | ||
| 751 | font-weight: 500; | ||
| 752 | font-size: 16px; | ||
| 753 | } | ||
| 754 | |||
| 755 | .pobtns { | ||
| 756 | position: absolute; | ||
| 757 | right: 20px; | ||
| 758 | bottom: 20px; | ||
| 759 | } | ||
| 760 | |||
| 761 | :deep(.el-tabs__item) { | ||
| 762 | font-size: 16px; | ||
| 763 | } | ||
| 764 | |||
| 765 | .signButton { | ||
| 766 | margin: 0 0 20px; | ||
| 767 | |||
| 768 | button { | ||
| 769 | width: 90%;background: var(--el-color-primary); | ||
| 770 | font-size: 20px;margin: 30px auto 0;display: block; | ||
| 771 | height: 50px; | ||
| 772 | } | ||
| 773 | } | ||
| 774 | |||
| 775 | .el-timeline-item__timestamp.is-top { | ||
| 776 | font-size: 16px; | ||
| 777 | } | ||
| 778 | |||
| 779 | .el-timeline-item__content { | ||
| 780 | font-size: 16px; | ||
| 781 | margin: 10px 0 0; | ||
| 782 | } | ||
| 783 | |||
| 784 | .typeTag.blue { | ||
| 785 | background: #00a0e9; | ||
| 786 | } | ||
| 787 | |||
| 788 | .typeTag.green { | ||
| 789 | background: #34cf96; | ||
| 790 | } | ||
| 791 | |||
| 792 | :deep(.el-tabs__nav-wrap::after) { | ||
| 793 | height: 1px; | ||
| 794 | } | ||
| 795 | |||
| 796 | .table{width: 100%;border-left: 1px solid #e1e1e1;border-top:1px solid #e1e1e1; | ||
| 797 | th{background: #eee;padding: 6px 10px; | ||
| 798 | border-right: 1px solid #e1e1e1; | ||
| 799 | border-bottom:1px solid #e1e1e1; | ||
| 800 | font-size: 15px; | ||
| 801 | } | ||
| 802 | td{padding: 6px 10px;border-right: 1px solid #e1e1e1;font-size: 15px; | ||
| 803 | border-bottom:1px solid #e1e1e1;vertical-align: middle;text-align: center; | ||
| 804 | span{margin-right: 10px} | ||
| 805 | span::after{content: ','} | ||
| 806 | span:last-child::after{content: ''} | ||
| 807 | } | ||
| 808 | } | ||
| 809 | .flexLine{display: flex; | ||
| 810 | label{font-weight: normal} | ||
| 811 | } | ||
| 812 | |||
| 813 | .nowteamItem{ | ||
| 814 | height: 100px; | ||
| 815 | background: #FBFCFD; | ||
| 816 | border-radius: 10px; | ||
| 817 | margin: 20px 0; | ||
| 818 | display: flex; | ||
| 819 | align-items: center; | ||
| 820 | padding: 0 20px; | ||
| 821 | overflow: hidden; | ||
| 822 | text-overflow: ellipsis; | ||
| 823 | .el-avatar {margin: 0 20px} | ||
| 824 | .info{ | ||
| 825 | h3{margin: 0 0 15px;} | ||
| 826 | p{margin: 0;color: #1ab394} | ||
| 827 | } | ||
| 828 | .rr{text-align: right; flex: 1; | ||
| 829 | span{color: #1ab394} | ||
| 830 | } | ||
| 831 | } | ||
| 832 | |||
| 833 | .collapsebox{ | ||
| 834 | .el-collapse-item{margin-bottom: 15px;--el-collapse-content-bg-color:#F4F9FE; | ||
| 835 | border: 2px solid #DDECFB; | ||
| 836 | .table{background: #fff;} | ||
| 837 | } | ||
| 838 | .is-active{--el-collapse-header-bg-color:#F4F9FE} | ||
| 839 | :deep(.el-collapse-item__header){padding: 0 20px;} | ||
| 840 | } | ||
| 841 | .funcBtns{display: flex; justify-content: space-around; | ||
| 842 | div{text-align: center;background: #F7FAFF;box-shadow:0 0 10px #d4cae4; | ||
| 843 | border-radius: 15px;padding: 0px 10px 5px; | ||
| 844 | img{} | ||
| 845 | h4{margin: 0;font-size: 16px;} | ||
| 846 | } | ||
| 847 | } | ||
| 848 | .table{white-space: nowrap} | ||
| 849 | @media (max-width: 800px) { | ||
| 850 | .van-count-down{ | ||
| 851 | .block{margin: 0 10px;} | ||
| 852 | } | ||
| 853 | .colon{display: none;} | ||
| 854 | .funcBtns{ | ||
| 855 | div{padding: 0 0 10px; | ||
| 856 | margin: 0 5px; | ||
| 857 | |||
| 858 | } | ||
| 859 | } | ||
| 860 | } | ||
| 861 | </style> |
-
Please register or sign in to post a comment