0a1abe64 by zhangmeng

空格

1 parent 11925936
......@@ -24,7 +24,7 @@
</el-col>
<el-col :span="24" style="border-top: 1px solid #d0d0d0">
<div class="text-center copyright pd10">版权所有@无锡和畅赛事运营有限公司
&ensp;&ensp
&nbsp;&nbsp
<a href="https://beian.miit.gov.cn/" target="_blank">ICP备案号:苏ICP备2023054420号-2</a></div>
</el-col>
</el-row>
......@@ -88,20 +88,20 @@
</div>
</div>
<a v-show="false" ref="aRef" :href="fillImgUrl(file[0]?.url)" target="_blank" />
<a v-show="false" ref="aRef" :href="fillImgUrl(file[0]?.url)" target="_blank"/>
</div>
</template>
<script setup>
import { useStorage } from '@vueuse/core/index'
import { useRouter } from 'vue-router'
import { ElMessage } from 'element-plus'
import { getCurrentInstance, ref } from '@vue/runtime-core'
import {useStorage} from '@vueuse/core/index'
import {useRouter} from 'vue-router'
import {ElMessage} from 'element-plus'
import {getCurrentInstance, ref} from '@vue/runtime-core'
import { getMatchById, getppInfo, getZNList } from '@/apiPc/match'
import { fillImgUrl } from '/@/utils/ruoyi'
import {getMatchById, getppInfo, getZNList} from '@/apiPc/match'
import {fillImgUrl} from '/@/utils/ruoyi'
const { proxy } = getCurrentInstance()
const {proxy} = getCurrentInstance()
const router = useRouter()
const language = useStorage('language', 0)
const goHelp = () => {
......@@ -115,7 +115,7 @@ const goHelp = () => {
const file = ref({})
const goHelpZH = async() => {
const goHelpZH = async () => {
// ElMessage.success('已下载文件')
// router.push({
// name: 'guide',
......@@ -123,7 +123,7 @@ const goHelpZH = async() => {
// index: 8
// }
// })
const res = await getZNList({ sortId: 30000009, language: 1 })
const res = await getZNList({sortId: 30000009, language: 1})
if (res.rows.length > 0) {
file.value = JSON.parse(res.rows[0].picUrl)
proxy.$refs['aRef'].click()
......
......@@ -4,40 +4,40 @@
<el-col :span="6" :xs="24" class="colHight">
<div>
<div class="avatarBox">
<userAvatar :user="state.user" />
<userAvatar :user="state.user"/>
<h3 class="">{{ state.user.userName }}</h3>
</div>
<div>
<ul class="list-group list-group-striped">
<li
class="list-group-item"
:class="{ btn: index == 1 }"
class="list-group-item"
@click="index = 1"
>
<i class="user01" />团体信息&ensp;&ensp;&ensp;&ensp;
<i class="user01"/>团体信息&nbsp;&nbsp;&nbsp;&nbsp;
</li>
<li
class="list-group-item"
:class="{ btn: index == 2 }"
class="list-group-item"
@click="index = 2"
>
<i class="user02" />会员认证&ensp;&ensp;&ensp;&ensp;
<i class="user02"/>会员认证&nbsp;&nbsp;&nbsp;&nbsp;
</li>
<li
v-if="deptType==2||deptType==3"
class="list-group-item"
:class="{ btn: index == 3 }"
class="list-group-item"
@click="index = 3"
>
<i class="user03" />账户信息&ensp;&ensp;&ensp;&ensp;
<i class="user03"/>账户信息&nbsp;&nbsp;&nbsp;&nbsp;
</li>
<li
class="list-group-item"
:class="{ btn: index == 4 }"
class="list-group-item"
@click="index = 4"
>
<i class="user04" />账号与安全&ensp;&ensp;
<i class="user04"/>账号与安全&nbsp;&nbsp;
</li>
<!-- <li class="list-group-item">
<svg-icon icon-class="peoples" />
......@@ -60,21 +60,21 @@
</div>
</template> -->
<div v-if="index == 1">
<Group />
<Group/>
</div>
<div v-if="index == 2">
<Member :id="id" />
<Member :id="id"/>
</div>
<div v-if="index == 3">
<Rates />
<Rates/>
</div>
<div v-if="index == 4">
<el-tabs v-model="activeTab">
<el-tab-pane label="基本资料" name="userinfo">
<userInfo style="min-height: 454px" :user="state.user" />
<userInfo :user="state.user" style="min-height: 454px"/>
</el-tab-pane>
<el-tab-pane label="修改密码" name="resetPwd">
<resetPwd style="min-height: 454px" />
<resetPwd style="min-height: 454px"/>
</el-tab-pane>
</el-tabs>
</div>
......@@ -83,8 +83,8 @@
</div>
</template>
<script setup name="Profile">
import { ref, reactive, computed, onMounted } from 'vue'
<script name="Profile" setup>
import {ref, reactive, computed, onMounted} from 'vue'
import UserAvatar from './userAvatar'
import UserInfo from './userInfo'
import ResetPwd from './resetPwd'
......@@ -92,8 +92,9 @@ import Group from './group.vue'
import Member from './member.vue'
import Rates from './rates.vue'
import useUserStore from '@/store/modules/user'
import { useRoute } from 'vue-router'
import { getUserProfile } from '@/api/system/user'
import {useRoute} from 'vue-router'
import {getUserProfile} from '@/api/system/user'
const route = useRoute()
const deptType = computed(() => useUserStore().deptType)
const index = ref(1)
......@@ -119,29 +120,83 @@ function getUser() {
</script>
<style lang="scss" scoped>
.user01{background: url("@/assets/admin/user01@2x.png") no-repeat center;background-size: contain;}
.user02{background: url("@/assets/admin/user02@2x.png") no-repeat center;background-size: contain;}
.user03{background: url("@/assets/admin/user03@2x.png") no-repeat center;background-size: contain;}
.user04{background: url("@/assets/admin/user04@2x.png") no-repeat center;background-size: contain;}
.user01 {
background: url("@/assets/admin/user01@2x.png") no-repeat center;
background-size: contain;
}
.user02 {
background: url("@/assets/admin/user02@2x.png") no-repeat center;
background-size: contain;
}
.user03 {
background: url("@/assets/admin/user03@2x.png") no-repeat center;
background-size: contain;
}
.user04 {
background: url("@/assets/admin/user04@2x.png") no-repeat center;
background-size: contain;
}
.list-group-item {
text-align: center;height: 60px;line-height: 60px;
background: #FFFFFF;cursor: pointer;
font-size: 18px;display: flex;align-items: center;justify-content: center;
color: #000000;padding: 0;border: none;
border-radius: 5px;margin-bottom: 17px;
i{display: inline-block;width: 34px;height: 34px;margin-right: 20px;}
text-align: center;
height: 60px;
line-height: 60px;
background: #FFFFFF;
cursor: pointer;
font-size: 18px;
display: flex;
align-items: center;
justify-content: center;
color: #000000;
padding: 0;
border: none;
border-radius: 5px;
margin-bottom: 17px;
i {
display: inline-block;
width: 34px;
height: 34px;
margin-right: 20px;
}
&.btn {
color: #fff;background: #1561CB;
.user01{background: url("@/assets/admin/user01_dwn@2x.png") no-repeat center;background-size: contain;}
.user02{background: url("@/assets/admin/user02_dwn@2x.png") no-repeat center;background-size: contain;}
.user03{background: url("@/assets/admin/user03_dwn@2x.png") no-repeat center;background-size: contain;}
.user04{background: url("@/assets/admin/user04_dwn@2x.png") no-repeat center;background-size: contain;}
color: #fff;
background: #1561CB;
.user01 {
background: url("@/assets/admin/user01_dwn@2x.png") no-repeat center;
background-size: contain;
}
.user02 {
background: url("@/assets/admin/user02_dwn@2x.png") no-repeat center;
background-size: contain;
}
.user03 {
background: url("@/assets/admin/user03_dwn@2x.png") no-repeat center;
background-size: contain;
}
.user04 {
background: url("@/assets/admin/user04_dwn@2x.png") no-repeat center;
background-size: contain;
}
}
}
.colHight {
height: 800px;
}
.avatarBox{background: url("@/assets/admin/user_bg@2x.png") no-repeat center;background-size: cover;
text-align: center;padding: 30px 0 10px;
.avatarBox {
background: url("@/assets/admin/user_bg@2x.png") no-repeat center;
background-size: cover;
text-align: center;
padding: 30px 0 10px;
}
</style>
......
......@@ -4,21 +4,30 @@
<el-row>
<el-col v-for="(d,i) in listData" :key="i" :lg="24" :sm="24">
<div class="person-item">
<img v-if="d.photo" class="photo" :src="fillImgUrl(d.photo)">
<img v-else class="photo" style="object-fit: contain;background: #fff;" src="@/assets/v1/default.png">
<img v-if="d.photo" :src="fillImgUrl(d.photo)" class="photo">
<img v-else class="photo" src="@/assets/v1/default.png" style="object-fit: contain;background: #fff;">
<div class="info">
<div class="name">{{ d.name }}
<el-image v-if="d.sex=='0'||d.sex=='1'" style="width: 20px;height: 20px;margin-left: 10px" :src="d.sex=='0'?male:female" />
<el-image
v-if="d.sex=='0'||d.sex=='1'" :src="d.sex=='0'?male:female"
style="width: 20px;height: 20px;margin-left: 10px"
/>
</div>
<div class="flex">
<div>
<el-form-item label="会员编号:">{{ d.perCode }}</el-form-item>
<el-form-item label="出生日期:">{{ parseTime(d.birth,'{y}-{m}-{d}') }}</el-form-item>
<el-form-item label="出生日期:">{{ parseTime(d.birth, '{y}-{m}-{d}') }}</el-form-item>
</div>
<div>
<el-form-item label="&ensp;&ensp;注册时间:">{{ parseTime(d.createTime,'{y}-{m}-{d}') }}</el-form-item>
<el-form-item label="有效期截止:">{{ parseTime(d.validityDate,'{y}-{m}-{d}')||'--' }}</el-form-item>
<el-form-item label="&nbsp;&nbsp;注册时间:">{{
parseTime(d.createTime, '{y}-{m}-{d}')
}}
</el-form-item>
<el-form-item label="有效期截止:">{{
parseTime(d.validityDate, '{y}-{m}-{d}') || '--'
}}
</el-form-item>
</div>
<div style="width: 170px">
<!-- <div v-if="d.canDownCert=='1'" class="vipDownLoad" @click="vipDownLoad(d.perId)">-->
......@@ -26,7 +35,7 @@
<!-- </div>-->
</div>
</div>
</div>
</div>
</el-col>
......@@ -36,27 +45,31 @@
<el-row>
<el-col v-for="(d,i) in listData" :key="i" :lg="24" :sm="24">
<div class="person-item">
<img v-if="d.photo" class="photo" :src="fillImgUrl(d.photo)">
<img v-if="d.photo" :src="fillImgUrl(d.photo)" class="photo">
<img v-else src="@/assets/v1/default.png">
<div class="info">
<div class="name">{{ d.name }}
<el-image v-if="d.sex=='0'||d.sex=='1'" style="width: 20px;height: 20px;margin-left: 10px" :src="d.sex=='0'?male:female" />
<el-image
v-if="d.sex=='0'||d.sex=='1'" :src="d.sex=='0'?male:female"
style="width: 20px;height: 20px;margin-left: 10px"
/>
</div>
<div>
<el-form-item label="编号:">{{ d.perCode }}</el-form-item>
<el-form-item label="出生日期:">{{ parseTime(d.birth,'{y}-{m}-{d}') }}</el-form-item>
<el-form-item label="注册时间:">{{ parseTime(d.createTime,'{y}-{m}-{d}') }}</el-form-item>
<el-form-item label="有效期截止:">{{ parseTime(d.validityDate,'{y}-{m}-{d}') }}</el-form-item>
<el-form-item label="出生日期:">{{ parseTime(d.birth, '{y}-{m}-{d}') }}</el-form-item>
<el-form-item label="注册时间:">{{ parseTime(d.createTime, '{y}-{m}-{d}') }}</el-form-item>
<el-form-item label="有效期截止:">{{ parseTime(d.validityDate, '{y}-{m}-{d}') }}</el-form-item>
</div>
<div v-if="d.canDownCert=='1'" class="vipDownLoad" @click="vipDownLoad(d.perId)">
<i />会员证
</div>
</div>
</div>
</el-col>
</el-row></div>
</el-row>
</div>
<div v-if="!loading" class="text-center pd20">
<el-divider>
<span v-if="showMore" @click="handleQuery">加载更多</span>
......@@ -80,22 +93,24 @@ const props = defineProps({
query: {
required: true,
type: Object,
default: () => {}
default: () => {
}
}
})
const listData = ref([])
const showMore = ref(false)
const loading = ref(false)
function handleQuery() {
loading.value = true
queryParams.pageNum++
authentic.query(queryParams).then((res) => {
_.each(res.data.personalList.rows, (r) => {
listData.value.push(r)
})
showMore.value = listData.value.length < res.data.personalList.total
loading.value = false
})
......@@ -106,6 +121,7 @@ function vipDownLoad(perId) {
}
let queryParams = {}
function init() {
queryParams = {
pageNum: 0,
......@@ -114,39 +130,79 @@ function init() {
name: props.query.name
}
listData.value = []
handleQuery()
}
defineExpose({
init
})
</script>
<style scoped lang="scss">
.flex{display: flex;justify-content: space-between;}
.person-item{position:relative;
display: flex;margin: 30px 0;background: #F5F7F9;
border-radius: 2px;padding: 10px 20px;
.photo{width: 100px; height: 130px}
.info{margin-left: 20px;width: 90%;
.name{font-size: 24px;display: flex;align-items: center;
margin: 10px 0;}
.el-form-item--default{margin-bottom: 0;}
<style lang="scss" scoped>
.flex {
display: flex;
justify-content: space-between;
}
.person-item {
position: relative;
display: flex;
margin: 30px 0;
background: #F5F7F9;
border-radius: 2px;
padding: 10px 20px;
.photo {
width: 100px;
height: 130px
}
.info {
margin-left: 20px;
width: 90%;
.name {
font-size: 24px;
display: flex;
align-items: center;
margin: 10px 0;
}
.el-form-item--default {
margin-bottom: 0;
}
.el-form-item__content{
font-size: 18px;
color: #95A1A6;}
}
@media (max-width: 500px) {
.forWei{background: #F7F8FA;}
.person-item{margin: 15px 0;background: #fff;
.photo{width: 120px;height: 140px;}
.info{margin-left: 15px;
.name{font-size: 18px}
}
.el-form-item__content {
font-size: 18px;
color: #95A1A6;
}
}
@media (max-width: 500px) {
.forWei {
background: #F7F8FA;
}
.person-item {
margin: 15px 0;
background: #fff;
.photo {
width: 120px;
height: 140px;
}
:deep(.el-form-item--default .el-form-item__label){
padding: 0;
.info {
margin-left: 15px;
.name {
font-size: 18px
}
}
}
:deep(.el-form-item--default .el-form-item__label) {
padding: 0;
}
}
</style>
......
<template>
<div class="pv20">
<div class="matchItem" v-for="n in list" :key="n.id" @click="goDetail(n.id)">
<div v-for="n in list" :key="n.id" class="matchItem" @click="goDetail(n.id)">
<el-row :gutter="15">
<el-col :lg="7" :md="24" :xl="6">
<div class="popo">
<el-tag v-if="n.signType==0">{{ language==0?'个人':'Individual' }}</el-tag>
<el-tag v-if="n.signType==1">{{ language==0?'团体':'Team' }}</el-tag>
<el-tag v-if="n.signType==2">{{ language==0?'个人/团体':'Individual/Team' }}</el-tag>
<el-tag v-if="n.signType==0">{{ language == 0 ? '个人' : 'Individual' }}</el-tag>
<el-tag v-if="n.signType==1">{{ language == 0 ? '团体' : 'Team' }}</el-tag>
<el-tag v-if="n.signType==2">{{ language == 0 ? '个人/团体' : 'Individual/Team' }}</el-tag>
</div>
<img class="mauto mw100 coverLimitHeight" :src="fillImgUrl(n.coverUrl)">
<img :src="fillImgUrl(n.coverUrl)" class="mauto mw100 coverLimitHeight">
</el-col>
<el-col :lg="9" :md="12" :xl="12">
<div class="info">
<h3 class="esp">{{ n.name }}</h3>
<p class="ppl"><label>{{language==0?'赛事级别':'EVENT LEVEL'}}</label>{{n.level}}</p>
<p class="ppl"><label>{{ language==0?'赛事时间':'COMPETITION DATE' }}</label>{{n.beginTime?.slice(0,10)}} ~ {{ n.endTime?.slice(0,10) }}</p>
<p class="ppl esp"><label>{{ language==0?'地&ensp;&ensp;&ensp;&ensp;点':'LOCATION' }}</label>{{ n.address }}</p>
<!-- <p class="ppl"><label>{{ language==0?'报名截止':'Registration Deadline' }}</label>{{ n.signEndTime?.slice(0,10) }}</p>-->
<p class="ppl" v-if="n.contactPerson"><label>{{ language==0?'联&ensp;系&ensp;人':'CONTACT PERSON' }}</label>{{ n.contactPerson }}</p>
<p class="ppl"><label>{{ language==0?'联系电话':'TEL' }}</label>086-{{ n.contactTelno }}</p>
<p class="ppl" v-if="n.contactEmail"><label>{{ language==0?'邮&ensp;&ensp;&ensp;&ensp;箱':'EMAIL' }}</label>{{ n.contactEmail }}</p>
<p class="ppl"><label>{{ language == 0 ? '赛事级别' : 'EVENT LEVEL' }}</label>{{ n.level }}</p>
<p class="ppl"><label>{{
language == 0 ? '赛事时间' : 'COMPETITION DATE'
}}</label>{{ n.beginTime?.slice(0, 10) }} ~ {{ n.endTime?.slice(0, 10) }}</p>
<p class="ppl esp"><label>{{
language == 0 ? '地&nbsp;&nbsp;&nbsp;&nbsp;点' : 'LOCATION'
}}</label>{{ n.address }}</p>
<!-- <p class="ppl"><label>{{ language==0?'报名截止':'Registration Deadline' }}</label>{{ n.signEndTime?.slice(0,10) }}</p>-->
<p v-if="n.contactPerson" class="ppl"><label>{{
language == 0 ? '联&nbsp;系&nbsp;人' : 'CONTACT PERSON'
}}</label>{{ n.contactPerson }}</p>
<p class="ppl"><label>{{ language == 0 ? '联系电话' : 'TEL' }}</label>086-{{ n.contactTelno }}</p>
<p v-if="n.contactEmail" class="ppl"><label>{{
language == 0 ? '邮&nbsp;&nbsp;&nbsp;&nbsp;箱' : 'EMAIL'
}}</label>{{ n.contactEmail }}</p>
</div>
</el-col>
<el-col :lg="8" :md="12" :xl="6">
......@@ -31,41 +39,44 @@
<van-count-down :time="n.time" format="DD 天 HH 时 mm 分 ss 秒">
<template #default="timeData">
<span class="block">{{ timeData.days }}</span>
<span class="colon">{{ language==0?'天':'Days' }}</span>
<span class="colon">{{ language == 0 ? '天' : 'Days' }}</span>
<span class="block">{{ timeData.hours }}</span>
<span class="colon">{{ language==0?'时':'Hrs' }}</span>
<span class="colon">{{ language == 0 ? '时' : 'Hrs' }}</span>
<span class="block">{{ timeData.minutes }}</span>
<span class="colon">{{ language==0?'分':'Min' }}</span>
<span class="colon">{{ language == 0 ? '分' : 'Min' }}</span>
<span class="block">{{ timeData.seconds }}</span>
<span class="colon">{{ language==0?'秒':'Sec' }}</span>
<span class="colon">{{ language == 0 ? '秒' : 'Sec' }}</span>
</template>
</van-count-down>
<div class="text-center mt30">
<a class="btn-lineG mb20 mauto" style="display: block;" v-if="n.time>0">
<span v-if="n.time>0 && n.startSign<=0"> {{ language==0?'我要报名':'REGISTER' }}</span>
<span v-if="n.startSign>0"> {{ language==0?'报名未开始':'Not started yet' }}</span>
<a v-if="n.time>0" class="btn-lineG mb20 mauto" style="display: block;">
<span v-if="n.time>0 && n.startSign<=0"> {{ language == 0 ? '我要报名' : 'REGISTER' }}</span>
<span v-if="n.startSign>0"> {{ language == 0 ? '报名未开始' : 'Not started yet' }}</span>
</a>
<div v-else style="opacity: 0.5;" class="btn-lineG mb20 mauto text-center">
<div v-else class="btn-lineG mb20 mauto text-center" style="opacity: 0.5;">
{{ language == 0 ? '报名已结束' : 'Registration has ended' }}
</div>
<p class="text-gray uppercase">{{ language==0?'报名截止':'Registration Deadline' }}:{{ n.signEndTime?.slice(0,10) }}</p>
<p class="text-gray uppercase">{{
language == 0 ? '报名截止' : 'Registration Deadline'
}}:{{ n.signEndTime?.slice(0, 10) }}</p>
</div>
</el-col>
</el-row>
</div>
</div>
<el-empty :image="`/img/order_no.png`" :image-size="228" v-if="list?.length == 0" description=" "/>
<el-empty v-if="list?.length == 0" :image="`/img/order_no.png`" :image-size="228" description=" " />
</template>
<script setup>
import {ref} from "vue";
import {onMounted} from "@vue/runtime-core";
import {dayjs} from "element-plus"
import {useStorage} from "@vueuse/core/index";
const language= useStorage('language',0)
import { ref } from 'vue'
import { onMounted } from '@vue/runtime-core'
import { dayjs } from 'element-plus'
import { useStorage } from '@vueuse/core/index'
const language = useStorage('language', 0)
const router = useRouter()
const time = ref(0)
......@@ -75,13 +86,14 @@ const props = defineProps({
required: true
}
})
onMounted(()=>{
for(let n of props.list){
onMounted(() => {
for (const n of props.list) {
var today = dayjs().format('YYYY-MM-DD HH:mm:ss')
n.time = dayjs(n.signEndTime).diff(today, 'millisecond')
n.startSign = dayjs(n.signBeginTime).diff(today, 'millisecond')
}
})
function goDetail(id) {
const routeData = router.resolve({
path: `/match/list/${id}`
......@@ -90,50 +102,69 @@ function goDetail(id) {
}
</script>
<style scoped lang="scss">
.pv20{padding: 0 20px;}
.mt60{margin-top: 60px}
<style lang="scss" scoped>
.pv20 {
padding: 0 20px;
}
.mt60 {
margin-top: 60px
}
.matchItem {
cursor: pointer;padding: 0 0 20px;
background: #FFFFFF;border-bottom: 1px solid #e5e5e5;
cursor: pointer;
padding: 0 0 20px;
background: #FFFFFF;
border-bottom: 1px solid #e5e5e5;
position: relative;
.el-col{padding-top: 20px}
.countDownTitle{margin: 0}
.el-col {
padding-top: 20px
}
.countDownTitle {
margin: 0
}
&:last-child {
border-bottom: none;
}
.el-avatar {
position: absolute;
left: 20px;
top: 30px;
img {
background: #fff;
}
}
.info {
p {
font-size: 14px;
}
}
.typeTag {
position: absolute;
right: 0;
top: 0;
}
h3 {
font-weight: 500;margin: 0 0 10px;
font-weight: 500;
margin: 0 0 10px;
font-size: 18px;
color: #000000;
text-overflow: ellipsis;
}
&:hover h3 {
color: var(--el-color-primary);
}
}
.countDownTitle {
text-align: center;
color: #525F6B;
......@@ -161,10 +192,19 @@ function goDetail(id) {
width: 100%;
left: 0;
}
.info .ppl{margin: 5px 0;}
.ppl{color: #29343C;
label{color: #929AA0;}
.info .ppl {
margin: 5px 0;
}
.ppl {
color: #29343C;
label {
color: #929AA0;
}
}
.van-count-down {
text-align: center;
margin: 20px 0;
......@@ -178,7 +218,8 @@ function goDetail(id) {
}
.block {
display: inline-block; opacity: 0.7;
display: inline-block;
opacity: 0.7;
width: 52px;
color: #fff;
font-size: 26px;
......@@ -189,7 +230,11 @@ function goDetail(id) {
line-height: 50px;
text-align: center;
}
@media (max-width: 1450px) {
.block{width: 44px;font-size: 20px;}
.block {
width: 44px;
font-size: 20px;
}
}
</style>
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!