zhouwx
2025-03-05 39f97341210dabcffbd50f1cea5bd697a602bb7b
src/layout/components/Register/index.vue
@@ -8,34 +8,41 @@
      </template>
      <el-form ref="registerRef" :model="registerForm" :rules="registerRules" class="register-form" label-position="top">
        <el-row :gutter="30">
          <el-col :span="8">
          <el-col :span="6">
            <el-form-item prop="agency.name" label="机构名称">
              <el-input
                  :disabled="isAbleEdit"
                  v-model="registerForm.agency.name"
                  v-model.trim="registerForm.agency.name"
                  size="large"
                  placeholder="请输入机构名称"
              >
              </el-input>
            </el-form-item>
          </el-col>
          <el-col :span="8">
          <el-col :span="6">
            <el-form-item prop="agency.creditCode" label="社会信用代码">
              <el-input
                  :disabled="isAbleEdit"
                  v-model="registerForm.agency.creditCode"
                  v-model.trim="registerForm.agency.creditCode"
                  size="large"
                  placeholder="请输入社会信用代码"
              >
              </el-input>
            </el-form-item>
          </el-col>
          <el-col :span="8">
          <el-col :span="6">
            <el-form-item prop="agency.attribute" label="机构属性">
              <el-radio-group v-model="registerForm.agency.attribute" style="width: 50%" @change="changeAttr()">
                <el-radio :label="0" size="large" border>疆内</el-radio>
                <el-radio :label="1" size="large" border>疆外</el-radio>
              </el-radio-group>
            </el-form-item>
          </el-col>
          <el-col :span="6">
            <el-form-item prop="agency.businessType" label="业务类别">
              <el-checkbox-group v-model="registerForm.agency.businessType">
                <el-checkbox v-for="item in state.businessTypeList" :label="item.value" :key="item.value">{{ item.label }}</el-checkbox>
              </el-checkbox-group>
            </el-form-item>
          </el-col>
        </el-row>
@@ -55,7 +62,7 @@
          <el-col :span="12">
            <el-form-item prop="agency.address" label="实际经营地址">
              <el-input
                  v-model="registerForm.agency.address"
                  v-model.trim="registerForm.agency.address"
                  size="large"
                  placeholder="请输入实际经营地址"
              />
@@ -66,7 +73,7 @@
          <el-col :span="12">
            <el-form-item prop="agency.legalPerson" label="法定代表人">
              <el-input
                  v-model="registerForm.agency.legalPerson"
                  v-model.trim="registerForm.agency.legalPerson"
                  size="large"
                  placeholder="请输入法定代表人"
              />
@@ -75,7 +82,7 @@
          <el-col :span="12">
            <el-form-item prop="agency.legalPhone" label="法人电话">
              <el-input
                  v-model="registerForm.agency.legalPhone"
                  v-model.trim="registerForm.agency.legalPhone"
                  size="large"
                  placeholder="请输入法人电话"
              />
@@ -86,7 +93,7 @@
          <el-col :span="12">
            <el-form-item prop="agency.manager" label="机构负责人">
              <el-input
                  v-model="registerForm.agency.manager"
                  v-model.trim="registerForm.agency.manager"
                  size="large"
                  placeholder="请输入机构负责人"
              />
@@ -95,7 +102,7 @@
          <el-col :span="12">
            <el-form-item prop="agency.managerPhone" label="负责人电话">
              <el-input
                  v-model="registerForm.agency.managerPhone"
                  v-model.trim="registerForm.agency.managerPhone"
                  size="large"
                  placeholder="请输入负责人电话"
              />
@@ -106,7 +113,7 @@
          <el-col :span="8">
            <el-form-item prop="agency.certNumber" label="资质证书编号">
              <el-input
                  v-model="registerForm.agency.certNumber"
                  v-model.trim="registerForm.agency.certNumber"
                  size="large"
                  placeholder="请输入资质证书编号"
              />
@@ -115,7 +122,7 @@
          <el-col :span="8">
            <el-form-item prop="agency.issueDate" label="发证日期">
              <el-date-picker
                  v-model="registerForm.agency.issueDate"
                  v-model.trim="registerForm.agency.issueDate"
                  type="date"
                  placeholder="请选择发证日期"
                  value-format="YYYY-MM-DD 00:00:00"
@@ -127,7 +134,7 @@
          <el-col :span="8">
            <el-form-item prop="agency.validDate" label="有效日期">
              <el-date-picker
                  v-model="registerForm.agency.validDate"
                  v-model.trim="registerForm.agency.validDate"
                  type="date"
                  placeholder="请选择有效日期"
                  value-format="YYYY-MM-DD 00:00:00"
