b2104d0d by 杨炀

no message

1 parent 2c4db1b8
......@@ -563,6 +563,13 @@ export function checkNoRepeat(query) {
})
}
export function saveWdsfMin(obj,groupId) {
return request({
url: `systemj/personInfo/bindWdsfForGroup/${groupId}`,
method: 'post',
data:obj
})
}
//todo
export function bindWdsf(perId,card) {
return request({
......
......@@ -4,22 +4,22 @@
<img class="logo" src="/img/logoArr.png">
</router-link>
<div class="flex-right" style="display:none;">
<div class="ml20 forPc" >
<div class="flex-right">
<div class="ml20" >
<el-button v-if="!isLogin" style="border-radius: 20px;" class="loginBtn">
<span @click="goLogin">{{ language==0?'登录':'LOGIN' }}</span>
<!-- | &nbsp;<span @click="goRegister">注册</span>-->
</el-button>
<el-button v-if="isLogin" style="border-radius: 20px;" class="loginBtn">
<span @click="router.push('/center/myInfo')">{{ language==0?'个人中心':'Personal' }}</span>
&nbsp;&nbsp;<span @click="logout()">{{language==0?'退出':'Exit'}}</span>
&nbsp;&nbsp;
<span @click="logout()">{{language==0?'退出':'Exit'}}</span>
</el-button>
</div>
</div>
<a class="ropenbtn" @click="showDrawer">
<img src="@/assets/v1/menu.png">
</a>
<!-- <a class="ropenbtn" @click="showDrawer">-->
<!-- <img src="@/assets/v1/menu.png">-->
<!-- </a>-->
</div>
<el-drawer
......@@ -277,9 +277,6 @@ function getCode() {
}
}
@media (max-width: 1340px) {
.loginBtn {
display: none;
}
.home-menu .el-menu--horizontal > .el-menu-item{margin: 0; }
}
@media (max-width: 1000px) {
......
......@@ -2,11 +2,15 @@
<div class="">
<div class="box ph-30">
<el-card>
<el-card v-if="user">
<single-sign-step v-if="user.utype=='1'" activeStep="1" :language="language"/>
<team-sign-step v-if="user.utype=='2'" activeStep="2" :language="language"/>
</el-card>
<el-card class="mt20">
<h3 class="text-center text-danger">如果没有随行人员,点击【下一步】跳过此步骤</h3>
</el-card>
<el-row class="mt20" :gutter="20">
<el-col :lg="12">
<el-card v-loading="loading">
......@@ -14,8 +18,8 @@
<div class="card-header">
<img src="@/assets/sign/tag01.png"/>
{{ language==0?'教练':'Coach' }}
<span class="tip" v-if="language==0">(教练/领队,至少选择一项)</span>
<span class="tip" v-else>(Coach/Team Leader, select at least one)</span>
<!-- <span class="tip" v-if="language==0">(教练/领队,至少选择一项)</span>-->
<!-- <span class="tip" v-else>(Coach/Team Leader, select at least one)</span>-->
</div>
</template>
<div class="chooseForm">
......@@ -42,8 +46,8 @@
<div class="card-header">
<img src="@/assets/sign/tag02.png"/>
{{ language==0?'领队':'Team leader' }}
<span class="tip" v-if="language==0">(教练/领队,至少选择一项)</span>
<span class="tip" v-else>(Coach/Team Leader, select at least one)</span>
<!-- <span class="tip" v-if="language==0">(教练/领队,至少选择一项)</span>-->
<!-- <span class="tip" v-else>(Coach/Team Leader, select at least one)</span>-->
</div>
</template>
<div class="chooseForm">
......@@ -175,6 +179,7 @@
</div>
<dialogAddCoach ref="dialogAddCoachRef" @submitForm="getList"/>
<dialogAddCoach_En ref="dialogAddCoachRef_En" @submitForm="getList"/>
</div>
</template>
......@@ -185,8 +190,8 @@ import SingleSignStep from './components/singleSignStep'
import {ref, reactive,toRefs} from 'vue'
import {getCurrentInstance, onMounted} from '@vue/runtime-core'
import * as match from '@/apiPc/match'
import dialogAddCoach from './components/addCoach'
import cache from "@/plugins/cache"
import DialogAddCoach from './components/addCoach'
import DialogAddCoach_En from './components/addCoach_en'
const {proxy} = getCurrentInstance()
const router = useRouter()
const route = useRoute()
......@@ -222,6 +227,10 @@ onMounted(() => {
matchId = route.query.matchId
groupId.value = group.id
signType.value = route.query.signType || ''
if(!user){
router.push({name: 'home'})
return
}
getList()
})
......@@ -299,10 +308,10 @@ function chooseDone() {
function goNext() {
console.log(form.value)
if ((form.value.coachs.length < 1) && (form.value.leader.length < 1)) {
ElMessage.warning(language.value==0?'至少选一个教练或领队':'Coach/Team Leader, select at least one')
return
}
// if ((form.value.coachs.length < 1) && (form.value.leader.length < 1)) {
// ElMessage.warning(language.value==0?'至少选一个教练或领队':'Coach/Team Leader, select at least one')
// return
// }
var obj = {
cptId: matchId,
coachIds: form.value.coachs?.toString() || '',
......@@ -358,20 +367,30 @@ function goPrev() {
}
function editPerson(id) {
proxy.$refs['dialogAddCoachRef'].open({
var obj = {
title: language.value==0?'编辑人员':'Edit',
id: id,
groupId: groupId.value || 0
})
}
if(language.value==0){
proxy.$refs['dialogAddCoachRef'].open(obj)
}else {
proxy.$refs['dialogAddCoachRef_En'].open(obj)
}
}
function addCoach(n) {
proxy.$refs['dialogAddCoachRef'].open({
var obj = {
title: language.value==0?'新建人员':'Add',
id: 0,
label: n,
groupId: groupId.value
})
}
if(language.value==0){
proxy.$refs['dialogAddCoachRef'].open(obj)
}else {
proxy.$refs['dialogAddCoachRef_En'].open(obj)
}
}
</script>
......
......@@ -7,13 +7,13 @@
<el-card :body-style="{'padding-top': '0'}">
<el-row class="mt20" :gutter="20">
<el-col :lg="24">
<el-col :lg="10">
<div class="panel border">
<div class="panel-header ">
<h3 class="panel-title" v-if="language==0">选择参赛运动员清单</h3>
<h3 class="panel-title" v-else>Select list of participating athletes</h3>
<!-- <a class="fr" @click="emptyChoosed">{{ language == 0 ? '清空' : 'Empty' }}</a>-->
<el-button type="primary" plain class="fr" @click="chooseSportman">选手管理</el-button>
<el-button type="primary" plain class="fr" @click="chooseSportman">{{ language == 0 ? '选手管理' : 'Player Management' }}</el-button>
</div>
<div class="panel-body" style="padding: 10px">
<div style="margin: 0 4px 10px;display: flex">
......@@ -28,15 +28,14 @@
-{{ c.age }}
</div>
</el-option>
<template #tag>
<el-tag v-for="v in choosed2List" :key="v.value" type="primary">
{{ v.xing + v.ming }}
</el-tag>
</template>
<!-- <template #tag>-->
<!-- <el-tag v-for="v in choosed2List" :key="v.value" type="primary">-->
<!-- {{ v.xing + v.ming }}-->
<!-- </el-tag>-->
<!-- </template>-->
</el-select>
<el-button type="primary" @click="emptychoosedchoosed">{{
language == 0 ? '重选' : 'Re-select'
}}
<el-button type="primary" @click="emptychoosedchoosed">
{{language == 0 ? '重选' : 'Re-select' }}
</el-button>
</div>
<!-- <div class="noPicChooseForm" id="chooseArr">-->
......@@ -53,7 +52,7 @@
</div>
</div>
</el-col>
<el-col :lg="24">
<el-col :lg="14">
<div class="panel border">
<div class="panel-header ">
<h3 class="panel-title" v-if="language==0">可参与报名的项目</h3>
......@@ -132,7 +131,8 @@
</div>
<dialogAddCoach ref="dialogAddCoachRef"/>
<dialogAllSportsmanList ref="dialogAllSportsmanListRef" @transfer="getChoosed" @submitForm="getSignInfoList"/>
<!-- <dialogAllSportsmanList ref="dialogAllSportsmanListRef" @transfer="getChoosed" @submitForm="getSignInfoList"/>-->
<dialogAllSportsmanList ref="dialogAllSportsmanListRef" @submitForm="getAthletesList"/>
<dialogImport ref="dialogImportProps" @submitForm="getMySignInfo"/>
<el-dialog v-model="showResult" :close-on-click-modal="false" :show-close="false">
<el-result icon="success" :title="language==0?'报名成功':'Sign up successful'">
......@@ -144,7 +144,7 @@
</el-dialog>
<dialogExtraForm ref="popExtraForm" @submitForm="getSignInfoList"/>
<dialogWdsf ref="popWdsf" @submitForm="getProjectList" @cancel="removeCurproject"/>
<dialogWdsf ref="popWdsf" @submitForm="getAthletesList" @cancel="removeCurproject"/>
<el-tour v-model="openTour" :current="tourCurrent">
<el-tour-step target="#addRef" title="第一步" description="点击选择运动员" :next-button-props="nextButtonProps"/>
<el-tour-step v-if="choosedList.length>0" target="#chooseArr" title="第二步" description="勾选报项运动员"/>
......@@ -434,7 +434,7 @@ function addCoach() {
})
}
const params = {
title: language.value == 0 ? '新增运动员' : 'Add',
title: language.value == 0 ? '新增运动员' : 'Add',
id: 0,
groupId: groupId.value
}
......@@ -473,6 +473,7 @@ function removeThis(id) {
// 重新获取已报名信息
ElMessage.success(language.value == 0 ? '已移除该报项' : 'success')
getSignInfoList()
getProjectList()
})
})
}
......@@ -502,15 +503,6 @@ function goMySign() {
}
const goPersonInfo = (row) => {
if (signInfoType == '1') {
ElMessageBox.alert('已报项,前往我的报项', '提示', {
confirmButtonText: 'OK',
callback: (Action) => {
router.push({name: 'myMatch'})
}
})
return
}
// 完善补充信息
console.log(row)
// debugger
......@@ -565,14 +557,14 @@ function changeProject(e) {
//循环choosed2List 检查是否存在WDSF号
let n = 0
for(var cc of choosed2List.value){
if(!cc.wdsf){
if(!cc.wdsfMin){
n++
}
}
//obj需要wdsf 且 currProjectId非空
if (obj.checkMemberFlag == '1'&&currProjectId.value != ''&& n>0) {
const params = {
title: '验证WDSF',
title: language.value == 0 ? '验证WDSF' :'Verify WDSF',
groupId: groupId.value,
matchId: matchId.value,
list: choosed2List.value
......
......@@ -15,7 +15,8 @@
/>
</el-form-item>
<el-form-item v-if="language!=0" label="WDSF code" prop="wdsfMin">
<el-input v-model="form.wdsfMin" type="number"/>
<span v-if="form.wdsfMin">{{form.wdsfMin}}</span>
<el-input v-else v-model="form.wdsfMin" type="number"/>
</el-form-item>
<el-form-item :label="language==0?'姓氏':'surname'" prop="xing" required>
<el-input v-model="form.xing"/>
......@@ -36,6 +37,9 @@
<el-form-item :label="language==0?'证件号码':'ID NO'" prop="idcCode" required>
<el-input v-model="form.idcCode" @blur="checkCode" :disabled="editgay"/>
</el-form-item>
<el-form-item label="上传证件照" required :required="form.idcType!='0'">
<file-upload v-model="form.passportUrl" :limit="1" :is-show-tip="false" />
</el-form-item>
<el-form-item :label="language==0?'性别':'sex'" prop="sex">
<el-radio-group v-model="form.sex" :disabled="form.idcType=='0'">
<el-radio value="0">{{ language==0?'女':'female' }}</el-radio>
......@@ -56,13 +60,13 @@
<el-option v-for="l in labels" :key="l.value" :value="l.value" :label="language==0?l.label:l.enlabel"/>
</el-select>
</el-form-item>
<el-form-item :label="language==0?'手机号码':'Phone'" prop="phone" required>
<el-form-item :label="language==0?'手机号码':'Phone'" prop="phone">
<el-input v-model="form.phone" type="number"/>
</el-form-item>
<el-form-item :label="language==0?'所属国家/地区':'Country'" prop="countryId">
<el-select :disabled="language==0" filterable v-model="form.countryId" style="width: 100%;" @change="changeCountryId">
<el-form-item :label="language==0?'所属国家/地区':'Country'" prop="countryId" required>
<el-select filterable v-model="form.countryId" style="width: 100%;" @change="changeCountryId">
<el-option v-for="item in countryList" :key="item.id" :label="language==0?item.name:item.enName" :value="item.id"/>
</el-select>
</el-form-item>
......@@ -78,7 +82,8 @@
</el-form-item>
<el-form-item v-if="language=='0'" :label="language==0?'WDSF会员号':'WDSF code'" prop="wdsfMin">
<el-input v-model="form.wdsfMin" type="number"/>
<span v-if="form.wdsfMin">{{form.wdsfMin}}</span>
<el-input v-else v-model="form.wdsfMin" type="number"/>
</el-form-item>
......
<template>
<el-dialog
v-model="show" :title="title" width="1100px" append-to-body close-icon="CircleClose" center
:close-on-click-modal="false" class="pcloginpop"
destroy-on-close
>
<el-form ref="dialogRef" :model="form" :rules="language==0?rules:rules_cn" label-width="120px" inline>
<el-row :gutter="30" class="mt30">
<el-col :lg="12" class="touxiang">
<el-form-item prop="picUrl" :label="language==0?'个人照片':'Photo'">
<ImageUpload2
v-model="form.picUrl" :crop-height="280" :crop-width="200" class="threeFour" :limit="1"
:is-show-tip="false"
/>
</el-form-item>
<el-form-item :label="language==0?'WDSF会员号':'WDSF MIN'" v-if="form.id">
{{ form.wdsfMin }}
</el-form-item>
<el-form-item :label="language==0?'WDSF会员号':'WDSF MIN'" required v-else>
<el-input type="text" v-model="form.wdsfMin" @change="resetCode" >
<template #append>
<el-button type="primary" plain style="width: 110px" @click="checkCard">
<el-icon v-if="isCodeTrue" size="16" color="#67C23A">
<CircleCheckFilled/>
</el-icon>
<span v-else>{{ language == 0 ? '校验卡号' : 'Check Code' }}</span>
</el-button>
</template>
</el-input>
</el-form-item>
<el-form-item :label="language==0?'姓氏':'Surname'" prop="xing" required>
<el-input v-model="form.xing"/>
</el-form-item>
<el-form-item :label="language==0?'名':'Name'" prop="ming" required>
<el-input v-model="form.ming"/>
</el-form-item>
<el-form-item :label="language==0?'证件类型':'ID Type'" prop="idcType" required>
<el-select v-model="form.idcType" style="width: 100%;" :disabled="editgay">
<el-option
v-for="item in certificates"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item :label="language==0?'证件号码':'ID NO'" prop="idcCode" required>
<el-input v-model="form.idcCode" @blur="checkCode" :disabled="editgay"/>
</el-form-item>
<el-form-item label="Passport File" required v-if="form.idcType=='1'">
<file-upload v-model="form.passportUrl" :limit="1" :is-show-tip="false" :button-text="'Upload'"/>
</el-form-item>
</el-col>
<el-col :lg="12">
<el-form-item :label="language==0?'性别':'Gender'" prop="sex">
<el-radio-group v-model="form.sex" :disabled="form.idcType=='0'">
<el-radio value="0">{{ language == 0 ? '女' : 'female' }}</el-radio>
<el-radio value="1">{{ language == 0 ? '男' : 'male' }}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item :label="language==0?'出生日期':'Birth'" prop="birth">
<el-date-picker
v-model="form.birth" :disabled="form.idcType=='0'"
style="width: 100%;"
type="date" format="YYYY-MM-DD" value-format="YYYY-MM-DD"
/>
</el-form-item>
<el-form-item :label="language==0?'主要会员角色':'Roles'" prop="labelArr">
<el-select v-model="form.labelArr" multiple>
<el-option v-for="l in labels" :key="l.value" :value="l.value" :label="language==0?l.label:l.enlabel"/>
</el-select>
</el-form-item>
<el-form-item :label="language==0?'手机号码':'Phone'" prop="phone">
<el-input v-model="form.phone" type="number"/>
</el-form-item>
<el-form-item :label="language==0?'所属国家/地区':'Country'" prop="countryId" required>
<el-select :disabled="language==0" filterable v-model="form.countryId" style="width: 100%;"
@change="changeCountryId">
<el-option v-for="item in countryList" :key="item.id" :label="language==0?item.name:item.enName"
:value="item.id"/>
</el-select>
</el-form-item>
<el-form-item :label="language==0?'详细地址':'Address'" prop="address">
<el-cascader v-if="form.countryId == 240"
v-model="form.regionId"
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-form-item :label="language==0?'邮箱':'Email'" prop="email" required>-->
<!-- <el-input v-model="form.email"/>-->
<!-- </el-form-item>-->
</el-col>
</el-row>
</el-form>
<template #footer>
<div class="dialog-footer text-center">
<el-button type="primary" class="btn-lineG w200px" round @click="submitForm">{{
language == 0 ? '确定' : 'Save'
}}
</el-button>
</div>
</template>
</el-dialog>
</template>
<script setup>
import {reactive, ref, toRefs, watch} from 'vue'
import {getCurrentInstance, nextTick, onMounted} from '@vue/runtime-core'
import * as match from '@/apiPc/match'
import {ElMessage} from 'element-plus'
import _ from 'lodash'
import {useStorage} from "@vueuse/core/index";
const language = useStorage('language', 0)
const certificates = ref([
// {
// value: '0',
// label: language.value == 0 ? '居民身份证' : 'Resident ID card'
// },
{
value: '1',
label: language.value == 0 ? '护照' : 'Passport'
},
{
value: '2',
label: language.value == 0 ? '其他' : 'Other'
}
])
const {proxy} = getCurrentInstance()
const emit = defineEmits(['submitForm'])
const data = reactive({
form: {
// countryId: 240
sex: '0'
},
rules: {
xing: [{required: true, message: '必填', trigger: 'blur'}],
ming: [{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'}]
},
rules_cn: {
xing: [{required: true, message: 'required', trigger: 'blur'}],
ming: [{required: true, message: 'required', trigger: 'blur'}],
countryId: [{required: true, message: 'required', trigger: 'change'}],
idcType: [{required: true, message: 'required', trigger: 'change'}],
idcCode: [{required: true, message: 'required', trigger: 'blur'}],
// phone: [{required: true, message: 'required', trigger: 'blur'}],
// regionId: [{ required: true, message: 'required', trigger: 'change' }],
birth: [{required: true, message: 'required', trigger: 'change'}],
// address: [{ required: true, message: 'required', trigger: 'blur' }],
// picUrl: [{required: true, message: 'required', trigger: 'blur'}],
sex: [{required: true, message: 'required', trigger: 'change'}],
labelArr: [{required: true, message: 'required', trigger: 'change'}]
},
show: false,
countryList: [],
regionsList: [],
labels: [
{value: '0', label: '运动员', enlabel: 'Sportsman'},
{value: '1', label: '教练', enlabel: 'Coach'},
{value: '2', label: '领队', enlabel: 'Leader'},
{value: '4', label: '队医', enlabel: 'Nurse'},
{value: '5', label: '翻译', enlabel: 'Translator'},
{value: '6', label: '官员', enlabel: 'Official'},
{value: '3', label: '其他', enlabel: 'Other'}
],
title: '添加选手信息',
groupId: '0',
showRequire: false,
isMe: false
})
const {
showRequire,
form,
rules,
rules_cn,
show,
countryList,
regionsList,
title,
groupId,
labels,
uType,
isMe
} = toRefs(data)
onMounted(() => {
getCountryList()
getRegionsList()
})
const editgay = ref(false)
const open = (params) => {
console.log(params.label)
show.value = true
title.value = params.title
groupId.value = params.groupId || '0'
if (params.label) {
form.value.labelArr = [params.label]
}
if (params.id != 0) { // 编辑
editgay.value = true
match.getPersonInfoById(params.id).then(res => {
form.value = res.data
form.value.id = params.id
if (form.value.label) {
// {0:0,1:1,2:3}
form.value.labelArr = form.value.label.split(',')
}
})
} else {
editgay.value = false
}
}
defineExpose({open})
watch(show, (value) => {
if (!value) {
form.value = {
sex: '0'
}
if (language.value == 0) {
form.value.countryId = 240
}
}
nextTick(() => {
// proxy.$refs['dialogRef'].clearValidate()
})
})
function getCountryList() {
match.countryList().then(res => {
countryList.value = res.data
})
}
function changeCountryId() {
if (form.value.countryId != 240) {
form.value.nation = '其他'
}
}
function getRegionsList() {
match.regionsList().then(res => {
regionsList.value = res.data
})
}
function checkCode() {
if (form.value.idcType == '0' && form.value.idcCode) {
giveBirthDay()
var obj = {
idcType: form.value.idcType,
idcCode: form.value.idcCode
}
// match.checkPerson(obj).then(res => {
// if (res.data.idcCode != null) {
// form.value = res.data
// if (form.value.label != null) {
// form.value.labelArr = form.value.label.split(',')
// }
// form.value.groupId = groupId.value
// }
// })
}
}
function giveBirthDay() {
// 判断身份证正确性/赋值生日
if (form.value.idcType == 0) {
if (!(/(^\d{15}$)|(^\d{17}([0-9]|X)$)/.test(form.value.idcCode))) {
ElMessage.warning('请输入正确的身份证号码')
} else {
let tmpStr = ''
if (form.value.idcCode.length == 15) {
tmpStr = form.value.idcCode.substring(6, 12)
tmpStr = '19' + tmpStr
tmpStr = tmpStr.substring(0, 4) + '-' + tmpStr.substring(4, 6) + '-' + tmpStr.substring(6)
} else {
tmpStr = form.value.idcCode.substring(6, 14)
tmpStr = tmpStr.substring(0, 4) + '-' + tmpStr.substring(4, 6) + '-' + tmpStr.substring(6)
}
form.value.birth = tmpStr
const res = /^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/
if (form.value.idcCode && res.test(form.value.idcCode)) {
const genderCode = form.value.idcCode.charAt(16)
if (parseInt(genderCode) % 2 == 0) {
form.value.sex = '0'
} else {
form.value.sex = '1'
}
}
}
}
}
function submitForm() {
proxy.$refs['dialogRef'].validate((valid) => {
if (valid) {
// 验证身份证号
if (form.value.idcType == 0 && !(/(^\d{15}$)|(^\d{17}([0-9]|X)$)/.test(form.value.idcCode))) {
ElMessage.warning('请输入正确的身份证号码')
return
}
// 验证手机号
if (showRequire.value) {
var pattern = /^1[3456789]\d{9}$/
if (!pattern.test(form.value.phone)) {
ElMessage.warning(language.value == 0 ? '请输入正确的手机号' : 'Please enter the correct mobile phone number')
return
}
}
if (typeof (form.value.regionId) === 'object') {
form.value.regionId = _.last(form.value.regionId)
}
form.value.label = form.value.labelArr.toString()
if (groupId.value != 0) {
// 团队
form.value.groupId = groupId.value
match.savePersonForMyGroup(form.value).then(res => {
ElMessage.success(language.value == 0 ? '保存成功' : 'Save successful')
show.value = false
emit('submitForm')
})
} else {
if (editgay.value) {
// id不是0
match.editPersonInfo(form.value).then(res => {
ElMessage.success(language.value == 0 ? '保存成功' : 'Save successful')
show.value = false
emit('submitForm')
})
} else {
if (isMe.value) {
match.saveMyBaseInfo(form.value).then(res => {
ElMessage.success(language.value == 0 ? '保存成功' : 'Save successful')
show.value = false
emit('submitForm')
})
} else {
match.savePersonForMyPerson(form.value).then(res => {
ElMessage.success(language.value == 0 ? '保存成功' : 'Save successful')
show.value = false
emit('submitForm')
})
}
}
}
}
})
}
function cancel() {
show.value = false
}
</script>
<style lang="scss">
.threeFour {
width: 100%;
.el-upload--picture-card {
width: 120px;
height: 160px;
}
.el-upload-list--picture-card .el-upload-list__item {
width: 120px;
height: 160px;
}
}
.tip {
font-size: 13px;
color: #999;
margin: 10px 0;
i {
color: red;
margin: 0 4px 0 0;
}
}
.shenfen {
.el-upload--picture-card {
width: 320px;
height: 200px;
}
.el-upload-list--picture-card .el-upload-list__item {
width: 320px;
height: 200px;
}
}
.touxiang {
:deep(.el-upload--picture-card ) {
width: 140px;
height: 200px;
}
}
.touxiang {
:deep(.el-upload-list__item ) {
width: 140px;
height: 200px;
}
}
.el-form--inline .el-form-item {
width: 100%
}
.boxDialog {
.el-dialog__header {
background: linear-gradient(#ed2c22, #fe6d45);
margin-right: 0;
height: 52px;
span {
color: #fff;
}
}
}
</style>
<template>
<el-dialog
v-model="show" :title="title" width="1100px" append-to-body close-icon="CircleClose" center
:close-on-click-modal="false" class="pcloginpop"
destroy-on-close
>
<el-form ref="dialogRef" :model="form" :rules="language==0?rules:rules_cn" label-width="120px" inline>
<el-row :gutter="30" class="mt30">
<el-col :lg="12" class="touxiang">
<el-form-item prop="picUrl" :label="language==0?'个人照片':'Photo'">
<ImageUpload2
v-model="form.picUrl" :crop-height="280" :crop-width="200" class="threeFour" :limit="1"
:is-show-tip="false"
/>
</el-form-item>
<el-form-item :label="language==0?'WDSF会员号':'WDSF MIN'" v-if="form.id">
{{ form.wdsfMin }}
</el-form-item>
<el-form-item :label="language==0?'WDSF会员号':'WDSF MIN'" required v-else>
<el-input type="text" v-model="form.wdsfMin" @change="resetCode" >
<template #append>
<el-button type="primary" plain style="width: 110px" @click="checkCard">
<el-icon v-if="isCodeTrue" size="16" color="#67C23A">
<CircleCheckFilled/>
</el-icon>
<span v-else>{{ language == 0 ? '校验卡号' : 'Check Code' }}</span>
</el-button>
</template>
</el-input>
</el-form-item>
<el-form-item :label="language==0?'姓氏':'Surname'" prop="xing">
<el-input v-model="form.xing" disabled/>
</el-form-item>
<el-form-item :label="language==0?'名':'Name'" prop="ming" required>
<el-input v-model="form.ming" disabled/>
</el-form-item>
<el-form-item :label="language==0?'证件类型':'ID Type'" prop="idcType" required>
<el-select v-model="form.idcType" style="width: 100%;" :disabled="editgay">
<el-option
v-for="item in certificates"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item :label="language==0?'证件号码':'ID NO'" prop="idcCode" required>
<el-input v-model="form.idcCode" @blur="checkCode" :disabled="editgay"/>
</el-form-item>
<el-form-item :label="language==0?'性别':'Gender'" prop="sex">
<el-radio-group v-model="form.sex" :disabled="form.idcType=='0'">
<el-radio value="0">{{ language==0?'女':'female' }}</el-radio>
<el-radio value="1">{{ language==0?'男':'male' }}</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :lg="12">
<el-form-item :label="language==0?'出生日期':'Birth'" prop="birth">
<el-date-picker
v-model="form.birth" :disabled="form.idcType=='0'"
style="width: 100%;"
type="date" format="YYYY-MM-DD" value-format="YYYY-MM-DD"
/>
</el-form-item>
<el-form-item :label="language==0?'主要会员角色':'Roles'" prop="labelArr">
<el-select v-model="form.labelArr" multiple>
<el-option v-for="l in labels" :key="l.value" :value="l.value" :label="language==0?l.label:l.enlabel"/>
</el-select>
</el-form-item>
<el-form-item :label="language==0?'手机号码':'Phone'" prop="phone">
<el-input v-model="form.phone" type="number"/>
</el-form-item>
<el-form-item :label="language==0?'所属国家/地区':'Country'" prop="countryId" required>
<el-select disabled filterable v-model="form.countryId" style="width: 100%;" @change="changeCountryId">
<el-option v-for="item in countryList" :key="item.id" :label="language==0?item.name:item.enName" :value="item.id"/>
</el-select>
</el-form-item>
<el-form-item :label="language==0?'详细地址':'Address'" prop="address">
<el-cascader v-if="form.countryId == 240"
v-model="form.regionId"
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-row>
</el-form>
<Vcode :show="isShow" :z-index="3000" @success="codeSuccess()"></Vcode>
<template #footer>
<div class="dialog-footer text-center">
<el-button type="primary" class="btn-lineG w200px" round @click="submitForm">{{ language==0?'确定':'Save' }}</el-button>
</div>
</template>
</el-dialog>
</template>
<script setup>
import {reactive, ref, toRefs, watch} from 'vue'
import {getCurrentInstance, nextTick, onMounted} from '@vue/runtime-core'
import * as match from '@/apiPc/match'
import {ElMessage} from 'element-plus'
import _ from 'lodash'
import {useStorage} from "@vueuse/core/index";
import {checkWdsf, getCaptchaSms} from "@/apiPc/match";
const language= useStorage('language',0)
const certificates = ref([
{
value: '0',
label: language.value == 0 ? '居民身份证' : 'Resident ID card'
},
{
value: '1',
label: language.value == 0 ? '护照' : 'Passport'
},
{
value: '2',
label: language.value == 0 ? '其他' : 'Other'
}
])
const {proxy} = getCurrentInstance()
const emit = defineEmits(['submitForm'])
const data = reactive({
form: {
// countryId: 240
sex:'0'
},
rules_cn:{
// xing: [{required: true, message: 'required', trigger: 'blur'}],
ming: [{required: true, message: 'required', trigger: 'blur'}],
// countryId: [{required: true, message: 'required', trigger: 'change'}],
idcType: [{required: true, message: 'required', trigger: 'change'}],
idcCode: [{required: true, message: 'required', trigger: 'blur'}],
// phone: [{required: true, message: 'required', trigger: 'blur'}],
// regionId: [{ required: true, message: 'required', trigger: 'change' }],
// birth: [{required: true, message: 'required', trigger: 'change'}],
// address: [{ required: true, message: 'required', trigger: 'blur' }],
// picUrl: [{required: true, message: 'required', trigger: 'blur'}],
sex: [{required: true, message: 'required', trigger: 'change'}],
labelArr: [{required: true, message: 'required', trigger: 'change'}]
},
show: false,
countryList: [],
regionsList: [],
labels: [
{value: '0', label: '运动员', enlabel: 'Sportsman'},
{value: '1', label: '教练', enlabel: 'Coach'},
{value: '2', label: '领队', enlabel: 'Leader'},
{value: '4', label: '队医', enlabel: 'Nurse'},
{value: '5', label: '翻译', enlabel: 'Translator'},
{value: '6', label: '官员', enlabel: 'Official'},
{value: '3', label: '其他', enlabel: 'Other'}
],
title: '添加选手信息',
groupId: '0',
showRequire: false,
isMe:false
})
const {showRequire, form, rules,rules_cn, show, countryList, regionsList, title, groupId, labels,uType,isMe} = toRefs(data)
const isShow = ref(false)
onMounted(() => {
getCountryList()
getRegionsList()
})
const editgay = ref(false)
const open = (params) => {
console.log(params.label)
show.value = true
title.value = params.title
groupId.value = params.groupId || '0'
isMe.value = params.isMe
if(params.label){
form.value.labelArr= [params.label]
}
if(language.value == 0){
form.value.countryId = 240
form.value.idcType = '0'
}
if(isMe.value){
//个人
match.getMyPersonInfo().then(res => {
form.value = res.data
form.value.id = res.data.id
if (form.value.label) {
// {0:0,1:1,2:3}
form.value.labelArr = form.value.label.split(',')
} else {
form.value.labelArr = ['0']
}
})
} else {
if (params.id != 0) { // 编辑
editgay.value = true
match.getPersonInfoById(params.id).then(res => {
form.value = res.data
form.value.id = params.id
if (form.value.label) {
// {0:0,1:1,2:3}
form.value.labelArr = form.value.label.split(',')
}
})
} else {
editgay.value = false
}
}
}
defineExpose({open})
watch(show, (value) => {
if (!value) {
form.value = {
sex:'0'
}
if(language.value == 0){
form.value.countryId = 240
}
}
nextTick(() => {
// proxy.$refs['dialogRef'].clearValidate()
})
})
function checkCard() {
if (!form.value.card) {
if (language.value == 0) {
ElMessage.warning('请填写WDSF会员号')
} else {
ElMessage.warning('Please fill in your WDSF MIN')
}
return
}
isShow.value = true
}
function codeSuccess(msg) {
console.log('验证通过' + msg);
isShow.value = false
checkWdsf({card: form.value.wdsfMin}).then(res => {
form.value = res.data
if(form.value.passportUrl){
}
if (!form.value.sex) {
form.value.sex = '0'
}
if (form.value.wdsfFlag == '0') {
form.value = 0
if (language.value == 0) {
ElMessage.warning('WDSF卡号错误')
} else {
ElMessage.warning('WDSF ID is Error')
}
}
})
}
function getCountryList() {
match.countryList().then(res => {
countryList.value = res.data
})
}
function changeCountryId() {
if (form.value.countryId != 240) {
form.value.nation = '其他'
}
}
function getRegionsList() {
match.regionsList().then(res => {
regionsList.value = res.data
})
}
function checkCode() {
if (form.value.idcType=='0' && form.value.idcCode) {
giveBirthDay()
var obj = {
idcType: form.value.idcType,
idcCode: form.value.idcCode
}
// match.checkPerson(obj).then(res => {
// if (res.data.idcCode != null) {
// form.value = res.data
// if (form.value.label != null) {
// form.value.labelArr = form.value.label.split(',')
// }
// form.value.groupId = groupId.value
// }
// })
}
}
function giveBirthDay() {
// 判断身份证正确性/赋值生日
if (form.value.idcType == 0) {
if (!(/(^\d{15}$)|(^\d{17}([0-9]|X)$)/.test(form.value.idcCode))) {
ElMessage.warning('请输入正确的身份证号码')
} else {
let tmpStr = ''
if (form.value.idcCode.length == 15) {
tmpStr = form.value.idcCode.substring(6, 12)
tmpStr = '19' + tmpStr
tmpStr = tmpStr.substring(0, 4) + '-' + tmpStr.substring(4, 6) + '-' + tmpStr.substring(6)
} else {
tmpStr = form.value.idcCode.substring(6, 14)
tmpStr = tmpStr.substring(0, 4) + '-' + tmpStr.substring(4, 6) + '-' + tmpStr.substring(6)
}
form.value.birth = tmpStr
const res = /^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/
if (form.value.idcCode && res.test(form.value.idcCode)) {
const genderCode = form.value.idcCode.charAt(16)
if (parseInt(genderCode) % 2 == 0) {
form.value.sex = '0'
} else {
form.value.sex = '1'
}
}
}
}
}
function submitForm() {
proxy.$refs['dialogRef'].validate((valid) => {
if (valid) {
// 验证身份证号
if (form.value.idcType == 0 && !(/(^\d{15}$)|(^\d{17}([0-9]|X)$)/.test(form.value.idcCode))) {
ElMessage.warning('请输入正确的身份证号码')
return
}
// 验证手机号
if (showRequire.value) {
var pattern = /^1[3456789]\d{9}$/
if (!pattern.test(form.value.phone)) {
ElMessage.warning(language.value == 0 ?'请输入正确的手机号':'Please enter the correct mobile phone number')
return
}
}
if (typeof (form.value.regionId) === 'object') {
form.value.regionId = _.last(form.value.regionId)
}
form.value.label = form.value.labelArr.toString()
if (groupId.value != 0) {
// 团队
form.value.groupId = groupId.value
match.savePersonForMyGroup(form.value).then(res => {
ElMessage.success(language.value == 0 ?'保存成功':'Save successful')
show.value = false
emit('submitForm')
})
} else {
if (editgay.value) {
// id不是0
match.editPersonInfo(form.value).then(res => {
ElMessage.success(language.value == 0 ?'保存成功':'Save successful')
show.value = false
emit('submitForm')
})
} else {
if(isMe.value){
match.saveMyBaseInfo(form.value).then(res => {
ElMessage.success(language.value == 0 ?'保存成功':'Save successful')
show.value = false
emit('submitForm')
})
} else {
match.savePersonForMyPerson(form.value).then(res => {
ElMessage.success(language.value == 0 ?'保存成功':'Save successful')
show.value = false
emit('submitForm')
})
}
}
}
}
})
}
function cancel() {
show.value = false
}
</script>
<style lang="scss">
.threeFour {
width: 100%;
.el-upload--picture-card {
width: 120px;
height: 160px;
}
.el-upload-list--picture-card .el-upload-list__item {
width: 120px;
height: 160px;
}
}
.tip {
font-size: 13px;
color: #999;
margin: 10px 0;
i {
color: red;
margin: 0 4px 0 0;
}
}
.shenfen {
.el-upload--picture-card {
width: 320px;
height: 200px;
}
.el-upload-list--picture-card .el-upload-list__item {
width: 320px;
height: 200px;
}
}
.touxiang {
:deep(.el-upload--picture-card ) {
width: 140px;
height: 200px;
}
}
.touxiang {
:deep(.el-upload-list__item ) {
width: 140px;
height: 200px;
}
}
.el-form--inline .el-form-item {
width: 100%
}
.boxDialog {
.el-dialog__header {
background: linear-gradient(#ed2c22, #fe6d45);
margin-right: 0;
height: 52px;
span {
color: #fff;
}
}
}
</style>
<template>
<el-dialog v-model="show" :title="title" width="1000px" append-to-body>
<el-dialog v-model="show" :title="title" width="1000px" append-to-body @close="close">
<div class="funcBtns">
<el-button type="primary" @click="addMember">
{{ language == 0 ? '添加选手' : 'Add Player' }}
</el-button>
<el-button type="primary" plain @click="importSportman">
<el-button type="primary" plain @click="importSportman" v-if="language == 0">
{{language == 0 ? '导入选手' : 'Import Player'}}
</el-button>
</div>
......@@ -38,7 +38,7 @@
<el-table ref="allSportmenTable" v-loading="loading" :data="tableData" height="60vh"
@selection-change="handleSelectionChange">
<!-- <el-table-column type="selection" :label="language==0?'选择':'Selection'" :selectable="selectable"/>-->
<el-table-column type="index" :label="language==0?'序号':'Index'" width="50" :selectable="selectable"/>
<el-table-column type="index" :label="language==0?'序号':'Index'" width="60" :selectable="selectable"/>
<el-table-column :label="language==0?'姓氏':'Last Name'" prop="xing" min-width="100"/>
<el-table-column :label="language==0?'名':'First Name'" prop="ming" min-width="100"/>
<el-table-column :label="language==0?'所属国家/地区':'Country'" prop="countryName" min-width="100"/>
......@@ -88,6 +88,7 @@
</el-dialog>
<addCoach ref="dialogAddCoach" @submitForm="getList"/>
<addMan_en ref="dialogSportman_En" @submitForm="getList"/>
<Import ref="dialogImportProps" @submitForm="getList"/>
</template>
......@@ -95,7 +96,8 @@
import {reactive, ref, toRefs, watch} from 'vue'
import {getCurrentInstance, nextTick, onMounted} from '@vue/runtime-core'
import * as match from '@/apiPc/match'
import addCoach from '../components/addCoach'
import AddCoach from '../components/addCoach'
import AddMan_en from '../components/addSportman_en'
import Import from '../components/import'
import {useStorage} from "@vueuse/core/index";
const language= useStorage('language',0)
......@@ -182,7 +184,9 @@ function submit() {
// emit('submitForm', choosedList)
show.value = false
}
function close() {
emit('submitForm')
}
function cancel() {
show.value = false
}
......@@ -193,16 +197,25 @@ function editPerson(row) {
title: language.value == 0 ?'编辑人员':'Edit Person',
groupId: groupId
}
if (language.value == 0 ){
proxy.$refs['dialogAddCoach'].open(params)
} else {
proxy.$refs['dialogSportman_En'].open(params)
}
}
function addMember() {
const params = {
title: language.value == 0 ?'添加人员':'Add',
id: 0,
groupId: groupId
groupId: groupId,
label: '0'
}
if (language.value == 0 ){
proxy.$refs['dialogAddCoach'].open(params)
} else {
proxy.$refs['dialogSportman_En'].open(params)
}
}
function importSportman() {
......
......@@ -57,10 +57,16 @@ const props = defineProps({
const names = ref({})
const loading = ref(true)
import {useStorage} from "@vueuse/core/index";
import {useRouter} from "vue-router";
const user = useUserStore().user
const group = useUserStore().group || {}
const language= useStorage('language',0)
const router = useRouter()
onMounted(() => {
if(!user){
router.push({name: 'home'})
return
}
if (user.utype == '2') {
tuandui()
}
......
......@@ -3,17 +3,22 @@
<div class="matchItem" v-for="n in list" :key="n.id" @click="goDetail(n.id)">
<el-row :gutter="15">
<el-col :lg="7" :md="24" :xl="6">
<div class="popo">
<el-tag v-if="n.signType==0">个人</el-tag>
<el-tag v-if="n.signType==1">团体</el-tag>
<el-tag v-if="n.signType==2">个人+团体</el-tag>
</div>
<img class="mauto mw100 coverLimitHeight" :src="fillImgUrl(n.coverUrl)">
</el-col>
<el-col :lg="9" :md="12" :xl="12">
<div class="info">
<h3>{{ n.name }}</h3>
<h3 class="esp">{{ n.name }}</h3>
<p class="ppl"><label>{{ language==0?'比赛时间':'Playing Time' }}</label>{{n.beginTime?.slice(0,10)}} ~ {{ n.endTime?.slice(0,10) }}</p>
<!-- <p class="ppl"><label>{{ language==0?'地&ensp;&ensp;&ensp;&ensp;点':'Location' }}</label>{{ n.address }}</p>-->
<p class="ppl esp"><label>{{ language==0?'地&ensp;&ensp;&ensp;&ensp;点':'Location' }}</label>{{ n.address }}</p>
<p class="ppl"><label>{{language==0?'赛事级别':'Level'}}</label>{{n.level}}</p>
<p class="ppl"><label>{{ language==0?'报名截止':'Registration Deadline' }}</label>{{ n.signEndTime?.slice(0,10) }}</p>
<p class="ppl" v-if="n.contactPerson"><label>{{ language==0?'联系人员':'Contact Person' }}</label>{{ n.contactPerson }}</p>
<p class="ppl"><label>{{ language==0?'联系电话':'Phone' }}</label>{{ n.contactTelno }}</p>
<p class="ppl"><label>{{ language==0?'联系电话':'Phone' }}</label>086-{{ n.contactTelno }}</p>
<p class="ppl" v-if="n.contactEmail"><label>{{ language==0?'邮&ensp;&ensp;&ensp;&ensp;箱':'E-mail' }}</label>{{ n.contactEmail }}</p>
</div>
......@@ -83,6 +88,7 @@ function goDetail(id) {
<style scoped lang="scss">
.pv20{padding: 0 20px;}
.mt60{margin-top: 60px}
.popo{position: absolute;left: 0;}
.matchItem {
cursor: pointer;padding: 0 0 20px;
background: #FFFFFF;border-bottom: 1px solid #e5e5e5;
......
<template>
<el-dialog
v-model="show" :title="title" width="500px" append-to-body :close-on-click-modal="false"
destroy-on-close @close="cancel"
destroy-on-close :show-close="false"
>
<el-form label-width="120">
<el-form label-width="120" v-model="list">
<el-form-item required :label="item.realName" v-for="item in list">
<el-input :disabled="item.checked"
v-model="item.wdsfMin" placeholder="输入WDSF会员号"
<div v-show="item.checked==2">{{ item.wdsfMin }}</div>
<el-input :disabled="item.checked==1" type="number" v-show="item.checked!=2"
v-model="item.wdsfMin" :placeholder="language==0?'绑定WDSF会员号':'Bind WDSF Number'"
>
<template #append>
<view @click="checkCode(item)" class="checkbb">
<el-icon v-if="item.checked" color="#13ce66" size="24"><CircleCheck /></el-icon>
<text class="text-primary" v-else>验证</text>
<el-icon v-if="item.checked==1" color="#13ce66" size="24">
<CircleCheck/>
</el-icon>
<text class="text-primary" v-else-if="item.checked==0">{{ language == 0 ? '验证' : 'Check' }}</text>
</view>
</template>
</el-input>
......@@ -19,27 +22,28 @@
</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" @click="submitForm">{{ language == 0 ? '保 存' : 'Save' }}</el-button>
<el-button @click="cancel">{{ language == 0 ? '取 消' : 'Cancel' }}</el-button>
</div>
</template>
</el-dialog>
</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 { SuccessFilled } from '@element-plus/icons-vue'
import { ElMessage } from 'element-plus'
import { useRoute } from 'vue-router'
import {SuccessFilled} from '@element-plus/icons-vue'
import {ElMessage} from 'element-plus'
import {useRoute} from 'vue-router'
const { proxy } = getCurrentInstance()
const {proxy} = getCurrentInstance()
const emit = defineEmits(['submitForm', 'cancel'])
const uploadUrl = ref('/upload/upLoadToFileServer')
const route = useRoute()
import {useStorage} from "@vueuse/core/index";
const language= useStorage('language',0)
const language = useStorage('language', 0)
const data = reactive({
form: {},
......@@ -48,21 +52,20 @@ const data = reactive({
title: '',
groupId: '0'
})
const { form, show, countryList, list, title, groupId } = toRefs(data)
const {form, show, countryList, list, title, groupId} = toRefs(data)
let extraId = 0
let personId
let matchId
const open = (params) => {
console.log(params)
show.value = true
title.value = params.title
matchId = params.matchId
groupId.value= params.groupId
groupId.value = params.groupId
list.value = params.list
init()
}
defineExpose({ open })
defineExpose({open})
watch(show, (value) => {
if (!value) {
form.value = {}
......@@ -71,14 +74,16 @@ watch(show, (value) => {
})
function init() {
for (let n of list.value){
for (let n of list.value) {
if (n.wdsfMin) {
n.checked = true
n.checked = 2
console.log(n.checked)
} else {
n.checked = false
n.checked = 0
}
}
}
function checkCode(item) {
if (!item.wdsfMin) {
if (language.value == 0) {
......@@ -88,34 +93,43 @@ function checkCode(item) {
}
return
}
match.checkNoRepeat({card: item.wdsfMin,groupId: groupId.value}).then(res => {
if(res.data.wdsfFlag=='0'){
if (language.value == 0) {
ElMessage.warning('验证失败,卡号不存在')
} else {
ElMessage.warning('Verification failed, card number does not exist')
}
for (var n of list.value) {
if (n.wdsfMin == item.wdsfMin && n.id != item.id) {
ElMessage.warning(language.value == 0 ? '不能重复绑定' : 'Cannot be bound repeatedly')
return
}
if(res.data.wdsfFlag=='1'){
item.checked = true
}
match.checkNoRepeat({card: item.wdsfMin, groupId: groupId.value}).then(res => {
if (res.data) {
item.checked = 1
} else {
ElMessage.warning(language.value == 0 ? '不满足绑定条件' : 'Not meet the binding conditions')
return
}
})
}
function submitForm() {
var arr = []
for(var n of list.value){
arr.push({
id: n.id,
wdsfMin: n.wdsfMin
})
var obj = {}
for (var n of list.value) {
if (n.checked == 0) {
ElMessage.warning(language.value == 0 ? `请点击验证${n.realName}的WDSF卡号` : `Please verify ${n.realName}'s card number`)
return
}
// match.saveWdsfMin(arr).then(res=>{
// show.value = false
// })
// emit('submitForm')
if (n.checked == 1) {
obj[n.id] = n.wdsfMin
}
}
console.log(obj)
if(obj=={}){
return
}
match.saveWdsfMin(obj, groupId.value).then(res => {
if (res.data) {
show.value = false
emit('submitForm')
}
})
}
function cancel() {
......@@ -153,5 +167,11 @@ function cancel() {
.red {
color: #f56c6c;
}
.checkbb{width: 30px;display: flex;align-items: center;text-align: center;}
.checkbb {
width: 40px;
display: flex;
align-items: center;
text-align: center;
}
</style>
......
......@@ -17,28 +17,38 @@
<img class="mauto w100" :src="fillImgUrl(matchData.coverUrl)">
</el-col>
<el-col :lg="9" :md="12" :xl="10" style="position: relative">
<h3 class="m0">
{{ matchData.name }}
</h3>
<h3 class="m0">{{ matchData.name }}</h3>
<div v-if="matchData.type=='1'">
<p class="ppl"><label class="bm2">Event Level:</label>{{ matchData.level }}</p>
<p class="ppl"><label class="bm1">Playing Time:</label>{{ matchData.beginTime?.slice(0, 10) }} ~
{{ matchData.endTime?.slice(0, 10) }}</p>
<p class="ppl"><label class="bm2">Event Level:</label>{{ matchData.level }}</p>
<p class="ppl" v-if="matchData.address"><label class="bm3">Location:</label>{{ matchData.address }}</p>
<p class="ppl" v-if="matchData.signEndTime"><label class="bm4">Registration
Deadline:</label>{{ matchData.signEndTime?.slice(0, 10) }}</p>
<p class="ppl" v-if="matchData.type=='1'">
<!-- <p class="ppl" v-if="matchData.signEndTime"><label class="bm4">Registration Deadline:</label>{{ matchData.signEndTime?.slice(0, 10) }}</p>-->
<p class="ppl">
<label>
<svg style="position: relative;top: 2px;" t="1711707785514" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6578"
width="18" height="18">
<path d="M780 68H256c-71.6 0-130.2 55.5-130.2 123.2v711.2c1.5 42.8 50 69.3 90.6 50.6l227.2-105c38.5-17.8 83.4-18.5 122.6-1.9l255.4 108.6c34.8 14.8 76.1-2.7 86.3-37.6 1.6-5.4 2.4-11 2.4-16.9v-709C910.2 123.5 851.6 68 780 68zM276.9 231.3h255.9c23.9 0 43.3 18.4 43.3 41s-19.4 41-43.3 41H276.9c-23.9 0-43.3-18.4-43.3-41s19.4-41 43.3-41z m386.8 464H276.9c-23.9 0-43.3-18.4-43.3-41s19.4-41 43.3-41h386.8c23.9 0 43.3 18.4 43.3 41s-19.4 41-43.3 41z m0-191H276.9c-23.9 0-43.3-18.4-43.3-41s19.4-41 43.3-41h386.8c23.9 0 43.3 18.4 43.3 41s-19.4 41-43.3 41z" p-id="6579" fill="#d3d8d9"></path></svg>
Station race:</label>{{matchData.cpts.length}}
</p>
<p class="ppl" v-if="matchData.type=='1'">
<p class="ppl">
<label>
<svg style="position: relative;top: 2px;" t="1711708779620" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="7920" width="20" height="20"><path d="M398.652952 165.692952c-32.280381-46.006857-58.172952-61.318095-92.867047-54.808381-14.969905 2.80381-24.210286 7.850667-41.20381 22.528l-12.946285 11.361524-25.185524 20.894476-6.582857 5.753905c-3.705905 3.413333-6.38781 6.217143-9.825524 10.118095-64 72.46019-81.724952 185.782857-44.470857 292.327619 26.794667 76.55619 74.605714 152.624762 142.774857 228.644572 72.289524 80.62781 133.046857 131.364571 202.922666 168.374857 54.857143 29.013333 96.865524 41.74019 145.676191 43.227429 59.001905 1.828571 110.957714-11.50781 153.648762-39.15581a162.133333 162.133333 0 0 0 19.553524-15.189333l8.289523-7.558095 16.335239-15.213715 5.534476-4.924952 10.922666-9.435429c22.040381-19.651048 29.184-31.939048 30.646858-51.370666 2.194286-29.647238-11.215238-52.736-49.737143-85.699048l-26.063238-21.820952-12.117334-10.581334-11.459047-9.825524c-37.229714-30.744381-64.804571-40.69181-100.205715-35.35238-24.283429 3.632762-38.278095 12.141714-63.073523 38.107428l-10.947048 11.654095c-18.041905 19.017143-28.330667 26.258286-43.544381 29.305905-22.25981 4.461714-44.373333-7.046095-80.262095-36.205714-46.250667-37.546667-84.626286-80.676571-117.613715-131.949714-22.869333-35.766857-31.890286-62.902857-24.941714-87.600762 2.82819-9.99619 9.679238-17.042286 24.064-28.184381l14.994286-11.312762 2.413714-1.877334 22.747429-18.553904c20.114286-16.822857 28.281905-28.281905 32.572952-45.836191 8.899048-36.10819 0.487619-66.072381-32.426667-117.638095l-15.62819-24.234667-5.558857-8.533333-6.436572-9.435429z" p-id="7921" fill="#d3d8d9"></path></svg>
Phone:</label>{{matchData.contactTelno}}
Phone:</label>086-{{matchData.contactTelno}}
</p>
</div>
<div v-if="matchData.type=='0'">
<p class="ppl"><label>{{ language==0?'比赛时间':'Playing Time' }}:</label>{{matchData.beginTime?.slice(0,10)}} ~ {{matchData.endTime?.slice(0,10) }}</p>
<p class="ppl esp"><label>{{ language==0?'地&ensp;&ensp;&ensp;&ensp;点':'Location' }}:</label>{{ matchData.address }}</p>
<p class="ppl"><label>{{language==0?'赛事级别':'Level'}}:</label>{{matchData.level}}</p>
<p class="ppl"><label>{{ language==0?'报名截止':'Registration Deadline' }}:</label>{{ matchData.signEndTime?.slice(0,10) }}</p>
<p class="ppl" v-if="matchData.contactPerson"><label>{{ language==0?'联系人员':'Contact Person' }}:</label>{{ matchData.contactPerson }}</p>
<p class="ppl"><label>{{ language==0?'联系电话':'Phone' }}:</label>086-{{ matchData.contactTelno }}</p>
<p class="ppl" v-if="matchData.contactEmail"><label>{{ language==0?'邮&ensp;&ensp;&ensp;&ensp;箱':'E-mail' }}:</label>{{ matchData.contactEmail }}</p>
</div>
<div style="height: 30px"></div>
<div class="ppl_pb">
<el-link class="mr20" v-if="matchData.signKnowUrl" type="primary" :href="fillImgUrl(JSON.parse(matchData.signKnowUrl)[0]?.url)" target="_blank">
......
......@@ -63,16 +63,18 @@
</el-col>
<el-col :lg="9" :md="12" :xl="12">
<div class="info">
<h3>{{ n.name }}</h3>
<h3 class="esp">{{ n.name }}</h3>
<p class="ppl"><label>{{language==0?'赛事级别':'Level'}}:</label>{{n.level}}</p>
<p class="ppl"><label>{{ language==0?'比赛时间':'Playing Time' }}:</label>{{n.beginTime?.slice(0,10)}} ~ {{ n.endTime?.slice(0,10) }}</p>
<p class="ppl esp"><label>{{ language==0?'比赛时间':'Playing Time' }}:</label>{{n.beginTime?.slice(0,10)}} ~ {{ n.endTime?.slice(0,10) }}</p>
<!-- <p class="ppl" v-if="n.address"><label>{{ language==0?'地&ensp;&ensp;&ensp;&ensp;点':'Location' }}:</label>{{ n.address }}</p>-->
<p class="ppl"><label>{{ language==0?'报名截止':'Registration Deadline' }}:</label>{{ n.signEndTime?.slice(0,10) }}</p>
<p class="ppl" v-if="n.contactPerson"><label>{{ language==0?'联系人员':'Contact Person' }}:</label>{{ n.contactPerson }}</p>
<p class="ppl"><label>{{ language==0?'联系电话':'Phone' }}:</label>{{ n.contactTelno }}</p>
<p class="ppl" v-if="n.contactEmail"><label>{{ language==0?'邮&ensp;&ensp;&ensp;&ensp;箱':'E-mail' }}:</label>{{ n.contactEmail }}</p>
<!-- <p class="ppl"><label>{{ language==0?'报名截止':'Registration Deadline' }}:</label>{{ n.signEndTime?.slice(0,10) }}</p>-->
<p class="ppl"><label>{{ language==0?'联系人员':'Contact Person' }}:</label>{{ n.contactPerson }}</p>
<p class="ppl"><label>{{ language==0?'联系电话':'Phone' }}:</label>086-{{ n.contactTelno }}</p>
<p class="ppl esp"><label>{{ language==0?'邮&ensp;&ensp;&ensp;&ensp;箱':'E-mail' }}:</label>{{ n.contactEmail }}</p>
<p class="ppl" v-if="n.type=='1'">
<label>{{ language==0?'分站赛':'Station race' }}:</label>{{n.cpts?.length}}
</p>
</div>
</el-col>
<el-col :lg="8" :md="12" :xl="6">
......@@ -271,7 +273,7 @@ function goDetail(id) {
left: 0;
}
.info h3{margin: 0 0 15px}
.info .ppl{margin: 14px 0;}
.info .ppl{margin: 6px 0;}
.ppl{color: #29343C;
label{color: #929AA0;}
}
......
......@@ -26,28 +26,33 @@
<el-form-item :label="language==0?'参赛队名称':'Name of participating team'" required prop="abreviations">
<el-input type="text" v-model="form.abreviations" :placeholder="language==0?'请输入内容':''"/>
</el-form-item>
<el-form-item :label="language==0?'团体名称':'Team Name'" prop="name">
<el-form-item :label="language==0?'团体名称':'Institution Name'" prop="name">
<el-input v-model="form.name" :placeholder="language==0?'请输入团体名称':''" />
</el-form-item>
<el-form-item :label="language==0?'所属国家/地区':'Country'" required>
<el-select filterable v-model="form.countryId">
<el-option v-for="item in countryList" :key="item.id" :label="language==0?item.name:item.enName" :value="item.id" />
</el-select>
</el-form-item>
<el-form-item :label="language==0?'负责人姓名':'Contact Person'" prop="contactPerson">
<el-input v-model="form.contactPerson" :placeholder="language==0?'请输入联系人':''" />
</el-form-item>
<el-form-item :label="language==0?'邮箱':'Email'" required prop="contactEmail">
<el-input v-model="form.contactEmail" type="email" :placeholder="language==0?'请输入内容':''"/>
</el-form-item>
<el-form-item :label="language==0?'专业/业余':'Professional/Amateur'" required prop="majorFlag">
<el-select v-model="form.majorFlag">
<el-option :label="language==0?'专业':'Professional'" value="1" />
<el-option :label="language==0?'业余':'Amateur'" value="0" />
</el-select>
</el-form-item>
<!-- <el-form-item :label="language==0?'专业/业余':'Professional/Amateur'" required prop="majorFlag">-->
<!-- <el-select v-model="form.majorFlag">-->
<!-- <el-option :label="language==0?'专业':'Professional'" value="1" />-->
<!-- <el-option :label="language==0?'业余':'Amateur'" value="0" />-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<el-form-item :label="language==0?'团体类型':'Group type'" prop="type">
<el-select v-model="form.type" :placeholder="typeOptions[language].selectPlaceholder" style="width: 100%;">
<el-select :disabled="language==1" v-model="form.type" :placeholder="typeOptions[language].selectPlaceholder" style="width: 100%;">
<el-option v-for="(o,index) in typeOptions[language].options" :label="o.text"
:key="index" :value="o.value" />
</el-select>
</el-form-item>
<el-form-item :label="language==0?'详细地址':'Detailed Address'" required prop="address">
<el-form-item :label="language==0?'详细地址':'Detailed Address'" prop="address">
<el-input type="textarea" v-model="form.address" class="mt10" :placeholder="language==0?'请输入详细地址':''"/>
</el-form-item>
</el-col>
......@@ -67,7 +72,6 @@
<ImageUpload v-if="s.type == '3'" v-model="s.value" :limit="1" :is-show-tip="false" />
<!-- 文件 2-->
<FileUpload v-if="s.type == '2'" :button-text="language==0?'上传文件':'Upload file'" :is-show-tip="false" v-model="s.fixWxFile" :action="uploadUrl" :accept="accept" />
</el-form-item>
</el-col>
</el-row>
......@@ -135,6 +139,7 @@ const data = reactive({
cptId: route.query.matchId||0,
signType: false,
regionsList: [],
countryList: [],
participantsInfoArr: [],
rankList: [],
accept: '.doc, .pdf, .docx, .zip',
......@@ -154,7 +159,7 @@ const data = reactive({
contactPerson: { required: true, message: 'required', trigger: 'blur' },
contactEmail: { required: true, message: 'required', trigger: 'blur' },
abreviations: { required: true, message: 'required', trigger: 'blur' },
address: { required: true, message: 'required', trigger: 'blur' }
// address: { required: true, message: 'required', trigger: 'blur' }
},
coachOrLeaderFlag: '',
matchInfo:{}
......@@ -168,7 +173,7 @@ const {
participantsInfoArr,
cptId,
rules,rules_en,
regionsList,matchInfo,
regionsList,countryList,matchInfo,
coachOrLeaderFlag, accept,typeOptions
} = toRefs(data)
const uploadUrl = ref('/upload/upLoadToFileServer')
......@@ -180,6 +185,7 @@ onMounted(() => {
signType.value = route.query.signType
getRegionsList()
getCountryList()
match.getMatchById({ id: cptId.value }).then(res => {
coachOrLeaderFlag.value = res.data.coachOrLeaderFlag
matchInfo.value = res.data
......@@ -219,10 +225,20 @@ function getRegionsList() {
regionsList.value = res.data
})
}
function getCountryList() {
match.countryList().then(res => {
countryList.value = res.data
})
}
function getGroupInfo() {
match.getGroupInfo().then(res => {
form.value = res.data
if(language.value == 1){
form.value.type = '4'
}
}).catch(err => {
router.push({name: 'home'})
return
})
}
......
<template>
<div class="app-container">
<div class="box ph-30">
<el-card>
<team-sign-step :language="language" :active-step="0"/>
</el-card>
<div class="h20"></div>
<div class="panel" style="box-shadow: var(--el-box-shadow)">
<match-info-row :match-id="cptId" :language="language"/>
<div class="h20"></div>
<el-form ref="ruleFormRef" label-width="120px" class="signForm"
:model="form" :rules="language==0?rules:rules_en"
:label-position="language==0?'left':'top'">
<el-row>
<el-col :lg="8" :offset="2">
<el-form-item :label="language==0?'团体Logo':'Group Logo'" prop="imgUrl">
<ImageUpload2 v-model="form.imgUrl" :is-show-tip="false" :crop-width="200" :crop-height="200" :limit="1"/>
<span class="tip" v-if="language==0">请上传不超过 <i>5M</i> 的文件 格式为 <i>png/jpg/jpeg</i> 的文件</span>
<span class="tip" v-else>Please upload a file in the format of
<i>png/jpg/jpeg</i> that does not exceed <i>5MB</i>
</span>
</el-form-item>
</el-col>
<el-col :lg="10">
<el-form-item :label="language==0?'参赛队名称':'Name of participating team'" required prop="abreviations">
<el-input type="text" v-model="form.abreviations" :placeholder="language==0?'请输入内容':''"/>
</el-form-item>
<el-form-item :label="language==0?'团体名称':'Team Name'" prop="name">
<el-input v-model="form.name" :placeholder="language==0?'请输入团体名称':''" />
</el-form-item>
<el-form-item :label="language==0?'所属国家/地区':'Country'" required>
<el-select filterable v-model="form.countryId">
<el-option v-for="item in countryList" :key="item.id" :label="language==0?item.name:item.enName" :value="item.id" />
</el-select>
</el-form-item>
<el-form-item :label="language==0?'负责人姓名':'Contact Person'" prop="contactPerson">
<el-input v-model="form.contactPerson" :placeholder="language==0?'请输入联系人':''" />
</el-form-item>
<el-form-item :label="language==0?'邮箱':'Email'" required prop="contactEmail">
<el-input v-model="form.contactEmail" type="email" :placeholder="language==0?'请输入内容':''"/>
</el-form-item>
<!-- <el-form-item :label="language==0?'专业/业余':'Professional/Amateur'" required prop="majorFlag">-->
<!-- <el-select v-model="form.majorFlag">-->
<!-- <el-option :label="language==0?'专业':'Professional'" value="1" />-->
<!-- <el-option :label="language==0?'业余':'Amateur'" value="0" />-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<el-form-item :label="language==0?'团体类型':'Group type'" prop="type">
<el-select :disabled="language==1" v-model="form.type" :placeholder="typeOptions[language].selectPlaceholder" style="width: 100%;">
<el-option v-for="(o,index) in typeOptions[language].options" :label="o.text"
:key="index" :value="o.value" />
</el-select>
</el-form-item>
<el-form-item :label="language==0?'详细地址':'Detailed Address'" prop="address">
<el-input type="textarea" v-model="form.address" class="mt10" :placeholder="language==0?'请输入详细地址':''"/>
</el-form-item>
</el-col>
</el-row>
<el-row v-if="participantsInfoArr&&participantsInfoArr.length>0">
<el-col :span="16" :offset="4">
<h3>{{ language==0?'补充信息':'Supplemental information'}}</h3>
<el-form-item v-for="(s,index) in participantsInfoArr" :key="index">
<template #label>
<span v-if="s.status == 0" class="red">*</span>{{ s.name }}
</template>
<el-input v-if="s.type == '0'" v-model="s.value" />
<el-input v-if="s.type == '1'" v-model="s.value" type="number" />
<el-select v-if="s.type == '4'" v-model="s.value" class="m-2">
<el-option v-for="item in s.option" :key="item.id" :label="item.name" :value="item.name" />
</el-select>
<ImageUpload v-if="s.type == '3'" v-model="s.value" :limit="1" :is-show-tip="false" />
<!-- 文件 2-->
<FileUpload v-if="s.type == '2'" :button-text="language==0?'上传文件':'Upload file'" :is-show-tip="false" v-model="s.fixWxFile" :action="uploadUrl" :accept="accept" />
</el-form-item>
</el-col>
</el-row>
</el-form>
<div class="panel-footer text-center">
<el-button type="primary" class="btn-lineG w200px" round @click="submitForm()">
{{ language==0?'下一步':'NEXT' }}
</el-button>
</div>
</div>
</div>
</div>
</template>
<script setup>
import { reactive, ref } from 'vue'
import { getCurrentInstance, onMounted } from '@vue/runtime-core'
import { useRoute, useRouter } from 'vue-router'
import { toRefs } from '@vueuse/shared'
import TeamSignStep from './components/teamSignStep'
import MatchInfoRow from "@/viewsPc/match/components/matchInfo-row";
const language= useStorage('language',0)
const { proxy } = getCurrentInstance()
const router = useRouter()
const route = useRoute()
import * as match from '@/apiPc/match'
import { ElMessage } from 'element-plus'
import _ from 'lodash'
import {useStorage} from "@vueuse/core/index";
const data = reactive({
isRanks: false,
matchData:{
enBo:{}
},
form: {},
typeOptions: {
0: {
selectPlaceholder: '请选择团体类型',
options: [
{value:'0',text:'普通院校'},
{value:'1',text:'专业舞蹈学校'},
{value:'2',text:'培训机构/俱乐部'},
{value:'3',text:'地方协会'},
{value:'4',text:'国家协会'},
]
},
1: {
selectPlaceholder: 'Please select group type',
options: [
{value:'0',text:'School'},
{value:'1',text:'Professional dance school'},
{value:'2',text:'Company/Club'},
{value:'3',text:'Local Association'},
{value:'4',text:'National Association'},
]
}
},
groupId: route.query.groupId||0,
cptId: route.query.matchId||0,
signType: false,
regionsList: [],
countryList: [],
participantsInfoArr: [],
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' },
contactPerson: { required: true, message: '请填写内容', trigger: 'blur' },
contactEmail: { required: true, message: '请填写内容', trigger: 'blur' },
abreviations: { required: true, message: '请填写内容', trigger: 'blur' },
address: { required: true, message: '请填写内容', trigger: 'blur' }
},
rules_en: {
imgUrl: { required: true, message: 'required', trigger: 'blur' },
name: { required: true, message: 'required', trigger: 'blur' },
type: { required: true, message: 'required', trigger: 'change' },
contactPerson: { required: true, message: 'required', trigger: 'blur' },
contactEmail: { required: true, message: 'required', trigger: 'blur' },
abreviations: { required: true, message: 'required', trigger: 'blur' },
address: { required: true, message: 'required', trigger: 'blur' }
},
coachOrLeaderFlag: '',
matchInfo:{}
})
const {
isRanks,matchData,
rankList,
form,
groupId,
signType,
participantsInfoArr,
cptId,
rules,rules_en,
regionsList,countryList,matchInfo,
coachOrLeaderFlag, accept,typeOptions
} = toRefs(data)
const uploadUrl = ref('/upload/upLoadToFileServer')
onMounted(() => {
console.log(cptId.value,route.query,route.params)
// 获取团体信息
getGroupInfo()
signType.value = route.query.signType
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)
}
// 获取补充信息
match.getMyGroupForCpt(groupId.value, cptId.value).then(res => {
if (res.data.groupInfo && res.data.groupInfo.groupInfo) {
const groupInfo = JSON.parse(res.data.groupInfo.groupInfo)
if (groupInfo.length > 0) {
// 补充字段信息
participantsInfoArr.value = groupInfo
for (var n of participantsInfoArr.value) {
if (n.type == '3' && n.value.url) {
// 图片
n.value = n.value.url
}
if (n.type == '2') {
// 文件
var arr = [{
name: n.value.name,
url: n.value.url
}]
n.fixWxFile = arr
}
}
}
}
})
})
})
function getRegionsList() {
match.regionsList().then(res => {
regionsList.value = res.data
})
}
function getCountryList() {
match.countryList().then(res => {
countryList.value = res.data
})
}
function getGroupInfo() {
match.getGroupInfo().then(res => {
form.value = res.data
if(language.value == 1){
form.value.type = '4'
}
}).catch(err => {
router.push({name: 'home'})
return
})
}
function getTeamList() {
return match.getMyTeamList(cptId.value, groupId.value).then(response => {
rankList.value = response.data
})
}
function goPrev() {
router.go(-1)
}
function submitForm() {
proxy.$refs['ruleFormRef'].validate((valid, fields) => {
if (valid) {
console.log(form.value)
for (const n of participantsInfoArr.value) {
if (n.status == 0 && (!n.value && (!n.fixWxFile||n.fixWxFile.length==0))) {
ElMessage.warning(language.value==0?`请完善${n.name}信息`:`Please complete ${n.name} information`)
return
}
}
if (participantsInfoArr.value.length>0) {
// 保存补充信息
let fileInfo = {}
for (var p of participantsInfoArr.value) {
if (p.type == '2' && p.fixWxFile) {
console.log(p.fixWxFile)
const temp = p.fixWxFile[0]?.name.split('.')
fileInfo = {
url: p.fixWxFile[0].url,
name: p.fixWxFile[0].name,
extname: temp[temp.length - 1]
}
p.value = fileInfo
}
}
const obj = {
cptId: cptId.value,
groupId: groupId.value,
groupInfo: JSON.stringify(participantsInfoArr.value)
}
match.saveMyGroupExtraInfo(obj).then(res => {
})
}
// 保存团体信息
form.value.cptId = cptId.value
form.value.groupId = groupId.value
match.saveMyGroupForCpt(form.value).then(res => {
goNext()
})
} else {
console.log(form.value, fields)
}
})
}
function goNext() {
// 选教练
router.push({
name: `chooseCoach`,
query: {
matchId: cptId.value,
groupId: groupId.value,
signType: signType.value
}
})
}
</script>
<style scoped lang="scss">
.app-container {
padding: 0;
background: #F5F7F9;
}
.panel-footer .el-button--success {
padding: 0 40px;
}
.bili43{
:deep(.fileItem) {
width: 200px;
height: 150px;
}
.el-upload-list--picture-card .el-upload-list__item {
width: 200px;
height: 150px;
}
}
.signForm {
.el-form-item__label {
color: #4C5359;
}
}
.tip {
font-size: 13px;
color: #999;
margin: 10px 0;
i {
color: red;font-style: normal;
margin: 0 4px 0 0;
}
}
.threeFour {
width: 100%;
}
:deep(.el-upload--picture-card) {
width: 120px;
height: 120px;
}
:deep(.el-upload-list--picture-card .el-upload-list__item) {
width: 120px;
height: 120px;
}
.red {
color: #f56c6c;
}
</style>
......@@ -2,8 +2,8 @@
<div>
<div class="box">
<div class="indexTitle">
<h3 class="leftboderTT">Asian Games News</h3>
<a class="more" @click="goList(query1.sortId,'Asian Games News')">MORE</a>
<h3 class="leftboderTT">Games News</h3>
<a class="more" @click="goList(query1.sortId,'Games News')">MORE</a>
</div>
<el-card>
<el-row class="topNews" :gutter="20">
......
......@@ -9,7 +9,7 @@
<div class="pt30">
<el-form ref="wdsfDataRef" class="d-form" size="large" :label-width="language==0?120:180"
style="max-width: 560px;margin: auto" :rules="wdsfDataRule">
<el-form-item :label="language==0?'WDSF卡号':'WDSF ID'" required>
<el-form-item :label="language==0?'WDSF会员号':'WDSF MIN'" required>
<el-input type="text" v-model="form.card" @change="resetCode(0)" @blur="verifyCode">
<template #append>
<el-button type="primary" plain style="width: 110px" @click="checkCard">
......@@ -27,22 +27,22 @@
<span v-else>(Obtain automatically according to the WDSF number)</span>
</div>
<div class="h20"></div>
<el-form-item :label="language==0?'姓氏':'surname'">
<el-form-item :label="language==0?'姓氏':'Surname'">
<el-input v-model="wdsfData.surname" disabled/>
</el-form-item>
<el-form-item :label="language==0?'名':'name'">
<el-form-item :label="language==0?'名':'Name'">
<el-input v-model="wdsfData.name" disabled/>
</el-form-item>
<el-form-item label="Representing">
<el-form-item :label="language==0?'代表':'Representing'">
<el-input v-model="wdsfData.representing" disabled/>
</el-form-item>
<el-form-item label="Age group">
<el-form-item :label="language==1?'Age group':'年龄组'">
<el-input v-model="wdsfData.ageGroup" disabled/>
</el-form-item>
<el-form-item label="Division">
<el-form-item :label="language==1?'舞种':'Division'">
<el-input v-model="wdsfData.division" disabled/>
</el-form-item>
<el-form-item label="Status">
<el-form-item :label="language==1?'状态':'Status'">
<el-input v-model="wdsfData.status" disabled/>
</el-form-item>
<div class="h30"></div>
......@@ -50,33 +50,36 @@
{{ language == 0 ? '补充信息' : 'Supplementary Information' }}
</div>
<div class="h20"></div>
<el-form-item prop="picUrl" :label="language==0?'个人照片':'photo'" required>
<el-form-item prop="picUrl" :label="language==0?'个人照片':'Photo'">
<ImageUpload2
v-model="wdsfData.picUrl" :crop-height="280" :crop-width="200" class="threeFour" :limit="1"
:is-show-tip="false"
/>
</el-form-item>
<el-form-item :label="language==0?'性别':'Sex'" required>
<el-form-item :label="language==0?'性别':'Gender'" required>
<el-radio-group v-model="wdsfData.sex">
<el-radio value="0">{{ language == 0 ? '女' : 'female' }}</el-radio>
<el-radio value="1">{{ language == 0 ? '男' : 'male' }}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item :label="language==0?'出生日期':'Birthday'" required>
<el-form-item :label="language==0?'证件号':'Passport number'" required>
<el-input v-model="wdsfData.passportNumber"/>
</el-form-item>
<el-form-item :label="language==0?'有效证件':'Passport File'" required>
<file-upload v-model="wdsfData.passportUrl" :limit="1" :is-show-tip="false" :button-text="'Upload'"/>
<div class="tip">
<span>用途</span>
</div>
</el-form-item>
<el-form-item :label="language==0?'出生日期':'Birthday'">
<el-date-picker
v-model="wdsfData.birthday"
style="width: 100%;"
type="date" format="YYYY-MM-DD" value-format="YYYY-MM-DD"
/>
</el-form-item>
<el-form-item label="Passport number" required>
<el-input v-model="wdsfData.passportNumber"/>
</el-form-item>
<el-form-item label="Passport File" required>
<file-upload v-model="wdsfData.passportUrl" :limit="1" :is-show-tip="false" :button-text="'Upload'"/>
</el-form-item>
<div class="h30"></div>
......@@ -121,9 +124,8 @@
v-if="wdsfData.personFlag=='0'">
<el-input type="password" show-password v-model="form.confirmPassword" autocomplete="false" @change="vconfirmPassword"
:placeholder="language==0?'再次输入密码':'Confirm Password'"/>
<div class="text-danger" v-if="showError">{{
language == 0 ? '密码不一致' : 'Password inconsistency'
}}
<div class="text-danger" v-if="showError">
{{language == 0 ? '密码不一致' : 'Password inconsistency'}}
</div>
</el-form-item>
</el-form>
......@@ -287,16 +289,14 @@ function goBack() {
}
function next() {
// proxy.$refs['wdsfDataRef'].validate((valid) => {
// if (valid)
// if (!wdsfData.value.birthday) {
// ElMessage.warning('Please fill in your birthday')
// return
// }
if (!wdsfData.value.passportNumber) {
ElMessage.warning('Please fill in your passport number')
return
}
if (!wdsfData.value.birthday) {
ElMessage.warning('Please fill in your birthday')
return
}
if (!wdsfData.value.passportUrl) {
ElMessage.warning('Please upload your passport file')
return
......@@ -332,6 +332,7 @@ function next() {
let obj = {
sex: wdsfData.value.sex,
passportNumber: wdsfData.value.passportNumber,
picUrl: wdsfData.value.picUrl,
birth: wdsfData.value.birthday,
personId: wdsfData.value.personId,
username: wdsfData.value.email,
......@@ -348,7 +349,7 @@ function next() {
afterR()
})
}
// })
}
function afterR() {
......
......@@ -39,7 +39,7 @@
/>
<el-input type="textarea" v-model="form.address" class="mt10"/>
</el-form-item>
<el-form-item :label="language==0?'机构名称':'Institution name'" required prop="teamName">
<el-form-item :label="language==0?'机构名称':'Institution Name'" required prop="teamName">
<el-input type="text" v-model="form.teamName" :placeholder="language==0?'请输入内容':''"/>
</el-form-item>
<el-form-item :label="language==0?'专业/业余':'Professional/Amateur'" required prop="majorFlag">
......
......@@ -82,8 +82,8 @@ export default defineConfig(({ mode, command }) => {
rewrite: (p) => p.replace(/^\/dev-api\/ztx-webSite/, '')
},
'/dev-api': {
target: 'http://192.168.1.118:8081/',
// target: 'https://dance.itechtop.cn/stage-api',
// target: 'http://192.168.1.131:8081/',
target: 'https://dance.itechtop.cn/stage-api',
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!