b42d99dc by 杨炀

add: 个人中心-机构-个人信息

1 parent 86c06939
...@@ -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 })
......
...@@ -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>
......
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>
......
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>
......
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">&ensp;&ensp;&ensp;&ensp;点:</label>江苏省无锡市滨湖区体育中心A区201</p> 16 <p class="ppl"><label class="bm3">&ensp;&ensp;&ensp;&ensp;点:</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>
......
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">&ensp;&ensp;&ensp;&ensp;点:</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>
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!