addUmpire.vue 12.5 KB
<template>
  <div>
    <el-row justify="center">
      <el-col :span="12" class="form-box">
        <el-form ref="infoRef" label-width="120px" :model="form" :rules="rules">
          <h1 style="text-align: center;">{{ text+' '+title }}</h1>
          <br>
          <el-form-item label="裁判员类型" prop="personRoleInfo1.umpireType">
            <el-select v-model="form.personRoleInfo1.umpireType" placeholder="请选择裁判员类型" style="width: 100%;">
              <el-option label="三级" value="三级" />
              <el-option label="二级" value="二级" />
              <el-option label="一级" value="一级" />
              <el-option label="国家级" value="国家级" />
            </el-select>
          </el-form-item>
          <el-form-item style="width: 100%;" label="姓名" prop="name">
            <el-input v-model="form.name" placeholder="请输入姓名" />
          </el-form-item>
          <el-form-item label="证件号" prop="idcCode">
            <el-input v-model="form.idcCode" placeholder="请输入证件号" style="width: 100%;" />
          </el-form-item>
          <el-form-item label="裁判证号码" prop="personRoleInfo1.umpireCard">
            <el-input v-model="form.personRoleInfo1.umpireCard" placeholder="请输入裁判证号码" style="width: 100%;" />
          </el-form-item>
          <el-form-item label="通过日期" prop="personRoleInfo1.umpirePassTime">
            <el-date-picker
              v-model="form.personRoleInfo1.umpirePassTime"
              clearable
              type="date"
              value-format="YYYY-MM-DD"
              placeholder="请选择通过日期"
              style="width: 100%;"
            />
          </el-form-item>
          <el-form-item label="增加日期" prop="personRoleInfo1.umpireAddTime">
            <el-date-picker
              v-model="form.personRoleInfo1.umpireAddTime"
              clearable
              type="date"
              value-format="YYYY-MM-DD"
              placeholder="请选择增加日期"
              style="width: 100%;"
            />
          </el-form-item>
          <el-form-item label="有效日期" prop="personRoleInfo1.umpireValidTime">
            <el-date-picker
              v-model="form.personRoleInfo1.umpireValidTime"
              clearable
              type="date"
              value-format="YYYY-MM-DD"
              placeholder="有效日期"
              style="width: 100%;"
            />
          </el-form-item>
          <el-form-item v-if="route.query.perType==4" label="裁判员级别" prop="personRoleInfo1.umpireRank">
            <el-select v-model="form.personRoleInfo1.umpireRank" placeholder="请选择裁判员级别" style="width: 100%;">
              <el-option v-for="item in jList" :key="item" :label="item" :value="item" />
            </el-select>
          </el-form-item>
          <br> 
          <el-row justify="center">
            <el-button type="primary" :loading="buttonLoading" @click="submitForm">保存</el-button>
          </el-row>
        </el-form>
      </el-col>
    </el-row>

    <!-- 会员已在其他完成注册,是否进行调入吗? -->
    <el-dialog
      v-model="dialogFold"
      :title=" title +'已在其他完成注册,是否进行调入吗?'"
      width="30%"
      :before-close="handleClose"
      style="border-radius: 20px; padding: 20px;"
    >
      <div style="text-align: center;">
        <el-button type="primary" @click="goApple"> 确定 </el-button>
      </div>
    </el-dialog>
    <!-- 申请调入 -->
    <!--    <el-dialog-->
    <!--      v-model="dialogApple"-->
    <!--      :title=" title+'调动'"-->
    <!--      width="30%"-->
    <!--      center-->
    <!--      :before-close="handleClose"-->
    <!--      style="border-radius: 20px; padding: 20px;"-->
    <!--    >-->
    <!--      <div>-->
    <!--        <el-form ref="formsRef" :model="forms" :rules="rules">-->
    <!--          <el-form-item :label="forms.name" prop="address">-->
    <!--            <span>( {{ forms.idcType==0?'身份证':'护照' }}{{ forms.idcCode }})</span> -->
    <!--          </el-form-item>-->
    <!--          <el-form-item label="当前所在团体:" prop="address">-->
    <!--            <el-input v-model="forms.ancestorNameList" readonly />-->
    <!--          </el-form-item>-->
    <!--        </el-form>-->

    <!--      </div>-->
    <!--      <div style="text-align: center;">-->
    <!--        <el-button type="primary" @click="auditFN"> 提交申请</el-button>-->
    <!--      </div>-->
    <!--    </el-dialog>-->
    <!-- 上传证件照 -->
    <el-dialog
      v-if="dialogID"
      v-model="dialogID"
      title="请核对姓名及身份证号码是否正确"
      width="30%"
      :before-close="handleClose"
      center
      style="border-radius: 20px; padding: 20px;"
      @close="close"
    >
      <ImageUpload2 v-model="form.imageUrl" :limit="1" class="idCode" />
      <div style="text-align: center;">请上传身份证的反面</div>
      <br>
      <el-row justify="center">
        <el-button type="" @click=" close"> 重新输入</el-button>
        <el-button type="primary" @click="auditCode"> 检测</el-button>
      </el-row>
    </el-dialog>
  </div>
  
