add: 个人中心-机构-个人信息
Showing
41 changed files
with
545 additions
and
454 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> |
This diff is collapsed.
Click to expand it.
| ... | @@ -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> |
This diff is collapsed.
Click to expand it.
| ... | @@ -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
This diff is collapsed.
Click to expand it.
-
Please register or sign in to post a comment