From c7aa6ae0b55e715b30c63652e2ad6ba3198af231 Mon Sep 17 00:00:00 2001 From: THK3121 <thk121969318@163.com> Date: Fri, 21 Jul 2023 17:54:11 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A1=B5=E9=9D=A2=E6=A0=B7=E5=BC=8F=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/company.ts | 22 +- src/api/perms/admin.ts | 8 - src/views/company/edit.vue | 1272 +++++++++++++++----------- src/views/company/index.vue | 96 +- src/views/company/subordinate.vue | 101 +- src/views/contract/contractDetil.vue | 109 +-- src/views/permission/admin/edit.vue | 1236 ++++++++++++++----------- src/views/permission/admin/index.vue | 127 +-- 8 files changed, 1682 insertions(+), 1289 deletions(-) diff --git a/src/api/company.ts b/src/api/company.ts index eb316b3..74fbeaa 100644 --- a/src/api/company.ts +++ b/src/api/company.ts @@ -1,31 +1,39 @@ -import request from '@/utils/request' +import request from "@/utils/request"; // 公司列表 export function apiCompanyLists(params: any) { - return request.get({ url: '/company/lists', params }) + return request.get({ url: "/company/lists", params }); } // 添加公司 export function apiCompanyAdd(params: any) { - return request.post({ url: '/company/add', params }) + return request.post({ url: "/company/add", params }); } // 编辑公司 export function apiCompanyEdit(params: any) { - return request.post({ url: '/company/edit', params }) + return request.post({ url: "/company/edit", params }); } // 删除公司 export function apiCompanyDelete(params: any) { - return request.post({ url: '/company/delete', params }) + return request.post({ url: "/company/delete", params }); } // 公司详情 export function apiCompanyDetail(params: any) { - return request.get({ url: '/company/detail', params }) + return request.get({ url: "/company/detail", params }); } // 下属公司详情 export function apiSubordinateList(params: any) { - return request.get({ url: '/company/subordinate', params }) + return request.get({ url: "/company/subordinate", params }); +} +// 生成合同 +export function generateGontract(params: any) { + return request.get({ url: "/company/Draftingcontracts", params }); +} +// 发送短信 +export function sendMsgApi(params: any) { + return request.get({ url: "/company/postsms", params }); } diff --git a/src/api/perms/admin.ts b/src/api/perms/admin.ts index b0c611e..8b15305 100644 --- a/src/api/perms/admin.ts +++ b/src/api/perms/admin.ts @@ -27,11 +27,3 @@ export function adminDelete(params: any) { export function adminDetail(params: any) { return request.get({ url: '/auth.admin/detail', params }) } -// 生成合同 -export function generateGontract(params: any) { - return request.get({ url: '/company/Draftingcontracts', params }) -} -// 发送短信 -export function sendMsgApi(params: any) { - return request.get({ url: '/company/postsms', params }) -} diff --git a/src/views/company/edit.vue b/src/views/company/edit.vue index 2a65f01..462d713 100644 --- a/src/views/company/edit.vue +++ b/src/views/company/edit.vue @@ -1,315 +1,529 @@ <template> - <div class="edit-popup"> - <!-- <popup ref="popupRef" :title="popupTitle" :async="true" width="70%" @confirm="handleSubmit" @close="handleClose"> --> - <el-form ref="formRef" :model="formData" label-width="90px" :rules="formRules"> - <div style="font-size: 1.2rem; margin: 10px 0">公司基本信息创建</div> - <el-col :span="24" class="el-card pt-6"> - <el-row> - <el-col :span="8"> - <el-form-item label="公司名称" prop="company_name"> - <el-input v-model="formData.company_name" placeholder="请输入公司名称" clearable :disabled="isDisabled" - :style="{ width: '100%' }"></el-input> - </el-form-item> - </el-col> - <el-col :span="8"> - <el-form-item label="社会代码" prop="organization_code"> - <el-input :disabled="isDisabled" v-model="formData.organization_code" placeholder="请输入社会代码" - clearable :style="{ width: '100%' }"></el-input> - </el-form-item> - </el-col> - <el-col :span="8"> - <el-form-item label="公司类型" prop="company_type"> - <el-select :disabled="isDisabled" v-model="formData.company_type" placeholder="请选择公司类型" - clearable :style="{ width: '100%' }"> - <el-option v-for="(item, index) in datas.dictTypeLists" :key="index" :label="item.name" - :value="item.id"></el-option> - </el-select> - </el-form-item> - </el-col> - <el-col :span="3"> - <el-form-item label="省" prop="province"> - <el-select :disabled="isDisabled" v-model="formData.province" placeholder="请选择省" clearable - @change="province_change" :style="{ width: '100%' }"> - <el-option v-for="(item, index) in datas.provinceOptions" :key="index" - :label="item.province_name" :value="item.province_code"></el-option> - </el-select> - </el-form-item> - </el-col> - <el-col :span="3"> - <el-form-item label="市" prop="city"> - <el-select :disabled="isDisabled" v-model="formData.city" placeholder="请选择市" clearable - @change="city_change" :style="{ width: '100%' }"> - <el-option v-for="(item, index) in datas.cityOptions" :key="index" :label="item.city_name" - :value="item.city_code"></el-option> - </el-select> - </el-form-item> - </el-col> - <el-col :span="3"> - <el-form-item label="区" prop="area"> - <el-select :disabled="isDisabled" v-model="formData.area" placeholder="请选择区" clearable - @change="area_change" :style="{ width: '100%' }"> - <el-option v-for="(item, index) in datas.areaOptions" :key="index" :label="item.area_name" - :value="item.area_code"></el-option> - </el-select> - </el-form-item> - </el-col> - <el-col :span="3"> - <el-form-item label="镇" prop="street"> - <el-select :disabled="isDisabled" v-model="formData.street" placeholder="请选择镇" clearable - @change="street_change" :style="{ width: '100%' }"> - <el-option v-for="(item, index) in datas.streetOptions" :key="index" - :label="item.street_name" :value="item.street_code"></el-option> - </el-select> - </el-form-item> - </el-col> - <el-col :span="12"> - <el-form-item label="地址" prop="address"> - <el-input :disabled="isDisabled" v-model="formData.address" placeholder="请输入地址" clearable - :style="{ width: '100%' }"></el-input> - </el-form-item> - </el-col> - </el-row> + <div class="edit-popup"> + <!-- <popup ref="popupRef" :title="popupTitle" :async="true" width="70%" @confirm="handleSubmit" @close="handleClose"> --> + <el-form + ref="formRef" + :model="formData" + label-width="90px" + :rules="formRules" + > + <div style="font-size: 1.2rem; margin: 10px 0">公司基本信息创建</div> + <el-col :span="24" class="el-card pt-6"> + <el-row> + <el-col :span="8"> + <el-form-item label="公司名称" prop="company_name"> + <el-input + v-model="formData.company_name" + placeholder="请输入公司名称" + clearable + :disabled="isDisabled" + :style="{ width: '100%' }" + ></el-input> + </el-form-item> + </el-col> + <el-col :span="8"> + <el-form-item label="社会代码" prop="organization_code"> + <el-input + :disabled="isDisabled" + v-model="formData.organization_code" + placeholder="请输入社会代码" + clearable + :style="{ width: '100%' }" + ></el-input> + </el-form-item> + </el-col> + <el-col :span="8"> + <el-form-item label="公司类型" prop="company_type"> + <el-select + :disabled="isDisabled" + v-model="formData.company_type" + placeholder="请选择公司类型" + clearable + :style="{ width: '100%' }" + > + <el-option + v-for="(item, index) in datas.dictTypeLists" + :key="index" + :label="item.name" + :value="item.id" + ></el-option> + </el-select> + </el-form-item> + </el-col> + <el-col :span="3"> + <el-form-item label="省" prop="province"> + <el-select + :disabled="isDisabled" + v-model="formData.province" + placeholder="请选择省" + clearable + @change="province_change" + :style="{ width: '100%' }" + > + <el-option + v-for="(item, index) in datas.provinceOptions" + :key="index" + :label="item.province_name" + :value="item.province_code" + ></el-option> + </el-select> + </el-form-item> + </el-col> + <el-col :span="3"> + <el-form-item label="市" prop="city"> + <el-select + :disabled="isDisabled" + v-model="formData.city" + placeholder="请选择市" + clearable + @change="city_change" + :style="{ width: '100%' }" + > + <el-option + v-for="(item, index) in datas.cityOptions" + :key="index" + :label="item.city_name" + :value="item.city_code" + ></el-option> + </el-select> + </el-form-item> + </el-col> + <el-col :span="3"> + <el-form-item label="区" prop="area"> + <el-select + :disabled="isDisabled" + v-model="formData.area" + placeholder="请选择镇" + clearable + @change="area_change" + :style="{ width: '100%' }" + > + <el-option + v-for="(item, index) in datas.areaOptions" + :key="index" + :label="item.area_name" + :value="item.area_code" + ></el-option> + </el-select> + </el-form-item> + </el-col> + <el-col :span="3"> + <el-form-item label="镇" prop="street"> + <el-select + :disabled="isDisabled" + v-model="formData.street" + placeholder="请选择镇" + clearable + @change="street_change" + :style="{ width: '100%' }" + > + <el-option + v-for="(item, index) in datas.streetOptions" + :key="index" + :label="item.street_name" + :value="item.street_code" + ></el-option> + </el-select> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="地址" prop="address"> + <el-input + :disabled="isDisabled" + v-model="formData.address" + placeholder="请输入地址" + clearable + :style="{ width: '100%' }" + ></el-input> + </el-form-item> + </el-col> + </el-row> + </el-col> + <div style="font-size: 1.2rem; margin: 10px 0">主要联系人</div> + <el-col :span="24" class="el-card pt-6"> + <el-row> + <el-col :span="12"> + <el-form-item label="姓名" prop="master_name"> + <el-input + :disabled="isDisabled" + v-model="formData.master_name" + placeholder="请输入姓名" + clearable + :style="{ width: '100%' }" + ></el-input> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="职务" prop="master_position"> + <el-input + :disabled="isDisabled" + v-model="formData.master_position" + placeholder="请输入职务" + clearable + :style="{ width: '100%' }" + ></el-input> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="手机" prop="master_phone"> + <el-input + :disabled="isDisabled" + v-model="formData.master_phone" + placeholder="请输入手机" + clearable + :style="{ width: '100%' }" + ></el-input> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="邮箱" prop="master_email"> + <el-input + :disabled="isDisabled" + v-model="formData.master_email" + placeholder="请输入邮箱" + clearable + :style="{ width: '100%' }" + ></el-input> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="管理人员" prop="admin_name"> + <el-input + :disabled="isDisabled" + v-model="formData.admin_name" + placeholder="设置当前公司管理人员" + clearable + :style="{ width: '100%' }" + @click="isMan = true" + ></el-input> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="片区经理" prop="area_manager_name"> + <el-input + :disabled="isDisabled" + v-model="formData.area_manager_name" + placeholder="选择片区经理" + clearable + :style="{ width: '100%' }" + @click="isAreaManager = true" + ></el-input> + </el-form-item> + </el-col> + </el-row> + </el-col> + <div style="font-size: 1.2rem; margin: 10px 0">其他联系人</div> + <el-col :span="24" class="el-card pt-6"> + <el-row> + <template + v-for="(item, index) in formData.other_contacts" + :key="index" + > + <el-col :span="12"> + <el-form-item label="姓名" prop="field120"> + <el-input + :disabled="isDisabled" + v-model="item.name" + placeholder="请输入姓名" + clearable + :style="{ width: '100%' }" + ></el-input> + </el-form-item> </el-col> - <div style="font-size: 1.2rem; margin: 10px 0">主要联系人</div> - <el-col :span="24" class="el-card pt-6"> - <el-row> - <el-col :span="12"> - <el-form-item label="姓名" prop="master_name"> - <el-input :disabled="isDisabled" v-model="formData.master_name" placeholder="请输入姓名" clearable - :style="{ width: '100%' }"></el-input> - </el-form-item> - </el-col> - <el-col :span="12"> - <el-form-item label="职务" prop="master_position"> - <el-input :disabled="isDisabled" v-model="formData.master_position" placeholder="请输入职务" - clearable :style="{ width: '100%' }"></el-input> - </el-form-item> - </el-col> - <el-col :span="12"> - <el-form-item label="手机" prop="master_phone"> - <el-input :disabled="isDisabled" v-model="formData.master_phone" placeholder="请输入手机" clearable - :style="{ width: '100%' }"></el-input> - </el-form-item> - </el-col> - <el-col :span="12"> - <el-form-item label="邮箱" prop="master_email"> - <el-input :disabled="isDisabled" v-model="formData.master_email" placeholder="请输入邮箱" clearable - :style="{ width: '100%' }"></el-input> - </el-form-item> - </el-col> - <el-col :span="24"> - <el-form-item label="选择人员" prop="man"> - <el-input :disabled="isDisabled" v-model="formData.man" placeholder="请选择人员" clearable - :style="{ width: '100%' }" @click="isMan = true"></el-input> - </el-form-item> - </el-col> - </el-row> + <el-col :span="12"> + <el-form-item label="职务" prop="field121"> + <el-input + :disabled="isDisabled" + v-model="item.position" + placeholder="请输入职务" + clearable + :style="{ width: '100%' }" + ></el-input> + </el-form-item> </el-col> - <div style="font-size: 1.2rem; margin: 10px 0">其他联系人</div> - <el-col :span="24" class="el-card pt-6"> - <el-row> - <template v-for="(item, index) in formData.other_contacts" :key="index"> - <el-col :span="12"> - <el-form-item label="姓名" prop="field120"> - <el-input :disabled="isDisabled" v-model="item.name" placeholder="请输入姓名" clearable - :style="{ width: '100%' }"></el-input> - </el-form-item> - </el-col> - <el-col :span="12"> - <el-form-item label="职务" prop="field121"> - <el-input :disabled="isDisabled" v-model="item.position" placeholder="请输入职务" clearable - :style="{ width: '100%' }"></el-input> - </el-form-item> - </el-col> - <el-col :span="12"> - <el-form-item label="手机" prop="field122"> - <el-input :disabled="isDisabled" v-model="item.phone" placeholder="请输入手机" clearable - :style="{ width: '100%' }"></el-input> - </el-form-item> - </el-col> - <el-col :span="12"> - <el-form-item label="邮箱" prop="field123"> - <el-input :disabled="isDisabled" v-model="item.email" placeholder="请输入邮箱" clearable - :style="{ width: '100%' }"></el-input> - </el-form-item> - </el-col> - </template> - - <el-col :span="24"> - <el-form-item label prop="field126"> - <el-button type="primary" :disabled="isDisabled" size="medium" @click="other">其他联系人</el-button> - </el-form-item> - </el-col> - </el-row> + <el-col :span="12"> + <el-form-item label="手机" prop="field122"> + <el-input + :disabled="isDisabled" + v-model="item.phone" + placeholder="请输入手机" + clearable + :style="{ width: '100%' }" + ></el-input> + </el-form-item> </el-col> - <div style="font-size: 1.2rem; margin: 10px 0">资质信息</div> - <el-col :span="24" class="el-card pt-6"> - <el-row> - <el-col :span="12"> - <el-form-item label="营业执照" required> - <el-upload :disabled="isDisabled" v-model="formData.qualification.business_license" - class="avatar-uploader" :data="{ cid: 1 }" - action="https://worker-task.lihaink.cn/api/upload/image" :show-file-list="false" - :on-success="handleAvatarSuccess" :before-upload="beforeAvatarUpload"> - <img v-if="formData.qualification.business_license" - :src="formData.qualification.business_license" class="avatar" /> - <el-icon v-else class="avatar-uploader-icon"> - <Plus /> - </el-icon> - </el-upload> - <el-upload :disabled="isDisabled" v-model="formData.qualification.business_licenseB" - class="avatar-uploader" :data="{ cid: 1 }" - action="https://worker-task.lihaink.cn/api/upload/image" :show-file-list="false" - :on-success="handleAvatarSuccessB"> - <img v-if="formData.qualification.business_licenseB" - :src="formData.qualification.business_licenseB" class="avatar" /> - <el-icon v-else class="avatar-uploader-icon"> - <Plus /> - </el-icon> - </el-upload> - </el-form-item> - </el-col> - <el-col :span="12"> - <el-form-item label="对公银行" required> - <el-upload :disabled="isDisabled" v-model="formData.qualification.bank_account" - class="avatar-uploader" :data="{ cid: 1 }" - action="https://worker-task.lihaink.cn/api/upload/image" :show-file-list="false" - :on-success="handleAvatarSuccess_two" :before-upload="beforeAvatarUpload_two"> - <img v-if="formData.qualification.bank_account" :src="formData.qualification.bank_account" - class="avatar" /> - <el-icon v-else class="avatar-uploader-icon"> - <Plus /> - </el-icon> - </el-upload> - <el-upload :disabled="isDisabled" v-model="formData.qualification.bank_accountB" - class="avatar-uploader" :data="{ cid: 1 }" - action="https://worker-task.lihaink.cn/api/upload/image" :show-file-list="false" - :on-success="handleAvatarSuccess_twoB" :before-upload="beforeAvatarUpload_two"> - <img v-if="formData.qualification.bank_accountB" :src="formData.qualification.bank_accountB" - class="avatar" /> - <el-icon v-else class="avatar-uploader-icon"> - <Plus /> - </el-icon> - </el-upload> - </el-form-item> - </el-col> - </el-row> + <el-col :span="12"> + <el-form-item label="邮箱" prop="field123"> + <el-input + :disabled="isDisabled" + v-model="item.email" + placeholder="请输入邮箱" + clearable + :style="{ width: '100%' }" + ></el-input> + </el-form-item> </el-col> - <div style="font-size: 1.2rem; margin: 10px 0">电子合同</div> - <el-col :span="24" class="el-card pt-6"> - <el-row> + </template> - - - <el-col :span="12"> - <el-form-item label="签约方" prop="field130"> - <el-input :disabled="isDisabled" v-model="formData.party_a_name" placeholder="请选择签约方" clearable - :style="{ width: '100%' }" @click="openCompany"></el-input> - </el-form-item> - </el-col> - <el-col :span="12"> - <el-form-item label-width="100px" label="被签约公司" prop="field131"> - <el-input :disabled="true" v-model="formData.company_name" placeholder="请输入被签约公司" clearable - :style="{ width: '100%' }"></el-input> - </el-form-item> - </el-col> - - <el-col :span="12"> - <el-form-item label="合同类型" prop="contract_type"> - <el-select :disabled="isDisabled" v-model="formData.contract.contract_type" - placeholder="请选择合同类型" clearable :style="{ width: '100%' }"> - <el-option v-for="(item, index) in datas.contract_type" :key="index" :label="item.name" - :value="item.id"></el-option> - </el-select> - </el-form-item> - </el-col> - - <el-col :span="12"> - <el-form-item label-width="100px" label="合同编号" prop="field133"> - <el-input placeholder="系统自动生成" clearable :style="{ width: '100%' }" :disabled="true"></el-input> - </el-form-item> - </el-col> - - - - - - </el-row> + <el-col :span="24"> + <el-form-item label prop="field126"> + <el-button + type="primary" + :disabled="isDisabled" + size="medium" + @click="other" + >其他联系人</el-button + > + </el-form-item> + </el-col> + </el-row> + </el-col> + <div style="font-size: 1.2rem; margin: 10px 0">资质信息</div> + <el-col :span="24" class="el-card pt-6"> + <el-row> + <el-col :span="12"> + <el-form-item label="营业执照" required> + <el-upload + :disabled="isDisabled" + v-model="formData.qualification.business_license" + class="avatar-uploader pl-3" + :data="{ cid: 1 }" + action="https://worker-task.lihaink.cn/api/upload/image" + :show-file-list="false" + :on-success="handleAvatarSuccess" + > + <img + v-if="formData.qualification.business_license" + :src="formData.qualification.business_license" + class="avatar" + /> + <el-icon v-else class="avatar-uploader-icon"> + <Plus /> + </el-icon> + </el-upload> + <el-upload + :disabled="isDisabled" + v-model="formData.qualification.business_licenseB" + class="avatar-uploader pl-3" + :data="{ cid: 1 }" + action="https://worker-task.lihaink.cn/api/upload/image" + :show-file-list="false" + :on-success="handleAvatarSuccessB" + > + <img + v-if="formData.qualification.business_licenseB" + :src="formData.qualification.business_licenseB" + class="avatar" + /> + <el-icon v-else class="avatar-uploader-icon"> + <Plus /> + </el-icon> + </el-upload> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="对公银行" required> + <el-upload + :disabled="isDisabled" + v-model="formData.qualification.bank_account" + class="avatar-uploader pl-3" + :data="{ cid: 1 }" + action="https://worker-task.lihaink.cn/api/upload/image" + :show-file-list="false" + :on-success="handleAvatarSuccess_two" + > + <img + v-if="formData.qualification.bank_account" + :src="formData.qualification.bank_account" + class="avatar" + /> + <el-icon v-else class="avatar-uploader-icon"> + <Plus /> + </el-icon> + </el-upload> + <el-upload + :disabled="isDisabled" + v-model="formData.qualification.bank_accountB" + class="avatar-uploader pl-3" + :data="{ cid: 1 }" + action="https://worker-task.lihaink.cn/api/upload/image" + :show-file-list="false" + :on-success="handleAvatarSuccess_twoB" + > + <img + v-if="formData.qualification.bank_accountB" + :src="formData.qualification.bank_accountB" + class="avatar" + /> + <el-icon v-else class="avatar-uploader-icon"> + <Plus /> + </el-icon> + </el-upload> + </el-form-item> + </el-col> + </el-row> + </el-col> + <template v-if="userStore.userInfo.root == 1"> + <div style="font-size: 1.2rem; margin: 10px 0">电子合同</div> + <el-col :span="24" class="el-card pt-6"> + <el-row> + <el-col :span="12"> + <el-form-item label="签约方" prop="field130"> + <el-input + :disabled="isDisabled" + v-model="formData.party_a_name" + placeholder="请选择签约方" + clearable + :style="{ width: '100%' }" + @click="openCompany" + ></el-input> + </el-form-item> </el-col> - <el-col :span="24" class="el-card pt-6"> - <el-row> - <el-col :span="24"> - <el-form-item label="合同上传" required> - <!-- <el-upload - :disabled="isDisabled" - class="avatar-uploader" - v-model="formData.contract.file" - action="https://worker-task.lihaink.cn/api/upload/image" - :show-file-list="false" - :on-success="handleAvatarSuccess" - > - - <el-button size="small" :disabled="isDisabled" type="primary">点击上传</el-button> - </el-upload>--> - <el-upload :disabled="isDisabled" v-model="formData.contract.file" - :headers="{ 'Token': userStore.token }" class="upload-demo" - action="https://worker-task.lihaink.cn/adminapi/upload/file" multiple :limit="1"> - <el-button :disabled="isDisabled" type="primary">上传</el-button> - </el-upload> - </el-form-item> - </el-col> - </el-row> + <el-col :span="12"> + <el-form-item + label-width="100px" + label="被签约公司" + prop="field131" + > + <el-input + :disabled="true" + v-model="formData.company_name" + placeholder="请输入被签约公司" + clearable + :style="{ width: '100%' }" + ></el-input> + </el-form-item> </el-col> - <el-col :span="24" class="el-card pt-6"> - <el-form-item label prop="field139"> - <el-button v-if="isEdit" type="primary" size="medium" @click="create">修改</el-button> - <el-button v-else type="primary" :disabled="isDisabled" size="medium" @click="create">创建</el-button> - </el-form-item> + <el-col :span="12"> + <el-form-item + label-width="100px" + label="合同类型" + prop="contract_type" + > + <el-select + :disabled="isDisabled" + v-model="formData.contract.contract_type" + placeholder="请选择合同类型" + clearable + :style="{ width: '100%' }" + > + <el-option + v-for="(item, index) in datas.contract_type" + :key="index" + :label="item.name" + :value="item.id" + ></el-option> + </el-select> + </el-form-item> </el-col> - </el-form> - <el-dialog v-model="isCompany" title="选择签约方" width="60%"> - <DialogIndex @customEvent="customEvent" /> - </el-dialog> - <el-dialog v-model="isMan" title="选择人员" width="60%"> - <DialogIndexMan @customEvent="customEventMan" /> - </el-dialog> - </div> + + <el-col :span="12"> + <el-form-item + label-width="100px" + label="合同编号" + prop="field133" + > + <el-input + placeholder="系统自动生成" + v-model="formData.contract.contract_no" + clearable + :style="{ width: '100%' }" + :disabled="true" + ></el-input> + </el-form-item> + </el-col> + </el-row> + </el-col> + <el-col :span="24" class="el-card pt-6"> + <el-row> + <el-col :span="24"> + <el-form-item label="合同上传" required> + <el-upload + :disabled="isDisabled" + v-model="formData.contract.file" + :headers="{ Token: userStore.token }" + class="upload-demo" + action="https://worker-task.lihaink.cn/adminapi/upload/file" + multiple + :limit="1" + :on-success="handleAvatarSuccess_three" + > + <el-button :disabled="isDisabled" type="primary" + >上传</el-button + > + </el-upload> + </el-form-item> + </el-col> + </el-row> + </el-col> + </template> + + <el-col :span="24" class="el-card pt-6"> + <el-form-item label prop="field139"> + <el-button v-if="isEdit" type="primary" size="medium" @click="create" + >修改</el-button + > + <el-button + v-else + type="primary" + :disabled="isDisabled" + size="medium" + @click="create" + >创建</el-button + > + </el-form-item> + </el-col> + </el-form> + <el-dialog v-model="isCompany" title="选择签约方" width="60%"> + <DialogIndex @customEvent="customEvent" /> + </el-dialog> + <el-dialog v-model="isMan" title="选择管理人员" width="60%"> + <DialogIndexMan @customEvent="customEventMan" /> + </el-dialog> + <el-dialog v-model="isAreaManager" title="选择片区经理" width="60%"> + <DialogIndexMan @customEvent="EventAreaManager" /> + </el-dialog> + </div> </template> <script lang="ts" setup name="companyEdit"> -import type { FormInstance, UploadProps, ElMessage } from "element-plus"; +import type { + FormInstance, + UploadProps, + ElMessage, + UploadUserFile, +} from "element-plus"; import Popup from "@/components/popup/index.vue"; import { - apiCompanyAdd, - apiCompanyEdit, - apiCompanyDetail, - apiCompanyLists, + apiCompanyAdd, + apiCompanyEdit, + apiCompanyDetail, + apiCompanyLists, } from "@/api/company"; import { - apiCityList, - apiAreaList, - apiStreetList, - apiProvinceList, + apiCityList, + apiAreaList, + apiStreetList, + apiProvinceList, } from "@/api/common"; import { dictDataLists } from "@/api/setting/dict"; import { timeFormat } from "@/utils/util"; import DialogIndex from "./dialog_index.vue"; -import DialogIndexMan from "./dialog_index_personnel.vue"; +import DialogIndexMan from "./dialog_index_man.vue"; import type { PropType } from "vue"; import useMultipleTabs from "@/hooks/useMultipleTabs"; import useUserStore from "@/stores/modules/user"; const userStore = useUserStore(); - const { removeTab } = useMultipleTabs(); const router = useRouter(); const route = useRoute(); let isDisabled = ref(false); let isEdit = ref(false); defineProps({ - dictData: { - type: Object as PropType<Record<string, any[]>>, - default: () => ({}), - }, + dictData: { + type: Object as PropType<Record<string, any[]>>, + default: () => ({}), + }, }); const emit = defineEmits(["success", "close"]); const formRef = shallowRef<FormInstance>(); @@ -317,347 +531,353 @@ const popupRef = shallowRef<InstanceType<typeof Popup>>(); const mode = ref(); isDisabled = route.query.read; isEdit = route.query.edit; -// 弹窗标题 -// const popupTitle = computed(() => { -// return mode.value == 'edit' ? '编辑公司' : '新增公司' -// }) // 表单数据 const formData = reactive({ - man: "", - id: "", - // level_two: '', - // level_one: '', - company_name: "", - organization_code: "", - province: "", - city: "", - area: "", - street: "", - address: "", - company_type: "", - master_name: "", - master_position: "", - master_phone: "", - master_email: "", + admin_id: "", + admin_name: "", + area_manager: "", + area_manager_name: "", + id: "", + // level_two: '', + // level_one: '', + company_name: "", + organization_code: "", + province: "", + city: "", + area: "", + street: "", + address: "", + company_type: "", + master_name: "", + master_position: "", + master_phone: "", + master_email: "", - other_contacts: [ - { - name: "", - position: "", - phone: "", - email: "", - }, - ], - // area_manager: '', - // is_contract: '', - // account: '', - // password: '', - // deposit: '', - // deposit_time: '', - qualification: { - business_license: "", - business_licenseB: "", - bank_account: "", - bank_accountB: "", + other_contacts: [ + { + name: "", + position: "", + phone: "", + email: "", }, - contract: { - contract_type: "", - party_a: "", - file: "", - }, - //签约方 - party_a_name: "", - file_image: "", - // status: '' + ], + // area_manager: '', + // is_contract: '', + // account: '', + // password: '', + // deposit: '', + // deposit_time: '', + qualification: { + business_license: "", + business_licenseB: "", + bank_account: "", + bank_accountB: "", + }, + contract: { + contract_type: "", + party_a: "", + file: "", + contract_no: "系统自动生成", + }, + //签约方 + party_a_name: "", + file_image: "", + // status: '' }); const datas = reactive({ - provinceOptions: [], - cityOptions: [], - areaOptions: [], - streetOptions: [], - dictTypeLists: [], - contract_type: [], + provinceOptions: [], + cityOptions: [], + areaOptions: [], + streetOptions: [], + dictTypeLists: [], + contract_type: [], }); +const fileList = ref<UploadUserFile[]>([ + { + name: "", + url: "", + }, +]); // 表单验证 const formRules = reactive<any>({ - company_name: [ - { - required: true, - message: "请输入公司名称", - trigger: ["blur"], - }, - ], - organization_code: [ - { - required: true, - message: "请输入组织机构代码", - trigger: ["blur"], - }, - ], - master_name: [ - { - required: true, - message: "请输入主联系人姓名", - trigger: ["blur"], - }, - ], - master_position: [ - { - required: true, - message: "请输入主联系人职务", - trigger: ["blur"], - }, - ], - master_phone: [ - { - required: true, - message: "请输入主联系人手机", - trigger: ["blur"], - }, - ], - master_email: [ - { - required: true, - message: "请输入主联系人邮箱", - trigger: ["blur"], - }, - ], - account: [ - { - required: true, - message: "请输入账号", - trigger: ["blur"], - }, - ], - password: [ - { - required: true, - message: "请输入密码", - trigger: ["blur"], - }, - ], + company_name: [ + { + required: true, + message: "请输入公司名称", + trigger: ["blur"], + }, + ], + organization_code: [ + { + required: true, + message: "请输入组织机构代码", + trigger: ["blur"], + }, + ], + master_name: [ + { + required: true, + message: "请输入主联系人姓名", + trigger: ["blur"], + }, + ], + master_position: [ + { + required: true, + message: "请输入主联系人职务", + trigger: ["blur"], + }, + ], + master_phone: [ + { + required: true, + message: "请输入主联系人手机", + trigger: ["blur"], + }, + ], + master_email: [ + { + required: true, + message: "请输入主联系人邮箱", + trigger: ["blur"], + }, + ], + account: [ + { + required: true, + message: "请输入账号", + trigger: ["blur"], + }, + ], + password: [ + { + required: true, + message: "请输入密码", + trigger: ["blur"], + }, + ], }); const isCompany = ref(false); -const isMan = ref(false) +const isMan = ref(false); +const isAreaManager = ref(false); function customEvent(data: any) { - isCompany.value = false; - formData.contract.party_a = data.id; - formData.party_a_name = data.company_name; + isCompany.value = false; + formData.contract.party_a = data.id; + formData.party_a_name = data.company_name; } function customEventMan(data: any) { - isMan.value = false; - console.log(data) - // formData.contract.party_a = data.id; - formData.man = data.name; + isMan.value = false; + formData.admin_name = data.name; + formData.admin_id = data.id; +} +//区域管理人员 +function EventAreaManager(data: any) { + isAreaManager.value = false; + formData.area_manager_name = data.name; + formData.area_manager = data.id; } function openCompany() { - isCompany.value = true; + isCompany.value = true; } // 获取详情 const setFormData = async (data: Record<any, any>) => { - for (const key in formData) { - if (data[key] != null && data[key] != undefined) { - //@ts-ignore - formData[key] = data[key]; - } + for (const key in formData) { + if (data[key] != null && data[key] != undefined) { + //@ts-ignore + formData[key] = data[key]; } + } }; const getDetail = async (row: Record<string, any>) => { - const data = await apiCompanyDetail({ - id: row.id, - }); - setFormData(data); + const data = await apiCompanyDetail({ + id: row.id, + }); + setFormData(data); }; //上传图片1 const handleAvatarSuccess: UploadProps["onSuccess"] = ( - response, - uploadFile + response, + uploadFile ) => { - formData.qualification.business_license = response.data.uri; + if (response.code == 0) { + ElMessage.error(response.msg); + return; + } + formData.qualification.business_license = response.data.uri; }; const handleAvatarSuccessB: UploadProps["onSuccess"] = ( - response, - uploadFile + response, + uploadFile ) => { - formData.qualification.business_licenseB = response.data.uri; -}; -const beforeAvatarUpload: UploadProps["beforeUpload"] = (rawFile) => { - // if (rawFile.type !== 'image/jpeg') { - // ElMessage.error('Avatar picture must be JPG format!') - // return false - // } else if (rawFile.size / 1024 / 1024 > 2) { - // ElMessage.error('Avatar picture size can not exceed 2MB!') - // return false - // } - return true; + if (response.code == 0) { + ElMessage.error(response.msg); + return; + } + formData.qualification.business_licenseB = response.data.uri; }; //上传图片2 const handleAvatarSuccess_two: UploadProps["onSuccess"] = ( - response, - uploadFile + response, + uploadFile ) => { - formData.qualification.bank_account = response.data.uri; + if (response.code == 0) { + ElMessage.error(response.msg); + return; + } + formData.qualification.bank_account = response.data.uri; }; const handleAvatarSuccess_twoB: UploadProps["onSuccess"] = ( - response, - uploadFile + response, + uploadFile ) => { - formData.qualification.bank_accountB = response.data.uri; -}; -const beforeAvatarUpload_two: UploadProps["beforeUpload"] = (rawFile) => { - // if (rawFile.type !== 'image/jpeg') { - // ElMessage.error('Avatar picture must be JPG format!') - // return false - // } else if (rawFile.size / 1024 / 1024 > 2) { - // ElMessage.error('Avatar picture size can not exceed 2MB!') - // return false - // } - return true; + if (response.code == 0) { + ElMessage.error(response.msg); + return; + } + formData.qualification.bank_accountB = response.data.uri; }; //上传文件3 const handleAvatarSuccess_three: UploadProps["onSuccess"] = ( - response, - uploadFile + response, + uploadFile ) => { - formData.file_image = response.data.uri; - formData.contract.file = response.data.uri; + if (response.code == 0) { + ElMessage.error(response.msg); + return; + } + // formData.file_image = response.data.uri + // formData.contract.file = response.data.uri + // fileList.value[0].url = response.data.uri + // fileList.value[0].name = '合同文件' + console.log(response); }; -const beforeAvatarUpload_three: UploadProps["beforeUpload"] = (rawFile) => { - // if (rawFile.type !== 'application/msword') { - // ElMessage.error('请选择word格式的文件!') - // return false - // } - // else if (rawFile.size / 1024 / 1024 > 2) { - // ElMessage.error('Avatar picture size can not exceed 2MB!') - // return false - // } - return true; -}; //增加其他联系人 function other() { - formData.other_contacts.push({ - name: "", - position: "", - phone: "", - email: "", - }); + formData.other_contacts.push({ + name: "", + position: "", + phone: "", + email: "", + }); } //获取省份 function province_change(value: string) { - getCityList(); + getCityList(); } function city_change(value: string) { - getAreaList(); + getAreaList(); } function area_change(value: string) { - getStreetList(); + getStreetList(); } function street_change(value: string) { - formData.street = value; + formData.street = value; } const getProvinceList = async () => { - const data = await apiProvinceList({}); - datas["provinceOptions"] = data; + const data = await apiProvinceList({}); + datas["provinceOptions"] = data; }; const getCityList = async () => { - const data = await apiCityList({ city: formData.province }); - datas["cityOptions"] = data; + const data = await apiCityList({ city: formData.province }); + datas["cityOptions"] = data; }; const getAreaList = async () => { - const data = await apiAreaList({ area: formData.city }); - datas["areaOptions"] = data; + const data = await apiAreaList({ area: formData.city }); + datas["areaOptions"] = data; }; const getStreetList = async () => { - const data = await apiStreetList({ street: formData.area }); - datas["streetOptions"] = data; + const data = await apiStreetList({ street: formData.area }); + datas["streetOptions"] = data; }; getProvinceList(); const getcontract_type = async () => { - const data = await dictDataLists({ type_id: 7 }); - datas["contract_type"] = data["lists"]; + const data = await dictDataLists({ type_id: 7 }); + datas["contract_type"] = data["lists"]; }; const getdictTypeLists = async () => { - const data = await dictDataLists({ type_id: 6 }); - datas["dictTypeLists"] = data["lists"]; + const data = await dictDataLists({ type_id: 6 }); + datas["dictTypeLists"] = data["lists"]; }; const getDetails = async () => { - const data = await apiCompanyDetail({ - id: route.query.id, + const data = await apiCompanyDetail({ + id: route.query.id, + }); + Object.keys(formData).forEach((key) => { + const stringArr = ["province", "city", "area", "street"]; + //@ts-ignore + formData[key] = data[key]; + if (stringArr.includes(key)) formData[key] = formData[key].toString(); + }); + apiCityList({ city: formData.province }).then(() => { + apiAreaList({ area: formData.city }).then(() => { + apiStreetList({ street: formData.area }); }); - Object.keys(formData).forEach((key) => { - let stringArr = ["province", "city", "area", "street"]; - //@ts-ignore - formData[key] = data[key]; - if (stringArr.includes(key)) { - formData[key] = formData[key].toString(); - getCityList(); - getAreaList(); - getStreetList(); - } - }); - formData["party_a_name"] = data["contract"]["party_a_name"]; - formData["file_image"] = data["contract"]["file"]; + }); + formData["party_a_name"] = data["contract"]["party_a_name"]; + formData["file_image"] = data["contract"]["file"]; + fileList.value[0].url = data["contract"]["file"]; + fileList.value[0].name = "合同文件"; }; getProvinceList(); getdictTypeLists(); getcontract_type(); const create = async () => { - await formRef.value?.validate(); - const data = { ...formData }; - if (route.query.id) { - await apiCompanyEdit(data); - } else { - await apiCompanyAdd(data); - } - removeTab(); - router.back(); + await formRef.value?.validate(); + const data = { ...formData }; + if (route.query.id) { + await apiCompanyEdit(data); + } else { + await apiCompanyAdd(data); + } + removeTab(); + router.back(); }; route.query.id && getDetails(); defineExpose({ - open, - setFormData, - getDetail, + open, + setFormData, + getDetail, }); </script> <style> .avatar-uploader .el-upload { - width: 10vw; - height: 6.3vw; - background-color: #fff; - border: 1px dashed var(--el-border-color); - border-radius: 6px; - cursor: pointer; - position: relative; - overflow: hidden; - transition: var(--el-transition-duration-fast); + width: 10vw; + height: 6.3vw; + background-color: #fff; + border: 1px dashed var(--el-border-color); + border-radius: 6px; + cursor: pointer; + position: relative; + overflow: hidden; + transition: var(--el-transition-duration-fast); } .avatar-uploader .el-upload:hover { - border-color: var(--el-color-primary); + border-color: var(--el-color-primary); } .el-icon.avatar-uploader-icon { - font-size: 28px; - color: #8c939d; - width: 178px; - height: 178px; - text-align: center; + font-size: 28px; + color: #8c939d; + width: 178px; + height: 178px; + text-align: center; } .el-icon.avatar-uploader-icon { - font-size: 28px; - color: #8c939d; - width: 178px; - height: 178px; - text-align: center; + font-size: 28px; + color: #8c939d; + width: 178px; + height: 178px; + text-align: center; } </style> diff --git a/src/views/company/index.vue b/src/views/company/index.vue index d46b044..65a7840 100644 --- a/src/views/company/index.vue +++ b/src/views/company/index.vue @@ -21,7 +21,7 @@ <el-form-item label="片区经理" prop="area_manager"> <el-input class="w-[280px]" v-model="queryParams.area_manager" clearable placeholder="请输入片区经理" /> </el-form-item> - <el-form-item label="是否签约" prop="is_contract"> + <el-form-item label="是否签约" class="w-[308px]" prop="is_contract"> <el-select v-model="queryParams.is_contract" placeholder="是否签约" clearable :style="{ width: '100%' }"> <el-option label="已签约" value="1"></el-option> <el-option label="未签约" value="0"></el-option> @@ -52,8 +52,7 @@ </router-link> <div class="mt-4"> <el-table :data="pager.lists" @selection-change="handleSelectionChange"> - <el-table-column label="id" prop="id" show-overflow-tooltip /> - <el-table-column label="查看成员" prop="company_name" show-overflow-tooltip /> + <el-table-column label="id" prop="id" show-overflow-tooltip width="60" /> <el-table-column label="签约公司" prop="company_name" show-overflow-tooltip /> <el-table-column label="公司类型" prop="company_type" show-overflow-tooltip /> <el-table-column label="区县" prop="area" show-overflow-tooltip /> @@ -62,9 +61,27 @@ <el-table-column label="联系方式" prop="master_phone" show-overflow-tooltip /> <el-table-column label="片区经理" prop="area_manager" show-overflow-tooltip /> <el-table-column label="是否签约" prop="is_contract" show-overflow-tooltip /> - <el-table-column label="操作" align="center" width="330" fixed="right"> + <el-table-column label="操作" align="center" width="450" fixed="right"> <template #default="{ row }"> <div style="display: flex"> + <el-button type="primary" link> + <router-link :to="{ + path: getRoutePath('auth.admin/lists'), + query: { + company_id: row.id, + read: true + } + }">查看成员</router-link> + </el-button> + <el-button type="primary" link> + <router-link :to="{ + path: getRoutePath('company/subordinate/lists'), + query: { + company_id: row.id, + read: true + } + }">下属公司</router-link> + </el-button> <el-button v-perms="['company/edit', 'company/add']" type="primary" link> <router-link :to="{ path: getRoutePath('company/add:edit'), @@ -72,7 +89,7 @@ id: row.id, read: true } - }">查看</router-link> + }">详情</router-link> </el-button> <el-button v-perms="['company/edit', 'company/add']" type="primary" link> <router-link :to="{ @@ -86,9 +103,9 @@ <el-button v-perms="['company/delete']" type="danger" link @click="handleDelete(row.id)">删除</el-button> <el-button v-perms="['company/edit', 'company/add']" type="primary" link - @click="showCreateConctPop(row)">生成个人合同</el-button> + @click="showCreateConctPop(row)">生成合同</el-button> <el-button v-perms="['company/edit', 'company/add']" type="primary" link - @click=" showPop = true, contractId = row.id">发送短信</el-button> + @click="; (showPop = true), (contractId = row.id)">发送短信</el-button> </div> </template> </el-table-column> @@ -100,8 +117,12 @@ </el-card> <el-dialog v-model="showPop" @close="offPop"> <h1>重要提醒</h1> - <div class="content" v-if="showConctactPop">请确认信息是否有误,发送合同,请确认信息是否有误,发送电子合同后短时间内将不可再次发送.</div> - <div class="content" v-else>确认签约短信将在60秒后发送,请注意查收,并点击短信链接进行线上合同签约</div> + <div class="content" v-if="showConctactPop"> + 请确认信息是否有误,发送合同,请确认信息是否有误,发送电子合同后短时间内将不可再次发送. + </div> + <div class="content" v-else> + 确认签约短信将在60秒后发送,请注意查收,并点击短信链接进行线上合同签约 + </div> <p class="btn_menu"> <el-button type="primary" size="large" v-if="showConctactPop" @click="creContct">确认创建</el-button> <el-button type="primary" size="large" v-else @click="sendMsg">确认</el-button> @@ -112,44 +133,37 @@ </template> <script lang="ts" setup name="companyLists"> -import { usePaging } from "@/hooks/usePaging"; -import { useDictData } from "@/hooks/useDictOptions"; -import { apiCompanyLists, apiCompanyDelete } from "@/api/company"; -import { generateGontract, sendMsgApi } from "@/api/perms/admin"; -import { timeFormat } from "@/utils/util"; -import feedback from "@/utils/feedback"; -import { dictDataLists } from "@/api/setting/dict"; -// import EditPopup from './edit.vue' -import { getRoutePath } from "@/router"; +import { usePaging } from '@/hooks/usePaging' +import { useDictData } from '@/hooks/useDictOptions' +import { apiCompanyLists, apiCompanyDelete, generateGontract, sendMsgApi } from '@/api/company' +import { timeFormat } from '@/utils/util' +import feedback from '@/utils/feedback' +import { dictDataLists } from '@/api/setting/dict' +import { getRoutePath } from '@/router' -const editRef = shallowRef<InstanceType<typeof EditPopup>>(); -const route = useRoute(); -const company_type_show = ref(true); +const route = useRoute() +const company_type_show = ref(true) // 创建合同与发送短信 //弹窗 -const showPop = ref(false); -const showConctactPop = ref(false); +const showPop = ref(false) +const showConctactPop = ref(false) const offPop = () => { - showPop.value = false; - showConctactPop.value = false; -}; + showPop.value = false + showConctactPop.value = false +} // 创建合同的id -const contractId = ref(""); +const contractId = ref('') const showCreateConctPop = (row) => { - (showPop.value = true), - (showConctactPop.value = true), - (contractId.value = row.id); -}; -const creContct = async () => { - let res = await generateGontract({ id: contractId.value }); - feedback.msgSuccess("发送成功"); - offPop(); -}; -const sendMsg = async () => { - let res = await sendMsgApi({ id: contractId.value }); - feedback.msgSuccess("发送成功"); - offPop(); -}; + ; (showPop.value = true), (showConctactPop.value = true), (contractId.value = row.id) +} +const creContct = () => { + generateGontract({ id: contractId.value }) + offPop() +} +const sendMsg = () => { + sendMsgApi({ id: contractId.value }) + offPop() +} // 创建合同与发送短信结束 // 查询条件 const queryParams = reactive({ diff --git a/src/views/company/subordinate.vue b/src/views/company/subordinate.vue index 77a03f2..8810870 100644 --- a/src/views/company/subordinate.vue +++ b/src/views/company/subordinate.vue @@ -16,70 +16,38 @@ <template #default="{ row }"> <div style="display: flex"> <el-button type="primary" link> - <router-link - :to="{ - path: getRoutePath('auth.admin/lists'), - query: { - company_id: row.id, - read: true - } - }" - >查看成员</router-link - > + <router-link :to="{ + path: getRoutePath('auth.admin/lists'), + query: { + company_id: row.id, + read: true + } + }">查看成员</router-link> </el-button> - <el-button - v-perms="['company/edit', 'company/add']" - type="primary" - link - > - <router-link - :to="{ - path: getRoutePath('company/add:edit'), - query: { - id: row.id, - read: true - } - }" - >详情</router-link - > + <el-button v-perms="['company/edit', 'company/add']" type="primary" link> + <router-link :to="{ + path: getRoutePath('company/add:edit'), + query: { + id: row.id, + read: true + } + }">详情</router-link> </el-button> - <el-button - v-perms="['company/edit', 'company/add']" - type="primary" - link - > - <router-link - :to="{ - path: getRoutePath('company/add:edit'), - query: { - id: row.id, - edit: true - } - }" - >编辑</router-link - > + <el-button v-perms="['company/edit', 'company/add']" type="primary" link> + <router-link :to="{ + path: getRoutePath('company/add:edit'), + query: { + id: row.id, + edit: true + } + }">编辑</router-link> </el-button> - <el-button - v-perms="['company/delete']" - type="danger" - link - @click="handleDelete(row.id)" - >删除</el-button - > - <el-button - v-perms="['company/edit', 'company/add']" - type="primary" - link - @click="showCreateConctPop(row)" - >生成合同</el-button - > - <el-button - v-perms="['company/edit', 'company/add']" - type="primary" - link - @click=";(showPop = true), (contractId = row.id)" - >发送短信</el-button - > + <el-button v-perms="['company/delete']" type="danger" link + @click="handleDelete(row.id)">删除</el-button> + <el-button v-perms="['company/edit', 'company/add']" type="primary" link + @click="showCreateConctPop(row)">生成合同</el-button> + <el-button v-perms="['company/edit', 'company/add']" type="primary" link + @click="; (showPop = true), (contractId = row.id)">发送短信</el-button> </div> </template> </el-table-column> @@ -98,9 +66,7 @@ 确认签约短信将在60秒后发送,请注意查收,并点击短信链接进行线上合同签约 </div> <p class="btn_menu"> - <el-button type="primary" size="large" v-if="showConctactPop" @click="creContct" - >确认创建</el-button - > + <el-button type="primary" size="large" v-if="showConctactPop" @click="creContct">确认创建</el-button> <el-button type="primary" size="large" v-else @click="sendMsg">确认</el-button> <el-button type="info" size="large" @click="offPop">返回</el-button> </p> @@ -111,8 +77,8 @@ <script lang="ts" setup name="companyLists"> import { usePaging } from '@/hooks/usePaging' import { useDictData } from '@/hooks/useDictOptions' -import { apiCompanyLists, apiCompanyDelete, apiSubordinateList } from '@/api/company' -import { generateGontract, sendMsgApi } from '@/api/perms/admin' +import { apiCompanyLists, apiCompanyDelete, apiSubordinateList, generateGontract, sendMsgApi } from '@/api/company' + import { timeFormat } from '@/utils/util' import feedback from '@/utils/feedback' import { dictDataLists } from '@/api/setting/dict' @@ -132,7 +98,7 @@ const offPop = () => { // 创建合同的id const contractId = ref('') const showCreateConctPop = (row) => { - ;(showPop.value = true), (showConctactPop.value = true), (contractId.value = row.id) + ; (showPop.value = true), (showConctactPop.value = true), (contractId.value = row.id) } const creContct = () => { generateGontract({ id: contractId.value }) @@ -201,6 +167,7 @@ getLists() .btn { position: absolute; } + h1 { text-align: center; font-weight: bold; diff --git a/src/views/contract/contractDetil.vue b/src/views/contract/contractDetil.vue index 4d17130..aafcb24 100644 --- a/src/views/contract/contractDetil.vue +++ b/src/views/contract/contractDetil.vue @@ -1,76 +1,79 @@ <template> - <el-dialog @confirm="handleSubmit" title="合同详情" v-model="show"> - <el-form ref="formRef" :model="formData" label-width="90px" :rules="formRules"> - <el-form-item label="公司" prop="company_id"> - <el-input v-model="formData.company_id" :disabled="true" clearable placeholder="请输入公司" /> - </el-form-item> - <el-form-item label="合同类型" prop="contract_type"> - <el-input v-model="formData.contract_type" :disabled="true" clearable placeholder="请输入合同类型" /> - </el-form-item> - <el-form-item label="合同编号" prop="contract_no"> - <el-input v-model="formData.contract_no" :disabled="true" clearable placeholder="暂无合同编号" /> - </el-form-item> - <el-form-item label="文件" prop="file"> - <el-input v-model="formData.file" :disabled="true" clearable placeholder="暂无文件" /> - </el-form-item> - <el-form-item label="状态" prop="status"> - <el-input v-model="formData.status" :disabled="true" clearable placeholder="暂无状态" /> - </el-form-item> - <el-form-item label="甲方" prop="party_a"> - <el-input v-model="formData.party_a" :disabled="true" clearable placeholder="暂无甲方" /> - </el-form-item> - <el-form-item label="乙方" prop="party_b"> - <el-input v-model="formData.party_b" :disabled="true" clearable placeholder="暂无乙方" /> - </el-form-item> - <el-form-item label="片区经理" prop="area_manager"> - <el-input v-model="formData.area_manager" :disabled="true" clearable placeholder="暂无经理" /> - </el-form-item> - <el-form-item label="状态" prop="type"> - <el-input v-model="formData.type" :disabled="true" clearable placeholder="暂无状态" /> - </el-form-item> - </el-form> - <div class="btn_men"> - <el-button @click="show=false">取消</el-button> - <el-button type="primary" @click="show=false" >确定</el-button> - </div> - </el-dialog> + <el-dialog @confirm="handleSubmit" title="合同详情" v-model="show"> + <el-form ref="formRef" :model="formData" label-width="90px" :rules="formRules"> + <el-form-item label="公司" prop="company_id"> + <el-input v-model="formData.company_id" :disabled="true" clearable placeholder="请输入公司" /> + </el-form-item> + <el-form-item label="合同类型" prop="contract_type"> + + + <el-input v-model="formData.contract_type" :disabled="true" clearable placeholder="请输入合同类型" /> + </el-form-item> + <el-form-item label="合同编号" prop="contract_no"> + <el-input v-model="formData.contract_no" :disabled="true" clearable placeholder="暂无合同编号" /> + </el-form-item> + <el-form-item label="文件" prop="file"> + <el-input v-model="formData.file" :disabled="true" clearable placeholder="暂无文件" /> + </el-form-item> + <el-form-item label="状态" prop="status"> + <el-input v-model="formData.status" :disabled="true" clearable placeholder="暂无状态" /> + </el-form-item> + <el-form-item label="甲方" prop="party_a"> + <el-input v-model="formData.party_a" :disabled="true" clearable placeholder="暂无甲方" /> + </el-form-item> + <el-form-item label="乙方" prop="party_b"> + <el-input v-model="formData.party_b" :disabled="true" clearable placeholder="暂无乙方" /> + </el-form-item> + <el-form-item label="片区经理" prop="area_manager"> + <el-input v-model="formData.area_manager" :disabled="true" clearable placeholder="暂无经理" /> + </el-form-item> + <el-form-item label="状态" prop="type"> + <el-input v-model="formData.type" :disabled="true" clearable placeholder="暂无状态" /> + </el-form-item> + </el-form> + <div class="btn_men"> + <el-button @click="show = false">取消</el-button> + <el-button type="primary" @click="show = false">确定</el-button> + </div> + </el-dialog> </template> <script setup> import { ref, reactive, defineExpose } from "vue"; const formData = reactive({ - id: "", - company_id: "", - contract_type: "", - contract_no: "", - file: "", - status: "", - party_a: "", - party_b: "", - area_manager: "", + id: "", + company_id: "", + contract_type: "", + contract_no: "", + file: "", + status: "", + party_a: "", + party_b: "", + area_manager: "", }); const show = ref(false); const shoeEditFn = (flag) => { - show.value = flag; + show.value = flag; }; // 传值赋值 const setFormData = async (data) => { - for (const key in formData) { - if (data[key] != null && data[key] != undefined) { - //@ts-ignore - formData[key] = data[key]; + for (const key in formData) { + if (data[key] != null && data[key] != undefined) { + //@ts-ignore + formData[key] = data[key]; + } } - } + console.log(formData) }; defineExpose({ - shoeEditFn, - setFormData, + shoeEditFn, + setFormData, }); </script> <style lang="scss" scoped> .btn_men { - text-align: right; + text-align: right; } </style> \ No newline at end of file diff --git a/src/views/permission/admin/edit.vue b/src/views/permission/admin/edit.vue index bebc486..b9d3ce3 100644 --- a/src/views/permission/admin/edit.vue +++ b/src/views/permission/admin/edit.vue @@ -1,670 +1,852 @@ <template> - <div class="edit-popup"> - <popup ref="popupRef" :title="popupTitle" :async="true" width="80%" @confirm="handleSubmit" @close="handleClose"> - <el-form ref="formRef" :model="formData" label-width="84px" :rules="formRules"> - <div style="font-size: 1.2rem; margin: 10px 0">基本信息创建</div> + <div class="edit-popup"> + <popup + ref="popupRef" + :title="popupTitle" + :async="true" + width="80%" + @confirm="handleSubmit" + @close="handleClose" + > + <el-form + ref="formRef" + :model="formData" + label-width="84px" + :rules="formRules" + > + <div style="font-size: 1.2rem; margin: 10px 0">基本信息创建</div> - <div class="headimg"> - <el-upload :disabled="isCheck" v-model="formData.avatar" class="avatar-uploader-head" - action="https://worker-task.lihaink.cn/api/upload/image" :show-file-list="false" - :on-success="handleAvatarSuccessAvatar"> - <img v-if="formData.avatar" :src="formData.avatar" class="avatar" /> - <el-icon v-else class="avatar-uploader-icon"> - <Plus /> - </el-icon> - </el-upload> - </div> + <div class="headimg"> + <el-upload + :disabled="isCheck" + v-model="formData.avatar" + class="avatar-uploader-head" + :data="{ cid: 1 }" + action="https://worker-task.lihaink.cn/api/upload/image" + :show-file-list="false" + :on-success="handleAvatarSuccessAvatar" + > + <img v-if="formData.avatar" :src="formData.avatar" class="avatar" /> + <el-icon v-else class="avatar-uploader-icon"> + <Plus /> + </el-icon> + </el-upload> + </div> + <el-col class="pt-6 !border-none"> + <el-row> + <el-col :span="11"> + <el-form-item label="姓名" prop="name"> + <el-input + :disabled="isCheck" + v-model="formData.name" + placeholder="请输入姓名" + clearable + :style="{ width: '100%' }" + ></el-input> + </el-form-item> + </el-col> + <el-col :span="13"> + <el-form-item label="性别" prop="sex"> + <el-select + v-model="formData.sex" + placeholder="请选择性别" + :disabled="isCheck" + :style="{ width: '100%' }" + > + <el-option label="男" value="1" /> + <el-option label="女" value="2" /> + </el-select> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="11"> + <el-form-item label="身份证号" prop="id_card"> + <el-input + :disabled="isCheck" + v-model="formData.id_card" + placeholder="请输入身份证号" + clearable + :style="{ width: '100%' }" + ></el-input> + </el-form-item> + </el-col> + <el-col :span="13"> + <el-form-item label="联系电话" prop="account"> + <el-input + :disabled="isCheck" + v-model="formData.account" + placeholder="请输入联系电话" + clearable + :style="{ width: '100%' }" + ></el-input> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-form-item label="省" prop="province" style="flex: 1"> + <el-select + :disabled="isCheck" + v-model="formData.province" + placeholder="请选择省" + clearable + @change="province_change" + :style="{ width: '100%' }" + > + <el-option + v-for="(item, index) in datas.provinceOptions" + :key="index" + :label="item.province_name" + :value="item.province_code" + ></el-option> + </el-select> + </el-form-item> - <el-col style="flex: 8" class="pt-6 !border-none"> - <el-row> - <el-col :span="12"> - <el-form-item label="姓名" prop="name"> - <el-input :disabled="isCheck" v-model="formData.name" placeholder="请输入姓名" clearable - :style="{ width: '100%' }"></el-input> - </el-form-item> - </el-col> - <el-col :span="12"> - <el-form-item label="性别" prop="sex"> - <el-select v-model="formData.sex" placeholder="请选择性别" :disabled="isCheck" - :style="{ width: '100%' }"> - <el-option label="男" value="1" /> - <el-option label="女" value="2" /> - </el-select> - </el-form-item> - </el-col> - </el-row> - <el-row> - <el-col :span="12"> - <el-form-item label="身份证号" prop="id_card"> - <el-input :disabled="isCheck" v-model="formData.id_card" placeholder="请输入身份证号" clearable - :style="{ width: '100%' }"></el-input> - </el-form-item> - </el-col> - <el-col :span="12"> - <el-form-item label="联系电话" prop="account"> - <el-input :disabled="isCheck" v-model="formData.account" placeholder="请输入联系电话" clearable - :style="{ width: '100%' }"></el-input> - </el-form-item> - </el-col> - </el-row> - <el-row> + <el-form-item label="市" prop="city" style="flex: 1"> + <el-select + :disabled="isCheck" + v-model="formData.city" + placeholder="请选择市" + clearable + @change="city_change" + :style="{ width: '100%' }" + > + <el-option + v-for="(item, index) in datas.cityOptions" + :key="index" + :label="item.city_name" + :value="item.city_code" + ></el-option> + </el-select> + </el-form-item> + <el-form-item label="区" prop="area" style="flex: 1"> + <el-select + :disabled="isCheck" + v-model="formData.area" + placeholder="请选择区" + clearable + @change="area_change" + :style="{ width: '100%' }" + > + <el-option + v-for="(item, index) in datas.areaOptions" + :key="index" + :label="item.area_name" + :value="item.area_code" + ></el-option> + </el-select> + </el-form-item> - <el-form-item label="省" prop="province" style="flex: 1"> - <el-select :disabled="isCheck" v-model="formData.province" placeholder="请选择省" clearable - @change="province_change" :style="{ width: '100%' }"> - <el-option v-for="(item, index) in datas.provinceOptions" :key="index" - :label="item.province_name" :value="item.province_code"></el-option> - </el-select> - </el-form-item> + <el-form-item label="镇" prop="street" style="flex: 1"> + <el-select + :disabled="isCheck" + v-model="formData.street" + placeholder="请选择镇" + clearable + @change="street_change" + :style="{ width: '100%' }" + > + <el-option + v-for="(item, index) in datas.streetOptions" + :key="index" + :label="item.street_name" + :value="item.street_code" + ></el-option> + </el-select> + </el-form-item> + <el-form-item label="村社小队" prop="address" style="flex: 1.5"> + <el-input + :disabled="isCheck" + v-model="formData.address" + placeholder="请输入村社小队" + clearable + :style="{ width: '100%' }" + ></el-input> + </el-form-item> + </el-row> + </el-col> - <el-form-item label="市" prop="city" style="flex: 1"> - <el-select :disabled="isCheck" v-model="formData.city" placeholder="请选择市" clearable - @change="city_change" :style="{ width: '100%' }"> - <el-option v-for="(item, index) in datas.cityOptions" :key="index" :label="item.city_name" - :value="item.city_code"></el-option> - </el-select> - </el-form-item> + <el-col :span="24" style="margin-top: 1vh"> + <el-row> + <el-col :span="12" v-if="userStore.userInfo.root == 0"> + <el-form-item label="授权身份" prop="role_id"> + <el-select + v-model="formData.role_id" + :disabled="formData.root == 1 || isCheck" + placeholder="请选择授权身份" + :style="{ width: '100%' }" + clearable + > + <el-option + v-if="formData.root == 1" + label="系统管理员" + :value="0" + /> + <el-option + v-for="(item, index) in optionsData.role" + :key="index" + :label="item.name" + :value="item.id" + /> + </el-select> + </el-form-item> + </el-col> + <el-col :span="24" v-else> + <el-form-item label="授权身份" prop="role_id"> + <el-select + v-model="formData.role_id" + :disabled="formData.root == 1 || isCheck" + placeholder="请选择授权身份" + :style="{ width: '100%' }" + clearable + > + <el-option + v-if="formData.root == 1" + label="系统管理员" + :value="0" + /> + <el-option + v-for="(item, index) in optionsData.role" + :key="index" + :label="item.name" + :value="item.id" + /> + </el-select> + </el-form-item> + </el-col> + <el-col :span="12" v-if="userStore.userInfo.root == 0"> + <!-- <el-col :span="12" v-if="true"> --> - <el-form-item label="区" prop="area" style="flex: 1"> - <el-select :disabled="isCheck" v-model="formData.area" placeholder="请选择区" clearable - @change="area_change" :style="{ width: '100%' }"> - <el-option v-for="(item, index) in datas.areaOptions" :key="index" :label="item.area_name" - :value="item.area_code"></el-option> - </el-select> - </el-form-item> + <el-form-item label="签约方" prop="field130"> + <el-input + :disabled="isCheck" + v-model="formData.party_a_name" + placeholder="请选择签约方" + clearable + :style="{ width: '100%' }" + @click="isCompany = true" + ></el-input> + </el-form-item> + </el-col> + </el-row> + </el-col> + <div style="font-size: 1.2rem; margin: 10px 0">资质信息</div> + <div style="display: flex; justify-content: space-between"> + <div> + <el-form-item label="身份证" prop="id_card"> + <el-upload + :disabled="isCheck" + v-model="formData.qualification.id_card" + class="avatar-uploader pl-3" + :data="{ cid: 1 }" + action="https://worker-task.lihaink.cn/api/upload/image" + :show-file-list="false" + :on-success="handleAvatarSuccessIdA" + > + <img + v-if="formData.qualification.id_card" + :src="formData.qualification.id_card" + class="avatar" + /> + <el-icon v-else class="avatar-uploader-icon"> + <Plus /> + </el-icon> + </el-upload> + <el-upload + :disabled="isCheck" + v-model="formData.qualification.id_card_b" + class="avatar-uploader pl-3" + :data="{ cid: 1 }" + action="https://worker-task.lihaink.cn/api/upload/image" + :show-file-list="false" + :on-success="handleAvatarSuccessIdB" + > + <img + v-if="formData.qualification.id_card_b" + :src="formData.qualification.id_card_b" + class="avatar" + /> + <el-icon v-else class="avatar-uploader-icon"> + <Plus /> + </el-icon> + </el-upload> + </el-form-item> + </div> + <div> + <el-form-item label="行驶证" prop="car_card"> + <el-upload + :disabled="isCheck" + v-model="formData.qualification.car_card" + class="avatar-uploader pl-3" + :data="{ cid: 1 }" + action="https://worker-task.lihaink.cn/api/upload/image" + :show-file-list="false" + :on-success="handleAvatarSuccessCarA" + > + <img + v-if="formData.qualification.car_card" + :src="formData.qualification.car_card" + class="avatar" + /> + <el-icon v-else class="avatar-uploader-icon"> + <Plus /> + </el-icon> + </el-upload> + <el-upload + :disabled="isCheck" + v-model="formData.qualification.car_card_b" + class="avatar-uploader pl-3" + :data="{ cid: 1 }" + action="https://worker-task.lihaink.cn/api/upload/image" + :show-file-list="false" + :on-success="handleAvatarSuccessCarB" + :before-upload="beforeAvatarUpload_two" + > + <img + v-if="formData.qualification.car_card_b" + :src="formData.qualification.car_card_b" + class="avatar" + /> + <el-icon v-else class="avatar-uploader-icon"> + <Plus /> + </el-icon> + </el-upload> + </el-form-item> + </div> + <div> + <el-form-item label="银行卡号" prop="bank_account"> + <el-upload + :disabled="isCheck" + v-model="formData.qualification.bank_account" + class="avatar-uploader pl-3" + :data="{ cid: 1 }" + action="https://worker-task.lihaink.cn/api/upload/image" + :show-file-list="false" + :on-success="handleAvatarSuccessBankA" + :before-upload="beforeAvatarUpload_three" + > + <img + v-if="formData.qualification.bank_account" + :src="formData.qualification.bank_account" + class="avatar" + /> + <el-icon v-else class="avatar-uploader-icon"> + <Plus /> + </el-icon> + </el-upload> + <el-upload + :disabled="isCheck" + v-model="formData.qualification.bank_account_b" + class="avatar-uploader pl-3" + :data="{ cid: 1 }" + action="https://worker-task.lihaink.cn/api/upload/image" + :show-file-list="false" + :on-success="handleAvatarSuccessBankB" + :before-upload="beforeAvatarUpload_three" + > + <img + v-if="formData.qualification.bank_account_b" + :src="formData.qualification.bank_account_b" + class="avatar" + /> + <el-icon v-else class="avatar-uploader-icon"> + <Plus /> + </el-icon> + </el-upload> + </el-form-item> + </div> + </div> + <template v-if="userStore.userInfo.root == 0"> + <!-- <template v-if="true"> --> + <el-col :span="24"> + <el-row> + <el-col :span="12"> + <el-form-item label="签约姓名" prop="name"> + <el-input + v-model="formData.name" + placeholder="请输入签约姓名" + :disabled="true" + clearable + :style="{ width: '100%' }" + ></el-input> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="性别" prop="sex"> + <el-input + placeholder="请输入性别" + :disabled="true" + clearable + :style="{ width: '100%' }" + :value="formData.sex == 1 ? '男' : '女'" + ></el-input> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="身份证号" prop="id_card"> + <el-input + v-model="formData.id_card" + placeholder="请输入身份证号" + :disabled="true" + clearable + :style="{ width: '100%' }" + ></el-input> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="联系电话" prop="account"> + <el-input + v-model="formData.account" + placeholder="请输入联系电话" + :disabled="true" + clearable + :style="{ width: '100%' }" + ></el-input> + </el-form-item> + </el-col> + <el-col :span="12" v-if="formData.name"> + <el-form-item label="账号" prop="account"> + <el-input + v-model="formData.account" + :disabled="true" + clearable + :style="{ width: '100%' }" + ></el-input> + </el-form-item> + </el-col> + <el-col :span="12" v-if="formData.name"> + <el-form-item label="密码" prop="password"> + <el-input + v-model="formData.account" + :disabled="true" + clearable + :style="{ width: '100%' }" + ></el-input> + </el-form-item> + </el-col> + <el-col :span="24"> + <el-form-item label="合同类型" prop="contract_type"> + <el-col :span="24"> + <el-select + :disabled="isCheck" + v-model="formData.contract_type" + placeholder="请选择合同类型" + clearable + :style="{ width: '100%' }" + > + <el-option + v-for="(item, index) in datas.contract_type" + :key="index" + :label="item.name" + :value="item.id" + ></el-option> + </el-select> + </el-col> + </el-form-item> + </el-col> + </el-row> + </el-col> - <el-form-item label="镇" prop="street" style="flex: 1"> - <el-select :disabled="isCheck" v-model="formData.street" placeholder="请选择镇" clearable - @change="street_change" :style="{ width: '100%' }"> - <el-option v-for="(item, index) in datas.streetOptions" :key="index" - :label="item.street_name" :value="item.street_code"></el-option> - </el-select> - </el-form-item> - <el-form-item label="村社小队" prop="address" style="flex: 1.5"> - <el-input :disabled="isCheck" v-model="formData.address" placeholder="请输入村社小队" clearable - :style="{ width: '100%' }"></el-input> - </el-form-item> - - </el-row> - </el-col> - <el-col :span="24"> - <el-row> - <el-col :span="12"> - <el-form-item label="授权身份" prop="role_id"> - <el-select v-model="formData.role_id" :disabled="formData.root == 1 || isCheck" - placeholder="请选择授权身份" :style="{ width: '100%' }" clearable> - <el-option v-if="formData.root == 1" label="系统管理员" :value="0" /> - <el-option v-for="(item, index) in optionsData.role" :key="index" :label="item.name" - :value="item.id" /> - </el-select> - </el-form-item> - </el-col> - <el-col :span="12"> - <el-form-item label="签约方" prop="field130"> - <el-input :disabled="isCheck" v-model="formData.party_a_name" placeholder="请选择签约方" clearable - :style="{ width: '100%' }" @click="isCompany = true"></el-input> - </el-form-item> - </el-col> - </el-row> - </el-col> - <div style="font-size: 1.2rem; margin: 10px 0">资质信息</div> - <el-col :span="24"> - <el-row> - <el-col :span="8"> - <el-form-item label="身份证" prop="id_card"> - <el-upload :disabled="isCheck" v-model="formData.qualification.id_card" - class="avatar-uploader" :data="{ cid: 1 }" - action="https://worker-task.lihaink.cn/api/upload/image" :show-file-list="false" - :on-success="handleAvatarSuccessIdA"> - <img v-if="formData.qualification.id_card" :src="formData.qualification.id_card" - class="avatar" /> - <el-icon v-else class="avatar-uploader-icon"> - <Plus /> - </el-icon> - </el-upload> - <el-upload :disabled="isCheck" v-model="formData.qualification.id_card_b" - class="avatar-uploader" :data="{ cid: 1 }" - action="https://worker-task.lihaink.cn/api/upload/image" :show-file-list="false" - :on-success="handleAvatarSuccessIdB"> - <img v-if="formData.qualification.id_card_b" :src="formData.qualification.id_card_b" - class="avatar" /> - <el-icon v-else class="avatar-uploader-icon"> - <Plus /> - </el-icon> - </el-upload> - </el-form-item> - </el-col> - <el-col :span="8"> - <el-form-item label="行驶证" prop="car_card"> - <el-upload :disabled="isCheck" v-model="formData.qualification.car_card" - class="avatar-uploader" :data="{ cid: 1 }" - action="https://worker-task.lihaink.cn/api/upload/image" :show-file-list="false" - :on-success="handleAvatarSuccessCarA"> - <img v-if="formData.qualification.car_card" :src="formData.qualification.car_card" - class="avatar" /> - <el-icon v-else class="avatar-uploader-icon"> - <Plus /> - </el-icon> - </el-upload> - <el-upload :disabled="isCheck" v-model="formData.qualification.car_card_b" - class="avatar-uploader" :data="{ cid: 1 }" - action="https://worker-task.lihaink.cn/api/upload/image" :show-file-list="false" - :on-success="handleAvatarSuccessCarB" :before-upload="beforeAvatarUpload_two"> - <img v-if="formData.qualification.car_card_b" :src="formData.qualification.car_card_b" - class="avatar" /> - <el-icon v-else class="avatar-uploader-icon"> - <Plus /> - </el-icon> - </el-upload> - </el-form-item> - </el-col> - <el-col :span="8"> - <el-form-item label="银行卡号" prop="bank_account"> - <el-upload :disabled="isCheck" v-model="formData.qualification.bank_account" - class="avatar-uploader" :data="{ cid: 1 }" - action="https://worker-task.lihaink.cn/api/upload/image" :show-file-list="false" - :on-success="handleAvatarSuccessBankA" :before-upload="beforeAvatarUpload_three"> - <img v-if="formData.qualification.bank_account" - :src="formData.qualification.bank_account" class="avatar" /> - <el-icon v-else class="avatar-uploader-icon"> - <Plus /> - </el-icon> - </el-upload> - <el-upload :disabled="isCheck" v-model="formData.qualification.bank_account_b" - class="avatar-uploader" :data="{ cid: 1 }" - action="https://worker-task.lihaink.cn/api/upload/image" :show-file-list="false" - :on-success="handleAvatarSuccessBankB" :before-upload="beforeAvatarUpload_three"> - <img v-if="formData.qualification.bank_account_b" - :src="formData.qualification.bank_account_b" class="avatar" /> - <el-icon v-else class="avatar-uploader-icon"> - <Plus /> - </el-icon> - </el-upload> - </el-form-item> - </el-col> - </el-row> - </el-col> - <el-col :span="24"> - <el-row> - <el-col :span="12"> - <el-form-item label="签约姓名" prop="name"> - <el-input v-model="formData.name" placeholder="请输入签约姓名" :disabled="true" clearable - :style="{ width: '100%' }"></el-input> - </el-form-item> - </el-col> - <el-col :span="12"> - <el-form-item label="性别" prop="sex"> - <el-input placeholder="请输入性别" :disabled="true" clearable :style="{ width: '100%' }" - :value="formData.sex == 1 ? '男' : '女'"></el-input> - </el-form-item> - </el-col> - <el-col :span="12"> - <el-form-item label="身份证号" prop="id_card"> - <el-input v-model="formData.id_card" placeholder="请输入身份证号" :disabled="true" clearable - :style="{ width: '100%' }"></el-input> - </el-form-item> - </el-col> - <el-col :span="12"> - <el-form-item label="联系电话" prop="account"> - <el-input v-model="formData.account" placeholder="请输入联系电话" :disabled="true" clearable - :style="{ width: '100%' }"></el-input> - </el-form-item> - </el-col> - <el-col :span="12" v-if="formData.name"> - <el-form-item label="账号" prop="account"> - <el-input v-model="formData.account" :disabled="true" clearable - :style="{ width: '100%' }"></el-input> - </el-form-item> - </el-col> - <el-col :span="12" v-if="formData.name"> - <el-form-item label="密码" prop="password"> - <el-input v-model="formData.account" :disabled="true" clearable - :style="{ width: '100%' }"></el-input> - </el-form-item> - </el-col> - <el-col :span="24"> - <el-form-item label="合同类型" prop="contract_type"> - <el-col :span="24"> - <el-select :disabled="isCheck" v-model="formData.contract_type" placeholder="请选择合同类型" - clearable :style="{ width: '100%' }"> - <el-option v-for="(item, index) in datas.contract_type" :key="index" - :label="item.name" :value="item.id"></el-option> - </el-select> - </el-col> - </el-form-item> - </el-col> - </el-row> - </el-col> - <el-col :span="24" v-if="!isCheck"> - <el-form-item label="合同上传" prop="field127"> - <el-upload :headers="{ Token: userStore.token }" v-model="formData.file" class="upload-demo" - action="https://worker-task.lihaink.cn/adminapi/upload/file" - :on-success="handleAvatarSuccess_four" multiple :limit="1"> - <el-button type="primary">上传</el-button> - </el-upload> - </el-form-item> - </el-col> - </el-form> - </popup> - <el-dialog v-model="isCompany" title="选择签约方" width="60%"> - <DialogIndex @customEvent="customEvent" /> - </el-dialog> - </div> + <el-col :span="24" v-if="!isCheck"> + <el-form-item label="合同上传" prop="field127"> + <el-upload + :headers="{ Token: userStore.token }" + v-model="formData.file" + class="upload-demo" + action="https://worker-task.lihaink.cn/adminapi/upload/file" + :on-success="handleAvatarSuccess_four" + multiple + :limit="1" + > + <el-button type="primary">上传</el-button> + </el-upload> + </el-form-item> + </el-col> + </template> + </el-form> + </popup> + <el-dialog v-model="isCompany" title="选择签约方" width="60%"> + <DialogIndex @customEvent="customEvent" /> + </el-dialog> + </div> </template> <script lang="ts" setup> import type { FormInstance, UploadProps } from "element-plus"; import Popup from "@/components/popup/index.vue"; import { useDictOptions } from "@/hooks/useDictOptions"; -import { - adminAdd, - adminDetail, - adminEdit, - generateGontract, -} from "@/api/perms/admin"; +import { adminAdd, adminDetail, adminEdit } from "@/api/perms/admin"; import { roleAll } from "@/api/perms/role"; import { jobsAll } from "@/api/org/post"; import { deptAll } from "@/api/org/department"; import { - apiCityList, - apiAreaList, - apiStreetList, - apiProvinceList, + apiCityList, + apiAreaList, + apiStreetList, + apiProvinceList, } from "@/api/common"; import { dictDataLists } from "@/api/setting/dict"; import DialogIndex from "./dialog_index.vue"; import useUserStore from "@/stores/modules/user"; -defineProps({ - isCheck: {}, -}); - +const isCheck = ref(false); +const isCheckFn = (flag: boolean) => { + isCheck.value = flag; +}; const emit = defineEmits(["success", "close"]); const formRef = shallowRef<FormInstance>(); const popupRef = shallowRef<InstanceType<typeof Popup>>(); const mode = ref("add"); -console.log(mode); const popupTitle = computed(() => { - return mode.value == "edit" ? "编辑管理员" : "新增管理员"; + return mode.value == "edit" ? "编辑管理员" : "新增管理员"; }); const formData = reactive({ - id: "", - sex: "", + id: "", + sex: "", + id_card: "", + name: "", + province: "", + city: "", + area: "", + street: "", + address: "", + account: "", + is_contract: 0, + // 签约方 + party_a_name: "", + qualification: { id_card: "", - name: "", - province: "", - city: "", - area: "", - street: "", - address: "", - account: "", - is_contract: 0, - // 签约方 - party_a_name: "", - qualification: { - id_card: "", - id_card_b: "", - car_card: "", - car_card_b: "", - bank_account: "", - bank_account_b: "", - }, - // 合同类型 - contract_type: "", - file: "", - // 授权身份 - role_id: "", - avatar: "", - multipoint_login: 1, - root: 0, + id_card_b: "", + car_card: "", + car_card_b: "", + bank_account: "", + bank_account_b: "", + }, + // 合同类型 + contract_type: "", + party_a: "", + file: "", + role_id: "", + avatar: "", + multipoint_login: 1, + root: 0, }); -// const formData = reactive({ -// id: '', -// sex: '1', -// id_card: '513701200012105613', -// name: 'zmj', -// province: '', -// city: '', -// area: '', -// street: '', -// address: '', -// phone: '15884967539', -// // v-model="formData.party_a_name" - -// party_a_name:"", -// qualification: { -// id_card: '', -// id_card_b: '', -// car_card: '', -// car_card_b: '', -// bank_account: '', -// bank_account_b: '' -// }, -// // 合同类型 -// contract_type: '', -// // 合同 -// contract: '', -// file: '', -// is_contract: 0, -// role_id: "", -// avatar: '', -// multipoint_login: 1, -// root: 0 -// }) // 字典信息 const datas: any = reactive({ - provinceOptions: [], - cityOptions: [], - areaOptions: [], - streetOptions: [], - dictTypeLists: [], - contract_type: [], - contract: [], + provinceOptions: [], + cityOptions: [], + areaOptions: [], + streetOptions: [], + dictTypeLists: [], + contract_type: [], + contract: [], }); const userStore = useUserStore(); const getcontract_type = async () => { - const data = await dictDataLists({ type_id: 7 }); - datas["contract_type"] = data["lists"]; + const data = await dictDataLists({ type_id: 7 }); + datas["contract_type"] = data["lists"]; }; getcontract_type(); const isCompany = ref(false); function customEvent(data: any) { - isCompany.value = false; - // formData.contract.party_a = data.id - console.log(data); - formData.party_a_name = data.company_name; + isCompany.value = false; + formData.party_a = data.id; + formData.party_a_name = data.company_name; } // 表单验证 // 手机号校验 const ValidatorPhone = (rule: object, value: string, callback: any) => { - const rg = /^(?:(?:\+|00)86)?1[3-9]\d{9}$/; - rg.test(formData.account) - ? callback() - : callback(new Error("请输入正确的手机号")); + const rg = /^(?:(?:\+|00)86)?1[3-9]\d{9}$/; + rg.test(formData.account) + ? callback() + : callback(new Error("请输入正确的手机号")); }; // 身份证校验 const ValidatorId = (rule: object, value: string, callback: any) => { - const rg = - /^[1-9]\d{5}(?:18|19|20)\d{2}(?:0[1-9]|10|11|12)(?:0[1-9]|[1-2]\d|30|31)\d{3}[\dXx]$/; - rg.test(formData.id_card) - ? callback() - : callback(new Error("请输入正确的身份证号码")); + const rg = + /^[1-9]\d{5}(?:18|19|20)\d{2}(?:0[1-9]|10|11|12)(?:0[1-9]|[1-2]\d|30|31)\d{3}[\dXx]$/; + rg.test(formData.id_card) + ? callback() + : callback(new Error("请输入正确的身份证号码")); }; const Validatorcard = (rule: object, value: string, callback: any) => { - formData.qualification.car_card - ? callback() - : callback(new Error("请输入驾驶证正面")); + formData.qualification.car_card + ? callback() + : callback(new Error("请输入驾驶证正面")); }; const ValidatorcardB = (rule: object, value: string, callback: any) => { - formData.qualification.car_card_b - ? callback() - : callback(new Error("请输入驾驶证反面")); + formData.qualification.car_card_b + ? callback() + : callback(new Error("请输入驾驶证反面")); }; const ValidatorBankcard = (rule: object, value: string, callback: any) => { - formData.qualification.bank_account - ? callback() - : callback(new Error("请输入银行卡正面")); + formData.qualification.bank_account + ? callback() + : callback(new Error("请输入银行卡正面")); }; const ValidatorBankcardB = (rule: object, value: string, callback: any) => { - formData.qualification.bank_account_b - ? callback() - : callback(new Error("请输入银行卡反面")); + formData.qualification.bank_account_b + ? callback() + : callback(new Error("请输入银行卡反面")); }; const formRules = reactive({ - account: [ - { - required: true, - trigger: ["blur"], - validator: ValidatorPhone, - }, - ], - id_card: [ - { - required: true, - trigger: ["blur"], - validator: ValidatorId, - }, - ], - sex: [ - { - required: true, - message: "请选择性别", - trigger: ["blur"], - }, - ], + account: [ + { + required: true, + trigger: ["blur"], + validator: ValidatorPhone, + }, + ], + id_card: [ + { + required: true, + trigger: ["blur"], + validator: ValidatorId, + }, + ], + sex: [ + { + required: true, + message: "请选择性别", + trigger: ["blur"], + }, + ], - name: [ - { - required: true, - message: "请输入名称", - trigger: ["blur"], - }, - ], - car_card: [ - { - required: true, - trigger: ["change"], - validator: Validatorcard, - }, - ], - car_card_b: [ - { - required: true, - trigger: ["blur"], - validator: ValidatorcardB, - }, - ], - bank_account: [ - { - required: true, - trigger: ["change"], - validator: ValidatorBankcard, - }, - ], - bank_account_b: [ - { - required: true, - trigger: ["change"], - validator: ValidatorBankcardB, - }, - ], - role_id: [ - { - required: true, - message: "请选择角色", - trigger: ["blur"], - }, - ], + name: [ + { + required: true, + message: "请输入名称", + trigger: ["blur"], + }, + ], + car_card: [ + { + required: true, + trigger: ["change"], + validator: Validatorcard, + }, + ], + car_card_b: [ + { + required: true, + trigger: ["blur"], + validator: ValidatorcardB, + }, + ], + bank_account: [ + { + required: true, + trigger: ["change"], + validator: ValidatorBankcard, + }, + ], + bank_account_b: [ + { + required: true, + trigger: ["change"], + validator: ValidatorBankcardB, + }, + ], + role_id: [ + { + required: true, + message: "请选择角色", + trigger: ["blur"], + }, + ], }); // 表单验证结束 const { optionsData } = useDictOptions<{ - role: any[]; - jobs: any[]; - dept: any[]; + role: any[]; + jobs: any[]; + dept: any[]; }>({ - role: { - api: roleAll, - }, - jobs: { - api: jobsAll, - }, - dept: { - api: deptAll, - }, + role: { + api: roleAll, + }, + jobs: { + api: jobsAll, + }, + dept: { + api: deptAll, + }, }); - const handleSubmit = async () => { - await formRef.value?.validate(); - mode.value == "edit" - ? await adminEdit(formData) - : await adminAdd(formData).then((res) => console.log(res)); + if (isCheck.value) { popupRef.value?.close(); - emit("success"); + return; + } + await formRef.value?.validate(); + mode.value == "edit" + ? await adminEdit(formData) + : await adminAdd(formData).then((res) => console.log(res)); + popupRef.value?.close(); + emit("success"); }; - const open = (type = "add") => { - mode.value = type; - popupRef.value?.open(); + mode.value = type; + popupRef.value?.open(); }; // 图片上传成功返回的url const handleAvatarSuccessIdA: UploadProps["onSuccess"] = ( - response, - uploadFile + response, + uploadFile ) => { - formData.qualification.id_card = response.data.uri; + formData.qualification.id_card = response.data.uri; }; const handleAvatarSuccessAvatar: UploadProps["onSuccess"] = ( - response, - uploadFile + response, + uploadFile ) => { - formData.avatar = response.data.uri; + formData.avatar = response.data.uri; }; const handleAvatarSuccessIdB: UploadProps["onSuccess"] = ( - response, - uploadFile + response, + uploadFile ) => { - formData.qualification.id_card_b = response.data.uri; + formData.qualification.id_card_b = response.data.uri; }; const handleAvatarSuccessCarA: UploadProps["onSuccess"] = ( - response, - uploadFile + response, + uploadFile ) => { - formData.qualification.car_card = response.data.uri; + formData.qualification.car_card = response.data.uri; }; const handleAvatarSuccessCarB: UploadProps["onSuccess"] = ( - response, - uploadFile + response, + uploadFile ) => { - formData.qualification.car_card_b = response.data.uri; + formData.qualification.car_card_b = response.data.uri; }; const beforeAvatarUpload_two: UploadProps["beforeUpload"] = (rawFile) => { - return true; + return true; }; const handleAvatarSuccessBankA: UploadProps["onSuccess"] = ( - response, - uploadFile + response, + uploadFile ) => { - formData.qualification.bank_account = response.data.uri; + formData.qualification.bank_account = response.data.uri; }; const handleAvatarSuccessBankB: UploadProps["onSuccess"] = ( - response, - uploadFile + response, + uploadFile ) => { - formData.qualification.bank_account_b = response.data.uri; + formData.qualification.bank_account_b = response.data.uri; }; const handleAvatarSuccess_four: UploadProps["onSuccess"] = ( - response, - uploadFile + response, + uploadFile ) => { - formData.file = response.data.uri; + formData.file = response.data.uri; }; const beforeAvatarUpload_three: UploadProps["beforeUpload"] = (rawFile) => { - return true; + return true; }; //获取省份 function province_change(value: string) { - getCityList(); + getCityList(); } function city_change(value: string) { - getAreaList(); + getAreaList(); } function area_change(value: string) { - getStreetList(); + getStreetList(); } function street_change(value: string) { - formData.street = value; + formData.street = value; } const getProvinceList = async () => { - const data = await apiProvinceList({}); - datas["provinceOptions"] = data; + const data = await apiProvinceList({}); + datas["provinceOptions"] = data; }; const getCityList = async () => { - const data = await apiCityList({ city: formData.province }); - datas["cityOptions"] = data; + const data = await apiCityList({ city: formData.province }); + datas["cityOptions"] = data; }; const getAreaList = async () => { - const data = await apiAreaList({ area: formData.city }); - datas["areaOptions"] = data; + const data = await apiAreaList({ area: formData.city }); + datas["areaOptions"] = data; }; const getStreetList = async () => { - const data = await apiStreetList({ street: formData.area }); - datas["streetOptions"] = data; + const data = await apiStreetList({ street: formData.area }); + datas["streetOptions"] = data; }; getProvinceList(); const setFormData = async (row: any) => { - const data = await adminDetail({ - id: row.id, - }); - for (const key in formData) { - let stringArr = ["sex", "province", "city", "area", "street"]; - if (data[key] != null && data[key] != undefined) { - //@ts-ignore - key == "role_id" - ? (formData[key] = data[key][0]) - : (formData[key] = data[key]); - if (stringArr.includes(key)) { - formData[key] = formData[key].toString(); - getCityList(); - getAreaList(); - getStreetList(); - } - } + const data = await adminDetail({ + id: row.id, + }); + for (const key in formData) { + const stringArr = ["sex", "province", "city", "area", "street"]; + if (data[key] != null && data[key] != undefined) { + //@ts-ignore + key == "role_id" + ? (formData[key] = data[key][0]) + : (formData[key] = data[key]); + if (stringArr.includes(key)) formData[key] = formData[key].toString(); } + } + apiCityList({ city: formData.province }).then(() => { + apiAreaList({ area: formData.city }).then(() => { + apiStreetList({ street: formData.area }); + }); + }); }; const handleClose = () => { - emit("close"); + emit("close"); }; defineExpose({ - open, - setFormData, + open, + setFormData, + isCheckFn, }); </script> <style lang="scss"> .headimg { - width: 6.5vw; - height: 8vw; - overflow: hidden; - float: left; - margin-top: 24px; + margin-top: 24px; + width: 6.2vw; + height: 7.2vw; + float: left; + overflow: hidden; } .avatar-uploader-head .el-upload { - width: 7vw; - height: 8.5vw; - background-color: #fff; - border: 1px dashed var(--el-border-color); - border-radius: 6px; - cursor: pointer; - position: relative; - overflow: hidden; - transition: var(--el-transition-duration-fast); + width: 6.2vw; + height: 7.2vw; + background-color: #fff; + border: 1px dashed var(--el-border-color); + border-radius: 6px; + cursor: pointer; + position: relative; + overflow: hidden; + transition: var(--el-transition-duration-fast); } .avatar-uploader .el-upload { - width: 10vw; - height: 6.3vw; - background-color: #fff; - border: 1px dashed var(--el-border-color); - border-radius: 6px; - cursor: pointer; - position: relative; - overflow: hidden; - transition: var(--el-transition-duration-fast); + width: 9.9vw; + height: 6.3vw; + background-color: #fff; + border: 1px dashed var(--el-border-color); + border-radius: 6px; + cursor: pointer; + position: relative; + overflow: hidden; + transition: var(--el-transition-duration-fast); } .avatar-uploader .el-upload:hover { - border-color: var(--el-color-primary); + border-color: var(--el-color-primary); } .el-icon.avatar-uploader-icon { - font-size: 28px; - color: #8c939d; - width: 178px; - height: 178px; - text-align: center; + font-size: 28px; + color: #8c939d; + width: 178px; + height: 178px; + text-align: center; } </style> diff --git a/src/views/permission/admin/index.vue b/src/views/permission/admin/index.vue index 6c8d6e8..6847507 100644 --- a/src/views/permission/admin/index.vue +++ b/src/views/permission/admin/index.vue @@ -56,10 +56,13 @@ @click="handleEdit(row)">编辑</el-button> <el-button v-if="row.root != 1" v-perms="['auth.admin/delete']" type="danger" link @click="handleDelete(row.id)">删除</el-button> + <el-button v-perms="['company/edit', 'company/add']" type="primary" link @click=" + ; (showPop = true), + (showConctactPop = true), + (contractId = row.id) + ">生成合同</el-button> <el-button v-perms="['company/edit', 'company/add']" type="primary" link - @click="showPop = true, showConctactPop = true, contractId = row.id">生成个人合同</el-button> - <el-button v-perms="['company/edit', 'company/add']" type="primary" link - @click=" showPop = true, contractId = row.id">发送短信</el-button> + @click="; (showPop = true), (contractId = row.id)">发送短信</el-button> </div> </template> </el-table-column> @@ -72,8 +75,12 @@ <edit-popup v-if="showEdit" ref="editRef" :isCheck="isCheck" @success="getLists" @close="showEdit = false" /> <el-dialog v-model="showPop" @close="offPop"> <h1>重要提醒</h1> - <div class="content" v-if="showConctactPop">请确认信息是否有误,发送合同,请确认信息是否有误,发送电子合同后短时间内将不可再次发送.</div> - <div class="content" v-else>确认签约短信将在60秒后发送,请注意查收,并点击短信链接进行线上合同签约</div> + <div class="content" v-if="showConctactPop"> + 请确认信息是否有误,发送合同,请确认信息是否有误,发送电子合同后短时间内将不可再次发送. + </div> + <div class="content" v-else> + 确认签约短信将在60秒后发送,请注意查收,并点击短信链接进行线上合同签约 + </div> <p class="btn_menu"> <el-button type="primary" size="large" v-if="showConctactPop" @click="creContct">确认创建</el-button> <el-button type="primary" size="large" v-else @click="sendMsg">确认</el-button> @@ -84,47 +91,42 @@ </template> <script lang="ts" setup name="admin"> -import { - adminEdit, - adminLists, - adminDelete, - generateGontract, - sendMsgApi, -} from "@/api/perms/admin"; -import { roleAll } from "@/api/perms/role"; -import { useDictOptions } from "@/hooks/useDictOptions"; -import { usePaging } from "@/hooks/usePaging"; -import feedback from "@/utils/feedback"; -import EditPopup from "./edit.vue"; -const editRef = shallowRef<InstanceType<typeof EditPopup>>(); +import { adminEdit, adminLists, adminDelete } from '@/api/perms/admin' +import { generateGontract, sendMsgApi } from '@/api/company' +import { roleAll } from '@/api/perms/role' +import { useDictOptions } from '@/hooks/useDictOptions' +import { usePaging } from '@/hooks/usePaging' +import feedback from '@/utils/feedback' +import EditPopup from './edit.vue' +const editRef = shallowRef<InstanceType<typeof EditPopup>>() +const route = useRoute() + // 表单数据 const formData = reactive({ - name: "", - role_id: "", -}); -const contractId = ref(""); + name: '', + role_id: '', + company_id: route.query.company_id || '' +}) +const contractId = ref('') // 弹窗 -const showPop = ref(false); -const showConctactPop = ref(false); +const showPop = ref(false) +const showConctactPop = ref(false) const offPop = () => { - showPop.value = false; - showConctactPop.value = false; -}; + showPop.value = false + showConctactPop.value = false +} const creContct = () => { - // feedback.msgSuccess("复制成功"); - generateGontract({ id: contractId.value }).then(() => { - feedback.msgSuccess("发送成功"); - }); - offPop(); -}; + generateGontract({ id: contractId.value }) + offPop() +} const sendMsg = () => { sendMsgApi({ id: contractId.value }).then((res) => { - feedback.msgSuccess("发送成功"); - }); - offPop(); -}; + console.log(res) + }) + offPop() +} // -const showEdit = ref(false); +const showEdit = ref(false) const { pager, getLists, resetParams, resetPage } = usePaging({ fetchFun: adminLists, params: formData, @@ -143,34 +145,39 @@ const changeStatus = (data: any) => { }); }; // 查看 -const isCheck = ref(false); +const isCheck = ref(false) const handleCheck = async (data: any) => { - isCheck.value = true; - showEdit.value = true; - await nextTick(); - editRef.value?.open("edit"); - editRef.value?.setFormData(data); -}; + isCheck.value = true + showEdit.value = true + await nextTick() + editRef.value?.open('edit') + editRef.value?.setFormData(data) + editRef.value?.isCheckFn(true) +} const handleAdd = async () => { - isCheck.value = false; - showEdit.value = true; - await nextTick(); - editRef.value?.open("add"); -}; + isCheck.value = false + showEdit.value = true + await nextTick() + editRef.value?.open('add') + editRef.value?.isCheckFn(false) + +} const handleEdit = async (data: any) => { - isCheck.value = false; - showEdit.value = true; - await nextTick(); - editRef.value?.open("edit"); - editRef.value?.setFormData(data); -}; + isCheck.value = false + showEdit.value = true + await nextTick() + editRef.value?.open('edit') + editRef.value?.setFormData(data) + editRef.value?.isCheckFn(false) + +} const handleDelete = async (id: number) => { - await feedback.confirm("确定要删除?"); - await adminDelete({ id }); - getLists(); -}; + await feedback.confirm('确定要删除?') + await adminDelete({ id }) + getLists() +} const { optionsData } = useDictOptions<{ role: any[];