</template>

<script setup name="addStorehouse">
import { ref, toRefs, reactive, onMounted, watch } from 'vue'
import { getInfo, addPersonToMyDept, extractInfoFromChinaIdCard, checkId, countryList } from '@/api/person/info'
import { commitTransfer } from '@/api/member/mobilize.js'
import { listCertified } from '@/api/system/userInfo.js'
import { regionsList } from '@/api/system/userInfo.js'
import { useRoute, useRouter } from 'vue-router'
import { getCurrentInstance } from '@vue/runtime-core'
import { editPersonInfo } from '@/api/storehouse/addStorehouse'
const jList = ref(['一级', '二级', '三级', '四级', '五级', '六级', '七级', '八级', '九级', '十级'])
const router = useRouter()
const route = useRoute()
const buttonLoading = ref(false)
const { proxy } = getCurrentInstance()
const district = ref()
const dialogFold = ref(false)
const dialogApple = ref(false)
const dialogID = ref(false)
const perId = ref()
const list1 = ref([])
const list2 = ref([])
const timer = ref()
const levelList = ref([])
const pattern = /(^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$)|(^[1-9]\d{5}\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{2}$)/
const data = reactive({
  rules: {
    name: { required: true, message: '请输入姓名', trigger: 'blur' },
    idcCode: [
      { required: true, message: '请输入证件号', trigger: 'blur' },
      { validator: validateCode, trigger: 'blur' }
    ],
   
    'personRoleInfo1.umpireType': { required: true, message: '请选择裁判类型', trigger: 'blur' },
    'personRoleInfo1.umpireCard': { required: true, message: '请输入裁判证号码', trigger: 'blur' },
    'personRoleInfo1.umpirePassTime': { required: true, message: '请选择通过时间', trigger: 'blur' },
    'personRoleInfo1.umpireAddTime': { required: true, message: '请选择添加时间', trigger: 'blur' },
    'personRoleInfo1.umpireValidTime': { required: true, message: '请选择有效时间', trigger: 'blur' },
    'personRoleInfo1.umpireRank': { required: true, message: '请选择裁判级别', trigger: 'blur' }
  },
  form: {
    perType: '4', // (1:个人会员;2:教练;3:考官;4:裁判;5:临时会员;) v
    idcType: 0,
    personRoleInfo1: {},
    personRoleInfo: {}
  },
  forms: { }
})
const { rules, form, forms } = toRefs(data)
const title = ref('裁 判')
const text = ref('添 加')
onMounted(() => {
  if (route.query.perId) {
    initData()
    text.value = '编 辑'
  }
})

watch(() => [form.value.name, form.value.idcType, form.value.idcCode], (newForm, oldForm) => {
  if (newForm[1] == 0 && pattern.test(form.value.idcCode)) {
    clearTimeout(timer.value)
    timer.value = setTimeout(() => {
      getIdCode()
    }, 500)
  }
})

// 个人信息
async function getUserInfo() {
  const res = await getInfo(perId.value)
  forms.value = res.data
  if (forms.areaAssName)forms.ancestorNameList = forms.value.ancestorNameList.join(',').replaceAll(',', '/')
  console.log(res)
}

// 编辑回显数据
async function initData() {
  const res = await getInfo(route.query.perId)
  form.value = res.data
  form.value.personRoleInfo1 = JSON.parse(form.value.personRoleInfo)
}

getLevel()
async function getLevel(params) {
  const res = await countryList()
  levelList.value = res.data
}

