|
|
@@ -0,0 +1,297 @@
|
|
|
+<!-- 会员机构管理-子机构管理-子机构管理-编辑 -->
|
|
|
+<template>
|
|
|
+ <app-drawer title="编辑" width="900" v-model:show="show" :refresh="refresh" :loading="loading">
|
|
|
+ <el-form ref="formRef" label-width="140px" :model="formData" :rules="formRules" :show-message="false">
|
|
|
+ <fieldset class="g-fieldset el-form--horizontal">
|
|
|
+ <legend class="g-fieldset__legend">基本信息</legend>
|
|
|
+ <el-form-item label="上级机构" prop="referral">
|
|
|
+ {{ selectedParent?.accountname }}
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="机构代码" prop="userid">
|
|
|
+ <el-input v-model="formData.userid" maxlength="4" placeholder="请输入" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="所有者类型" prop="userinfotype">
|
|
|
+ <el-radio-group v-model="formData.userinfotype">
|
|
|
+ <el-radio label="企业" :value="2" />
|
|
|
+ <el-radio label="个人" :value="1" />
|
|
|
+ </el-radio-group>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="机构名称" prop="accountname">
|
|
|
+ <el-input v-model="formData.accountname" maxlength="50" placeholder="请输入" />
|
|
|
+ </el-form-item>
|
|
|
+ </fieldset>
|
|
|
+ <fieldset class="g-fieldset el-form--horizontal">
|
|
|
+ <legend class="g-fieldset__legend">{{ isPerson ? '个人' : '企业' }}资料</legend>
|
|
|
+ <el-form-item label="名称" prop="customername">
|
|
|
+ <el-input v-model="formData.customername" maxlength="50" placeholder="请输入" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="公司" prop="company" v-if="isPerson">
|
|
|
+ <el-input v-model="formData.company" maxlength="50" placeholder="请输入" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="企业性质" prop="biznature" v-if="!isPerson">
|
|
|
+ <app-enum code="biznature" v-model="formData.biznature" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="证件类型" prop="cardtypeid">
|
|
|
+ <app-enum code="certypecompany" v-model="formData.cardtypeid" v-if="!isPerson" />
|
|
|
+ <app-enum code="certypeperson" v-model="formData.cardtypeid" v-else />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="证件号码" prop="cardnum">
|
|
|
+ <el-input v-model="formData.cardnum" maxlength="50" placeholder="请输入" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="证件照正面" prop="cardfrontphotourl">
|
|
|
+ <app-upload v-model="uploadFiles.cardfrontphotourl" :file-types="['image']"
|
|
|
+ type-message="请选择正确的图片类型" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="证件照反面" prop="cardbackphotourl" v-if="isPerson">
|
|
|
+ <app-upload v-model="uploadFiles.cardbackphotourl" :file-types="['image']"
|
|
|
+ type-message="请选择正确的图片类型" />
|
|
|
+ </el-form-item>
|
|
|
+ <template v-if="!isPerson">
|
|
|
+ <el-form-item label="法人姓名" prop="legalpersonname">
|
|
|
+ <el-input v-model="formData.legalpersonname" maxlength="50" placeholder="请输入" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="法人身份证正面" prop="legalcardfrontphotourl">
|
|
|
+ <app-upload v-model="uploadFiles.legalcardfrontphotourl" :file-types="['image']"
|
|
|
+ type-message="请选择正确的图片类型" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="法人身份证反面" prop="legalcardbackphotourl">
|
|
|
+ <app-upload v-model="uploadFiles.legalcardbackphotourl" :file-types="['image']"
|
|
|
+ type-message="请选择正确的图片类型" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="联系人" prop="contactname">
|
|
|
+ <el-input v-model="formData.contactname" maxlength="50" placeholder="请输入" />
|
|
|
+ </el-form-item>
|
|
|
+ </template>
|
|
|
+ <el-form-item label="性别" prop="sex">
|
|
|
+ <el-radio-group v-model="formData.sex">
|
|
|
+ <el-radio label="男" :value="1" />
|
|
|
+ <el-radio label="女" :value="0" />
|
|
|
+ </el-radio-group>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="手机号" prop="mobile">
|
|
|
+ <el-input v-model="formData.mobile" maxlength="50" placeholder="请输入" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="联系电话" prop="telphone">
|
|
|
+ <el-input v-model="formData.telphone" maxlength="50" placeholder="请输入" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item class="el-form-item--row" label="地区" prop="provinceid">
|
|
|
+ <app-region class="el-form-item--col" v-model:province="formData.provinceid"
|
|
|
+ v-model:city="formData.cityid" v-model:district="formData.districtid" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item class="el-form-item--row" label="地址" prop="address">
|
|
|
+ <el-input v-model="formData.address" maxlength="50" placeholder="请输入" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="邮政编码" prop="postalcode">
|
|
|
+ <el-input v-model="formData.postalcode" maxlength="50" placeholder="请输入" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="邮箱" prop="email">
|
|
|
+ <el-input v-model="formData.email" maxlength="50" placeholder="请输入" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item class="el-form-item--row" label="备注" prop="remark">
|
|
|
+ <el-input type="textarea" v-model="formData.remark" maxlength="200" :rows="2" placeholder="请输入" />
|
|
|
+ </el-form-item>
|
|
|
+ </fieldset>
|
|
|
+ <fieldset class="g-fieldset el-form--horizontal">
|
|
|
+ <legend class="g-fieldset__legend">管理员及账户信息</legend>
|
|
|
+ <el-form-item label="管理员登录账号" prop="logincode">
|
|
|
+ <el-input v-model="formData.logincode" maxlength="50" placeholder="请输入" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="管理员名称" prop="username">
|
|
|
+ <el-input v-model="formData.username" maxlength="50" placeholder="请输入" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="默认登录密码" prop="smpassword">
|
|
|
+ <el-input value="123456" disabled />
|
|
|
+ </el-form-item>
|
|
|
+ </fieldset>
|
|
|
+ <fieldset class="g-fieldset el-form--horizontal">
|
|
|
+ <legend class="g-fieldset__legend">附件</legend>
|
|
|
+ <el-form-item label="附件1" prop="attachment1">
|
|
|
+ <app-upload v-model="uploadFiles.attachment1" :file-types="['image', 'pdf']"
|
|
|
+ type-message="请选择正确的图片类型" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="附件2" prop="attachment2">
|
|
|
+ <app-upload v-model="uploadFiles.attachment2" :file-types="['image', 'pdf']"
|
|
|
+ type-message="请选择正确的图片类型" />
|
|
|
+ </el-form-item>
|
|
|
+ </fieldset>
|
|
|
+ </el-form>
|
|
|
+ <template #footer>
|
|
|
+ <el-button @click="onCancel(false)">取消</el-button>
|
|
|
+ <el-button type="primary" @click="onSubmit">提交审核</el-button>
|
|
|
+ </template>
|
|
|
+ </app-drawer>
|
|
|
+</template>
|
|
|
+
|
|
|
+<script lang="ts" setup>
|
|
|
+import { ref, reactive, PropType, onMounted, computed } from 'vue'
|
|
|
+import { ElMessage, FormInstance, FormRules, UploadUserFile } from 'element-plus'
|
|
|
+import { decryptAES } from '@/services/crypto'
|
|
|
+import { useRequest } from '@/hooks/request'
|
|
|
+import { organSonViewson, organSonAdd, organSonEdit } from '@/services/api/member'
|
|
|
+import AppDrawer from '@pc/components/base/drawer/index.vue'
|
|
|
+import AppUpload from '@pc/components/base/upload/index.vue'
|
|
|
+import AppEnum from '@pc/components/modules/enum/index.vue'
|
|
|
+import AppRegion from '@pc/components/modules/region/index.vue'
|
|
|
+import service from '@/services'
|
|
|
+
|
|
|
+const props = defineProps({
|
|
|
+ selectedParent: {
|
|
|
+ type: Object as PropType<Model.AreaAndAllChildsRsp>
|
|
|
+ },
|
|
|
+ selectedRow: {
|
|
|
+ type: Object as PropType<Model.OrganSonRsp>
|
|
|
+ }
|
|
|
+})
|
|
|
+
|
|
|
+const formRef = ref<FormInstance>()
|
|
|
+const show = ref(true)
|
|
|
+const refresh = ref(false)
|
|
|
+
|
|
|
+const uploadFiles = reactive<{
|
|
|
+ cardfrontphotourl: UploadUserFile[];
|
|
|
+ cardbackphotourl: UploadUserFile[];
|
|
|
+ legalcardfrontphotourl: UploadUserFile[];
|
|
|
+ legalcardbackphotourl: UploadUserFile[];
|
|
|
+ attachment1: UploadUserFile[];
|
|
|
+ attachment2: UploadUserFile[];
|
|
|
+}>({
|
|
|
+ cardfrontphotourl: [],
|
|
|
+ cardbackphotourl: [],
|
|
|
+ legalcardfrontphotourl: [],
|
|
|
+ legalcardbackphotourl: [],
|
|
|
+ attachment1: [],
|
|
|
+ attachment2: []
|
|
|
+})
|
|
|
+
|
|
|
+
|
|
|
+// 是否个人
|
|
|
+const isPerson = computed(() => formData.value.userinfotype === 1)
|
|
|
+
|
|
|
+const formData = ref<Partial<Model.organSonUpdateReq>>({
|
|
|
+ parentuserid: props.selectedParent?.userid,
|
|
|
+ userinfotype: 2,
|
|
|
+ sex: 1,
|
|
|
+ usertype: 3
|
|
|
+})
|
|
|
+
|
|
|
+const getUploadFiles = (value?: string) => {
|
|
|
+ const paths = value ? value.split(',') : []
|
|
|
+ return paths.map((url) => {
|
|
|
+ const urlObj = new URL(url, service.getConfig('apiUrl'))
|
|
|
+ const name = urlObj.pathname.split('/').pop()
|
|
|
+ return {
|
|
|
+ name: name ?? urlObj.href,
|
|
|
+ url: urlObj.href,
|
|
|
+ response: {
|
|
|
+ data: [{ filePath: value }]
|
|
|
+ }
|
|
|
+ }
|
|
|
+ })
|
|
|
+}
|
|
|
+
|
|
|
+const { loading, run } = useRequest(organSonViewson, {
|
|
|
+ manual: true,
|
|
|
+ onSuccess: ((res) => {
|
|
|
+ const { logincode, username, oldResult: { userAccountDetailVo, userinfoDetailVo } } = res.data
|
|
|
+ formData.value = {
|
|
|
+ accountname: userAccountDetailVo.accountName,
|
|
|
+ address: userinfoDetailVo.address,
|
|
|
+ biznature: userinfoDetailVo.bizNature,
|
|
|
+ cardnum: decryptAES(userinfoDetailVo.cardNum),
|
|
|
+ cardtypeid: userinfoDetailVo.cardTypeId,
|
|
|
+ cityid: userinfoDetailVo.cityid,
|
|
|
+ company: userinfoDetailVo.company,
|
|
|
+ contactname: userinfoDetailVo.contactName,
|
|
|
+ customername: userinfoDetailVo.customerName,
|
|
|
+ districtid: userinfoDetailVo.districtid,
|
|
|
+ email: userinfoDetailVo.email,
|
|
|
+ legalpersonname: userinfoDetailVo.legalPersonName,
|
|
|
+ logincode: logincode,
|
|
|
+ mobile: userinfoDetailVo.mobile,
|
|
|
+ modifystatus: userAccountDetailVo.modifyStatus,
|
|
|
+ parentuserid: userAccountDetailVo.parentuserid,
|
|
|
+ postalcode: userinfoDetailVo.postalCode,
|
|
|
+ provinceid: userinfoDetailVo.provinceid,
|
|
|
+ qq: userinfoDetailVo.qq,
|
|
|
+ refereeuserid: userAccountDetailVo.refereeuserid,
|
|
|
+ remark: userinfoDetailVo.remark,
|
|
|
+ sex: userinfoDetailVo.sex,
|
|
|
+ telphone: userinfoDetailVo.telPhone,
|
|
|
+ userid: userAccountDetailVo.userId,
|
|
|
+ userinfotype: userinfoDetailVo.userinfoType,
|
|
|
+ username: username,
|
|
|
+ usertype: userAccountDetailVo.usertype,
|
|
|
+ wechat: userinfoDetailVo.wechat
|
|
|
+ }
|
|
|
+ uploadFiles.cardfrontphotourl = getUploadFiles(userinfoDetailVo.cardBackPhotoUrl)
|
|
|
+ uploadFiles.cardbackphotourl = getUploadFiles(userinfoDetailVo.cardFrontPhotoUrl)
|
|
|
+ uploadFiles.legalcardfrontphotourl = getUploadFiles(userinfoDetailVo.legalCardFrontPhotoUrl)
|
|
|
+ uploadFiles.legalcardbackphotourl = getUploadFiles(userinfoDetailVo.legalCardBackPhotoUrl)
|
|
|
+ uploadFiles.attachment1 = getUploadFiles(userinfoDetailVo.attachment1)
|
|
|
+ uploadFiles.attachment2 = getUploadFiles(userinfoDetailVo.attachment2)
|
|
|
+ }),
|
|
|
+ onError: (err) => {
|
|
|
+ ElMessage.error(err)
|
|
|
+ }
|
|
|
+})
|
|
|
+
|
|
|
+// 表单验证规则
|
|
|
+const formRules: FormRules = {
|
|
|
+ userid: [{ required: true }],
|
|
|
+ accountname: [{ required: true }],
|
|
|
+ cardtypeid: [{ required: true }],
|
|
|
+ username: [{ required: true }],
|
|
|
+ customername: [{ required: true }],
|
|
|
+ cardnum: [{ required: true }],
|
|
|
+ logincode: [{ required: true }],
|
|
|
+}
|
|
|
+
|
|
|
+const onCancel = (isRefresh = false) => {
|
|
|
+ show.value = false
|
|
|
+ refresh.value = isRefresh
|
|
|
+}
|
|
|
+
|
|
|
+// 更新上传文件到表单中
|
|
|
+const updateUploadFiles = (uploadFiles: UploadUserFile[]) => {
|
|
|
+ return uploadFiles.map((e) => {
|
|
|
+ const res = e.response as { data: { filePath: string }[] }
|
|
|
+ return res.data.map((e) => e.filePath)
|
|
|
+ }).join(',')
|
|
|
+}
|
|
|
+
|
|
|
+const onSubmit = () => {
|
|
|
+ const rawData = { ...formData.value }
|
|
|
+ rawData.cardfrontphotourl = updateUploadFiles(uploadFiles.cardfrontphotourl)
|
|
|
+ rawData.cardbackphotourl = updateUploadFiles(uploadFiles.cardbackphotourl)
|
|
|
+ rawData.legalcardfrontphotourl = updateUploadFiles(uploadFiles.legalcardfrontphotourl)
|
|
|
+ rawData.legalcardbackphotourl = updateUploadFiles(uploadFiles.legalcardbackphotourl)
|
|
|
+ rawData.attachment1 = updateUploadFiles(uploadFiles.attachment1)
|
|
|
+ rawData.attachment2 = updateUploadFiles(uploadFiles.attachment2)
|
|
|
+
|
|
|
+ formRef.value?.validate((valid) => {
|
|
|
+ if (valid) {
|
|
|
+ loading.value = true
|
|
|
+ organSonAdd({
|
|
|
+ data: rawData
|
|
|
+ }).then(() => {
|
|
|
+ ElMessage.success('保存成功')
|
|
|
+ onCancel(true)
|
|
|
+ }).catch((err) => {
|
|
|
+ ElMessage.error('保存失败:' + err)
|
|
|
+ }).finally(() => {
|
|
|
+ loading.value = false
|
|
|
+ })
|
|
|
+ }
|
|
|
+ })
|
|
|
+}
|
|
|
+
|
|
|
+onMounted(() => {
|
|
|
+ const { userid, modifystatus } = props.selectedRow ?? {}
|
|
|
+ if (userid) {
|
|
|
+ run({
|
|
|
+ areaid: userid,
|
|
|
+ modifystatus
|
|
|
+ })
|
|
|
+ }
|
|
|
+})
|
|
|
+</script>
|