f9f418f2 by 杨炀

no message

1 parent b42d99dc
Showing 122 changed files with 2248 additions and 799 deletions
......@@ -54,9 +54,6 @@ onMounted(() => {
margin: auto;
}
.app-container {
min-height: 100vh;
}
.app-main {
background: #F4F4F4;
......
......@@ -2,7 +2,7 @@ import request from '@/utils/request'
export function getMaList(params) {
return request({
url: `/ztx-match/league/competition/webList`,
url: `/league/competition/webList`,
method: 'get',
params: params
})
......@@ -18,7 +18,7 @@ export function getMatchById(params) {
export function getMySignCptList(query) {
return request({
url: 'ztx-match/league/competition/getMySignCptList',
url: '/league/competition/getMySignCptList',
method: 'get',
params: query
})
......@@ -35,35 +35,35 @@ export function getMySignDetailById(params) {
// 获取赛事下的已报团队
export function getGroupListByCptId(cptId) {
return request({
url: `ztx-match/league/group/getGroupListByCptId/${cptId}`,
url: `/league/group/getGroupListByCptId/${cptId}`,
method: 'get'
})
}
export function getMyPersonInfoWithcptId(cptId) {
return request({
url: `ztx-match/systemj/personInfo/getMyPersonInfo/${cptId}`,
url: `/systemj/personInfo/getMyPersonInfo/${cptId}`,
method: 'get'
})
}
export function getMyPersonInfo() {
return request({
url: `/ztx-match/systemj/personInfo/getMyPersonInfo`,
url: `/systemj/personInfo/getMyPersonInfo`,
method: 'get'
})
}
export function countryList() {
return request({
url: `/ztx-match/systemj/country/countryList`,
url: `/systemj/country/countryList`,
method: 'get'
})
}
export function saveMyBaseInfo(data) {
return request({
url: `/ztx-match/systemj/personInfo/saveMyBaseInfo`,
url: `/systemj/personInfo/saveMyBaseInfo`,
method: 'post',
data: data
})
......@@ -87,7 +87,7 @@ export function checkRegisterCode(data) {
export function getMyGroupList() {
return request({
url: `/ztx-match/league/group/getMyGroupList`,
url: `/league/group/getMyGroupList`,
method: 'get'
})
}
......@@ -115,6 +115,20 @@ export function saveMyGroup(data) {
data: data
})
}
export function saveMyGroupForCpt(data) {
return request({
url: `/league/group/saveMyGroupForCpt`,
method: 'post',
data: data
})
}
export function commitAudit(data) {
return request({
url: `/league/group/commitAudit`,
method: 'post',
data: data
})
}
// 退出团队
export function leaveGroup(groupId) {
......@@ -127,7 +141,7 @@ export function leaveGroup(groupId) {
// 根据Id获取人员信息
export function getPersonInfoById(id) {
return request({
url: `ztx-match/systemj/personInfo/${id}`,
url: `/systemj/personInfo/${id}`,
method: 'get'
})
}
......@@ -135,7 +149,7 @@ export function getPersonInfoById(id) {
// 保存补充信息
export function saveSupplementInfo(data) {
return request({
url: `ztx-match/league/competitionPersonInfo/savePersonInfo`,
url: `/league/competitionPersonInfo/savePersonInfo`,
method: 'post',
data: data
})
......@@ -144,14 +158,14 @@ export function saveSupplementInfo(data) {
// 获取补充信息
export function getSupplementInfo(id) {
return request({
url: `ztx-match/league/competitionPersonInfo/${id}`,
url: `/league/competitionPersonInfo/${id}`,
method: 'get'
})
}
export function getMySignInfo(data) {
return request({
url: `ztx-match/league/sign/getMySignInfo`,
url: `/league/sign/getMySignInfo`,
method: 'post',
data: data
})
......@@ -173,7 +187,7 @@ export function getLeveListByGroupId(cptGroupId) {
export function saveMyTeam(data) {
return request({
url: `ztx-match/league/team/saveMyTeam`,
url: `/league/team/saveMyTeam`,
method: 'post',
data: data
})
......@@ -181,7 +195,7 @@ export function saveMyTeam(data) {
export function getMyOrderList(params) {
return request({
url: `/ztx-match/league/signOrder/getMyOrderList`,
url: `/league/signOrder/getMyOrderList`,
method: 'get',
params: params
})
......@@ -196,7 +210,7 @@ export function getMySignListFromOrderList(orderId) {
export function getMyOrderDetail(orderId) {
return request({
url: `/ztx-match/league/signOrder/getMyOrderDetail/${orderId}`,
url: `/league/signOrder/getMyOrderDetail/${orderId}`,
method: 'get'
})
}
......@@ -219,30 +233,37 @@ export function getVenueDetail(id) {
// 获取团队下的队伍
export function getMyTeamList(cptId, groupId) {
return request({
url: `ztx-match/league/team/getTeamList/${cptId}/${groupId}`,
url: `/league/team/getTeamList/${cptId}/${groupId}`,
method: 'get'
})
}
export function getMyGroupForCpt(groupId, cptId) {
return request({
url: `ztx-match/league/group/getMyGroupForCpt/${groupId}/${cptId}`,
url: `/league/group/getMyGroupForCpt/${groupId}/${cptId}`,
method: 'get'
})
}
export function getMyGroupForCptFilter(groupId, cptId, query) {
return request({
url: `ztx-match/league/group/getMyGroupForCptFilter/${groupId}/${cptId}`,
url: `/league/group/getMyGroupForCptFilter/${groupId}/${cptId}`,
method: 'post',
data: query
})
}
export function getGroupPersonList(query,groupId) {
return request({
url: `/systemj/personInfo/getPersonInfoListByGroupIdNoLabel/${groupId}`,
method: 'get',
params: query
})
}
// 获取团队报名时已选人员
export function getChooseDoneGroupCoachs(cptId, groupId) {
return request({
url: `ztx-match/league/unitCompetitionRole/getGroupInfo/${cptId}/${groupId}`,
url: `/league/unitCompetitionRole/getGroupInfo/${cptId}/${groupId}`,
method: 'get'
})
}
......@@ -250,14 +271,14 @@ export function getChooseDoneGroupCoachs(cptId, groupId) {
// 获取个人报名时已选人员
export function getChooseDoneSingleCoachs(cptId) {
return request({
url: `ztx-match/league/unitCompetitionRole/getPersonInfo/${cptId}`,
url: `/league/unitCompetitionRole/getPersonInfo/${cptId}`,
method: 'get'
})
}
export function savePersonForMyGroup(data) {
return request({
url: `ztx-match/systemj/personInfo/savePersonForMyGroup`,
url: `/systemj/personInfo/savePersonForMyGroup`,
method: 'post',
data: data
})
......@@ -265,7 +286,7 @@ export function savePersonForMyGroup(data) {
export function savePersonForMyPerson(data) {
return request({
url: `ztx-match/systemj/personInfo/savePersonForMyPerson`,
url: `/systemj/personInfo/savePersonForMyPerson`,
method: 'post',
data: data
})
......@@ -283,14 +304,14 @@ export function editPersonInfo(params) {
// 人员删除
export function delPerson(id) {
return request({
url: `ztx-match/systemj/personInfo/${id}`,
url: `/systemj/personInfo/${id}`,
method: 'delete'
})
}
export function singleSignSavePerson(data) {
return request({
url: `ztx-match/league/unitCompetitionRole/savePersonInfo`,
url: `/league/unitCompetitionRole/savePersonInfo`,
method: 'post',
data: data
})
......@@ -298,7 +319,7 @@ export function singleSignSavePerson(data) {
export function groupSignSavePerson(data) {
return request({
url: `ztx-match/league/unitCompetitionRole/saveGroupInfo`,
url: `/league/unitCompetitionRole/saveGroupInfo`,
method: 'post',
data: data
})
......@@ -326,20 +347,20 @@ export function getCanSignlevelListFromSelectPerson(groupId, personId) {
}
export function delRank(id) {
return request({
url: `ztx-match/league/team/${id}`,
url: `/league/team/${id}`,
method: 'delete'
})
}
export function getCanSignLevelPerson(data) {
return request({
url: `ztx-match/league/competitionLevel/getCanSignLevelPerson`,
url: `/league/competitionLevel/getCanSignLevelPerson`,
method: 'post',
data: data
})
}
export function sportsmanDone(data) {
return request({
url: `ztx-match/league/sign/signUp`,
url: `/league/sign/signUp`,
method: 'post',
data: data
})
......@@ -347,20 +368,20 @@ export function sportsmanDone(data) {
// 删除报名接口
export function deleteSign(id) {
return request({
url: `ztx-match/league/sign/deleteSign/${id}`,
url: `/league/sign/deleteSign/${id}`,
method: 'post'
})
}
// 选择运动员的补充信息表头
export function getCptExtraInfo(cptId) {
return request({
url: `ztx-match/league/competition/getCptExtraInfo/${cptId}`,
url: `/league/competition/getCptExtraInfo/${cptId}`,
method: 'get'
})
}
export function recoverMySign(data) {
return request({
url: `ztx-match/league/sign/recoverMySign`,
url: `/league/sign/recoverMySign`,
method: 'post',
data: data
})
......@@ -368,21 +389,21 @@ export function recoverMySign(data) {
// 生成订单
export function commitSign(data) {
return request({
url: `ztx-match/league/sign/commitSign`,
url: `/league/sign/commitSign`,
method: 'post',
data: data
})
}
export function getTotalFee(data) {
return request({
url: `ztx-match/league/expenseConfig/getTotalFee`,
url: `/league/expenseConfig/getTotalFee`,
method: 'post',
data: data
})
}
export function getMemberInfoByCptId(cptId) {
return request({
url: `ztx-match/systemj/member/editMemberCode/${cptId}`,
url: `/systemj/member/editMemberCode/${cptId}`,
method: 'get'
})
}
......@@ -395,20 +416,20 @@ export function getTemplate() {
// 支付 orderId,payType
export function payMatch(data) {
return request({
url: `ztx-match/league/signOrder/payForOrderFromPc`,
url: `/league/signOrder/payForOrderFromPc`,
method: 'post',
data: data
})
}
export function cancelMyUnPayedOrder(orderId) {
return request({
url: `ztx-match/league/signOrder/cancelMyUnPayedOrder/${orderId}`,
url: `/league/signOrder/cancelMyUnPayedOrder/${orderId}`,
method: 'post'
})
}
export function getMySignListFromBaoXiang(data) {
return request({
url: `ztx-match/league/sign/getMySignListFromBaoXiang`,
url: `/league/sign/getMySignListFromBaoXiang`,
method: 'post',
data: data
})
......@@ -421,27 +442,27 @@ export function deleteMyGroup(groupId) {
}
export function checkPerson(data) {
return request({
url: `ztx-match/systemj/personInfo/checkPersonInfoExist`,
url: `/systemj/personInfo/checkPersonInfoExist`,
method: 'post',
data: data
})
}
export function getMySignListTree(cptId, personId, teamId) {
return request({
url: `ztx-match/league/competitionProject/getAllInfoFromSelectPerson/${cptId}/${personId}/${teamId || 0}`,
url: `/league/competitionProject/getAllInfoFromSelectPerson/${cptId}/${personId}/${teamId || 0}`,
method: 'get'
})
}
export function getMySignInfoList(data) {
return request({
url: `ztx-match/league/sign/getMySignInfoList`,
url: `/league/sign/getMySignInfoList`,
method: 'post',
data: data
})
}
export function saveMyGroupExtraInfo(data) {
return request({
url: `ztx-match/league/competitionGroupInfo/saveMyGroupExtraInfo`,
url: `/league/competitionGroupInfo/saveMyGroupExtraInfo`,
method: 'post',
data: data
})
......@@ -454,19 +475,19 @@ export function saveMyGroupExtraInfo(data) {
}
export function getMySignIds(cptId, personId, teamId) {
return request({
url: `ztx-match/league/sign/getSignEntityByPersonId/${cptId}/${personId}/${teamId || 0}`,
url: `/league/sign/getSignEntityByPersonId/${cptId}/${personId}/${teamId || 0}`,
method: 'get'
})
}
export function querySonLevel(parentId) {
return request({
url: `ztx-match/league/competitionSonLevel/querySonLevelByParentId/${parentId}`,
url: `/league/competitionSonLevel/querySonLevelByParentId/${parentId}`,
method: 'get'
})
}
export function getPayedOrderPdf(cptId, groupId) {
return request({
url: `ztx-match/pdf/getPayedOrderPdf/${cptId}/${groupId}`,
url: `/pdf/getPayedOrderPdf/${cptId}/${groupId}`,
method: 'get'
})
}
......
No preview for this file type
No preview for this file type
No preview for this file type

22.8 KB | W: | H:

20.5 KB | W: | H:

src/assets/img/order_no.png
src/assets/img/order_no.png
src/assets/img/order_no.png
src/assets/img/order_no.png
  • 2-up
  • Swipe
  • Onion skin
......@@ -74,7 +74,7 @@ div:focus {
.pl-5 {
padding-left: 5px;
}
.mr5{margin-right: 5px;}
.block {
display: block;
}
......@@ -123,7 +123,7 @@ aside {
//main-container全局样式
.app-container {
padding: 20px;
padding: 20px 0 0;
}
.components-container {
......@@ -138,7 +138,7 @@ aside {
.text-center {
text-align: center
}
.h20{height: 20px;}
.sub-navbar {
height: 50px;
line-height: 50px;
......@@ -186,9 +186,13 @@ aside {
.primary-kx:hover{}
.border-info{background: rgba(69,61,234,0.04);
border: 1px solid #D3D1F6;
border-radius: 5px;padding: 20px;margin-bottom: 20px;
border-radius: 5px;padding: 10px;margin-bottom: 20px;
&.inline{display: inline-block;border-radius: 50px;padding: 10px 20px;
margin: 0 40% 20px;min-width: 200px;}
&.gray{background: #FAFBFD;
border: 1px solid #EEEFF0;}
label{margin-right: 10px;}
.item{margin: 10px}
}
.el-step__title.is-success{
color: var(--el-color-primary)!important;
......@@ -198,6 +202,7 @@ aside {
background: linear-gradient(90deg, #8623FC, #453DEA);}
}
.el-step__line{border-top:1px dashed #D1D6D8;background: transparent!important;
.el-step__line-inner{border-width: 0!important;}
}
.el-step__head.is-process{border-top: var(--el-color-primary);
.el-step__icon{color: #fff;border: none;
......@@ -250,3 +255,75 @@ aside {
h4{font-size: 18px;margin-top: -10px;}
&:hover{box-shadow:var(--el-box-shadow-dark);}
}
.fieldset-form{ border: groove #eee 1px;
legend{
font-weight: 600;
color: #4C5359;
font-size: 14px;}
}
.el-button--primary.is-link, .el-button--primary.is-plain, .el-button--primary.is-text{
--el-button-border-color:var(--el-color-primary)!important;
--el-button-bg-color:#fff!important;
}
@media (max-width: 500px) {
.footAll{display: none;}
.app-container{padding: 0;overflow: auto;
min-height: auto;}
.rightPart{width: calc(100vw - 100px);left: 100px;position: fixed;
border: none!important;
height: calc(100vh - 80px);overflow: auto;top: 80px;
.indexTitle{display: none;}
.pd20{padding: 8px;}
.pt30{padding: 8px;}
.d-form-border{border: none}
.el-card{box-shadow: none!important; border: none!important;}
.fieldset-form{
.el-form-item{flex-direction: column;}
}
.el-form-item__label{width: auto!important;justify-content:flex-start}
}
}
.chooseForm {
.el-checkbox-group{
display: flex;
flex-wrap: wrap;
}
:deep(.el-form-item__content) {
background: rgba(245, 247, 249, 0.38);
padding: 20px 40px 10px;
}
.el-checkbox {
height: auto;position: relative;
}
:deep(.el-checkbox__input) {
position: absolute;
right: 0;
top: 0;
}
.name {
text-align: center;
}
}
.addBttn {margin-right: 20px;
width: 60px;
color: #7B7F83;
font-size: 20px;
height: 60px;
display: flex;
align-items: center;
justify-content: center;
background: #FFFFFF;
border: 1px dashed #95A1A6;
border-radius: 50%;
&:hover {
cursor: pointer;
color: var(--el-color-primary);
border-color: var(--el-color-primary);
}
}
......
......@@ -1006,16 +1006,22 @@ img{display: block;}
//赛事
.ph-30{padding-top: 30px;padding-bottom: 30px;}
.panel{border-radius: 10px;background: #FFFFFF;
.panel-header{background: #FBFCFD;line-height: 50px;height: 50px;}
.panel-title{text-align: center;font-size: 18px;line-height: 50px;margin: 0;}
.panel{border-radius: 0;background: #FFFFFF;padding: 1px 0 0;
.panel-header{line-height: 50px;height: 50px;border-bottom: 1px solid #EEEEEE;
padding: 0 20px;position: relative;
.fr{position: absolute;right: 20px;top: 0px;font-size: 14px;color: #666;
text-decoration: underline;}
}
.panel-title{font-size: 16px;line-height: 50px;margin: 0;
color: var(--el-color-primary)}
.panel-body{padding: 20px;}
&.border{border: 1px solid #EEEEEE;}
}
.panel-footer{border-top: 1px solid #e1e1e1;height: 80px;
display: flex;
justify-content: center;
align-items: center;
}
}
.panel-footer .el-button--danger{background: var(--el-color-primary);border: none;
padding: 0 40px;
font-size: 16px;
......@@ -1394,3 +1400,10 @@ img{display: block;}
p{text-align: left;word-break: break-all;}
}
}
.chooseForm{
:deep(.el-form-item__content){background: rgba(245, 247, 249, 0.38);
padding: 20px 40px 10px;}
.el-checkbox{height: auto;}
:deep(.el-checkbox__input){position: absolute;right: 0;top: 0;}
.name{text-align: center;}
}
......
<template>
<div class="upload-file">
<el-upload
ref="fileUpload"
multiple
:action="uploadFileUrl"
:before-upload="handleBeforeUpload"
:file-list="fileList"
:limit="limit"
:on-error="handleUploadError"
:on-exceed="handleExceed"
:on-success="handleUploadSuccess"
:show-file-list="false"
:headers="headers"
class="upload-file-uploader"
:name="name"
:accept="accept"
>
<!-- 上传按钮 -->
<el-button type="primary">选取文件</el-button>
</el-upload>
<!-- 上传提示 -->
<div v-if="showTip" class="el-upload__tip">
请上传
<template v-if="fileSize">
大小不超过 <b style="color: #f56c6c">{{ fileSize }}MB</b>
</template>
<template v-if="fileType">
格式为 <b style="color: #f56c6c">{{ fileType.join("/") }}</b>
</template>
的文件
</div>
<!-- 文件列表 -->
<transition-group
class="upload-file-list el-upload-list el-upload-list--text"
name="el-fade-in-linear"
tag="ul"
>
<li
v-for="(file, index) in fileList"
:key="file.uid"
class="el-upload-list__item ele-upload-list__item-content"
>
<el-link
:href="`${file.url}`"
:underline="false"
target="_blank"
@click="downFN(file.url)"
>
<span class="el-icon-document"> {{ getFileName(file.name) }} </span>
</el-link>
<div class="ele-upload-list__item-content-action">
<el-link :underline="false" type="danger" @click="handleDelete(index)">删除</el-link>
</div>
</li>
</transition-group>
</div>
</template>
<script setup>
import { getToken } from '@/utils/auth'
import _ from 'lodash'
import { computed } from 'vue'
const props = defineProps({
modelValue: [String, Object, Array],
// 数量限制
limit: {
type: Number,
default: 5
},
// 大小限制(MB)
fileSize: {
type: Number,
default: 120
},
// 文件类型, 例如['png', 'jpg', 'jpeg']
fileType: {
type: Array,
default: () => ['xlsx']
},
// 是否显示提示
isShowTip: {
type: Boolean,
default: true
},
name: {
type: String,
default: 'file'
},
action: {
type: String,
default: '/upload/uploadFile'
}
})
const accept = computed(() => {
return _.map(props.fileType, (t) => {
if (t.indexOf('.') === 0) {
return t
} else {
return '.' + t
}
}).join(',')
})
const { proxy } = getCurrentInstance()
const emit = defineEmits(['update:modelValue', 'uploadSuccess'])
const number = ref(0)
const fileOriginalName = ref('')
const uploadList = ref([])
// const baseUrl = import.meta.env.VITE_APP_BASE_API;
const uploadFileUrl = ref(import.meta.env.VITE_APP_BASE_API + props.action) // 上传文件服务器地址
const headers = ref({ Authorization: 'Bearer ' + getToken() })
const fileList = ref([])
const showTip = computed(
() => props.isShowTip && (props.fileType || props.fileSize)
)
watch(
() => props.modelValue,
(val) => {
if (val) {
let temp = 1
// 首先将值转为数组
const list = Array.isArray(val) ? val : (_.isObject(props.modelValue) ? [props.modelValue] : props.modelValue.split(','))
console.log(list)
// 然后将数组转为对象数组
fileList.value = list.map((item) => {
if (typeof item === 'string') {
item = { name: item, url: item }
}
item.uid = item.uid || new Date().getTime() + temp++
return item
})
} else {
fileList.value = []
return []
}
},
{ deep: true, immediate: true }
)
// 上传前校检格式和大小
function handleBeforeUpload(file) {
// 校检文件类型
if (props.fileType.length) {
let fileExtension = ''
if (file.name.lastIndexOf('.') > -1) {
fileExtension = file.name.slice(file.name.lastIndexOf('.') + 1)
}
const isTypeOk = props.fileType.some((type) => {
if (file.type.indexOf(type) > -1) return true
if (fileExtension && fileExtension.indexOf(type) > -1) return true
return false
})
if (!isTypeOk) {
proxy.$modal.msgError(
`文件格式不正确, 请上传${props.fileType.join('/')}格式文件!`
)
return false
}
}
// 校检文件大小
if (props.fileSize) {
const isLt = file.size / 1024 / 1024 < props.fileSize
if (!isLt) {
proxy.$modal.msgError(`上传文件大小不能超过 ${props.fileSize} MB!`)
return false
}
}
proxy.$modal.loading('正在上传文件,请稍候...')
number.value++
return true
}
// 文件个数超出
function handleExceed() {
proxy.$modal.msgError(`上传文件数量不能超过 ${props.limit} 个!`)
}
// 上传失败
function handleUploadError(err) {
proxy.$modal.msgError('上传文件失败')
proxy.$modal.closeLoading()
}
// 上传成功回调
function handleUploadSuccess(res, file) {
console.log(file)
fileOriginalName.value = file.name
if (res.code === 200) {
if (res.data) {
uploadList.value.push({ name: file.name, url: res.data.fileUrl })
uploadedSuccessfully()
} else {
proxy.$modal.closeLoading()
}
} else {
number.value--
proxy.$modal.closeLoading()
proxy.$modal.msgError(res.msg)
proxy.$refs.fileUpload.handleRemove(file)
uploadedSuccessfully()
}
emit('uploadSuccess', res)
}
// 删除文件
function handleDelete(index) {
fileList.value.splice(index, 1)
emit('update:modelValue', listToString(fileList.value))
}
function handleClear() {
fileList.value = []
emit('update:modelValue', listToString(fileList.value))
}
// 上传结束处理
function uploadedSuccessfully() {
if (number.value > 0 && uploadList.value.length === number.value) {
fileList.value = fileList.value
.filter((f) => f.url !== undefined)
.concat(uploadList.value)
uploadList.value = []
number.value = 0
emit('update:modelValue', listToString(fileList.value))
proxy.$modal.closeLoading()
}
}
// 获取文件名称
function getFileName(name) {
try {
if (name.lastIndexOf('/') > -1) {
return name.slice(name.lastIndexOf('/') + 1)
} else {
return name
}
} catch (ex) {
return ''
}
}
// 对象转成指定字符串分隔
function listToString(list, separator) {
// let strs = "";
// separator = separator || ",";
// for (const i in list) {
// if (list[i].url) {
// strs += list[i].url + separator;
// }
// }
// return strs != "" ? strs.substr(0, strs.length - 1) : "";
return fileList.value
}
// 文件下载
function downFN(row) {
console.log(row)
}
defineExpose({
handleClear
})
</script>
<style scoped lang="scss">
.upload-file-uploader {
margin-bottom: 5px;
}
.upload-file-list .el-upload-list__item {
border: 1px solid #e4e7ed;
line-height: 2;
margin-bottom: 10px;
position: relative;
}
.upload-file-list .ele-upload-list__item-content {
display: flex;
justify-content: space-between;
align-items: center;
color: inherit;
}
.ele-upload-list__item-content-action .el-link {
margin-right: 10px;
}
</style>
......@@ -73,12 +73,13 @@ function handleCurrentChange(val) {
</script>
<style scoped>
.pagination-container {
<style scoped lang="scss">
.pagination-container1 {
background: #fff;
padding: 32px 16px;
padding: 8px 16px;
.el-pagination{justify-content: end;}
}
.pagination-container.hidden {
.pagination-container1.hidden {
display: none;
}
</style>
......
......@@ -35,6 +35,7 @@ import RightToolbar from '@/components/RightToolbar'
import Editor from '@/components/Editor'
// 文件上传组件
import FileUpload from '@/components/FileUpload'
import FileImport from '@/components/FileImport'
// 图片上传组件
import ImageUpload from '@/components/ImageUpload'
import ImageUpload2 from '@/components/ImageUpload/index2'
......@@ -87,6 +88,7 @@ app.component('DictTag', DictTag)
app.component('PaginationPc', PaginationPc)
app.component('TreeSelect', TreeSelect)
app.component('FileUpload', FileUpload)
app.component('FileImport', FileImport)
app.component('ImageUpload', ImageUpload)
app.component('ImageUpload2', ImageUpload2)
app.component('ImagePreview', ImagePreview)
......
......@@ -401,6 +401,12 @@ export const constantRoutes = [
redirect: '/match/list',
children: [
{
path: 'pay',
component: () => import('@/viewsPc/match/pay'),
name: 'signPay',
meta: { title: '缴费清单' }
},
{
path: 'list',
component: () => import('@/viewsPc/match/index'),
name: 'matchList',
......@@ -447,6 +453,12 @@ export const constantRoutes = [
component: () => import('@/viewsPc/match/expenseDetails'),
name: 'expenseDetails',
meta: { title: '费用明细' }
},
{
path: 'list/:id/signPreview',
component: () => import('@/viewsPc/match/signPreview'),
name: 'signPreview',
meta: { title: '提交审核' }
}
]
},
......@@ -498,16 +510,22 @@ export const constantRoutes = [
meta: { title: '团队认证' }
},
{
path: 'myMember',
component: () => import('@/viewsPc/center/myMember'),
name: 'myMember',
meta: { title: '选手管理' }
},
{
path: 'myMatch',
component: () => import('@/viewsPc/center/myMatch'),
name: 'myMatch',
meta: { title: '我的赛事' }
meta: { title: '我的报名' }
},
{
path: 'myTrain',
component: () => import('@/viewsPc/center/myTrain'),
name: 'myTrain',
meta: { title: '我的培训' }
meta: { title: '我的预定' }
}
]
}
......
......@@ -14,6 +14,7 @@ const useUserStore = defineStore(
state: () => ({
token: getToken(),
user: null,
group: {},
name: '',
nickName: '',
avatar: '',
......@@ -91,6 +92,7 @@ const useUserStore = defineStore(
this.roles = ['ROLE_DEFAULT']
}
this.user = user
this.group = res.data.group
this.name = user.userName
this.nickName = user.nickName
this.deptType = user.dept.deptType
......
......@@ -144,7 +144,7 @@ service.interceptors.response.use(
'登录状态已过期,您可以继续留在该页面,或者重新登录',
'系统提示',
{
confirmButtonText: '重新登录',
confirmButtonText: '好的',
cancelButtonText: '取消',
type: 'warning'
}
......
<template>
<el-dialog v-model="show" :title="title" width="500px" class="pcloginpop"
append-to-body :close-on-click-modal="false">
<el-form ref="dialogRef" label-width="100px">
<el-form-item label="下载模板">
<el-link href="/file/sportsmanTemplate.xlsx" type="primary" target="_blank">人员模板</el-link>
</el-form-item>
<el-form-item label="上传模板" prop="discount">
<fileUpload ref="upload" name="excel" :action="action" :accept="accept" @uploadSuccess="uploadSuccess"/>
</el-form-item>
</el-form>
</el-dialog>
</template>
<script setup>
import { getCurrentInstance } from '@vue/runtime-core'
import { reactive, ref, watch } from 'vue'
import { toRefs } from '@vueuse/shared'
import * as match from '@/api/match/pc'
import { ElMessage, ElMessageBox } from 'element-plus'
const { proxy } = getCurrentInstance()
const emit = defineEmits(['submitForm'])
const action = ref('')
const accept = ref('.xlsx')
const title = ref('')
const show = ref(false)
function uploadSuccess(res) {
console.log(res)
cancel()
if (res.code == 500) {
ElMessageBox.alert(res.data, '提示', {
confirmButtonText: '好的'
})
} else {
proxy.$modal.msgSuccess(`${res.msg}`)
}
emit('uploadSuccess')
proxy.$refs['upload'].handleClear()
}
const open = (params) => {
show.value = true
title.value = params.title
action.value = `/systemj/personInfo/importPerson/${params.groupId}`
}
defineExpose({
open
})
function cancel() {
show.value = false
}
</script>
<style scoped>
:deep(.el-upload__tip) {
display: none
}
</style>
......@@ -2,8 +2,8 @@
<div class="app-container">
<div class="box">
<el-row :gutter="20">
<el-col :span="6">
<el-card>
<el-col :lg="5" :md="5" :xl="6" :sm="8" :xs="8">
<el-card class="mb20">
<div class="center-menu">
<ul v-if="user.utype=='2'">
<li
......@@ -31,10 +31,9 @@
</ul>
</div>
</el-card>
</el-col>
<el-col :span="18">
<router-view :user="user"/>
<el-col :lg="19" :md="19" :xl="18" :sm="16" :xs="16">
<router-view :user="user" class="rightPart"/>
</el-col>
</el-row>
</div>
......@@ -64,7 +63,7 @@ const menus = ref([
name: '修改密码',
routeName: 'myPassword',
picUrl1: '/img/nav_27.png',
picUrl2: '/img/nav_27.png',
picUrl2: '/img/nav_27_dwn.png',
isActive: false
},
{
......@@ -76,7 +75,7 @@ const menus = ref([
},
{
name: '选手管理',
routeName: 'myMatch',
routeName: 'myMember',
picUrl1: '/img/nav_31.png',
picUrl2: '/img/nav_31_dwn.png',
isActive: false
......@@ -115,7 +114,7 @@ const menusPersonal = ref([
name: '修改密码',
routeName: 'myPassword',
picUrl1: '/img/nav_27.png',
picUrl2: '/img/nav_27.png',
picUrl2: '/img/nav_27_dwn.png',
isActive: false
},
{
......@@ -165,14 +164,6 @@ const toInfo = (item) => {
</script>
<style scoped lang="scss">
.app-container {
background: #f5f7f9;
}
.grid-content {
background: #fff;
}
:deep(.el-tabs__nav-wrap) {
padding: 0 15px;
}
......@@ -197,4 +188,23 @@ li img {
background: linear-gradient(90deg, #8623FC, #453DEA);
border-radius: 20px;
}
@media (max-width: 500px) {
.pd20{padding: 8px;}
.el-card{box-shadow: none!important;
:deep(.el-card__body){padding: 0!important;}
}
.el-col{padding: 0!important;}
.center-menu{height: 100vh;padding: 20px 0;position: fixed;left: 0;
background: #F5F7F9;top: 80px;width: 100px;border-right: 1px solid #eee;
li{font-size: 13px;padding:8px 10px;border-radius: 0;
img{display: none}
&.active{background: #fff;
border-left: 2px solid var(--el-color-primary);
color: var(--el-color-primary);}
}
}
.rightPart{width: calc(100vw - 100px);left: 100px;position: fixed;
height: calc(100vh - 80px);overflow: auto;top: 80px;
}
}
</style>
......
<template>
<el-card :body-style="{'padding':'0'}">
<div class="indexTitle"><h3 class="leftboderTT">团队认证</h3></div>
<div class="pd20">
<el-form :model="form" label-width="160px">
<fieldset class="fieldset-form">
<legend>机构类型</legend>
<div class="pt30">
<el-form-item label="选择机构类型" required>
<el-radio-group v-model="form.type">
<el-radio-button label="0">普通院校</el-radio-button>
<el-radio-button label="1">专业舞蹈学校</el-radio-button>
<el-radio-button label="2">培训机构/俱乐部</el-radio-button>
<el-radio-button label="3">地方协会</el-radio-button>
<el-radio-button label="4">国家协会</el-radio-button>
</el-radio-group>
</el-form-item>
</div>
</fieldset>
<fieldset class="fieldset-form mt30">
<legend>机构基础信息 </legend>
<div class="pt30" style="max-width: 500px">
<el-form-item label="所属国家" required>
<el-select filterable v-model="form.countryId">
<el-option v-for="item in countryList" :key="item.id" :label="item.name" :value="item.id" />
</el-select>
</el-form-item>
<el-form-item label="详细地址" required prop="address">
<el-cascader v-if="form.countryId == 240"
v-model="form.regionId"
style="width: 100%;"
:options="regionsList"
:props="{ label:'text' }"
/>
<el-input type="textarea" v-model="form.address" class="mt10" placeholder="请输入详细地址"/>
</el-form-item>
<el-form-item label="机构名称" required prop="name">
<el-input type="text" v-model="form.name" placeholder="请输入内容"/>
</el-form-item>
<el-form-item label="联系人姓名" required prop="contactPerson">
<el-input type="text" v-model="form.contactPerson" placeholder="请输入内容"/>
</el-form-item>
<el-form-item label="联系人电话" required prop="contactTelno">
<el-input v-model="form.contactTelno" type="phone" placeholder="请输入内容"/>
</el-form-item>
<el-form-item label="联系人邮箱" required prop="contactEmail">
<el-input v-model="form.contactEmail" type="email" placeholder="请输入内容"/>
</el-form-item>
</div>
</fieldset>
<fieldset class="fieldset-form mt30">
<legend>机构认证信息 </legend>
<div class="pt30" style="max-width: 500px">
<el-form-item label="机构代码" required prop="orgCode">
<el-input type="text" v-model="form.orgCode" placeholder="请输入内容"/>
</el-form-item>
<el-form-item label="机构证件" required prop="orgCert">
<file-upload v-model="form.orgCert"/>
</el-form-item>
</div>
</fieldset>
<fieldset class="fieldset-form mt30">
<legend>机构法人信息 </legend>
<div class="pt30" style="max-width: 500px">
<el-form-item label="法人姓名" required prop="orgCode">
<el-input type="text" v-model="form.orgCode" placeholder="请输入内容"/>
</el-form-item>
<el-form-item label="法定代表人身份文件" required prop="orgCert">
<file-upload v-model="form.orgCert"/>
</el-form-item>
</div>
</fieldset>
</el-form>
<div class="text-center mt30">
<el-button type="primary" class="btn-lineG w200px" round>提交审核</el-button>
</div>
</div>
</el-card>
</template>
<script setup>
import {commitAudit, getGroupInfo} from "@/apiPc/match";
import {onMounted} from "@vue/runtime-core";
import {ref} from 'vue'
import {useRouter} from 'vue-router'
import {ElMessage, ElMessageBox} from 'element-plus'
import FileUpload from "@/components/FileUpload";
import * as match from "@/apiPc/match";
const form = ref({})
const regionsList = ref([])
function submit() {
commitAudit().then(res => {
})
}
onMounted(() => {
getRegionsList()
getData()
})
function getRegionsList() {
match.regionsList().then(res => {
regionsList.value = res.data
})
}
function getData() {
getGroupInfo().then(res => {
form.value = res.data
})
}
</script>
<style scoped lang="scss">
.indexTitle{margin: 20px 0 12px;padding: 0 20px 15px;border-bottom: 1px solid #e5e5e5;
h3{
.indexTitle {
margin: 20px 0 12px;
padding: 0 20px 15px;
border-bottom: 1px solid #e5e5e5;
h3 {
font-size: 16px;
color:var(--el-color-primary);
color: var(--el-color-primary);
}
}
fieldset {
:deep(.el-radio-button.el-radio-button--default) {
margin-right: 8px;
border-radius: 5px;
.el-radio-button__inner {
background: rgba(69, 61, 234, 0.1);
border-radius: 5px;
color: #000000;
}
&.is-active {
background: linear-gradient(90deg, #8623FC, #453DEA);
.el-radio-button__inner {
color: #fff;
}
}
}
}
......
<template>
<el-card>
<div class="grid-content">
<el-tabs v-model="activeName">
<el-tab-pane label="报项" name="first">
<!-- <el-tabs v-model="activeName">-->
<!-- <el-tab-pane label="报项" name="first">-->
<div class="pad20">
<el-form :model="query" :inline="true">
<el-form-item label="赛事名称">
......@@ -67,137 +67,137 @@
@pagination="getList"
/>
</div>
</el-tab-pane>
<el-tab-pane label="订单" name="two">
<div class="pad20">
<el-form :model="query2" :inline="true">
<el-form-item label="订单状态">
<el-select v-model="query2.payStatus" @change="getBillList">
<el-option value="" label="全部" />
<el-option value="0" label="待支付" />
<el-option value="3" label="已完成" />
<el-option value="5" label="已退回" />
</el-select>
</el-form-item>
<el-form-item label="支付方式">
<el-select v-model="query2.payTypeParam" @change="getBillList">
<el-option value="" label="全部">全部</el-option>
<el-option value="0" label="线上支付">线上支付</el-option>
<el-option value="1" label="线下支付">线下支付</el-option>
<el-option value="2" label="会员卡支付">会员卡支付</el-option>
<el-option value="3" label="微信支付">微信支付</el-option>
</el-select>
</el-form-item>
<el-form-item label="订单号">
<el-input v-model="query2.code" />
</el-form-item>
<el-form-item label="订单名称">
<el-input v-model="query2.cptName" style="width: 214px;" @change="getBillList" />
</el-form-item>
<el-form-item label="付款时间">
<el-date-picker
v-model="payTimeArr"
format="YYYY-MM-DD" type="daterange"
value-format="YYYY-MM-DD" range-separator="至"
start-placeholder="开始时间"
end-placeholder="结束时间"
@change="getBillList"
/>
</el-form-item>
<el-form-item label="下单时间">
<el-date-picker
v-model="commitTimeArr"
format="YYYY-MM-DD" type="daterange"
value-format="YYYY-MM-DD" range-separator="至"
start-placeholder="开始时间"
end-placeholder="结束时间"
@change="getBillList"
/>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="getBillList">查询</el-button>
<el-button type="info" @click="reset(query2)">重置</el-button>
</el-form-item>
</el-form>
<el-table v-if="billList.length>0" :data="billList" style="width: 100%">
<!-- <el-table-column type="selection" width="80" />-->
<el-table-column prop="id" label="订单编号" min-width="200" />
<el-table-column prop="cptName" label="订单名称" min-width="200" />
<el-table-column prop="commitTime" label="下单时间" min-width="180" />
<el-table-column prop="payTime" label="付款时间" min-width="180" />
<el-table-column label="支付金额" min-width="120" align="center">
<template #default="scope">
<span v-if="scope.row.needPay=='0'" class="green">免费订单</span>
<span v-else>¥{{ scope.row.totalAmount }}</span>
</template>
</el-table-column>
<!-- <el-table-column label="已付金额" min-width="120" align="center">-->
<!-- <template #default="scope">-->
<!-- <span v-if="scope.row.needPay=='0'" class="green">免费订单</span>-->
<!-- <span v-else-if="scope.row.totalPayAmount" class="orange">¥{{ scope.row.totalPayAmount }}</span>-->
<!-- <span v-else>&#45;&#45;</span>-->
<!-- </template>-->
<!-- </el-table-column>-->
<el-table-column label="付款方式" min-width="120" align="center">
<template #default="scope">
<span v-if="scope.row.payType=='0'">会员卡支付</span>
<span v-else-if="scope.row.payType=='1'">微信支付</span>
<span v-else-if="scope.row.payType=='2'">线下支付</span>
</template>
</el-table-column>
<el-table-column prop="name" label="支付状态" min-width="120" align="center">
<template #default="scope">
<span v-if="scope.row.needPay=='0'" class="green">免费订单</span>
<div v-else>
<span v-if="scope.row.payStatus=='0'">待支付</span>
<span v-if="scope.row.payStatus=='1'">待核销</span>
<span v-if="scope.row.payStatus=='2'">付款中</span>
<span v-if="scope.row.payStatus=='3'" class="green">已完成</span>
<span v-if="scope.row.payStatus=='4'">退款中</span>
<span v-if="scope.row.payStatus=='5'" class="text-danger">已退回</span>
<span v-if="scope.row.payStatus=='6'">退款核销中</span>
</div>
</template>
</el-table-column>
<el-table-column prop="name" label="审核状态" min-width="120" align="center">
<template #default="scope">
<!-- 待核销,待审核,审核拒绝,审核通过,已取消-->
<span v-if="scope.row.auditStatus=='1'" class="text-warning">审核中</span>
<span v-if="scope.row.auditStatus=='2'" class="green">审核通过</span>
<span v-if="scope.row.auditStatus=='3'" class="text-danger">审核拒绝</span>
<span v-if="scope.row.auditStatus=='4'">已取消</span>
</template>
</el-table-column>
<el-table-column label="操作" align="center" fixed="right" class-name="small-padding" width="150">
<template #default="scope">
<el-button type="text" @click="billDetail(scope.row)">详情</el-button>
<el-button
v-if="scope.row.payType!='2'&&scope.row.payStatus=='0'&&scope.row.auditStatus=='0'" type="text"
@click="goPay(scope.row)"
>支付
</el-button>
<el-button
v-if="scope.row.payStatus=='0'&&scope.row.auditStatus=='0'&&scope.row.payType!='2'" type="text"
@click="cancelBill(scope.row)"
>取消
</el-button>
</template>
</el-table-column>
</el-table>
<el-empty v-if="billList.length==0" description="暂无数据" />
<pagination
v-show="total > 0"
v-model:page="query2.pageNum"
v-model:limit="query2.pageSize"
:total="total2"
@pagination="getBillList"
/>
</div>
</el-tab-pane>
</el-tabs>
<!-- </el-tab-pane>-->
<!-- <el-tab-pane label="订单" name="two">-->
<!-- <div class="pad20">-->
<!-- <el-form :model="query2" :inline="true">-->
<!-- <el-form-item label="订单状态">-->
<!-- <el-select v-model="query2.payStatus" @change="getBillList">-->
<!-- <el-option value="" label="全部" />-->
<!-- <el-option value="0" label="待支付" />-->
<!-- <el-option value="3" label="已完成" />-->
<!-- <el-option value="5" label="已退回" />-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<!-- <el-form-item label="支付方式">-->
<!-- <el-select v-model="query2.payTypeParam" @change="getBillList">-->
<!-- <el-option value="" label="全部">全部</el-option>-->
<!-- <el-option value="0" label="线上支付">线上支付</el-option>-->
<!-- <el-option value="1" label="线下支付">线下支付</el-option>-->
<!-- <el-option value="2" label="会员卡支付">会员卡支付</el-option>-->
<!-- <el-option value="3" label="微信支付">微信支付</el-option>-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<!-- <el-form-item label="订单号">-->
<!-- <el-input v-model="query2.code" />-->
<!-- </el-form-item>-->
<!-- <el-form-item label="订单名称">-->
<!-- <el-input v-model="query2.cptName" style="width: 214px;" @change="getBillList" />-->
<!-- </el-form-item>-->
<!-- <el-form-item label="付款时间">-->
<!-- <el-date-picker-->
<!-- v-model="payTimeArr"-->
<!-- format="YYYY-MM-DD" type="daterange"-->
<!-- value-format="YYYY-MM-DD" range-separator="至"-->
<!-- start-placeholder="开始时间"-->
<!-- end-placeholder="结束时间"-->
<!-- @change="getBillList"-->
<!-- />-->
<!-- </el-form-item>-->
<!-- <el-form-item label="下单时间">-->
<!-- <el-date-picker-->
<!-- v-model="commitTimeArr"-->
<!-- format="YYYY-MM-DD" type="daterange"-->
<!-- value-format="YYYY-MM-DD" range-separator="至"-->
<!-- start-placeholder="开始时间"-->
<!-- end-placeholder="结束时间"-->
<!-- @change="getBillList"-->
<!-- />-->
<!-- </el-form-item>-->
<!-- <el-form-item>-->
<!-- <el-button type="primary" @click="getBillList">查询</el-button>-->
<!-- <el-button type="info" @click="reset(query2)">重置</el-button>-->
<!-- </el-form-item>-->
<!-- </el-form>-->
<!-- <el-table v-if="billList.length>0" :data="billList" style="width: 100%">-->
<!-- &lt;!&ndash; <el-table-column type="selection" width="80" />&ndash;&gt;-->
<!-- <el-table-column prop="id" label="订单编号" min-width="200" />-->
<!-- <el-table-column prop="cptName" label="订单名称" min-width="200" />-->
<!-- <el-table-column prop="commitTime" label="下单时间" min-width="180" />-->
<!-- <el-table-column prop="payTime" label="付款时间" min-width="180" />-->
<!-- <el-table-column label="支付金额" min-width="120" align="center">-->
<!-- <template #default="scope">-->
<!-- <span v-if="scope.row.needPay=='0'" class="green">免费订单</span>-->
<!-- <span v-else>¥{{ scope.row.totalAmount }}</span>-->
<!-- </template>-->
<!-- </el-table-column>-->
<!-- &lt;!&ndash; <el-table-column label="已付金额" min-width="120" align="center">&ndash;&gt;-->
<!-- &lt;!&ndash; <template #default="scope">&ndash;&gt;-->
<!-- &lt;!&ndash; <span v-if="scope.row.needPay=='0'" class="green">免费订单</span>&ndash;&gt;-->
<!-- &lt;!&ndash; <span v-else-if="scope.row.totalPayAmount" class="orange">¥{{ scope.row.totalPayAmount }}</span>&ndash;&gt;-->
<!-- &lt;!&ndash; <span v-else>&#45;&#45;</span>&ndash;&gt;-->
<!-- &lt;!&ndash; </template>&ndash;&gt;-->
<!-- &lt;!&ndash; </el-table-column>&ndash;&gt;-->
<!-- <el-table-column label="付款方式" min-width="120" align="center">-->
<!-- <template #default="scope">-->
<!-- <span v-if="scope.row.payType=='0'">会员卡支付</span>-->
<!-- <span v-else-if="scope.row.payType=='1'">微信支付</span>-->
<!-- <span v-else-if="scope.row.payType=='2'">线下支付</span>-->
<!-- </template>-->
<!-- </el-table-column>-->
<!-- <el-table-column prop="name" label="支付状态" min-width="120" align="center">-->
<!-- <template #default="scope">-->
<!-- <span v-if="scope.row.needPay=='0'" class="green">免费订单</span>-->
<!-- <div v-else>-->
<!-- <span v-if="scope.row.payStatus=='0'">待支付</span>-->
<!-- <span v-if="scope.row.payStatus=='1'">待核销</span>-->
<!-- <span v-if="scope.row.payStatus=='2'">付款中</span>-->
<!-- <span v-if="scope.row.payStatus=='3'" class="green">已完成</span>-->
<!-- <span v-if="scope.row.payStatus=='4'">退款中</span>-->
<!-- <span v-if="scope.row.payStatus=='5'" class="text-danger">已退回</span>-->
<!-- <span v-if="scope.row.payStatus=='6'">退款核销中</span>-->
<!-- </div>-->
<!-- </template>-->
<!-- </el-table-column>-->
<!-- <el-table-column prop="name" label="审核状态" min-width="120" align="center">-->
<!-- <template #default="scope">-->
<!-- &lt;!&ndash; 待核销,待审核,审核拒绝,审核通过,已取消&ndash;&gt;-->
<!-- <span v-if="scope.row.auditStatus=='1'" class="text-warning">审核中</span>-->
<!-- <span v-if="scope.row.auditStatus=='2'" class="green">审核通过</span>-->
<!-- <span v-if="scope.row.auditStatus=='3'" class="text-danger">审核拒绝</span>-->
<!-- <span v-if="scope.row.auditStatus=='4'">已取消</span>-->
<!-- </template>-->
<!-- </el-table-column>-->
<!-- <el-table-column label="操作" align="center" fixed="right" class-name="small-padding" width="150">-->
<!-- <template #default="scope">-->
<!-- <el-button type="text" @click="billDetail(scope.row)">详情</el-button>-->
<!-- <el-button-->
<!-- v-if="scope.row.payType!='2'&&scope.row.payStatus=='0'&&scope.row.auditStatus=='0'" type="text"-->
<!-- @click="goPay(scope.row)"-->
<!-- >支付-->
<!-- </el-button>-->
<!-- <el-button-->
<!-- v-if="scope.row.payStatus=='0'&&scope.row.auditStatus=='0'&&scope.row.payType!='2'" type="text"-->
<!-- @click="cancelBill(scope.row)"-->
<!-- >取消-->
<!-- </el-button>-->
<!-- </template>-->
<!-- </el-table-column>-->
<!-- </el-table>-->
<!-- <el-empty v-if="billList.length==0" description="暂无数据" />-->
<!-- <pagination-->
<!-- v-show="total > 0"-->
<!-- v-model:page="query2.pageNum"-->
<!-- v-model:limit="query2.pageSize"-->
<!-- :total="total2"-->
<!-- @pagination="getBillList"-->
<!-- />-->
<!-- </div>-->
<!-- </el-tab-pane>-->
<!-- </el-tabs>-->
<!-- 报项详情-->
<dialogModifySign :props="dialogModifySignProps" />
......
<template>
<el-card>
<div class="funcBtns">
<el-button type="primary" @click="addMember">添加选手</el-button>
<el-button type="primary" plain @click="importSportman">导入选手</el-button>
<el-button type="primary" plain>
<a href="/file/sportsmanTemplate.xlsx" target="_blank">下载模板</a>
</el-button>
</div>
<div class="from-Card">
<el-form :inline="true" :model="query" class="mt20" label-width="60" size="small">
<el-form-item label="姓名">
<el-input v-model="query.realName" style="width: 120px;" clearable/>
</el-form-item>
<el-form-item label="短名">
<el-input v-model="query.shortName" style="width: 120px;" clearable/>
</el-form-item>
<el-form-item label="手机号码">
<el-input v-model="query.phone" style="width: 120px;" clearable/>
</el-form-item>
<el-form-item label="邮箱">
<el-input v-model="query.email" style="width: 120px;" clearable/>
</el-form-item>
<el-form-item label="证件类型">
<el-input v-model="query.idcType" style="width: 120px;" clearable/>
</el-form-item>
<el-form-item label="证件号">
<el-input v-model="query.idcode" style="width: 120px;" clearable/>
</el-form-item>
<el-form-item label="角色">
<el-input v-model="query.label" style="width: 120px;" clearable/>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="getList">查询</el-button>
</el-form-item>
</el-form>
</div>
<!-- 人员表格-->
<person-table :table-data="tableData" @edit="editCoach" @delete="delperson"/>
<el-table :data="tableData" class="mt20">
<el-table-column type="index" label="序号" width="80" align="center"/>
<el-table-column label="所属国家" prop="countryName"/>
<el-table-column label="姓氏" prop="xing"/>
<el-table-column label="名" prop="ming"/>
<el-table-column label="短名" prop="shortName"/>
<el-table-column label="性别" prop="sexStr"/>
<el-table-column label="年龄" prop="age"/>
<el-table-column label="出生日期" prop="birth" width="100"/>
<el-table-column label="手机号码" prop="phone" width="120"/>
<el-table-column label="邮箱" prop="email" width="150"/>
<el-table-column label="证件类型" prop="idcTypeStr"/>
<el-table-column label="证件号码" prop="idcCode" width="200"/>
<el-table-column label="会员角色">
<template #default="scope">
<span v-for="item in scope.row.label?.split(',')" :key="item.id">
<el-tag type="primary" size="mini" v-if="item==='0'" effect="dark" class="ml10">运动员</el-tag>
<el-tag type="info" size="mini" v-if="item==='1'" effect="dark" class="ml10">教练</el-tag>
<el-tag type="info" size="mini" v-if="item==='2'" effect="dark" class="ml10">领队</el-tag>
<el-tag type="info" size="mini" v-if="item==='3'" effect="dark" class="ml10">队医</el-tag>
<el-tag type="info" size="mini" v-if="item==='4'" effect="dark" class="ml10">翻译</el-tag>
<el-tag type="info" size="mini" v-if="item==='5'" effect="dark" class="ml10">官员</el-tag>
<el-tag type="info" size="mini" v-if="item==='6'" effect="dark" class="ml10">其他</el-tag>
</span>
</template>
</el-table-column>
<el-table-column label="详细地址" prop="address"/>
<el-table-column label="操作" fixed="right" width="160" header-align="center" align="center">
<template #default="scope">
<a class="text-primary pd10" @click="editCoach(scope.row)">编辑</a>
<a class="text-primary pd10" @click="delperson(scope.row)">删除</a>
</template>
</el-table-column>
</el-table>
<paginationPc
v-show="total>0"
v-model:page="query.pageNum"
v-model:limit="query.pageSize"
:total="total"
@pagination="getList"
/>
</el-card>
<!-- 添加人员-->
<addCoach ref="dialogAddCoach" @submitForm="getList"/>
<Import ref="dialogImportProps"/>
</template>
<script setup>
import addCoach from '../match/components/addCoach'
import personTable from '../match/components/personTable'
import Import from '../match/components/import'
import {ref, watch} from 'vue'
import {useRouter} from 'vue-router'
import {getCurrentInstance, onMounted} from '@vue/runtime-core'
const router = useRouter()
const {proxy} = getCurrentInstance()
import * as match from '@/apiPc/match'
import {ElMessage, ElMessageBox} from 'element-plus'
import {getGroupPersonList} from "@/apiPc/match";
import PersonTable from "@/viewsPc/match/components/personTable";
const tableData = ref([])
const query = ref({
pageNum: 1, pageSize: 10
})
const total = ref(0)
const groupId = ref('1759813142128967681')
onMounted(() => {
getList(groupId.value)
})
function addMember() {
const params = {
title: '添加人员',
id: 0,
groupId: groupId.value
}
proxy.$refs['dialogAddCoach'].open(params)
}
function importSportman() {
const params = {
title: '批量导入选手',
groupId: groupId.value
}
proxy.$refs['dialogImportProps'].open(params)
}
function getList() {
getGroupPersonList(query.value, groupId.value).then(res => {
tableData.value = res.rows
total.value = res.total
})
}
function editCoach(row) {
const params = {
id: row.id,
groupId: row.groupId
}
proxy.$refs['dialogAddCoach'].open(params)
}
function delperson(p) {
//删除团队下的人
ElMessageBox.confirm(`确定删除${p.realName}吗?`, '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
match.delPerson(p.id).then(res => {
ElMessage.success('操作成功')
getList(groupId.value)
})
})
}
</script>
<style scoped lang="scss">
.el-form--inline .el-form-item {
width: auto;
}
</style>
<template>
<div class="app-container">
<div class="">
<div class="box ph-30">
<div class="panel">
<div class="panel-header">
<h3 class="panel-title">选择教练/领队/其他</h3>
</div>
<div class="panel-body">
<span class="tip">*至少选择一个教练或领队</span>
<div class="text-right">
<el-button type="success" @click="addCoach">新建教练</el-button>
</div>
<el-card>
<el-steps :active="activeStep" align-center>
<el-step title="团队信息"/>
<el-step title="教练/领队/其他"/>
<el-step title="选手报名"/>
<el-step title="提交审核"/>
</el-steps>
</el-card>
<el-form
ref="ruleFormRef" label-width="120px" label-position="top" class="chooseForm" :model="form"
:rules="rules"
>
<el-form-item label="教练" prop="coachs">
<el-row class="mt20" :gutter="20">
<el-col :lg="12">
<el-card>
<template #header>
<div class="card-header">
<img src="@/assets/sign/tag01.png"/>
教练<span class="tip">(教练/领队,至少选择一项)</span>
</div>
</template>
<div class="chooseForm">
<el-checkbox-group v-model="form.coachs" @change="changecoachs">
<div class="addBttn" @click="addCoach(0)">+</div>
<el-checkbox v-for="c in coachList" :label="c.id">
<el-avatar :size="60" :src="c.picUrl" />
<p class="name">{{ c.realName }}
<el-avatar fit="cover" :size="60" :src="fillImgUrl(c.picUrl)"/>
<p class="name">{{ c.shortName }}
<el-icon @click.stop="editPerson(c.id)">
<Edit />
<Edit/>
</el-icon>
</p>
</el-checkbox>
</el-checkbox-group>
</el-form-item>
<el-form-item label="领队" prop="leader">
</div>
</el-card>
</el-col>
<el-col :lg="12">
<el-card>
<template #header>
<div class="card-header">
<img src="@/assets/sign/tag02.png"/>
领队<span class="tip">(教练/领队,至少选择一项)</span>
</div>
</template>
<div class="chooseForm">
<el-checkbox-group v-model="form.leader">
<div class="addBttn" @click="addCoach(0)">+</div>
<el-checkbox v-for="c in leaderList" :label="c.id">
<el-avatar :size="60" :src="c.picUrl" />
<p class="name">{{ c.realName }}
<el-avatar fit="cover" :size="60" :src="fillImgUrl(c.picUrl)"/>
<p class="name">{{ c.shortName }}
<el-icon @click.stop="editPerson(c.id)">
<Edit />
<Edit/>
</el-icon>
</p>
</el-checkbox>
</el-checkbox-group>
</el-form-item>
<el-form-item label="队医" prop="doctors">
</div>
</el-card>
</el-col>
<el-col :lg="12">
<el-card class="mt20">
<template #header>
<div class="card-header">
<img src="@/assets/sign/tag03.png"/>
队医
</div>
</template>
<div class="chooseForm">
<el-checkbox-group v-model="form.doctor">
<div class="addBttn" @click="addCoach(0)">+</div>
<el-checkbox v-for="c in doctorList" :label="c.id">
<el-avatar :size="60" :src="c.picUrl" />
<p class="name">{{ c.realName }}
<el-avatar fit="cover" :size="60" :src="fillImgUrl(c.picUrl)"/>
<p class="name">{{ c.shortName }}
<el-icon @click.stop="editPerson(c.id)">
<Edit />
<Edit/>
</el-icon>
</p>
</el-checkbox>
</el-checkbox-group>
</el-form-item>
<el-form-item label="翻译" prop="translator">
</div>
</el-card>
</el-col>
<el-col :lg="12">
<el-card class="mt20">
<template #header>
<div class="card-header">
<img src="@/assets/sign/tag04.png"/>
翻译
</div>
</template>
<div class="chooseForm">
<el-checkbox-group v-model="form.translator">
<div class="addBttn" @click="addCoach(0)">+</div>
<el-checkbox v-for="c in translatorList" :label="c.id">
<el-avatar :size="60" :src="c.picUrl" />
<p class="name">{{ c.realName }}
<el-avatar fit="cover" :size="60" :src="fillImgUrl(c.picUrl)"/>
<p class="name">{{ c.shortName }}
<el-icon @click.stop="editPerson(c.id)">
<Edit />
<Edit/>
</el-icon>
</p>
</el-checkbox>
</el-checkbox-group>
</el-form-item>
<el-form-item label="官员" prop="official">
</div>
</el-card>
</el-col>
<el-col :lg="12">
<el-card class="mt20">
<template #header>
<div class="card-header">
<img src="@/assets/sign/tag05.png"/>
官员
</div>
</template>
<div class="chooseForm">
<el-checkbox-group v-model="form.official">
<div class="addBttn" @click="addCoach(0)">+</div>
<el-checkbox v-for="c in officialList" :label="c.id">
<el-avatar :size="60" :src="c.picUrl" />
<p class="name">{{ c.realName }}
<el-avatar fit="cover" :size="60" :src="fillImgUrl(c.picUrl)"/>
<p class="name">{{ c.shortName }}
<el-icon @click.stop="editPerson(c.id)">
<Edit />
<Edit/>
</el-icon>
</p>
</el-checkbox>
</el-checkbox-group>
</el-form-item>
<el-form-item label="其他" prop="other">
</div>
</el-card>
</el-col>
<el-col :lg="12">
<el-card class="mt20">
<template #header>
<div class="card-header">
<img src="@/assets/sign/tag06.png"/>
其他
</div>
</template>
<div class="chooseForm">
<el-checkbox-group v-model="form.other">
<div class="addBttn" @click="addCoach(0)">+</div>
<el-checkbox v-for="c in otherList" :label="c.id">
<el-avatar :size="60" :src="c.picUrl" />
<p class="name">{{ c.realName }}
<el-avatar fit="cover" :size="60" :src="fillImgUrl(c.picUrl)"/>
<p class="name">{{ c.shortName }}
<el-icon @click.stop="editPerson(c.id)">
<Edit />
<Edit/>
</el-icon>
</p>
</el-checkbox>
</el-checkbox-group>
</el-form-item>
</el-form>
</div>
<div class="panel-footer text-center">
<el-button type="success" plain round @click="goPrev()">上一步</el-button>
<el-button v-if="signType!='2'" type="success" round @click="goNext()">下一步</el-button>
<el-button v-else type="success" round @click="chooseDone()">确定</el-button>
</div>
</el-card>
</el-col>
</el-row>
<el-card class="mt20">
<div class="text-center">
<el-button type="primary" class="w200px" plain round @click="goPrev()">上一步</el-button>
<el-button type="primary" class="btn-lineG w200px" round @click="goNext()">下一步</el-button>
</div>
</el-card>
</div>
<dialogAddCoach ref="dialogAddCoachRef" @submitForm="getList" />
<dialogAddCoach ref="dialogAddCoachRef" @submitForm="getList"/>
</div>
</template>
<script setup>
import { ref, reactive } from 'vue'
import { getCurrentInstance, onMounted } from '@vue/runtime-core'
import {ref, reactive} from 'vue'
import {getCurrentInstance, onMounted} from '@vue/runtime-core'
import * as match from '@/apiPc/match'
import dialogAddCoach from './components/addCoach'
const { proxy } = getCurrentInstance()
const {proxy} = getCurrentInstance()
const router = useRouter()
const route = useRoute()
import { ElMessage } from 'element-plus'
import { useRoute, useRouter } from 'vue-router'
import {ElMessage} from 'element-plus'
import {useRoute, useRouter} from 'vue-router'
const data = reactive({
form: {
coachs: [],
......@@ -129,12 +192,21 @@ const data = reactive({
hasChooseObj: {},
groupId: '0',
signType: '',
rules: {
// coachs: { required: true, message: '至少选择一个', trigger: 'change' },
// leader: { required: true, message: '至少选择一个', trigger: 'change' }
}
activeStep: 1
})
const { form, coachList, leaderList, otherList, doctorList, translatorList, officialList, rules, signType, groupId, hasChooseObj } = toRefs(data)
const {
form,
coachList,
leaderList,
otherList,
doctorList,
translatorList,
officialList,
rules,
signType,
groupId,
hasChooseObj,activeStep
} = toRefs(data)
let matchId = ''
onMounted(() => {
matchId = route.query.matchId
......@@ -142,6 +214,7 @@ onMounted(() => {
signType.value = route.query.signType || ''
getList()
})
function getList() {
if (signType.value == '0') {
geren()
......@@ -149,11 +222,14 @@ function getList() {
tuandui()
}
}
function changecoachs(e) {
console.log(e)
}
// 获取报名时是否已选过
let hasChooseId
function tuandui() {
Promise.all([
match.getMyGroupForCpt(groupId.value, matchId),
......@@ -186,6 +262,7 @@ function tuandui() {
}
})
}
function geren() {
Promise.all([
match.getMyPersonInfoWithcptId(matchId),
......@@ -210,10 +287,12 @@ function geren() {
}
})
}
function chooseDone() {
// 返回团队报名
router.go(-1)
}
function goNext() {
console.log(form.value)
if ((form.value.coachs.length < 1) && (form.value.leader.length < 1)) {
......@@ -262,9 +341,11 @@ function goNext() {
console.log(form.value)
}
function goPrev() {
router.back()
}
function editPerson(id) {
proxy.$refs['dialogAddCoachRef'].open({
title: '编辑人员',
......@@ -272,6 +353,7 @@ function editPerson(id) {
groupId: groupId.value
})
}
function addCoach() {
proxy.$refs['dialogAddCoachRef'].open({
title: '新建人员',
......@@ -282,15 +364,45 @@ function addCoach() {
</script>
<style scoped lang="scss">
.app-container{ padding: 0;background: #F5F7F9;}
.panel-footer .el-button--success {
padding: 0 40px;
.addBttn {margin-right: 20px;
width: 60px;
color: #7B7F83;
font-size: 20px;
height: 60px;
display: flex;
align-items: center;
justify-content: center;
background: #FFFFFF;
border: 1px dashed #95A1A6;
border-radius: 50%;
&:hover {
cursor: pointer;
color: var(--el-color-primary);
border-color: var(--el-color-primary);
}
.chooseForm{
}
.card-header {
display: flex;
align-items: center;color: var(--el-color-primary);
img {
margin-right: 8px;
flex: 0 0 auto;
}
}
.panel-footer .el-button--success {
padding: 0 40px;
}
.chooseForm{
:deep(.el-form-item__content){background: rgba(245, 247, 249, 0.38);
padding: 20px 40px 10px;}
.el-checkbox{height: auto;}
:deep(.el-checkbox__input){position: absolute;right: 0;top: 0;}
.name{text-align: center;}
}
}
:deep(.el-avatar)>img{width: 100%;}
</style>
......
<template>
<div class="app-container">
<div>
<div class="box ph-30">
<div class="panel">
<div class="panel-header">
<h3 class="panel-title">选择运动员</h3>
<el-card class="mb20">
<el-steps :active="activeStep" align-center>
<el-step title="团队信息"/>
<el-step title="教练/领队/其他"/>
<el-step title="选手报名"/>
<el-step title="提交审核"/>
</el-steps>
</el-card>
<el-card :body-style="{'padding-top': '0'}">
<el-row class="mt20" :gutter="20">
<el-col :lg="8">
<div class="panel border">
<div class="panel-header ">
<h3 class="panel-title">选择参赛运动员清单</h3>
<a class="fr" @click="emptyChoosed">清空</a>
</div>
<div class="panel-body">
<div class="text-right mb20">
<el-button type="success" @click="chooseSportman">选择参赛运动员</el-button>
<el-button type="success" @click="importSportman">批量导入人员</el-button>
<el-button type="success" @click="addCoach">新增运动员</el-button>
</div>
<div class="chooseForm">
<el-checkbox-group v-model="choosedchoosed" @change="changechoosed">
<div class="addBttn" @click="chooseSportman">+</div>
<el-checkbox v-for="c in choosedList" :label="c.id">
<el-avatar fit="cover" v-if="c.picUrl" :size="60" :src="fillImgUrl(c.picUrl)"/>
<el-avatar fit="cover" v-else-if="c.sex == 0" :size="60" src="@/assets/img/head1.png"/>
<el-avatar fit="cover" v-else-if="c.sex == 1" :size="60" src="@/assets/img/head0.png"/>
<el-tabs
v-if="signType=='2'"
v-model="activeTeam"
type="card"
class="demo-tabs"
@tab-click="teamClick"
>
<el-tab-pane v-for="t in teamList" :key="t.id" :label="t.name" :name="t.id" />
</el-tabs>
<!-- 已选运动员列表-->
<div v-if="choosedList.length > 0" class="hasChoose">
<el-checkbox-group v-model="choosedchoosed" style="display: flex;flex-wrap: wrap;">
<div v-for="p in choosedList" class="choseItem">
<a class="poClose" @click.stop="delthischoosed(p)">
<el-icon :size="20" color="#999"><CircleClose /></el-icon>
</a>
<el-checkbox border :label="p.id" @click="signForThisMan(p)">
{{ p.realName }}
<span v-if="p.sex=='1'">(男)</span>
<span v-if="p.sex=='0'">(女)</span>
<p class="name">{{ c.shortName }}
<el-icon @click.stop="editPerson(c.id)">
<Edit/>
</el-icon>
<!-- <el-icon @click.stop="delthischoosed(c)">-->
<!-- <Delete/>-->
<!-- </el-icon>-->
</p>
</el-checkbox>
</el-checkbox-group>
</div>
</div>
</div>
</el-col>
<el-col :lg="8">
<div class="panel border">
<div class="panel-header ">
<h3 class="panel-title">选择一个参赛组合</h3>
</div>
<div class="panel-body">
<div class="chooseForm">
<el-checkbox-group v-model="choosedchoosed" @change="changechoosed">
<!-- v-show="choosedchoosed.indexOf(c.id) !== -1"-->
<el-checkbox v-for="c in choosed2List" :label="c.id" checked>
<el-avatar fit="cover" v-if="c.picUrl" :size="60" :src="fillImgUrl(c.picUrl)"/>
<el-avatar fit="cover" v-else-if="c.sex == 0" :size="60" src="@/assets/img/head1.png"/>
<el-avatar fit="cover" v-else-if="c.sex == 1" :size="60" src="@/assets/img/head0.png"/>
<p class="name">{{ c.shortName }}
<el-icon @click.stop="editPerson(c.id)">
<Edit/>
</el-icon>
</p>
</el-checkbox>
</el-checkbox-group>
<el-button size="small" type="warning" plain @click="delchoosedchoosed">批量删除</el-button>
</div>
<ul class="mb20 namesUl">
<li v-show="names.coachList?.length>0"><label>教练:</label><span v-for="c in names.coachList">{{ c.realName }}</span> </li>
<li v-show="names.leaderList?.length>0"><label>领队:</label><span v-for="c in names.leaderList">{{ c.realName }}</span></li>
<li v-show="names.teamDoctorList?.length>0"><label>队医:</label><span v-for="c in names.teamDoctorList">{{ c.realName }}</span></li>
<li v-show="names.translatorList?.length>0"><label>翻译:</label><span v-for="c in names.translatorList">{{ c.realName }}</span></li>
<li v-show="names.officialList?.length>0"><label>官员:</label><span v-for="c in names.officialList">{{ c.realName }}</span></li>
<li v-show="names.otherList?.length>0"><label>其他:</label><span v-for="c in names.otherList">{{ c.realName }}</span></li>
</ul>
<el-table :data="signInfoTable" style="width: 100%">
</div>
</div>
</el-col>
<el-col :lg="8">
<div class="panel border">
<div class="panel-header ">
<h3 class="panel-title">可参与报名的项目</h3>
<div class="fr">
<el-input size="small" v-model="projectQuery.name" :prefix-icon="Search" @change="getProjectList" clearable/>
</div>
</div>
<div class="panel-body" v-loading="loadingProject">
<el-empty v-if="projectList.length==0" image="@/assets/img/order_no.png" image-size="228" description="无可选项目" />
</div>
</div>
</el-col>
</el-row>
<el-row class="mt20">
<el-col :span="24">
<div class="text-center">
<el-button type="primary" class="btn-lineG w200px" round>确定</el-button>
</div>
</el-col>
</el-row>
</el-card>
<el-card class="mt20" :body-style="{'padding-top': '0'}">
<div class="border-info mt20">
<el-row>
<el-col :lg="8">
<div class="item"><label>教练</label>
<span v-for="c in names.coachList">{{ c.shortName }}</span>
</div>
<div class="item"><label>翻译</label>
<span v-for="c in names.translatorList">{{ c.shortName }}</span>
</div>
</el-col>
<el-col :lg="8">
<div class="item"><label>领队</label>
<span v-for="c in names.leaderList">{{ c.shortName }}</span>
</div>
<div class="item"><label>官员</label>
<span class="mr5" v-for="c in names.officialList">{{ c.shortName }}</span>
<span v-if="!names.officialList">--</span>
</div>
</el-col>
<el-col :lg="8">
<div class="item"><label>队医</label><span class="mr5" v-for="c in names.teamDoctorList">{{
c.shortName
}}</span></div>
<div class="item"><label>其他</label><span class="mr5" v-for="c in names.otherList">{{
c.shortName
}}</span></div>
</el-col>
</el-row>
</div>
<div>
<!-- <el-button type="success" @click="importSportman">批量导入人员</el-button>-->
<!-- <el-button type="success" @click="addCoach">新增运动员</el-button>-->
<div class="fr mb20" @click="switchTabletype">
<el-button plain type="primary" :icon="Switch" v-if="tableType==1">按人员查看报项</el-button>
<el-button plain type="primary" :icon="Switch" v-else>按组别查看报项</el-button>
</div>
<el-table :data="signInfoTable" border style="width: 100%" v-if="tableType==0">
<el-table-column label="运动员" width="240px">
<template #default="scope">
<div style="display: flex;align-items: center;">
<!-- <el-image v-if="scope.row.personInfo.picUrl" style="width: 50px; height: 50px" fit="contain" :src="scope.row.personInfo.picUrl" />-->
<p>{{ scope.row.personInfo.realName }}({{ scope.row.personInfo.sexStr }})</p>
<p>{{ scope.row.personInfo.shortName }}({{ scope.row.personInfo.sexStr }})</p>
</div>
</template>
</el-table-column>
......@@ -72,7 +152,6 @@
</li>
</ol>
</template>
</el-table-column>
<!-- 补充信息-->
......@@ -95,21 +174,42 @@
</el-table-column>
</el-table>
</div>
<div class="panel-footer text-center">
<el-button type="success" plain round @click="goPrev()">上一步</el-button>
<el-button type="success" round @click="submitForm()">下一步</el-button>
<el-table v-if="tableType==1" :data="signInfoTable" border style="width: 100%">
<el-table-column label="组别代码" width="120px">
<template #default="scope">
NO.1
</template>
</el-table-column>
<el-table-column label="组别" />
<el-table-column label="舞种" width="120px"/>
<el-table-column label="参赛说明" />
<el-table-column label="参赛运动员" width="120px"/>
<el-table-column label="报名费" width="120px"/>
<el-table-column label="操作" fixed="right" width="150" align="center">
<template #default="scope">
<el-button v-if="extraform&&extraform.length>0" type="text" @click="goPersonInfo(scope.row)">
<span v-if="scope.row.extraPersonInfo">修改</span>
<span v-else class="red">完善补充信息</span>
</el-button>
<el-button type="text" @click="goPersonInfo(scope.row)">删除</el-button>
</template>
</el-table-column>
</el-table>
<div class="text-center mt20">
<el-button type="primary" class="w200px" plain round @click="goPrev()">上一步</el-button>
<el-button type="primary" class="btn-lineG w200px" round @click="submitForm()">预览报名信息</el-button>
</div>
</div>
</el-card>
</div>
<dialogAddCoach ref="dialogAddCoachRef" />
<dialogSportsmanList ref="dialogSportsmanListRef" @submitForm="getSignInfoList" />
<dialogAllSportsmanList ref="dialogAllSportsmanListRef" @transfer="getChoosed" @submitForm="getSignInfoList" />
<dialogAddCoach ref="dialogAddCoachRef"/>
<dialogSportsmanList ref="dialogSportsmanListRef" @submitForm="getSignInfoList"/>
<dialogAllSportsmanList ref="dialogAllSportsmanListRef" @transfer="getChoosed" @submitForm="getSignInfoList"/>
<dialogMates ref="dialogMatesRef" @submitForm="getSignInfoList" />
<dialogMates ref="dialogMatesRef" @submitForm="getSignInfoList"/>
<dialogImport ref="dialogImportProps" @submitForm="getMySignInfo" />
<dialogImport ref="dialogImportProps" @submitForm="getMySignInfo"/>
<el-dialog v-model="showResult" :close-on-click-modal="false" :show-close="false">
<el-result icon="success" title="报名成功">
......@@ -121,16 +221,16 @@
</el-dialog>
<dialogChangeCoach ref="popChangeCoach" @submitForm="getMySignInfo" />
<!-- <dialogChangeCoach ref="popChangeCoach" @submitForm="getMySignInfo"/>-->
<dialogExtraForm ref="popExtraForm" @submitForm="getSignInfoList" />
<dialogExtraForm ref="popExtraForm" @submitForm="getSignInfoList"/>
</div>
</template>
<script setup>
import { ref, reactive } from 'vue'
import {ref, reactive} from 'vue'
import * as match from '@/apiPc/match'
import { getCurrentInstance, onMounted } from '@vue/runtime-core'
import {getCurrentInstance, onMounted} from '@vue/runtime-core'
import dialogAddCoach from './components/addCoach'
import dialogSportsmanList from './components/sportsmanList'
import dialogAllSportsmanList from './components/allSportsmanList'
......@@ -138,13 +238,15 @@ import dialogImport from './components/import'
import dialogChangeCoach from './components/changeCoach'
import dialogExtraForm from './components/extraForm'
import dialogMates from './components/dialogMates'
const { proxy } = getCurrentInstance()
import {Search,Switch} from "@element-plus/icons-vue";
const {proxy} = getCurrentInstance()
const router = useRouter()
const route = useRoute()
import _ from 'lodash'
import { ElMessage, ElMessageBox } from 'element-plus'
import {ElMessage, ElMessageBox} from 'element-plus'
const data = reactive({
coachForm: {},
coachForm: {}, activeStep: 2,
tableData: [], signInfoTable: [], choosedList: [],
extraPersonInfoMapList: [],
teamList: [],
......@@ -155,14 +257,19 @@ const data = reactive({
noPhotoCanSign: null,
showResult: false,
showExtraForm: false,
loadingProject: false,
extraTableHead: [],
activeTeam: '',
names: {},
choosedchoosed: []
choosedchoosed: [],
projectList: [],
choosed2List:[],projectQuery:{},tableType:0
})
const { activeTeam, names, tableData, signInfoTable, choosedList, showExtraForm, extraPersonInfoMapList, teamList,
const {
activeTeam, names, tableData, signInfoTable, choosedList, showExtraForm, extraPersonInfoMapList, teamList,
extraform, groupId, signType, coachOrLeaderFlag, showResult, noPhotoCanSign, extraTableHead,
coachForm, choosedchoosed } = toRefs(data)
coachForm, choosedchoosed, activeStep,projectList,choosed2List,loadingProject,projectQuery,tableType
} = toRefs(data)
let matchId = ''
let signInfoType = null
onMounted(() => {
......@@ -184,11 +291,13 @@ onMounted(() => {
getTableHead()
getMySignInfo()
})
function geren() {
match.getChooseDoneSingleCoachs(matchId).then(res => {
names.value = res.data
})
}
function tuandui() {
match.getChooseDoneGroupCoachs(matchId, groupId.value).then(res => {
names.value = res.data
......@@ -196,6 +305,7 @@ function tuandui() {
}
let chargeFlag
function getMatch(id) {
match.getMatchById({
id: id
......@@ -206,6 +316,7 @@ function getMatch(id) {
extraform.value = JSON.parse(res.data.participantsInfo)
})
}
function getMySignInfo() {
// 获取已报
match.getMySignInfo({
......@@ -216,6 +327,7 @@ function getMySignInfo() {
signInfoType = res.data.type
})
}
function getSignInfoList() {
// console.log(activeTeam.value)
match.getMySignInfoList({
......@@ -238,12 +350,14 @@ function getSignInfoList() {
// }
})
}
function getTableHead() {
match.getCptExtraInfo(matchId).then(res => {
// console.log(res.data)
extraTableHead.value = res.data
})
}
function getTeamList(a, b) {
match.getMyTeamList(a, b).then(res => {
teamList.value = res.data
......@@ -251,18 +365,28 @@ function getTeamList(a, b) {
getSignInfoList()
})
}
function teamClick(tab, event) {
activeTeam.value = tab.props.name
getSignInfoList()
}
function submitForm() {
router.push({
name: 'signPreview',
query: {
matchId: matchId,
groupId: groupId.value,
teamId: activeTeam.value
}
})
if (signInfoType == '1') {
ElMessageBox.confirm('已报项,前往我的报项', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
router.push({ name: 'myMatch' })
router.push({name: 'myMatch'})
})
return
}
......@@ -281,7 +405,7 @@ function submitForm() {
}
}
if (signInfoType == '2') {
match.recoverMySign({ cptId: matchId, groupId: groupId.value }).then(res => {
match.recoverMySign({cptId: matchId, groupId: groupId.value}).then(res => {
if (res.msg.indexOf('Exception:') > -1) {
const msg = res.msg.slice(10)
ElMessageBox.confirm(msg, '提示', {
......@@ -300,6 +424,7 @@ function submitForm() {
afterRecover()
}
}
function afterRecover() {
if (signInfoTable.value.length == 0) {
ElMessage.error('请至少选择一个项目')
......@@ -330,6 +455,7 @@ function afterRecover() {
function goPrev() {
router.go(-1)
}
function chooseSportman() {
if (signInfoType == '2') {
match.recoverMySign({
......@@ -363,8 +489,34 @@ function chooseSportman() {
}
proxy.$refs['dialogAllSportsmanListRef'].open(params)
}
function changechoosed(e) {
console.log(e)
choosed2List.value = []
for(var c of choosedList.value){
if (choosedchoosed.value.indexOf(c.id) > -1) {
choosed2List.value.push(c)
}
}
getProjectList()
}
function getProjectList() {
if(choosed2List.value.length==0){
ElMessage.error('请先选择运动员')
return
}
loadingProject.value = true
//根据已选人员id 获取项目列表
match.getCanSignProjectList(matchId).then(res=>{
projectList.value = res.data
loadingProject.value = false
})
}
function getChoosed(list) {
console.log(list)
choosedList.value = list
console.log('选好了',choosedchoosed.value)
}
function addCoach() {
......@@ -394,6 +546,7 @@ function addCoach() {
}
proxy.$refs['dialogAddCoachRef'].open(params)
}
function signForThisMan(p) {
const params = {
title: '选择报项',
......@@ -412,6 +565,11 @@ function signForThisMan(p) {
function delthischoosed(p) {
choosedList.value = _.without(choosedList.value, p)
}
function emptyChoosed() {
choosedList.value = []
}
function delchoosedchoosed() {
console.log(choosedchoosed.value)
for (var c of choosedList.value) {
......@@ -421,6 +579,7 @@ function delchoosedchoosed() {
}
choosedchoosed.value = []
}
function editThis(row) {
const params = {
title: '修改报项',
......@@ -434,6 +593,7 @@ function editThis(row) {
}
proxy.$refs['dialogSportsmanListRef'].open(params)
}
function editMates(row) {
const params = {
title: '更换队友'
......@@ -454,6 +614,7 @@ function removeThis(id) {
})
})
}
function changeCoach(cptId, groupId) {
// 更换教练
const params = {
......@@ -463,6 +624,7 @@ function changeCoach(cptId, groupId) {
}
proxy.$refs['popChangeCoach'].open(params)
}
function importSportman() {
const params = {
title: '批量导入人员',
......@@ -470,6 +632,7 @@ function importSportman() {
}
proxy.$refs['dialogImportProps'].open(params)
}
function goMySign() {
router.push({
name: 'myMatch'
......@@ -481,7 +644,7 @@ const goPersonInfo = (row) => {
ElMessageBox.alert('已报项,前往我的报项', '提示', {
confirmButtonText: 'OK',
callback: (Action) => {
router.push({ name: 'myMatch' })
router.push({name: 'myMatch'})
}
})
return
......@@ -497,41 +660,95 @@ const goPersonInfo = (row) => {
}
proxy.$refs['popExtraForm'].open(_.cloneDeep(params))
}
function downloadVoucher() {
// 下载凭证
proxy.download(
`/pdf/getPayedOrderPdf/${matchId}/${groupId.value || 0}`, {}, '报项凭证.pdf'
)
}
function editPerson(id) {
proxy.$refs['dialogAddCoachRef'].open({
title: '编辑人员',
id: id,
groupId: groupId.value
})
}
function switchTabletype() {
if(tableType.value == 0){
tableType.value = 1
}else{
tableType.value = 0
}
}
</script>
<style scoped lang="scss">
.app-container{ padding: 0;background: #F5F7F9;}
.panel-footer .el-button--success{background: #254385;border: none;
.app-container {
padding: 0;
background: #F5F7F9;
}
.panel-footer .el-button--success {
background: #254385;
border: none;
padding: 0 40px;
font-size: 16px;
}
.panel-footer .el-button--success.is-plain {
background: #fff;
border: 1px solid #2ED981;
color: #2ED981;
}
.hasChoose {
margin: 0 0 20px;
display: flex;
justify-content: space-between;
button {
position: relative;
margin: 10px;
}
.panel-footer .el-button--success.is-plain{background: #fff;border:1px solid #2ED981;color: #2ED981;}
.hasChoose{margin: 0 0 20px;display: flex;justify-content: space-between;
button{ position: relative;margin: 10px;}
.choseItem{margin: 10px;position: relative;
.poClose{position: absolute; right: -6px;top: -12px;z-index: 1;}
.choseItem {
margin: 10px;
position: relative;
.poClose {
position: absolute;
right: -6px;
top: -12px;
z-index: 1;
}
}
.chooseForm{
:deep(.el-form-item__content){background: rgba(245, 247, 249, 0.38);padding: 20px 40px 10px;}
.el-checkbox{height: auto;}
:deep(.el-checkbox__input){position: absolute;right: 0;top: 0;}
.name{text-align: center;}
}
.chooseForm {
:deep(.el-form-item__content) {
background: rgba(245, 247, 249, 0.38);
padding: 20px 40px 10px;
}
.namesUl{ display: flex;
flex-wrap: wrap;
justify-content: space-between;
li{margin-bottom: 6px}
label{margin-right: 4px;}
span{margin-right: 10px;color: #666;
&:after{content: '、';}
&:last-child:after{display: none;}
.el-checkbox {
height: auto;
}
:deep(.el-checkbox__input) {
position: absolute;
right: 0;
top: 0;
}
.name {
text-align: center;
}
}
:deep(.el-avatar) > img {
width: 100%;
}
.panel{height: 100%;}
</style>
......
<template>
<el-dialog
v-model="show" :title="title" width="1100px" append-to-body
:close-on-click-modal="false"
v-model="show" :title="title" width="1100px" append-to-body close-icon="CircleClose" center
:close-on-click-modal="false" class="pcloginpop"
destroy-on-close
class="boxDialog"
>
<el-form ref="dialogRef" :model="form" :rules="rules" label-width="110px" inline>
<el-row>
<el-col :span="4" class="touxiang">
<el-form-item prop="picUrl">
<el-form ref="dialogRef" :model="form" :rules="rules" label-width="120px" inline>
<el-row :gutter="30">
<el-col :lg="12" class="touxiang">
<el-form-item prop="picUrl" label="个人照片" required>
<ImageUpload2
v-model="form.picUrl" :crop-height="280" :crop-width="200" class="threeFour" :limit="1"
:is-show-tip="false"
/>
</el-form-item>
</el-col>
<el-col :span="20">
<el-row>
<el-col :span="8">
<el-form-item label="姓名" prop="realName">
<el-input v-model="form.realName" />
<el-form-item label="姓氏" prop="xing" required>
<el-input v-model="form.xing"/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="国籍" prop="countryId">
<el-select v-model="form.countryId" style="width: 100%;" @change="changeCountryId">
<el-option v-for="item in countryList" :key="item.id" :label="item.name" :value="item.id" />
</el-select>
<el-form-item label="短名" prop="shortName" required>
<el-input v-model="form.shortName" placeholder="赛事用名"/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="民族" prop="nation">
<el-select v-model="form.nation" style="width: 100%;">
<el-option
v-for="item in nationList"
:key="item.name"
:label="item.name"
:value="item.name"
<el-form-item label="出生日期" prop="birth" required>
<el-date-picker
v-model="form.birth"
style="width: 100%;"
type="date" format="YYYY-MM-DD" value-format="YYYY-MM-DD"
placeholder="请选择出生日期"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="证件类型" prop="idcType">
<el-form-item label="证件类型" prop="idcType" required>
<el-select v-model="form.idcType" style="width: 100%;">
<el-option
v-for="item in certificates"
......@@ -52,151 +37,104 @@
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="证件号码" prop="idcCode">
<el-input v-model="form.idcCode" @blur="checkCode" />
</el-form-item>
</el-col>
<el-col :span="8" />
<el-col :span="8">
<el-form-item label="性别" prop="sex">
<el-radio-group v-model="form.sex">
<el-radio label="0"></el-radio>
<el-radio label="1"></el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="出生日期" prop="birth">
<el-date-picker
v-model="form.birth"
style="width: 100%;"
type="date" format="YYYY-MM-DD" value-format="YYYY-MM-DD"
placeholder="请选择出生日期"
/>
</el-form-item>
</el-col>
<el-col v-if="showRequire" :span="8">
<el-form-item label="联系方式" prop="phone">
<el-input v-model="form.phone" type="number" />
<el-form-item label="手机号码" prop="phone" required>
<el-input v-model="form.phone" type="number"/>
</el-form-item>
</el-col>
<el-col v-else :span="8">
<el-form-item label="联系方式">
<el-input v-model="form.phone" type="number" />
<el-col :lg="12">
<el-form-item label="所属国家" prop="countryId" required>
<el-select v-model="form.countryId" style="width: 100%;" @change="changeCountryId">
<el-option v-for="item in countryList" :key="item.id" :label="item.name" :value="item.id"/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="16">
<el-form-item label="所在地区" prop="regionId">
<el-cascader
<el-form-item label="详细地址" prop="address" required>
<el-cascader v-if="form.countryId == 240"
v-model="form.regionId"
style="width: 100%;"
style="width: 100%;margin-bottom: 15px"
:options="regionsList"
:props="{ label:'text' }"
/>
<el-input v-model="form.address" type="textarea" :rows="4"/>
</el-form-item>
</el-col>
<el-col :span="8" />
<el-col :span="16">
<el-form-item label="详细地址" prop="address">
<el-input v-model="form.address" type="textarea" :rows="2" />
</el-form-item>
</el-col>
<el-col :span="8" />
<el-col :span="8">
<el-form-item label="紧急联系人">
<el-input v-model="form.ecName" />
<el-form-item label="名" prop="ming" required>
<el-input v-model="form.ming"/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="紧急联系电话">
<el-input v-model="form.ecPhone" />
<el-form-item label="性别" prop="sex">
<el-radio-group v-model="form.sex">
<el-radio label="0"></el-radio>
<el-radio label="1"></el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="与本人关系">
<el-input v-model="form.ecRelationship" />
<el-form-item label="邮箱" prop="idcCode" required>
<el-input v-model="form.email"/>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="身份标签" prop="labelArr">
<el-checkbox-group v-model="form.labelArr" @change="labelvalue">
<el-checkbox label="0">运动员</el-checkbox>
<el-checkbox label="1">教练</el-checkbox>
<el-checkbox label="2">领队</el-checkbox>
<el-checkbox label="4">队医</el-checkbox>
<el-checkbox label="5">翻译</el-checkbox>
<el-checkbox label="6">官员</el-checkbox>
<el-checkbox label="3">其他</el-checkbox>
</el-checkbox-group>
<el-form-item label="证件号码" prop="idcCode" required>
<el-input v-model="form.idcCode" @blur="checkCode"/>
</el-form-item>
</el-col>
</el-row>
</el-col>
</el-row>
<el-row>
<el-col :span="20" :offset="4">
<el-form-item label="实名认证">
<el-row class="shenfen">
<el-col :span="12">
<ImageUpload v-model="form.idcFrontImg" :limit="1" :is-show-tip="false" />
</el-col>
<el-col :span="12">
<ImageUpload v-model="form.idcBackImg" :limit="1" :is-show-tip="false" />
</el-col>
</el-row>
<el-form-item label="主要会员角色" prop="labelArr">
<el-select v-model="form.labelArr" multiple @change="labelvalue">
<el-option v-for="l in labels" :key="l.value" :value="l.value" :label="l.label"/>
</el-select>
</el-form-item>
</el-col>
</el-row>
</el-form>
<template #footer>
<div class="dialog-footer text-center">
<el-button type="primary" @click="submitForm">保 存</el-button>
<el-button @click="cancel">取 消</el-button>
<el-button type="primary" class="btn-lineG w200px" round @click="submitForm">确定</el-button>
</div>
</template>
</el-dialog>
</template>
<script setup>
import { reactive, toRefs, watch } from 'vue'
import { getCurrentInstance, nextTick, onMounted } from '@vue/runtime-core'
import {reactive, toRefs, watch} from 'vue'
import {getCurrentInstance, nextTick, onMounted} from '@vue/runtime-core'
import * as match from '@/apiPc/match'
import { certificates } from '@/assets/lib/nation'
import { ElMessage } from 'element-plus'
import { nationList } from '@/assets/js/data'
import {certificates} from '@/assets/lib/nation'
import {ElMessage} from 'element-plus'
import {nationList} from '@/assets/js/data'
import _ from 'lodash'
const { proxy } = getCurrentInstance()
const {proxy} = getCurrentInstance()
const emit = defineEmits(['submitForm'])
const data = reactive({
form: {
countryId: 240
},
rules: {
realName: [{ required: true, message: '必填', trigger: 'blur' }],
nation: [{ required: true, message: '必填', trigger: 'blur' }],
countryId: [{ required: true, message: '必填', trigger: 'change' }],
idcType: [{ required: true, message: '必填', trigger: 'change' }],
idcCode: [{ required: true, message: '必填', trigger: 'blur' }],
phone: [{ required: true, message: '必填', trigger: 'blur' }],
xing: [{required: true, message: '必填', trigger: 'blur'}],
ming: [{required: true, message: '必填', trigger: 'blur'}],
shortName: [{required: true, message: '必填', trigger: 'blur'}],
email: [{required: true, message: '必填', trigger: 'blur'}],
countryId: [{required: true, message: '必填', trigger: 'change'}],
idcType: [{required: true, message: '必填', trigger: 'change'}],
idcCode: [{required: true, message: '必填', trigger: 'blur'}],
phone: [{required: true, message: '必填', trigger: 'blur'}],
// regionId: [{ required: true, message: '必填', trigger: 'change' }],
birth: [{ required: true, message: '必填', trigger: 'change' }],
// address: [{ required: true, message: '必填', trigger: 'blur' }],
picUrl: [{ required: true, message: '必填', trigger: 'blur' }],
sex: [{ required: true, message: '必填', trigger: 'change' }],
labelArr: [{ required: true, message: '必填', trigger: 'change' }]
birth: [{required: true, message: '必填', trigger: 'change'}],
address: [{ required: true, message: '必填', trigger: 'blur' }],
picUrl: [{required: true, message: '必填', trigger: 'blur'}],
sex: [{required: true, message: '必填', trigger: 'change'}],
labelArr: [{required: true, message: '必填', trigger: 'change'}]
},
show: false,
countryList: [],
regionsList: [],
title: '添加人员',
labels: [{value: '0', label: '运动员'},
{value: '1', label: '教练'},
{value: '2', label: '领队'},
{value: '3', label: '队医'},
{value: '4', label: '翻译'},
{value: '5', label: '官员'},
{value: '6', label: '其他'}
],
title: '添加选手信息',
groupId: '0',
showRequire: false
})
const { showRequire, form, rules, show, countryList, regionsList, title, groupId } = toRefs(data)
const {showRequire, form, rules, show, countryList, regionsList, title, groupId, labels} = toRefs(data)
onMounted(() => {
getCountryList()
getRegionsList()
......@@ -220,7 +158,7 @@ const open = (params) => {
})
}
}
defineExpose({ open })
defineExpose({open})
watch(show, (value) => {
if (!value) {
form.value = {}
......@@ -399,14 +337,16 @@ function cancel() {
height: 200px;
}
}
.touxiang {
:deep(.el-upload--picture-card ){
:deep(.el-upload--picture-card ) {
width: 140px;
height: 200px;
}
}
.touxiang {
:deep(.el-upload-list__item ){
:deep(.el-upload-list__item ) {
width: 140px;
height: 200px;
}
......@@ -418,12 +358,13 @@ function cancel() {
}
.boxDialog{
.el-dialog__header{
background:linear-gradient(#ed2c22,#fe6d45);
.boxDialog {
.el-dialog__header {
background: linear-gradient(#ed2c22, #fe6d45);
margin-right: 0;
height: 52px;
span{
span {
color: #fff;
}
}
......
<template>
<el-dialog v-model="show" :title="title" width="1000px" append-to-body>
<el-form :inline="true" :model="query" style="display: flex;">
<div class="funcBtns">
<el-button type="primary" @click="addMember">添加选手</el-button>
<el-button type="primary" plain @click="importSportman">导入选手</el-button>
</div>
<div class="from-Card">
<el-form :inline="true" :model="query" class="mt20" label-width="60" size="small">
<el-form-item label="姓名">
<el-input v-model="query.name" style="width: 120px;" clearable />
<el-input v-model="query.realName" style="width: 120px;" clearable/>
</el-form-item>
<el-form-item label="短名">
<el-input v-model="query.shortName" style="width: 120px;" clearable/>
</el-form-item>
<el-form-item label="手机号码">
<el-input v-model="query.phone" style="width: 120px;" clearable/>
</el-form-item>
<el-form-item label="邮箱">
<el-input v-model="query.email" style="width: 120px;" clearable/>
</el-form-item>
<el-form-item label="性别">
<el-select v-model="query.sex" placeholder="请选择" style="width: 100px;" clearable @change="getList">
<el-option label="全部" value="" />
<el-option label="男" value="1" />
<el-option label="女" value="0" />
</el-select>
<el-form-item label="证件类型">
<el-input v-model="query.idcType" style="width: 120px;" clearable/>
</el-form-item>
<el-form-item label="出生日期">
<el-date-picker
v-model="birthArr" clearable
format="YYYY-MM-DD" value-format="YYYY-MM-DD"
type="daterange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
@change="getList"
/>
<el-form-item label="证件号">
<el-input v-model="query.idcode" style="width: 120px;" clearable/>
</el-form-item>
<el-form-item label="角色">
<el-input v-model="query.label" style="width: 120px;" clearable/>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="getList">查询</el-button>
</el-form-item>
</el-form>
</div>
<p v-if="noPhotoCanSign == 0" class="text-danger">*需上传照片才可报名</p>
<el-table ref="allSportmenTable" v-loading="loading" :data="tableData" height="60vh" @selection-change="handleSelectionChange">
<el-table-column type="selection" label="选择" :selectable="selectable" />
<el-table-column label="照片" width="70">
<template #default="scope">
<img :src="scope.row.picUrl" style="width: 50px">
</template>
</el-table-column>
<el-table-column prop="realName" label="姓名" width="120" />
<el-table-column prop="sex" label="性别" width="50">
<template #default="scope">
<span v-if="scope.row.sex=='0'"></span>
<span v-if="scope.row.sex=='1'"></span>
</template>
</el-table-column>
<el-table-column label="证件号码" width="80">
<el-table ref="allSportmenTable" v-loading="loading" :data="tableData" height="60vh"
@selection-change="handleSelectionChange">
<el-table-column type="selection" label="选择" :selectable="selectable"/>
<el-table-column label="所属国家" prop="countryName"/>
<el-table-column label="姓氏" prop="xing"/>
<el-table-column label="名" prop="ming"/>
<el-table-column label="短名" prop="shortName"/>
<el-table-column label="性别" prop="sexStr"/>
<el-table-column label="年龄" prop="age"/>
<el-table-column label="出生日期" prop="birth" width="100"/>
<el-table-column label="手机号码" prop="phone" width="120"/>
<el-table-column label="邮箱" prop="email" width="150"/>
<el-table-column label="证件类型" prop="idcTypeStr"/>
<el-table-column label="证件号码" prop="idcCode" width="200"/>
<el-table-column label="会员角色" width="200">
<template #default="scope">
<span v-if="scope.row.idcType=='0'">身份证 </span>
<span v-if="scope.row.idcType=='1'">护照 </span>
<span v-if="scope.row.idcType=='2'">其他 </span>
</template>
</el-table-column>
<el-table-column prop="idcCode" label="证件号码" width="200" />
<el-table-column label="出生日期" width="120">
<template #default="scope">
<span>{{ scope.row.birth.substring(0,10) }}</span>
<div>
<div style="white-space: nowrap" class="esp">
<span v-for="item in scope.row.label?.split(',')" :key="item.id">
<el-tag type="warning" size="small" v-if="item==='0'" effect="plain" class="ml10">运动员</el-tag>
<el-tag type="warning" size="small" v-if="item==='1'" effect="plain" class="ml10">教练</el-tag>
<el-tag type="warning" size="small" v-if="item==='2'" effect="plain" class="ml10">领队</el-tag>
<el-tag type="warning" size="small" v-if="item==='3'" effect="plain" class="ml10">队医</el-tag>
<el-tag type="warning" size="small" v-if="item==='4'" effect="plain" class="ml10">翻译</el-tag>
<el-tag type="warning" size="small" v-if="item==='5'" effect="plain" class="ml10">官员</el-tag>
<el-tag type="warning" size="small" v-if="item==='6'" effect="plain" class="ml10">其他</el-tag>
</span>
</div>
</div>
</template>
</el-table-column>
<el-table-column prop="phone" label="联系方式" />
<el-table-column label="详细地址" prop="address"/>
<el-table-column label="操作" width="120">
<el-table-column label="操作" width="120" fixed="right" align="center">
<template #default="scope">
<el-button type="text" @click="editPerson(scope.row)">编辑</el-button>
</template>
......@@ -70,17 +80,19 @@
</template>
</el-dialog>
<dialogPersonInfo ref="editPersonInfoRef" @submitForm="getList" />
<addCoach ref="dialogAddCoach" @submitForm="getList"/>
<Import ref="dialogImportProps"/>
</template>
<script setup>
import { reactive, ref, toRefs, watch } from 'vue'
import { getCurrentInstance, nextTick, onMounted } from '@vue/runtime-core'
import {reactive, ref, toRefs, watch} from 'vue'
import {getCurrentInstance, nextTick, onMounted} from '@vue/runtime-core'
import * as match from '@/apiPc/match'
import dialogPersonInfo from '../components/addCoach'
import addCoach from '../components/addCoach'
import {getGroupPersonList} from "@/apiPc/match";
import Import from '../components/import'
const { proxy } = getCurrentInstance()
const {proxy} = getCurrentInstance()
const emit = defineEmits(['submitForm', 'transfer'])
const data = reactive({
query: {},
......@@ -91,7 +103,7 @@ const data = reactive({
title: '选择运动员',
noPhotoCanSign: 0
})
const { query, tableData, show, title, birthArr, loading, noPhotoCanSign } = toRefs(data)
const {query, tableData, show, title, birthArr, loading, noPhotoCanSign} = toRefs(data)
let matchId
let groupId
let choosedList = []
......@@ -123,8 +135,8 @@ const getList = () => {
query.value.birthBegin = birthArr.value[0]
query.value.birthEnd = birthArr.value[1]
}
match.getMyGroupForCptFilter(groupId, matchId, query.value).then(res => {
tableData.value = res.data.athletes
match.getGroupPersonList(query.value, groupId).then(res => {
tableData.value = res.rows
nextTick(() => {
for (const n in tableData.value) {
if (choosedIds.indexOf(tableData.value[n].id) > -1) {
......@@ -140,24 +152,44 @@ function handleSelectionChange(val) {
// console.log(val)
choosedList = val
}
function submitForm() {
emit('transfer', choosedList)
// emit('submitForm', choosedList)
show.value = false
}
function cancel() {
show.value = false
}
function editPerson(row) {
const params = {
id: row.id,
groupId: groupId
}
proxy.$refs['editPersonInfoRef'].open(params)
proxy.$refs['dialogAddCoach'].open(params)
}
</script>
<style scoped>
function addMember() {
const params = {
title: '添加人员',
id: 0,
groupId: groupId.value
}
proxy.$refs['dialogAddCoach'].open(params)
}
function importSportman() {
const params = {
title: '批量导入选手',
groupId: groupId.value
}
proxy.$refs['dialogImportProps'].open(params)
}
</script>
<style scoped lang="scss">
.el-form--inline .el-form-item {
width: auto;
}
</style>
......
<template>
<el-dialog v-model="show" :title="title" width="500px" append-to-body :close-on-click-modal="false">
<el-dialog v-model="show" :title="title" width="500px" close-icon="CircleClose"
append-to-body :close-on-click-modal="false" class="pcloginpop" center>
<el-form ref="dialogRef" label-width="100px">
<el-form-item label="下载模板">
<el-link href="/file/sportsmanTemplate.xlsx" type="primary" target="_blank">人员模板</el-link>
</el-form-item>
<el-form-item label="上传模板" prop="discount">
<fileUpload ref="upload" name="excel" :action="action" :accept="accept" @uploadSuccess="uploadSuccess" />
<fileImport ref="upload" name="excel" :action="action" @uploadSuccess="uploadSuccess" />
</el-form-item>
</el-form>
......@@ -22,14 +23,15 @@ import * as match from '@/apiPc/match'
import { ElMessage, ElMessageBox } from 'element-plus'
const { proxy } = getCurrentInstance()
import useUserStore from '@/store/modules/user'
const emit = defineEmits(['submitForm'])
const action = ref('')
const accept = ref('.xlsx')
const title = ref('')
const show = ref(false)
const userStore = useUserStore()
const groupId = useUserStore().group.id || 0
function uploadSuccess(res) {
console.log(res)
cancel()
......@@ -48,7 +50,7 @@ function uploadSuccess(res) {
const open = (params) => {
show.value = true
title.value = params.title
action.value = `/systemj/personInfo/importPerson/${params.groupId}`
action.value = `/systemj/personInfo/importPerson/${groupId}`
}
defineExpose({
open
......
......@@ -24,7 +24,7 @@
</el-timeline-item>
</el-timeline>
<el-empty image="@/assets/img/order_no.png" image-size="228" v-if="matchData.cptScheduleList?.length==0" description=" " />
<el-empty image="@/assets/img/order_no.png" image-size="228" v-if="matchData.cptScheduleList?.length==0" description="" />
</div>
</template>
......
<template>
<!-- 人员表格-->
<el-table :data="tableData" class="mt20">
<el-table-column type="index" label="序号" width="80" align="center"/>
<el-table-column label="所属国家" prop="countryName"/>
<el-table-column label="姓氏" prop="xing"/>
<el-table-column label="名" prop="ming"/>
<el-table-column label="短名" prop="shortName"/>
<el-table-column label="性别" prop="sexStr"/>
<el-table-column label="年龄" prop="age"/>
<el-table-column label="出生日期" prop="birth" width="100"/>
<el-table-column label="手机号码" prop="phone" width="120"/>
<el-table-column label="邮箱" prop="email" width="150"/>
<el-table-column label="证件类型" prop="idcTypeStr"/>
<el-table-column label="证件号码" prop="idcCode" width="200"/>
<el-table-column label="会员角色">
<template #default="scope">
<span v-for="item in scope.row.label?.split(',')" :key="item.id">
<el-tag type="primary" size="mini" v-if="item==='0'" effect="dark" class="ml10">运动员</el-tag>
<el-tag type="info" size="mini" v-if="item==='1'" effect="dark" class="ml10">教练</el-tag>
<el-tag type="info" size="mini" v-if="item==='2'" effect="dark" class="ml10">领队</el-tag>
<el-tag type="info" size="mini" v-if="item==='3'" effect="dark" class="ml10">队医</el-tag>
<el-tag type="info" size="mini" v-if="item==='4'" effect="dark" class="ml10">翻译</el-tag>
<el-tag type="info" size="mini" v-if="item==='5'" effect="dark" class="ml10">官员</el-tag>
<el-tag type="info" size="mini" v-if="item==='6'" effect="dark" class="ml10">其他</el-tag>
</span>
</template>
</el-table-column>
<el-table-column label="详细地址" prop="address"/>
<el-table-column label="操作" fixed="right" width="160" header-align="center" align="center">
<template #default="scope">
<a class="text-primary pd10" @click="editCoach(scope.row.id,scope.row.groupId)">编辑</a>
<a class="text-primary pd10" @click="delperson(scope.row)">删除</a>
</template>
</el-table-column>
</el-table>
<!-- <paginationPc-->
<!-- v-show="total>0"-->
<!-- v-model:page="query.pageNum"-->
<!-- v-model:limit="query.pageSize"-->
<!-- :total="total"-->
<!-- @pagination="getList"-->
<!-- />-->
</template>
<script setup>
const props = defineProps({
tableData:{
type:Array,
required:true
}
})
const editCoach = () => {
}
</script>
<style scoped>
</style>
......@@ -16,7 +16,8 @@
</el-radio>
</div>
</el-radio-group>
<el-empty v-if="projectList.length==0" description="无可选项目" />
<el-empty v-if="projectList.length==0" image="@/assets/img/order_no.png" image-size="228" description="无可选项目" />
</el-form-item>
</el-col>
<el-col :span="8">
......
......@@ -11,10 +11,10 @@
<h3>
{{ matchData.name }}
</h3>
<p class="ppl"><label class="bm1">比赛时间:</label>2024.07.21-{{ matchData.endTime }}</p>
<p class="ppl"><label class="bm1">比赛时间:</label>{{matchData.beginTime?.slice(0,10)}}{{ matchData.endTime?.slice(0,10) }}</p>
<p class="ppl"><label class="bm2">赛事级别:</label>{{ matchData.level }}</p>
<p class="ppl"><label class="bm3">&ensp;&ensp;&ensp;&ensp;点:</label>{{ matchData.address }}</p>
<p class="ppl"><label class="bm4">报名截止:</label>{{ matchData.signEndTime }}</p>
<p class="ppl"><label class="bm4">报名截止:</label>{{ matchData.signEndTime?.slice(0,10) }}</p>
</el-col>
<el-col :lg="8" :md="12" :xl="8" v-if="matchData.type=='0'">
<p class="countDownTitle"><span>报名截止倒计时</span></p>
......@@ -40,37 +40,37 @@
<el-row gutter="14">
<el-col :lg="4">
<div class="funcBtn">
<div class="funcBtn" @click="building">
<img src="@/assets/dance/btn04.png"/>
<h4>票务预订</h4>
</div>
</el-col>
<el-col :lg="4">
<div class="funcBtn">
<div class="funcBtn" @click="building">
<img src="@/assets/dance/btn01.png"/>
<h4>酒店预约</h4>
</div>
</el-col>
<el-col :lg="4">
<div class="funcBtn">
<div class="funcBtn" @click="building">
<img src="@/assets/dance/btn02.png"/>
<h4>车辆预约</h4>
</div>
</el-col>
<el-col :lg="4">
<div class="funcBtn">
<div class="funcBtn" @click="building">
<img src="@/assets/dance/btn03.png"/>
<h4>餐饮预订</h4>
</div>
</el-col>
<el-col :lg="4">
<div class="funcBtn">
<div class="funcBtn" @click="building">
<img src="@/assets/dance/btn05.png"/>
<h4>化妆预约</h4>
</div>
</el-col>
<el-col :lg="4">
<div class="funcBtn">
<div class="funcBtn" @click="building">
<img src="@/assets/dance/btn06.png"/>
<h4>拍照预约</h4>
</div>
......@@ -86,7 +86,6 @@
</ul>
</div>
<matchInfo :form="matchData" v-if="menu[0].active==1"/>
<match-schedule-list :match-data="matchData" v-if="menu[2].active==1"/>
<div v-if="menu[1].active==1">
<div class="collapsebox">
<el-collapse v-if="matchData.cptProjectList?.length > 0">
......@@ -176,6 +175,44 @@
<el-empty image="@/assets/img/order_no.png" image-size="228" v-if="matchData.cptProjectList?.length == 0" description=" "/>
</div>
</div>
<match-schedule-list :match-data="matchData" v-if="menu[2].active==1"/>
<div v-if="menu[3].active==1">
<el-row :gutter="20" v-if="matchData.signType == '0'">
<el-col v-for="t in signDoneGroupList" :key="t.id" :span="8">
<div class="teamItem">
<el-avatar :size="60" :src="t.imgUrl||t.avatar" />
<span class="name">{{ t.name }}</span>
</div>
</el-col>
</el-row>
<el-row :gutter="20" v-else>
<el-col :span="24" v-for="(t,index) in signDoneGroupList" :key="t.id">
<div class="nowteamItem">
<span>{{index+1}}.</span>
<el-avatar :size="80" :src="t.imgUrl||t.avatar" :fit="cover"/>
<div class="info">
<h3 class="name">{{ t.name }}</h3>
<p v-if="t.extraInfo">
<span v-for="(ee,index) in JSON.parse(t.extraInfo)" :key="index" v-show="(ee?.type == '0'||ee?.type == '4')&&index<2">
{{ee.value}}&ensp;&ensp;
</span>
</p>
</div>
<p class="rr"><span>{{t.renCi}}</span> 人参赛</p>
</div>
</el-col>
</el-row>
<el-empty image="@/assets/img/order_no.png" image-size="228" v-if="(signDoneGroupList==null)||(signDoneGroupList.length==0)" description="" />
</div>
<div v-if="menu[4].active==1">
<!-- 成绩-->
<el-empty image="@/assets/img/order_no.png" image-size="228" description="暂无成绩" />
</div>
<div v-if="menu[5].active==1" class="pd20">
<div class="xzbox" v-html="matchData.signKnow">
</div>
</div>
</el-card>
<div style="height: 20px"></div>
......@@ -232,24 +269,6 @@
</el-col>
</el-row>
</div>
<el-dialog v-model="popupGroupList" title="请选择参赛队" width="600px">
<div class="popList">
<div v-for="(t,index) in groups" :key="index" class="teamItem" @click="getThisGroupId(t)">
<el-avatar :size="60" :src="t.imgUrl" />
<span class="name">{{ t.name }}({{ t.abreviations }})</span>
({{ t.typeStr }})
</div>
<el-button plain style="width: 100%;height: 50px;font-size:16px;" type="success" @click="goAddgroup()">
<el-icon>
<Plus />
</el-icon>
新建参赛队
</el-button>
</div>
</el-dialog>
<groupDetail ref="dialogEditGroup" @submitForm="getMyGroupList" />
</div>
</template>
......@@ -276,20 +295,30 @@ const data = reactive({
activeName2:'first',
popupGroupList:false,
menu:[{name:'赛事详情',active:1},{name:'赛事设项',active:0},{name:'日程',active:0},{name:'参赛队',active:0},{name:'成绩',active:0},{name:'报名须知',active:0}],
menu1:[{name:'分站赛',active:1},{name:'赛事详情',active:0},{name:'日程',active:0}]
menu1:[{name:'分站赛',active:1},{name:'赛事详情',active:0},{name:'日程',active:0}],
signDoneGroupList: []
})
const {matchData,matchId,groupId,activeName2,popupGroupList,menu,menu1} = toRefs(data)
const {matchData,matchId,groupId,activeName2,popupGroupList,menu,menu1,signDoneGroupList} = toRefs(data)
onMounted(() => {
// matchId.value = route.params.id
matchId.value = '1759477811976183809'
getMatch(matchId.value)
getGroupListByCptId(matchId.value)
})
function building() {
ElMessage.warning('暂未开发,敬请期待!')
}
function getMatch(id) {
if(id!=0)
match.getMatchById({ id: id }).then(res => {
matchData.value = res.data
})
}
function getGroupListByCptId(id) {
match.getGroupListByCptId(id).then(res => {
signDoneGroupList.value = res.data
})
}
function changeMenu(menu,l){
for(const n of menu){
if(n==l){
......@@ -309,40 +338,37 @@ function choseSignType() {
})
} else {
// 团队报名 团体-队伍报名
getMyGroupList()
match.getMyGroupList().then(res => {
checkIsSign(matchData.value.signType,res.data[0].id).then(() => {
goSignType2(res.data[0].id)
})
})
}
}
function goSignType2(groupId) {
router.push({
path: `${route.params.id}/teamSign`,
query: {
matchId: matchId.value,
groupId: groupId,
signType: matchData.value.signType
}
})
}
// 获取已报信息
function checkIsSign(signType) {
function checkIsSign(signType,groupId) {
var obj = {
cptId: matchId.value,
groupId: groupId.value || ''
groupId: groupId
}
return match.getMySignInfo(obj).then(res => {
if (res.data.type == '1') {
let str = ''
if (signType == '0') {
str = '已报名,不能重复报名'
} else {
str = '该参赛队已报名,请选择其他参赛队'
}
ElMessage.error(str)
ElMessage.error('已报名,不能重复报名')
return Promise.reject('rejected message')
}
})
}
function getMyGroupList(){
match.getMyGroupList().then(res => {
groups.value = res.data
popupGroupList.value = true
})
}
function goAddgroup() {
// 新团
proxy.$refs['dialogEditGroup'].open({
title: '新建参赛队'
})
}
</script>
<style scoped lang="scss">
......
......@@ -66,46 +66,7 @@
<div style="padding: 0 20px 20px">
<!-- 赛事详情-->
<div class="indexTitle"><h3 class="leftboderTT">Organization</h3></div>
<el-row :gutter="20">
<el-col :lg="8">
<div class="dlbox">
<dl>
<dt>Organizer</dt>
<dd>World Sports Dance Federation(WDSF)</dd>
<dd>Asian Sports Dance Federation(DSA)</dd>
<dd>China Sports Federation(CDSF)</dd>
</dl>
</div>
</el-col>
<el-col :lg="8">
<div class="dlbox">
<dl>
<dt>Undertaker</dt>
<dd>Jiangsu Provincial Sports Federation</dd>
<dd>Wuxi Municipal People's Government</dd>
</dl>
</div>
</el-col>
<el-col :lg="8">
<div class="dlbox">
<dl>
<dt>Co-organizer</dt>
<dd>Wuxi Sports Bureau</dd>
<dd>Jiangsu Wuxi Economic Development Zone Management Committee</dd>
<dd>Jiangsu Provincial Sports Dance Association</dd>
</dl>
</div>
</el-col>
<el-col :lg="8">
<div class="dlbox">
<dl>
<dt>Operator</dt>
<dd>Jijin Wuxi Sports and Health Co., Ltd</dd>
</dl>
</div>
</el-col>
</el-row>
<div class="xzbox"></div>
<div class="indexTitle"><h3 class="leftboderTT">Notes</h3></div>
<div class="xzbox">
1. Each unit is limited to reporting one team, each team needs to report one leader (athletes can also serve), and athletes are limited to reporting four<br>
......
<template>
<div>
<div class="box">
<el-card :body-style="{ padding: '0px' }" class="mt20 mb60">
<div slot="header">
<div class="bg-lineg">报名缴费清单</div>
</div>
<div class="pd20">
<div class="border-info">
<el-row>
<el-col :lg="8">
<div class="item"><label>赛事名称</label>{{ matchInfo.name }}</div>
</el-col>
<el-col :lg="8">
<div class="item"><label>赛事类型</label>{{ matchInfo.name }}</div>
</el-col>
<el-col :lg="8">
<div class="item"><label>赛事时间</label>{{ matchInfo.beginTime?.slice(0, 10) }}
{{ matchInfo.endTime?.slice(0, 10) }}
</div>
</el-col>
<el-col :lg="8">
<div class="item"><label>报名时间</label>{{ matchInfo.signBeginTime?.slice(0, 10) }}
{{ matchInfo.signEndTime?.slice(0, 10) }}
</div>
</el-col>
<el-col :lg="16">
<div class="item"><label>比赛地址</label>{{ matchInfo.address }}</div>
</el-col>
</el-row>
</div>
<div class="border-info gray mt20">
<el-row>
<el-col :lg="8">
<div class="item"><label>团队名称</label>{{ matchInfo.signFee }}</div>
<div class="item"><label>团队类型</label>{{ matchInfo.signFee }}</div>
</el-col>
<el-col :lg="8">
<div class="item"><label>负责人姓名</label>{{ matchInfo.signFee }}</div>
<div class="item"><label>参赛队名称</label>{{ matchInfo.signFee }}</div>
</el-col>
<el-col :lg="8">
<div class="item"><label>邮箱</label>{{ matchInfo.signFee }}</div>
<div class="item"><label>详细地址</label>{{ matchInfo.signFee }}</div>
</el-col>
</el-row>
</div>
<div class="border-info mt20">
<el-row>
<el-col :lg="8">
<div class="item"><label>教练</label>{{ matchInfo.signFee }}</div>
<div class="item"><label>翻译</label>{{ matchInfo.signFee }}</div>
</el-col>
<el-col :lg="8">
<div class="item"><label>领队</label>{{ matchInfo.signFee }}</div>
<div class="item"><label>官员</label>{{ matchInfo.signFee }}</div>
</el-col>
<el-col :lg="8">
<div class="item"><label>队医</label>{{ matchInfo.signFee }}</div>
<div class="item"><label>其他</label>{{ matchInfo.signFee }}</div>
</el-col>
</el-row>
</div>
<div class="mt20">
<div class="leftboderTT">参赛人员保险费</div>
<!-- 人员列表-->
<el-table :data="tableData" border style="width: 100%" class="mt20" :span-method="arraySpanMethod">
<el-table-column label="所属国家"/>
<el-table-column prop="name" label="姓氏" width="180" align="center"></el-table-column>
<el-table-column label="名"/>
<el-table-column label="短名"/>
<el-table-column prop="sex" label="性别" width="180" align="center"></el-table-column>
<el-table-column prop="age" label="年龄" width="180" align="center"></el-table-column>
<el-table-column label="出生日期" align="center"/>
<el-table-column prop="phone" label="手机号码" width="180" align="center"></el-table-column>
<el-table-column label="邮箱"/>
<el-table-column label="证件类型" align="center"/>
<el-table-column label="证件号码"/>
<el-table-column label="报项" fixed="right">
<template #default="scope">
<ol>
<li v-for="item in scope.row.items" :key="item.id">{{ item.name }}</li>
</ol>
</template>
</el-table-column>
<el-table-column label="保险费" fixed="right" align="center">
<template #default="scope">
<span class="text-primary">¥{{ scope.row.signFee }}/人</span>
</template>
</el-table-column>
</el-table>
</div>
<div class="mt20">
<div class="leftboderTT">参赛设项报名费</div>
<!-- 报项列表-->
<el-table :data="tableData" border style="width: 100%" class="mt20">
<el-table-column label="组别代码" align="center"/>
<el-table-column label="组别" align="center"/>
<el-table-column label="舞种" align="center"/>
<el-table-column label="参赛说明"/>
<el-table-column label="参赛运动员"/>
<el-table-column label="补充信息"/>
<el-table-column label="报名费" align="center">
<template #default="scope">
<span class="text-primary">¥{{ scope.row.signFee }}/人</span>
</template>
</el-table-column>
</el-table>
</div>
</div>
</el-card>
</div>
</div>
</template>
<script setup>
import {ref} from 'vue'
const matchInfo = ref({})
const tableData = ref([])
</script>
<style scoped lang="scss">
.leftboderTT{font-weight: 600;
font-size: 16px;
color: #453DEA;}
.bg-lineg {
height: 40px;
line-height: 40px;
font-size: 18px;
text-align: center;
}
</style>
<template>
<div>
<div class="box ph-30">
<el-card class="mb20">
<el-steps :active="activeStep" align-center>
<el-step title="团队信息"/>
<el-step title="教练/领队/其他"/>
<el-step title="选手报名"/>
<el-step title="提交审核"/>
</el-steps>
</el-card>
<el-card>
<div class="border-info">
<el-row>
<el-col :lg="8">
<div class="item"><label>赛事名称</label>{{ matchInfo.name }}</div>
</el-col>
<el-col :lg="8">
<div class="item"><label>赛事类型</label>{{ matchInfo.name }}</div>
</el-col>
<el-col :lg="8">
<div class="item"><label>赛事时间</label>{{ matchInfo.beginTime?.slice(0, 10) }}
{{ matchInfo.endTime?.slice(0, 10) }}
</div>
</el-col>
<el-col :lg="8">
<div class="item"><label>报名时间</label>{{ matchInfo.signBeginTime?.slice(0, 10) }}
{{ matchInfo.signEndTime?.slice(0, 10) }}
</div>
</el-col>
<el-col :lg="16">
<div class="item"><label>比赛地址</label>{{ matchInfo.address }}</div>
</el-col>
</el-row>
</div>
<div class="border-info gray mt20">
<el-row>
<el-col :lg="8">
<div class="item"><label>团队名称</label>{{ matchInfo.signFee }}</div>
<div class="item"><label>团队类型</label>{{ matchInfo.signFee }}</div>
</el-col>
<el-col :lg="8">
<div class="item"><label>负责人姓名</label>{{ matchInfo.signFee }}</div>
<div class="item"><label>参赛队名称</label>{{ matchInfo.signFee }}</div>
</el-col>
<el-col :lg="8">
<div class="item"><label>邮箱</label>{{ matchInfo.signFee }}</div>
<div class="item"><label>详细地址</label>{{ matchInfo.signFee }}</div>
</el-col>
</el-row>
</div>
<div class="border-info mt20">
<el-row>
<el-col :lg="8">
<div class="item"><label>教练</label>{{ matchInfo.signFee }}</div>
<div class="item"><label>翻译</label>{{ matchInfo.signFee }}</div>
</el-col>
<el-col :lg="8">
<div class="item"><label>领队</label>{{ matchInfo.signFee }}</div>
<div class="item"><label>官员</label>{{ matchInfo.signFee }}</div>
</el-col>
<el-col :lg="8">
<div class="item"><label>队医</label>{{ matchInfo.signFee }}</div>
<div class="item"><label>其他</label>{{ matchInfo.signFee }}</div>
</el-col>
</el-row>
</div>
<div class="mt20">
<div class="leftboderTT">参赛人员清单</div>
<el-table :data="tableData" border style="width: 100%" class="mt20" :span-method="arraySpanMethod">
<el-table-column label="所属国家"/>
<el-table-column prop="name" label="姓氏" width="180" align="center"></el-table-column>
<el-table-column label="名"/>
<el-table-column label="短名"/>
<el-table-column prop="sex" label="性别" width="180" align="center"></el-table-column>
<el-table-column prop="age" label="年龄" width="180" align="center"></el-table-column>
<el-table-column label="出生日期" align="center"/>
<el-table-column prop="phone" label="手机号码" width="180" align="center"></el-table-column>
<el-table-column label="邮箱"/>
<el-table-column label="证件类型" align="center"/>
<el-table-column label="证件号码"/>
<el-table-column label="报项" fixed="right">
<template #default="scope">
<ol>
<li v-for="item in scope.row.items" :key="item.id">{{ item.name }}</li>
</ol>
</template>
</el-table-column>
<el-table-column label="保险费" fixed="right" align="center">
<template #default="scope">
<span class="text-primary">¥{{ scope.row.signFee }}/人</span>
</template>
</el-table-column>
</el-table>
</div>
<div class="mt20">
<div class="leftboderTT">设项报名清单</div>
<!-- 报项列表-->
<el-table :data="tableData" border style="width: 100%" class="mt20">
<el-table-column label="组别代码" align="center"/>
<el-table-column label="组别" align="center"/>
<el-table-column label="舞种" align="center"/>
<el-table-column label="参赛说明"/>
<el-table-column label="参赛运动员"/>
<el-table-column label="补充信息"/>
<el-table-column label="报名费" align="center">
<template #default="scope">
<span class="text-primary">¥{{ scope.row.signFee }}/人</span>
</template>
</el-table-column>
</el-table>
</div>
</el-card>
<el-card class="mt20">
<el-row>
<el-col :lg="16">
<div>
<div class="item"><label>报名费:</label><span>¥{{ matchInfo.signFee }}</span></div>
<div class="item"><label>保险费:</label><span>¥{{ matchInfo.signFee }}</span></div>
<div class="item"><label>费用总计:</label><span>¥{{ matchInfo.signFee }}</span></div>
</div>
</el-col>
<el-col :lg="8">
<el-link type="primary"><el-icon><Upload /></el-icon>导出参赛人员清单</el-link>
<el-link type="primary"><el-icon><Upload /></el-icon>导出设项报名清单</el-link>
</el-col>
</el-row>
<div class="text-center">
<el-button type="primary" class="" plain round @click="goPrev()">上一步</el-button>
<el-button type="primary" class="" plain round @click="submitForm()">保存暂不提交审核</el-button>
<el-button type="primary" class="btn-lineG w200px" round @click="submitForm()">提交审核</el-button>
</div>
</el-card>
</div>
</div>
</template>
<script setup>
import {ref} from "vue"
const activeStep = ref(3)
const matchInfo = ref({})
</script>
<style scoped lang="scss">
.leftboderTT{font-weight: 600;
font-size: 16px;
color: #453DEA;}
.bg-lineg {
height: 40px;
line-height: 40px;
font-size: 18px;
text-align: center;
}
</style>
......@@ -2,67 +2,60 @@
<div class="app-container">
<div class="box ph-30">
<div class="panel">
<div class="panel-header">
<h3 class="panel-title">填写报名信息</h3>
<el-card>
<el-steps active="1" align-center>
<el-step title="团队信息" />
<el-step title="教练/领队/其他" />
<el-step title="选手报名" />
<el-step title="提交审核" />
</el-steps>
</el-card>
<div class="h20"></div>
<div class="panel" style="box-shadow: var(--el-box-shadow)">
<div class="border-info" style="margin: 20px">
<el-row>
<el-col :lg="8">
<div class="item"><label>赛事名称</label>{{matchInfo.name}}</div></el-col>
<el-col :lg="8"><div class="item"><label>赛事类型</label>{{matchInfo.name}}</div></el-col>
<el-col :lg="8"><div class="item"><label>赛事时间</label>{{matchInfo.beginTime?.slice(0,10)}}{{ matchInfo.endTime?.slice(0,10) }}</div></el-col>
<el-col :lg="8"><div class="item"><label>报名时间</label>{{ matchInfo.signBeginTime?.slice(0,10) }}{{ matchInfo.signEndTime?.slice(0,10) }}</div></el-col>
<el-col :lg="16"><div class="item"><label>比赛地址</label>{{matchInfo.address}}</div></el-col>
</el-row>
</div>
<div class="panel-body">
<div class="h20"></div>
<el-form ref="ruleFormRef" label-width="120px" class="signForm" :model="form" :rules="rules">
<el-row>
<el-col :span="8" :offset="2">
<el-form-item label="参赛队logo" prop="imgUrl">
<ImageUpload2 v-model="form.imgUrl" class="bili43" :crop-width="400" :crop-height="300" :limit="1" />
<!-- <span class="tip"><i>*</i>请上传近期 彩色免冠照片</span> -->
<el-col :lg="8" :offset="2">
<el-form-item label="团体Logo" prop="imgUrl">
<ImageUpload2 v-model="form.imgUrl" :crop-width="200" :crop-height="200" :limit="1"/>
<span class="tip">请上传不超过 <i>5M</i> 的文件 格式为 <i>png/jpg/jpeg</i> 的文件</span>
</el-form-item>
</el-col>
<el-col :span="10">
<el-form-item label="参赛队名称" prop="name">
<el-input v-model="form.name" placeholder="请输入参赛队名称" />
<el-col :lg="10">
<el-form-item label="团体名称" prop="name">
<el-input v-model="form.name" placeholder="请输入团体名称" />
</el-form-item>
<el-form-item label="参赛队简称" prop="abreviations">
<el-input v-model="form.abreviations" />
</el-form-item>
<el-form-item label="参赛队类型" prop="type">
<el-select v-model="form.type" placeholder="请选择参赛队类型" style="width: 100%;">
<el-option label="俱乐部" value="0" />
<el-option label="事业单位" value="1" />
<el-option label="道馆" value="2" />
<el-option label="企业" value="3" />
<el-option label="机关" value="4" />
<el-option label="其他" value="5" />
</el-select>
</el-form-item>
<!-- <el-form-item v-if="form.type==3" label="企业性质" prop="ctype">-->
<!-- <el-select v-model="form.ctype" placeholder="请选择企业性质" style="width: 100%;">-->
<!-- <el-option label="国资企业(含央企和本地)" value="0" />-->
<!-- <el-option label="外商投资企业" value="1" />-->
<!-- <el-option label="港澳台企业" value="2" />-->
<!-- <el-option label="民营企业" value="3" />-->
<!-- <el-option label="商会组织" value="4" />-->
<!-- <el-option label="其他" value="5" />-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<el-form-item label="联系人" prop="contactPerson">
<el-form-item label="负责人姓名" prop="contactPerson">
<el-input v-model="form.contactPerson" placeholder="请输入联系人" />
</el-form-item>
<el-form-item label="联系电话" prop="contactTelno">
<el-input v-model="form.contactTelno" placeholder="请输入联系电话" />
<el-form-item label="邮箱" required prop="contactEmail">
<el-input v-model="form.contactEmail" type="email" placeholder="请输入内容"/>
</el-form-item>
<el-form-item label="所在地区" prop="regionId">
<el-cascader
v-model="form.regionId"
style="width: 100%;"
:options="regionsList"
:props="{ label:'text' }"
/>
<el-form-item label="详细地址" required prop="address">
<el-input type="textarea" v-model="form.address" class="mt10" placeholder="请输入详细地址"/>
</el-form-item>
<el-form-item label="团体类型" prop="type">
<el-select v-model="form.type" placeholder="请选择团体类型" style="width: 100%;">
<el-option label="普通院校" value="0" />
<el-option label="专业舞蹈学校" value="1" />
<el-option label="培训机构/俱乐部" value="2" />
<el-option label="地方协会" value="3" />
<el-option label="国家协会" value="4" />
</el-select>
</el-form-item>
<el-form-item label="详细地址" prop="address">
<el-input
v-model="form.address" placeholder="请输入详细地址"
:rows="2"
type="textarea"
/>
<el-form-item label="参赛队名称" required prop="abreviations">
<el-input type="text" v-model="form.abreviations" placeholder="请输入内容"/>
</el-form-item>
</el-col>
......@@ -86,16 +79,11 @@
</el-form-item>
</el-col>
</el-row>
<!-- 队伍 -->
<Ranks v-if="isRanks" :coach-or-leader-flag="coachOrLeaderFlag" />
</el-form>
</div>
<div class="panel-footer text-center">
<el-button type="success" plain round @click="goPrev()">上一步</el-button>
<el-button type="success" round @click="submitForm()">下一步</el-button>
<div class="panel-footer text-center">
<el-button type="primary" class="btn-lineG w200px" round @click="submitForm()">下一步</el-button>
</div>
</div>
</div>
......@@ -108,7 +96,6 @@ import { reactive, ref } from 'vue'
import { getCurrentInstance, onMounted } from '@vue/runtime-core'
import { useRoute, useRouter } from 'vue-router'
import { toRefs } from '@vueuse/shared'
import Ranks from './components/isRanks'
const { proxy } = getCurrentInstance()
const router = useRouter()
......@@ -116,9 +103,11 @@ const route = useRoute()
import * as match from '@/apiPc/match'
import { ElMessage } from 'element-plus'
import _ from 'lodash'
import {saveMyGroupForCpt} from "@/apiPc/match";
const data = reactive({
isRanks: false,
matchData:{},
form: {},
groupId: 0,
cptId: 0,
......@@ -128,20 +117,19 @@ const data = reactive({
rankList: [],
accept: '.doc, .pdf, .docx, .zip',
rules: {
imgUrl: { required: true, message: '请上传参赛队图标', trigger: 'blur' },
name: { required: true, message: '请填写参赛队名称', trigger: 'blur' },
type: { required: true, message: '请选择参赛队类型', trigger: 'change' },
// ctype: { required: true, message: '请选择企业性质', trigger: 'change' },
regionId: { required: true, message: '请选择所在地区', trigger: 'change' },
contactPerson: { required: true, message: '请填写联系人', trigger: 'blur' },
contactTelno: { required: true, message: '请填写联系方式', trigger: 'blur' },
abreviations: { required: true, message: '请填写参赛队简称', trigger: 'blur' },
address: { required: true, message: '请填写详细地址', trigger: 'blur' }
imgUrl: { required: true, message: '请上传', trigger: 'blur' },
name: { required: true, message: '请填写', trigger: 'blur' },
type: { required: true, message: '请选择', trigger: 'change' },
contactPerson: { required: true, message: '请填写内容', trigger: 'blur' },
contactEmail: { required: true, message: '请填写内容', trigger: 'blur' },
abreviations: { required: true, message: '请填写内容', trigger: 'blur' },
address: { required: true, message: '请填写内容', trigger: 'blur' }
},
coachOrLeaderFlag: ''
coachOrLeaderFlag: '',
matchInfo:{}
})
const {
isRanks,
isRanks,matchData,
rankList,
form,
groupId,
......@@ -149,23 +137,22 @@ const {
participantsInfoArr,
cptId,
rules,
regionsList,
regionsList,matchInfo,
coachOrLeaderFlag, accept
} = toRefs(data)
const uploadUrl = ref('/upload/upLoadToFileServer')
onMounted(() => {
// 获取参赛队信息
// 获取团体信息
groupId.value = route.query.groupId
getGroupInfo()
cptId.value = route.query.matchId
signType.value = route.query.signType
if (signType.value == 2) {
isRanks.value = true
}
getRegionsList()
match.getMatchById({ id: cptId.value }).then(res => {
coachOrLeaderFlag.value = res.data.coachOrLeaderFlag
matchInfo.value = res.data
if (res.data.groupInfo) {
participantsInfoArr.value = JSON.parse(res.data.groupInfo)
}
......@@ -204,11 +191,7 @@ function getRegionsList() {
}
function getGroupInfo() {
if (groupId.value == 0) {
// 新参赛队
return
}
match.getGroupById(groupId.value).then(res => {
match.getGroupInfo().then(res => {
form.value = res.data
})
}
......@@ -227,10 +210,6 @@ function submitForm() {
proxy.$refs['ruleFormRef'].validate((valid, fields) => {
if (valid) {
console.log(form.value)
if (typeof (form.value.regionId) === 'object') {
form.value.regionId = _.last(form.value.regionId)
}
for (const n of participantsInfoArr.value) {
if (n.status == 0 && (!n.value && !n.fixWxFile)) {
ElMessage.error(`请完善${n.name}信息`)
......@@ -238,7 +217,7 @@ function submitForm() {
}
}
if (participantsInfoArr.value) {
if (participantsInfoArr.value.length>0) {
// 保存补充信息
let fileInfo = {}
for (var p of participantsInfoArr.value) {
......@@ -261,17 +240,12 @@ function submitForm() {
})
}
// 保存参赛队信息
match.saveMyGroup(form.value).then(res => {
groupId.value = res.data
getTeamList().then(res => {
if (isRanks.value && rankList.value.length == 0) {
ElMessage.error('至少有一个队伍')
return
}
// 保存团体信息
form.value.cptId = cptId.value
form.value.groupId = groupId.value
match.saveMyGroupForCpt(form.value).then(res => {
goNext()
})
})
} else {
console.log(form.value, fields)
}
......@@ -279,7 +253,6 @@ function submitForm() {
}
function goNext() {
if (coachOrLeaderFlag.value == '1' && !isRanks.value) {
// 选教练
router.push({
name: `chooseCoach`,
......@@ -289,17 +262,6 @@ function goNext() {
signType: signType.value
}
})
} else {
// 选运动员
router.push({
name: `chooseSportsman`,
query: {
matchId: cptId.value,
groupId: groupId.value,
signType: signType.value
}
})
}
}
</script>
......@@ -308,7 +270,11 @@ function goNext() {
padding: 0;
background: #F5F7F9;
}
.border-info{
.item{margin: 5px 0;color: #4C5359; font-size: 14px;
label{font-size: 14px;margin-right: 14px}
}
}
.panel-footer .el-button--success {
padding: 0 40px;
}
......@@ -335,7 +301,7 @@ function goNext() {
margin: 10px 0;
i {
color: red;
color: red;font-style: normal;
margin: 0 4px 0 0;
}
}
......
......@@ -6,15 +6,48 @@
<el-card>
<el-steps :active="activeStep" finish-status="success" align-center>
<el-step title="创建账号" />
<el-step title="账号信息" />
<el-step title="注册完成" />
</el-steps>
</el-card>
<div class="mt20"></div>
<Step1 v-if="activeStep==0" @submit="toStep2" @userName="getUserName" />
<Step2 v-if="activeStep==1" @submit="toStep3" @prev="toStep1"/>
<div v-if="activeStep==0">
<el-card style="min-height: 50vh">
<div class="pt30">
<el-form class="d-form" size="large" label-width="120" style="max-width: 500px;margin: auto">
<el-form-item label="WDSF卡号" required>
<el-input type="text" v-model="form.WDSF" @change="resetCode" @blur="verifyCode"/>
</el-form-item>
<el-form-item label="手机/邮箱" required>
<el-input type="text" v-model="form.account" @change="resetCode" @blur="verifyCode"/>
</el-form-item>
<el-form-item label="验证码" required>
<el-input v-model="form.code">
<template #append>
<el-button type="primary" plain style="width: 110px" @click="sendsmsMsg">
<count-down v-if="counting" v-slot="{ totalSeconds }" :time="60000" @end="counting=false">
{{ totalSeconds }}
</count-down>
<span v-else>
发送验证码
</span>
</el-button>
</template>
</el-input>
<div class="vcodeBox" :style="isShow?'height:240px':'height:0'">
<Vcode :show="isShow" type="inside" @success="codeSuccess" @close="codeClose" @fail='codeFail'></Vcode>
</div>
</el-form-item>
</el-form>
</div>
<div class="text-center">
<!-- <el-button class="primary-kx" round @click="goBack">取消</el-button>-->
<el-button type="primary" class="btn-lineG w200px" round @click="next">下一步</el-button>
</div>
</el-card>
</div>
<div v-if="activeStep==1">
</div>
</div>
......@@ -22,10 +55,9 @@
</div>
</template>
<script>
export default {
name: "peraonal"
}
<script setup>
import {ref} from "vue"
const activeStep = ref(0)
</script>
<style scoped>
......
......@@ -4,10 +4,10 @@
<img src="@/assets/dance/ok.png"/>
<h3>注册成功</h3>
</div>
<div class="border-info text-center">
<div>
<div class="border-info text-center inline">
<label>登录账号</label> 321
</div>
</div>
<div class="text-center">
<el-button class="primary-kx" @click="goHome">返回首页</el-button>
......@@ -20,24 +20,26 @@
import {reactive} from "@vue/runtime-core";
import {toRefs} from "@vueuse/shared/index";
import Vcode from "vue3-puzzle-vcode"
import { ElMessage } from 'element-plus'
import {ElMessage} from 'element-plus'
import CountDown from '@chenfengyuan/vue-countdown'
import {getCaptchaSms,checkRegisterCode} from "@/apiPc/match";
import {getCaptchaSms, checkRegisterCode} from "@/apiPc/match";
const data = reactive({
isShow:false,
isCodeTrue:false,
counting:false,
form:{},
isShow: false,
isCodeTrue: false,
counting: false,
form: {},
activeStep: 0
})
const {isShow,isCodeTrue,counting,form,activeStep} = toRefs(data)
const emit = defineEmits(['submit','userName'])
const {isShow, isCodeTrue, counting, form, activeStep} = toRefs(data)
const emit = defineEmits(['submit', 'userName'])
function sendsmsMsg() {
if(!form.value.account){
if (!form.value.account) {
ElMessage.error('请填写手机/邮箱')
return
}
if(counting.value){
if (counting.value) {
return
} else {
isShow.value = true
......@@ -55,7 +57,7 @@ const goSign = () => {
</script>
<style scoped lang="scss">
.el-input-group__append button.el-button, .el-input-group__append button.el-button:hover{
.el-input-group__append button.el-button, .el-input-group__append button.el-button:hover {
color: var(--el-color-primary);
background: #efefff;
border: var(--el-color-primary) solid 1px;
......
......@@ -77,12 +77,12 @@ export default defineConfig(({ mode, command }) => {
},
'/dev-api/ztx-webSite': {
// target: 'http://123.60.96.243:1897/stage-api/',
target: 'http://192.168.1.132:8083/',
target: 'http://192.168.1.130:8083/',
changeOrigin: true,
rewrite: (p) => p.replace(/^\/dev-api\/ztx-webSite/, '')
},
'/dev-api': {
target: 'http://192.168.1.132:8083',
target: 'http://192.168.1.130:8083',
// target: 'http://localhost:8787',
changeOrigin: true,
rewrite: (p) => p.replace(/^\/dev-api/, '')
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!