function validateCode(rule, value, callback) {
  if (form.value.idcType == 0) {
    if (pattern.test(value)) {
      return callback()
    }
    callback(new Error('请输入正确证件号'))
  } else {
    return callback()
  }
}

// 赛事地区下拉
getRegionsList()
async function getRegionsList() {
  const res = await regionsList()
  district.value = res.data
}

getXieList()
async function getXieList() {
  const res = await listCertified()
  list1.value = res.data
  list2.value = res.data
} 

// 身份信息读取
async function getIdCode() {
  const res = await extractInfoFromChinaIdCard({
    name: form.value.name,
    idcType: form.value.idcType,
    idcCode: form.value.idcCode
  })
  if (res.code === 200) {
    form.value.sex = res.data.sex
    form.value.birth = res.data.birth
    form.value.phone = res.data.phone
    form.value.cityId = res.data.cityId
    form.value.address = res.data.address
    form.value.photo = res.data.photo
    clearTimeout(timer.value)
  }
}

/** 提交按钮 */
function submitForm() {
  proxy.$refs['infoRef'].validate(async valid => {
    if (valid) {
      buttonLoading.value = false
      form.value.personRoleInfo = JSON.stringify(form.value.personRoleInfo1) 
      form.value.certUrl = JSON.stringify(form.value.certUrl1) 
      let res = null
      if (form.value.perId != null) {
        form.value.idcKey = undefined
        res = await editPersonInfo(form.value)
      } else {
        res = await addPersonToMyDept(form.value)
      }
      if (res.code === 200) {
        if (res.data == 0) {
          proxy.$modal.msgError('该成员,实名认证未通过,注册失败!')
          dialogID.value = true
          return
        }
        if (res.data * 1 < 0) {                 
          dialogFold.value = true
          perId.value = res.data.slice(1)
          getUserInfo()
          return 
        }
        proxy.$modal.msgSuccess('操作成功!')
        // proxy.$tab.closeReOpenPage({ path: '/member/informality' })
        router.go(-1)
        // return proxy.$modal.msgSuccess('操作成功')
      } else {
        proxy.$modal.msgError('添加失败')
      }
      buttonLoading.value = false
      console.log(res)
    } else {
      proxy.$modal.msgError('请完善信息')
    }
  })
}

// 调入
function goApple() {
  dialogApple.value = true
  dialogFold.value = false
  // 请求该用户信息
}

// 调入提交审核
async function auditFN() {
  const res = await commitTransfer({ perId: perId.value })
  if (res.code == 200) {
    proxy.$modal.msgSuccess('操作成功!')
    router.push('/member/mobillize')
  }
}

async function auditCode() {
  if (!form.value.imageUrl) {
    return proxy.$modal.msgError('请上证件照!')
  }
  const res = await checkId({
    name: form.value.name,
    idcCode: form.value.idcCode,
    imageUrl: form.value.imageUrl
  })
  if (res.code == 200 && res.data) {
    proxy.$modal.msgSuccess('身份校验通过')
    close()
  } else {
    return proxy.$modal.msgError('身份校验失败,请核对信息')
  }
}

function close() {
  form.value.imageUrl = undefined
  dialogID.value = false
}

</script>

<style scoped lang="scss">
.box{
  padding: 50px;
}
.tdFlex {
  display: flex;
}

.w50 {
  width: 50%;
}

.ml20 {
  margin-left: 20px;
}

.idCode{
  :deep(.el-upload--picture-card){
    width: 380px;
    height: 240px;
    margin: 0 auto;
  }
  :deep(.fileItem ){
    width: 380px;
    height: 240px;
    margin: 0 auto;

  }
  :deep(.el-upload__tip){
    display: none;
  }
  :deep(.el-upload-list--picture-card){
    // text-align: center;
    display: flex;
    justify-content: center;
  }
}

.form-box{
  max-width: 1000px;
  padding: 100px;
  padding-top: 50px;
  border-radius: 20px;
  background-color: #fff;
}

:deep(.el-upload--picture-card){width: 100px;height: 140px;}
:deep(.component-upload-image .el-upload-list__item){width: 100px;height: 140px;}
:deep(.el-upload-list--picture-card .el-upload-list__item){width: 220px;height: 130px;}
:deep(.component-upload-image){
  display: flex;
  justify-content: center;
  .el-upload__tip{width:200px;margin-left: 20px;}
}
:deep(.fileItem  .hover-actions ){
  span{
    margin: 40px 0;
  }
}
</style>