@@ -138,12 +145,12 @@
          </el-col>
        </el-row>
        <el-row :gutter="30">
          <el-col :span="8">
          <el-col :span="12">
            <el-form-item prop="agency.certPath" label="资质证书">
              <el-upload accept="image/*" :action="state.uploadUrl" :headers="state.header" method="post" :on-success="(res, uploadFile)=>handleAvatarSuccess(res, uploadFile,'证书')" :on-exceed="showTip" :on-preview="handlePictureCardPreview" :limit='state.imgLimit' v-model:file-list="state.certList" list-type="picture-card" :before-upload="picSize" :on-remove="(file, uploadFiles)=>handleRemove(file, uploadFiles,'证书')" >
                <el-icon><Plus /></el-icon>
                <template #tip>
                  <div class="el-upload__tip">上传jpg/png图片尺寸小于5M,最多可上传1张</div>
                  <div class="el-upload__tip">上传jpg/png图片尺寸小于5M,最多可上传5张</div>
                </template>
              </el-upload>
            </el-form-item>
@@ -153,7 +160,7 @@
          <el-col :span="8">
            <el-form-item prop="agency.assetValue" label="固定资产总值">
              <el-input
                  v-model="registerForm.agency.assetValue"
                  v-model.trim="registerForm.agency.assetValue"
                  type="number"
                  size="large"
                  placeholder="请输入固定资产总值"
@@ -164,7 +171,7 @@
            <el-form-item prop="agency.workArea" label="工作场所建筑面积">
              <el-input
                  type="number"
                  v-model="registerForm.agency.workArea"
                  v-model.trim="registerForm.agency.workArea"
                  size="large"
                  placeholder="请输入工作场所建筑面积"
              ><template #append>㎡</template></el-input>
@@ -174,7 +181,7 @@
            <el-form-item prop="agency.archiveArea" label="档案室面积">
              <el-input
                  type="number"
                  v-model="registerForm.agency.archiveArea"
                  v-model.trim="registerForm.agency.archiveArea"
                  size="large"
                  placeholder="请输入档案室面积"
              ><template #append>㎡</template></el-input>
@@ -185,7 +192,7 @@
          <el-col :span="8">
            <el-form-item prop="agency.regAddress" label="注册地址">
              <el-input
                  v-model="registerForm.agency.regAddress"
                  v-model.trim="registerForm.agency.regAddress"
                  size="large"
                  placeholder="请输入注册地址"
              />
@@ -205,8 +212,8 @@
          </el-col>
        </el-row>
        <el-row :gutter="30">
          <el-col :span="8">
            <el-form-item prop="agency.reportPath" label="加盖公章的《机构信息上报表》">
          <el-col :span="24">
            <el-form-item prop="agency.reportPath" label="加盖公章的《机构信息上报表》(请上传加盖公章的营业执照)">
              <!--              <el-upload-->
              <!--                  v-model:file-list="state.fileList"-->
              <!--                  class="upload-demo"-->
@@ -319,6 +326,7 @@
import { Base64 } from 'js-base64'
import {getAgencyById} from "../../../api/sysUsers";
import Cookies from "js-cookie";
import {getInstitutionDetail} from "@/api/backManage/insitution";
const emit = defineEmits(["getList"]);
const props = {
@@ -333,7 +341,7 @@
  busList: [],
  fileList: [],
  certList: [],
  imgLimit: 1,
  imgLimit: 5,
  uploadUrl: import.meta.env.VITE_APP_BASE_API + '/system/common/uploadFile',
  header: {
    Authorization: 'Bearer ' + getToken()
@@ -364,13 +372,24 @@
      regAddress: '',
      business: '',
      reportPath: '',
      certPath: ''
      certPath: '',
      businessType: [],
    },
    username: '',
    phone: '',
    password: '',
    confirmPassword: ''
  }
  },
  businessTypeList: [
    {
      value: 1,
      label: '安全评价'
    },
    {
      value: 2,
      label: '检验检测'
    },
  ]
})
const isSuper = ref(false);
@@ -477,6 +496,7 @@
  "agency.name": [{required: true, trigger: "blur", message: "请输入机构名称"}],
  "agency.creditCode": [{required: true, trigger: "blur", message: "请输入社会信用代码"}],
  "agency.attribute": [{required: true, trigger: "blur", message: "请选择机构属性"}],
  "agency.businessType": [{required: true, trigger: "blur", message: "请选择业务类别"}],
  "agency.area": [{required: true, trigger: "blur", message: "请选择实际经营地址所属区域"}],
  "agency.address": [{required: true, trigger: "blur", message: "请输入实际经营地址"}],
  "agency.legalPerson": [{required: true, trigger: "blur", message: "请输入法定代表人"}],
@@ -501,6 +521,7 @@
    { required: true, validator: equalToPassword, trigger: "blur" }
  ]
};
const cert = ref([])
const loading = ref(false)
const dialogVisible = ref(false)
@@ -520,10 +541,11 @@
  // });
})
const isAbleEdit = ref(false);
const isReject = ref(false);
const openDialog=(type, value)=>{
  state.title = type === 'add' ? '新增/注册' : type ==='edit' ? '编辑' : '查看' ;
    getArea()
  if(type === 'edit' || type == 'view') {
  state.title = type === 'add' ? '新增/注册' : (type ==='edit' || type ==='reject') ? '编辑' : '查看' ;
  getArea()
  if(type === 'edit' || type == 'view' || type ==='reject') {
    state.registerForm.id = value.id
    state.registerForm.username = value.username
    state.registerForm.phone = value.phone
@@ -544,8 +566,10 @@
          }
        }
        getArea()
        state.registerForm.phone = info.user.phone
        startPhone.value = info.user.phone
        state.registerForm.agency.business = info.business.split(',').map(Number)
        state.registerForm.agency.businessType = info.businessType ? info.businessType.split(',').map(Number) : []
          if(state.registerForm.agency.attribute === 0){
              state.registerForm.agency.area = [info.city,info.district].filter(item => { return item && item.trim() })
          }else {
@@ -556,9 +580,21 @@
              state.fileList = imgUrl ? imgUrl.split(',').map(url => {return {url} }) : []
          }
          if(res.data.certPath) {
            const imgUrl = import.meta.env.VITE_APP_BASE_API + "/" +  res.data.certPath
            // cert.value.push(res.data.certPath)
            const imgList = res.data.certPath.split(',')
            cert.value = imgList
            imgList.forEach((item,index) => {
              if(item.includes(import.meta.env.VITE_APP_BASE_API)){
              }else{
                imgList[index] = import.meta.env.VITE_APP_BASE_API + "/" + item
              }
            })
            const imgUrl = imgList.join(',')
            state.certList = imgUrl ? imgUrl.split(',').map(url => {return {url} }) : []
          }
      }else{
        ElMessage.warning(res.message)
@@ -567,8 +603,12 @@
    if(type == 'view'){
      state.isView = true
    }
    if(type === 'reject'){
      isReject.value = true;
    }
  }
  dialogVisible.value = true
  console.log('state.registerForm',state.registerForm)
}
const validKey=(key,obj)=>{
@@ -607,6 +647,10 @@
}
const changeAttr=()=>{
  state.registerForm.agency.area = []
  state.registerForm.agency.province = ''
  state.registerForm.agency.city = ''
  state.registerForm.agency.district  = ''
  getArea()
}
@@ -640,7 +684,9 @@
    if(type === '上报表'){
      state.registerForm.agency.reportPath = res.data.path
    }else {
      state.registerForm.agency.certPath = res.data.path
      cert.value.push(res.data.path)
      state.registerForm.agency.certPath = cert.value.join(',')
      console.log('cert',cert.value)
    }
  }else{
@@ -652,11 +698,16 @@
}
const handleRemove = async (file, uploadFiles,type) => {
  if(file && file.status == 'success'){
  let path = '';
  if(type === '上报表'){
    path = state.registerForm.agency.reportPath;
  }else {
    path = state.registerForm.agency.certPath;
    path = file.url.substring(file.url.indexOf('upload'))
    console.log('cert',cert.value)
    cert.value = cert.value.filter(url => !file.url.includes(url))
    state.registerForm.agency.certPath = cert.value.join(',')
  }
  const res = await delPic({path: path})
  if(res.code == 200){
@@ -665,10 +716,12 @@
      message: '文件已删除'
    })
  }else{
    ElMessage({
      type: 'warning',
      message: res.message
    })
  }
  }
}
@@ -680,6 +733,9 @@
        const {confirmPassword,id, ...data} = JSON.parse(JSON.stringify(state.registerForm))
        data.password = Base64.encode(data.password)
        data.agency.business = data.agency.business.join(',')
        data.agency.businessType = data.agency.businessType.join(',')
        const cert = state.certList.map(item => item.response ?item.response.data.path:item.url)
        data.agency.certPath = cert.join(',')
        delete data.agency.area
          delete data.agency.id
        register(data).then(res => {
@@ -712,17 +768,23 @@
      }else {
          const {confirmPassword, ...data} = JSON.parse(JSON.stringify(state.registerForm))
          data.password = Base64.encode(data.password)
          console.log('data',data)
          data.agency.business = data.agency.business.join(',')
          data.agency.businessType = data.agency.businessType.join(',')
        console.log('rea',state.certList)
          const cert = state.certList.map(item => item.response ?item.response.data.path:item.url)
          data.agency.certPath = cert.join(',')
          if(isReject.value) {
            data.state = 1;
          }
          // delete data.agency.area
          console.log('data',data)
          // console.log('data',data)
          editAgency(data).then(res => {
              if(res.code == 200){
                  ElMessage({
                      type: 'success',
                      message: '编辑成功'
                  })
                  emit("getList")
                  dialogVisible.value = false
                  state.registerForm.agency.attribute = 0
                  proxy.$refs.registerRef.resetFields()
@@ -730,7 +792,7 @@
                  state.fileList = []
                  state.certList = []
                  loading.value = false
                emit("getList")
              }else{
                  ElMessage({
                      type: 'warning',
@@ -751,6 +813,7 @@
  proxy.$refs.registerRef.clearValidate()
  state.fileList = []
  state.certList = []
  cert.value = []
}
defineExpose({