integrated_traffic_vue/src/views/enterprise_management/user_practitioner/add.vue

1292 lines
42 KiB
Vue
Raw Normal View History

2024-03-22 14:59:41 +08:00
<template>
<layout-card>
<el-form
ref="formRef"
:rules="rules"
:model="data.form"
label-width="160px"
>
<el-row :gutter="20">
<el-col :span="24">
<el-divider content-position="left">基本信息</el-divider>
</el-col>
<el-col :span="8">
<el-form-item label="人员类型" prop="PERSONNEL_TYPE">
<el-select v-model="data.form.PERSONNEL_TYPE">
<el-option
v-for="item in data.personnelTypeList"
:key="item.DICTIONARIES_ID"
:label="item.NAME"
:value="item.DICTIONARIES_ID"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="身份证号" prop="USER_ID_CARD">
<el-input
v-model="data.form.USER_ID_CARD"
placeholder="请输入"
@blur="fnChangeIdCard"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="姓名" prop="NAME">
<el-input v-model="data.form.NAME" placeholder="请输入" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="手机号" prop="PHONE">
<el-input
v-model="data.form.PHONE"
:disabled="!!USER_ID"
placeholder="请输入"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="出生年月" prop="DATE_OF_BIRTH">
<el-date-picker
v-model="data.form.DATE_OF_BIRTH"
type="date"
placeholder="选择日期"
value-format="YYYY-MM-DD"
format="YYYY-MM-DD"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="性别" prop="SEX">
<el-select v-model="data.form.SEX">
<el-option
v-for="item in [
{ NAME: '男', DICTIONARIES_ID: '1' },
{ NAME: '女', DICTIONARIES_ID: '0' },
]"
:key="item.DICTIONARIES_ID"
:label="item.NAME"
:value="item.DICTIONARIES_ID"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="民族" prop="NATION">
<el-select v-model="data.form.NATION">
<el-option
v-for="item in data.nationList"
:key="item.DICTIONARIES_ID"
:label="item.NAME"
:value="item.DICTIONARIES_ID"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="文化程度" prop="DEGREE_OF_EDUCATION">
<el-select v-model="data.form.DEGREE_OF_EDUCATION">
<el-option
v-for="item in data.degreeOfEducationList"
:key="item.DICTIONARIES_ID"
:label="item.NAME"
:value="item.DICTIONARIES_ID"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="政治面貌" prop="POLITICAL_OUTLOOK">
<el-select v-model="data.form.POLITICAL_OUTLOOK">
<el-option
v-for="item in data.politicalLandscapeList"
:key="item.DICTIONARIES_ID"
:label="item.NAME"
:value="item.DICTIONARIES_ID"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="参加工作日期" prop="WORKING_DATE">
<el-date-picker
v-model="data.form.WORKING_DATE"
value-format="YYYY-MM-DD"
format="YYYY-MM-DD"
type="date"
placeholder="选择日期"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="邮箱" prop="EMAIL">
<el-input v-model="data.form.EMAIL" placeholder="请输入" />
</el-form-item>
</el-col>
<el-col :span="24">
<el-divider content-position="left">入职信息</el-divider>
</el-col>
<el-col :span="8">
<el-form-item label="部门" prop="DEPARTMENT_ID">
<layout-department
v-model="data.form.DEPARTMENT_ID"
@update:model-value="data.form.POST_ID = ''"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="岗位" prop="POST_ID">
<el-select v-model="data.form.POST_ID">
<el-option
v-for="item in data.postList"
:key="item.POST_ID"
:label="item.NAME"
:value="item.POST_ID"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="部门排序" prop="SORT">
<el-input v-model.number="data.form.SORT" placeholder="请输入" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="职务" prop="DUTIES">
<layout-select-create
v-model="data.form.DUTIES"
:list="data.dutiesList"
@delete-option="fnDictionaryDelete($event, 'POSITION')"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="职称" prop="TITLE">
<layout-select-create
v-model="data.form.TITLE"
:list="data.professionalTitleList"
@delete-option="fnDictionaryDelete($event, 'JOB_TITLE')"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="入职日期" prop="ENTRY_DATE">
<el-date-picker
v-model="data.form.ENTRY_DATE"
value-format="YYYY-MM-DD"
format="YYYY-MM-DD"
type="date"
placeholder="选择日期"
/>
</el-form-item>
</el-col>
<el-col :span="24">
<el-row>
<el-col :span="12">
<el-row>
<el-col :span="10">
<el-form-item label="排班" prop="SHIFTDUTYONE">
<el-select
v-model="data.form.SHIFTDUTYONE"
@change="fnChangeSchedulingOne"
>
<el-option
v-for="item in data.schedulingList"
:key="item.SHIFTWORKRULES_ID"
:label="item.NAME"
:value="item.SHIFTWORKRULES_ID"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="10">
<el-form-item label-width="10px" prop="SHIFTDUTYTWO">
<el-select
v-model="data.form.SHIFTDUTYTWO"
@change="fnChangeSchedulingTwo"
>
<el-option
v-for="item in data.schedulingList1"
:key="item.SHIFTWORKRULES_ID"
:label="item.NAME"
:value="item.SHIFTWORKRULES_ID"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label-width="10px">
<el-button @click="data.scheduleVisible = true">
当前班状
</el-button>
</el-form-item>
</el-col>
</el-row>
</el-col>
<el-col :span="12">
<el-row>
<el-col v-show="data.periodList.length > 0" :span="24">
<el-form-item label="当前班次" prop="periodStr">
<el-radio-group
v-model="data.form.periodStr"
@change="fnChangePeriod"
>
<el-radio-button
v-for="(item, index) in data.periodList"
:key="index"
:label="item.periodStr"
>
{{ item.period.WORKSTATUS === "1" ? "上班" : "休班" }}
</el-radio-button>
</el-radio-group>
</el-form-item>
</el-col>
</el-row>
</el-col>
</el-row>
</el-col>
<el-col :span="24">
<el-form-item label="备注" prop="BZ">
<el-input
v-model="data.form.BZ"
:autosize="{
minRows: 3,
}"
type="textarea"
placeholder="请输入"
/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="是否安全管理人员" prop="IS_SAFETY">
<el-radio-group v-model="data.form.IS_SAFETY">
<el-radio :label="1"></el-radio>
<el-radio :label="0"></el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="是否主要负责人" prop="ISHEAD">
<el-radio-group v-model="data.form.ISHEAD">
<el-radio label="1"></el-radio>
<el-radio label="0"></el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="是否部门领导" prop="ISLEADER">
<el-radio-group v-model="data.form.ISLEADER">
<el-radio label="1"></el-radio>
<el-radio label="0"></el-radio>
</el-radio-group>
<!-- <el-tooltip
content="温馨提示:部门领导可以审核离岗申请,查看同部门清单数据"
placement="top-start"
>
<el-icon color="red" size="16" class="ml-10">
<info-filled />
</el-icon>
</el-tooltip>-->
</el-form-item>
<!-- <el-col :span="24">
<el-form-item label="是否在线学习人员">
<el-switch
v-model="data.form.ISSTUDENT"
active-value="true"
inactive-value="false"
active-color="#13ce66"
inactive-color="#ff4949"
/>
</el-form-item>
</el-col>-->
</el-col>
<!-- <el-col :span="12">
<el-form-item label="在职情况" prop="INCUMBENCY">
<el-select v-model="data.form.INCUMBENCY">
<el-option
v-for="item in data.employmentSituationList"
:key="item.DICTIONARIES_ID"
:label="item.NAME"
:value="item.DICTIONARIES_ID"
/>
</el-select>
</el-form-item>
</el-col>-->
<el-col :span="24">
<el-divider content-position="left">身份证</el-divider>
</el-col>
<el-col :span="24">
<el-row>
<el-col :span="15">
<el-row>
<el-col :span="12">
<el-form-item label="身份证(正面)" prop="ID_CARD_FRONT">
<layout-upload
v-model:file-list="data.form.ID_CARD_FRONT"
accept=".jpg,.jpeg,.png"
list-type="picture-card"
>
</layout-upload>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="身份证(背面)" prop="ID_CARD_BACK">
<layout-upload
v-model:file-list="data.form.ID_CARD_BACK"
accept=".jpg,.jpeg,.png"
list-type="picture-card"
>
</layout-upload>
</el-form-item>
</el-col>
</el-row>
</el-col>
<el-col :span="9">
<el-row>
<el-col :span="24">
<el-form-item
label="有效期限(身份证)"
prop="ID_CARD_VALIDITY"
>
2024-03-22 14:59:41 +08:00
<el-date-picker
v-model="data.form.ID_CARD_VALIDITY"
type="daterange"
value-format="YYYY-MM-DD"
format="YYYY-MM-DD"
range-separator="至"
/>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="住址" prop="ID_CARD_ADDRESS">
<el-input
v-model="data.form.ID_CARD_ADDRESS"
placeholder="请输入"
/>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="签发机关" prop="ID_CARD_ORGAN">
<el-input
v-model="data.form.ID_CARD_ORGAN"
placeholder="请输入"
/>
</el-form-item>
</el-col>
</el-row>
</el-col>
</el-row>
</el-col>
<el-col :span="24">
<el-divider content-position="left">驾驶证</el-divider>
</el-col>
<el-col :span="24">
<el-row>
<el-col :span="9">
<el-row>
<el-col>
<el-form-item label="驾驶证" prop="DRIVER_LICENSE">
<layout-upload
v-model:file-list="data.form.DRIVER_LICENSE"
accept=".jpg,.jpeg,.png"
list-type="picture-card"
>
</layout-upload>
</el-form-item>
</el-col>
</el-row>
</el-col>
<el-col :span="15">
<el-row>
<el-col :span="24">
<el-form-item label="证号" prop="DRIVER_LICENSE_NO">
<el-input
v-model="data.form.DRIVER_LICENSE_NO"
placeholder="请输入"
/>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="准驾车型" prop="DRIVING_MODEL_ARR">
<el-select v-model="data.form.DRIVING_MODEL_ARR" multiple>
<el-option
v-for="item in data.drivingModelList"
:key="item.DICTIONARIES_ID"
:label="item.NAME"
:value="item.DICTIONARIES_ID"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="国籍" prop="DRIVING_NATIONALITY">
<el-select v-model="data.form.DRIVING_NATIONALITY">
<el-option
v-for="item in data.nationalityList"
:key="item.NAME"
:label="item.NAME"
:value="item.NAME"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item
label="初次领证日期"
prop="DRIVER_LICENSE_ISSUE_DATE"
>
<el-date-picker
v-model="data.form.DRIVER_LICENSE_ISSUE_DATE"
type="date"
placeholder="选择日期"
value-format="YYYY-MM-DD"
format="YYYY-MM-DD"
/>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="有效期限" prop="DRIVER_LICENSE_VALIDITY">
2024-03-22 14:59:41 +08:00
<el-date-picker
v-model="data.form.DRIVER_LICENSE_VALIDITY"
type="daterange"
value-format="YYYY-MM-DD"
format="YYYY-MM-DD"
range-separator="至"
/>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="签发机关" prop="DRIVER_LICENSE_ORGAN">
<el-input
v-model="data.form.DRIVER_LICENSE_ORGAN"
placeholder="请输入"
/>
</el-form-item>
</el-col>
</el-row>
</el-col>
</el-row>
</el-col>
<el-col :span="24">
<el-divider content-position="left">从业资格证</el-divider>
</el-col>
<el-col :span="24">
<el-row>
<el-col :span="9">
<el-row>
<el-col>
<el-form-item
label="从业资格证"
prop="QUALIFICATION_CERTIFICATE"
>
<layout-upload
v-model:file-list="data.form.QUALIFICATION_CERTIFICATE"
accept=".jpg,.jpeg,.png"
list-type="picture-card"
>
</layout-upload>
</el-form-item>
</el-col>
</el-row>
</el-col>
<el-col :span="15">
<el-row>
<el-col :span="24">
<el-form-item
label="证号"
prop="QUALIFICATION_CERTIFICATE_NO"
>
<el-input
v-model="data.form.QUALIFICATION_CERTIFICATE_NO"
placeholder="请输入"
/>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item
label="从业资格类别"
prop="QUALIFICATION_CERTIFICATE_CATEGORY_ARR"
>
<el-select
v-model="data.form.QUALIFICATION_CERTIFICATE_CATEGORY_ARR"
multiple
>
<el-option
v-for="item in data.qualificationCertificateCategoryList"
:key="item.DICTIONARIES_ID"
:label="item.NAME"
:value="item.DICTIONARIES_ID"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item
label="国籍"
prop="QUALIFICATION_CERTIFICATE_NATIONALITY"
>
<el-select
v-model="data.form.QUALIFICATION_CERTIFICATE_NATIONALITY"
>
<el-option
v-for="item in data.nationalityList"
:key="item.NAME"
:label="item.NAME"
:value="item.NAME"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item
label="初次领证日期"
prop="QUALIFICATION_CERTIFICATE_ISSUE_DATE"
>
<el-date-picker
v-model="data.form.QUALIFICATION_CERTIFICATE_ISSUE_DATE"
type="date"
placeholder="选择日期"
value-format="YYYY-MM-DD"
format="YYYY-MM-DD"
/>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item
label="有效期限"
prop="QUALIFICATION_CERTIFICATE_VALIDITY"
>
2024-03-22 14:59:41 +08:00
<el-date-picker
v-model="data.form.QUALIFICATION_CERTIFICATE_VALIDITY"
type="daterange"
value-format="YYYY-MM-DD"
format="YYYY-MM-DD"
range-separator="至"
/>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item
label="签发机关"
prop="QUALIFICATION_CERTIFICATE_ORGAN"
>
<el-input
v-model="data.form.QUALIFICATION_CERTIFICATE_ORGAN"
placeholder="请输入"
/>
</el-form-item>
</el-col>
</el-row>
</el-col>
</el-row>
</el-col>
<el-col :span="24">
<el-divider content-position="left">人员认证</el-divider>
</el-col>
<el-col>
<el-form-item label="上传人脸照片" prop="faceFile">
<layout-upload
v-model:file-list="data.form.faceFile"
accept=".jpg,.jpeg,.png"
list-type="picture-card"
>
<template #tip>
<div style="line-height: 1.6" class="mt-10">
<div style="color: red; font-size: 12px">
* 图像格式JPEGJPGPNGBMP
</div>
<div style="color: red; font-size: 12px">
* 图像大小不超过3M
</div>
<div style="color: red; font-size: 12px">
*
图像分辨率大于32×32像素小于4096×4096像素人脸占比不低于64×64像素
</div>
<div style="color: red; font-size: 12px">
如无合适照片请该人员登陆秦安APP中进行人脸照片采集
</div>
</div>
</template>
</layout-upload>
</el-form-item>
</el-col>
<!-- <el-col :span="24">
<el-form-item label="证书信息" prop="userCerFile">
<layout-upload
v-model:file-list="data.form.userCerFile"
accept=".jpg,.jpeg,.png"
list-type="picture-card"
:limit="99"
delete-to-server
/>
</el-form-item>
</el-col>-->
</el-row>
</el-form>
<div class="tc mt-10">
<el-button type="primary" @click="fnSubmit"></el-button>
</div>
<scheduling
:id="data.form.SHIFTDUTYTWO"
v-model:visible="data.scheduleVisible"
:info="data.scheduleInfo"
/>
</layout-card>
</template>
<script setup>
import { reactive, ref, watch, watchEffect } from "vue";
import {
getUserCurrentShiftList,
getUserInfo,
getUserScheduling,
getUserView,
setDictionaryDelete,
} from "@/request/enterprise_management.js";
import LayoutDepartment from "@/components/department/index.vue";
import LayoutUpload from "@/components/upload/index.vue";
import LayoutSelectCreate from "@/components/select_create/index.vue";
import { getPostListAll } from "@/request/data_dictionary.js";
import { useRoute, useRouter } from "vue-router";
import Scheduling from "../user/components/scheduling.vue";
import {
addingPrefixToFile,
idCardGetDateAndGender,
image2Base64,
} from "@/assets/js/utils.js";
import {
layoutFnGetDegreeOfEducation,
layoutFnGetDrivingModel,
layoutFnGetDuties,
layoutFnGetEmploymentSituation,
layoutFnGetNation,
layoutFnGetNationality,
layoutFnGetPersonnelTypeTraffic,
layoutFnGetPoliticalLandscape,
layoutFnGetProfessionalTitle,
layoutFnGetQualificationCertificateCategory,
} from "@/assets/js/data_dictionary.js";
import { ElMessageBox, ElMessage } from "element-plus";
import { debounce } from "throttle-debounce";
import {
getVerifyDeduplicationUserIdCard,
getVerifyDuplicateEmail,
} from "@/request/api.js";
import useFormValidate from "@/assets/js/useFormValidate.js";
import {
setPractitionerAdd,
setPractitionerEdit,
} from "@/request/user_practitioner.js";
const route = useRoute();
const router = useRouter();
const { USER_ID } = route.query;
const fnHasEmail = async (rule, value, callback) => {
if (value) {
try {
await getVerifyDuplicateEmail({
EMAIL: value,
PHONE: data.form.PHONE,
});
callback();
} catch {
callback(new Error("邮箱重复"));
}
} else {
callback();
}
};
const fnHasUserIdCard = async (rule, value, callback) => {
if (value) {
const resData = await getVerifyDeduplicationUserIdCard({
USER_ID_CARD: value,
VERIFYUSER_ID: data.form.USER_ID,
});
if (resData?.pd?.USER_ID) callback(new Error("身份证号重复"));
else callback();
} else {
callback();
}
};
const rules = {
USER_ID_CARD: [
{ required: true, message: "身份证号不能为空", trigger: "blur" },
{
pattern:
/^\d{6}(18|19|20)?\d{2}(0[1-9]|1[0-2])(([0-2][1-9])|10|20|30|31)\d{3}(\d|X|x)$/,
message: "请输入正确的身份证号",
trigger: "blur",
},
{ validator: fnHasUserIdCard, trigger: "blur" },
],
NAME: [{ required: true, message: "姓名不能为空", trigger: "blur" }],
PHONE: [
{ required: true, message: "请输入手机号码", trigger: "blur" },
{ min: 11, max: 11, message: "请输入11位手机号码", trigger: "blur" },
{
pattern:
/^(?:(?:\+|00)86)?1(?:(?:3[\d])|(?:4[5-79])|(?:5[0-35-9])|(?:6[5-7])|(?:7[0-8])|(?:8[\d])|(?:9[189]))\d{8}$/,
message: "请输入正确的手机号码",
},
],
EMAIL: [
{ required: false, message: "请输入邮箱", trigger: "blur" },
{
pattern: /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+/,
message: "请输入正确的邮箱",
},
{ validator: fnHasEmail, trigger: "blur" },
],
DEPARTMENT_ID: [{ required: true, message: "请选择部门", trigger: "change" }],
POST_ID: [{ required: true, message: "请选择岗位", trigger: "change" }],
SORT: [
{ required: true, message: "请输入排序", trigger: "blur" },
{ type: "number", message: "请输入数字类型", trigger: "blur" },
],
NATION: [{ required: true, message: "民族不能为空", trigger: "change" }],
SEX: [{ required: true, message: "性别不能为空", trigger: "change" }],
POLITICAL_OUTLOOK: [
{ required: true, message: "政治面貌不能为空", trigger: "change" },
],
DATE_OF_BIRTH: [
{ required: true, message: "请选择出生年月", trigger: "change" },
],
DEGREE_OF_EDUCATION: [
{ required: true, message: "文化程度不能为空", trigger: "change" },
],
PERSONNEL_TYPE: [
{ required: true, message: "人员类型不能为空", trigger: "change" },
],
POST: [{ required: true, message: "职务不能为空", trigger: "change" }],
ENTRY_DATE: [
{ required: true, message: "请选择入职日期", trigger: "change" },
],
WORKING_DATE: [
{ required: true, message: "请选择参加工作日期", trigger: "change" },
],
INCUMBENCY: [
{ required: true, message: "在职情况不能为空", trigger: "change" },
],
TITLE: [{ required: true, message: "职称不能为空", trigger: "change" }],
DUTIES: [{ required: true, message: "职务不能为空", trigger: "change" }],
SHIFTDUTYONE: [{ required: true, message: "请选择排班", trigger: "change" }],
SHIFTDUTYTWO: [{ required: true, message: "请选择排班", trigger: "change" }],
periodStr: [
{ required: true, message: "请选择完整的排班类型", trigger: "change" },
],
2024-03-30 14:57:28 +08:00
ID_CARD_FRONT: [
{
required: true,
message: "请上传身份证(正面)",
trigger: "blur",
},
],
ID_CARD_BACK: [
{
required: true,
message: "请上传身份证(反面)",
trigger: "blur",
},
],
ID_CARD_VALIDITY: [
2024-03-30 14:57:28 +08:00
{
required: true,
message: "请选择有效期限(身份证)",
trigger: "change",
},
],
ID_CARD_ADDRESS: [
{
required: true,
message: "住址不能为空",
trigger: "change",
},
],
ID_CARD_ORGAN: [
{
required: true,
message: "签发机关不能为空",
trigger: "change",
},
],
DRIVER_LICENSE: [
{
required: true,
message: "驾驶证不能为空",
trigger: "change",
},
],
DRIVER_LICENSE_NO: [
{
required: true,
message: "证号不能为空",
trigger: "change",
},
],
DRIVING_MODEL_ARR: [
{
required: true,
message: "准驾车型不能为空",
trigger: "change",
},
],
DRIVING_NATIONALITY: [
{
required: true,
message: "国籍不能为空",
trigger: "change",
},
],
DRIVER_LICENSE_ISSUE_DATE: [
{
required: true,
message: "初次领证日期不能为空",
trigger: "change",
},
],
DRIVER_LICENSE_VALIDITY: [
2024-03-30 14:57:28 +08:00
{
required: true,
message: "请选择有效期限",
trigger: "change",
},
],
DRIVER_LICENSE_ORGAN: [
{
required: true,
message: "签发机关不能为空",
trigger: "blur",
},
],
QUALIFICATION_CERTIFICATE: [
{
required: true,
message: "从业资格证照片不能为空",
trigger: "change",
},
],
QUALIFICATION_CERTIFICATE_NATIONALITY: [
{
required: true,
message: "国籍不能为空",
trigger: "change",
},
],
QUALIFICATION_CERTIFICATE_NO: [
{
required: true,
message: "证号不能为空",
trigger: "change",
},
],
QUALIFICATION_CERTIFICATE_ARR: [
{
required: true,
message: "准驾车型不能为空",
trigger: "change",
},
],
QUALIFICATION_CERTIFICATE_ISSUE_DATE: [
{
required: true,
message: "初次领证日期不能为空",
trigger: "change",
},
],
QUALIFICATION_CERTIFICATE_VALIDITY: [
2024-03-30 14:57:28 +08:00
{
required: true,
message: "请选择有效期限",
trigger: "change",
},
],
QUALIFICATION_CERTIFICATE_ORGAN: [
{
required: true,
message: "签发机关不能为空",
trigger: "blur",
},
],
faceFile: [
{
required: true,
message: "人员认证照片不能为空",
trigger: "blur",
},
],
2024-03-22 14:59:41 +08:00
};
const formRef = ref(null);
const data = reactive({
roleList: [],
postList: [],
schedulingList: [],
schedulingList1: [],
periodList: [],
nationList: [],
politicalLandscapeList: [],
degreeOfEducationList: [],
personnelTypeList: [],
dutiesList: [],
professionalTitleList: [],
jobTypeList: [],
employmentSituationList: [],
drivingModelList: [],
nationalityList: [],
qualificationCertificateCategoryList: [],
allUser: 0,
USERS_NUM: 0,
oldPostId: "",
oldDepartId: "",
form: {
USERNAME: "",
USER_ID_CARD: "",
NAME: "",
PHONE: "",
CARDNO: "",
DEPARTMENT_ID: "",
POST_ID: "",
SORT: "",
EMAIL: "",
SHIFTDUTYONE: "",
SHIFTDUTYTWO: "",
periodStr: "",
BZ: "",
IS_SAFETY: 0,
ISHEAD: "0",
ISLEADER: "0",
ISSTUDENT: "true",
NATION: "",
SEX: "",
POLITICAL_OUTLOOK: "",
DATE_OF_BIRTH: "",
DEGREE_OF_EDUCATION: "",
PERSONNEL_TYPE: "",
DUTIES: "",
TITLE: "",
ENTRY_DATE: "",
WORKING_DATE: "",
INCUMBENCY: "",
faceFile: [],
userCerFile: [],
// 身份证照片
ID_CARD_FRONT: "",
ID_CARD_BACK: "",
// 身份证有效期
ID_CARD_VALIDITY: [],
ID_CARD_VALIDITY_START: "",
ID_CARD_VALIDITY_END: "",
// 身份证住址
ID_CARD_ADDRESS: "",
// 身份证签发机关
ID_CARD_ORGAN: "",
// 驾驶证照片
DRIVER_LICENSE: "",
// 驾驶证号
DRIVER_LICENSE_NO: "",
// 准驾车型
DRIVING_MODEL_ARR: [],
DRIVING_MODEL: "",
// 国籍
DRIVING_NATIONALITY: "中国",
// 初次领证日期
DRIVER_LICENSE_ISSUE_DATE: "",
// 驾驶证有效期
DRIVER_LICENSE_VALIDITY: [],
// 驾驶证有效期(起始)
DRIVER_LICENSE_VALIDITY_START: "",
// 驾驶证有效期(截止)
DRIVER_LICENSE_VALIDITY_END: "",
// 驾驶证签发机关
DRIVER_LICENSE_ORGAN: "",
// 道路运输从业人员从业资格证照片
QUALIFICATION_CERTIFICATE: "",
// 道路运输从业人员从业资格证号
QUALIFICATION_CERTIFICATE_NO: "",
// 从业资格类别
QUALIFICATION_CERTIFICATE_CATEGORY_ARR: [],
QUALIFICATION_CERTIFICATE_CATEGORY: "",
// 道路运输从业人员从业资格证号
QUALIFICATION_CERTIFICATE_NATIONALITY: "中国",
// 初次领证日期
QUALIFICATION_CERTIFICATE_ISSUE_DATE: "",
// 从业资格证有效期
QUALIFICATION_CERTIFICATE_VALIDITY: [],
// 从业资格证有效期(起始)
QUALIFICATION_CERTIFICATE_VALIDITY_START: "",
// 从业资格证有效期(截止)
QUALIFICATION_CERTIFICATE_VALIDITY_END: "",
// 道路运输从业人员从业资格证签发机关
QUALIFICATION_CERTIFICATE_ORGAN: "",
},
scheduleInfo: {
WORKSTATUS: "",
DURATION: "",
WORKPERIOD: "",
},
scheduleVisible: false,
});
const fnGetData = async () => {
if (!USER_ID) return;
const resData = await getUserView({ USER_ID });
const form = resData.pd;
form.PASSWORD = "Aa@123456";
form.periodStr = resData.periodStr;
form.ISSTUDENT = resData.pd.ISSTUDENT.toString();
if (form.USERAVATARURL_CONVERT)
form.faceFile = [
{ url: form.USERAVATARPREFIX + form.USERAVATARURL_CONVERT },
];
data.scheduleInfo = resData.period;
data.oldPostId = form.POST_ID;
data.oldDepartId = form.DEPARTMENT_ID;
form.userCerFile = addingPrefixToFile(resData.userCerList);
data.form = { ...data.form, ...form };
};
fnGetData();
const fnGetUserRole = async () => {
const resData = await getUserInfo();
data.roleList = resData.roleList;
data.allUser = resData.allUser;
data.USERS_NUM = resData.USERS_NUM.USERS_NUM;
};
fnGetUserRole();
const fnGetPost = async (DEPARTMENT_ID) => {
const resData = await getPostListAll({ DEPARTMENT_ID });
data.postList = resData.postList;
};
const fnGetUserScheduling = async (PARENTID, list) => {
const resData = await getUserScheduling({ PARENTID });
data[list] = resData.varList;
};
fnGetUserScheduling("0", "schedulingList");
const fnChangeSchedulingOne = () => {
data.form.SHIFTDUTYTWO = "";
data.periodList = [];
data.scheduleInfo = {
WORKSTATUS: "",
DURATION: "",
WORKPERIOD: "",
};
data.form.periodStr = "";
};
const fnChangeSchedulingTwo = () => {
data.scheduleInfo = {
WORKSTATUS: "",
DURATION: "",
WORKPERIOD: "",
};
data.form.periodStr = "";
};
const fnGetUserCurrentShiftList = async (SHIFTWORKRULES_ID) => {
const resData = await getUserCurrentShiftList({ SHIFTWORKRULES_ID });
data.periodList = resData.varList;
};
const fnChangePeriod = (event) => {
for (let i = 0; i < data.periodList.length; i++) {
if (data.periodList[i].periodStr === event) {
data.scheduleInfo = data.periodList[i].period;
break;
}
}
};
const fnChangeIdCard = () => {
const { sex, date } = idCardGetDateAndGender(data.form.USER_ID_CARD);
data.form.SEX = sex;
data.form.DATE_OF_BIRTH = date;
data.form.DRIVER_LICENSE_NO = data.form.USER_ID_CARD;
data.form.QUALIFICATION_CERTIFICATE_NO = data.form.USER_ID_CARD;
};
const fnGetLevels = async () => {
const { value: nationList } = await layoutFnGetNation();
data.nationList = nationList;
const { value: politicalLandscapeList } =
await layoutFnGetPoliticalLandscape();
data.politicalLandscapeList = politicalLandscapeList;
const { value: degreeOfEducationList } = await layoutFnGetDegreeOfEducation();
data.degreeOfEducationList = degreeOfEducationList;
const { value: personnelTypeList } = await layoutFnGetPersonnelTypeTraffic({
DICTIONARIES_ID: "0b62f92b0b624aab8e89a77304a64d5e",
BIANMA: "TRAFFIC_EMPLOYMENT_DRIVE",
});
data.personnelTypeList = personnelTypeList;
const { value: dutiesList } = await layoutFnGetDuties();
data.dutiesList = dutiesList;
const { value: professionalTitleList } = await layoutFnGetProfessionalTitle();
data.professionalTitleList = professionalTitleList;
const { value: employmentSituationList } =
await layoutFnGetEmploymentSituation();
data.employmentSituationList = employmentSituationList;
const { value: drivingModelList } = await layoutFnGetDrivingModel();
data.drivingModelList = drivingModelList;
const { value: nationalityList } = await layoutFnGetNationality();
data.nationalityList = nationalityList;
const { value: qualificationCertificateCategoryList } =
await layoutFnGetQualificationCertificateCategory();
data.qualificationCertificateCategoryList =
qualificationCertificateCategoryList;
data.qualificationCertificateCategoryList.forEach((item) => {
item.NAME = "" + item.BIANMA + " " + item.NAME;
});
};
fnGetLevels();
const fnDictionaryDelete = debounce(
1000,
async (index, DICTTYPE) => {
let DICTIONARIES_ID = "";
let msgTitle = "";
if (DICTTYPE === "POSITION") {
DICTIONARIES_ID = data.dutiesList[index].DICTIONARIES_ID;
msgTitle = "职务:" + data.dutiesList[index].NAME;
} else if (DICTTYPE === "JOB_TITLE") {
DICTIONARIES_ID = data.professionalTitleList[index].DICTIONARIES_ID;
msgTitle = "职称:" + data.professionalTitleList[index].NAME;
}
await ElMessageBox.confirm(
"删除此分类会同时删除其他相关已编辑过的人员信息中的分类设置,确定要删除(" +
msgTitle +
")吗?",
{ type: "warning" }
);
await setDictionaryDelete({ DICTIONARIES_ID, DICTTYPE });
if (DICTTYPE === "POSITION") {
data.dutiesList.splice(index, 1);
} else if (DICTTYPE === "JOB_TITLE") {
data.professionalTitleList.splice(index, 1);
}
},
{
atBegin: true,
}
);
watchEffect(() => {
if (data.form.DEPARTMENT_ID) fnGetPost(data.form.DEPARTMENT_ID);
if (data.form.SHIFTDUTYONE)
fnGetUserScheduling(data.form.SHIFTDUTYONE, "schedulingList1");
if (data.form.SHIFTDUTYTWO) fnGetUserCurrentShiftList(data.form.SHIFTDUTYTWO);
});
const stop = watch(
() => data.form.ISSTUDENT,
(val) => {
if (val === "true") {
fnGetLevels();
stop && stop();
}
}
);
const fnSubmit = debounce(
1000,
async () => {
await useFormValidate(formRef);
data.form.WORKSTATUS = data.scheduleInfo.WORKSTATUS;
data.form.DURATION = data.scheduleInfo.DURATION;
data.form.WORKPERIOD = data.scheduleInfo.WORKPERIOD;
if (fnFindValueInList("dutiesList", data.form.DUTIES)) {
data.form.letDutiesType = "select";
data.form.DUTIESValue = "";
} else {
data.form.letDutiesType = "value";
data.form.DUTIESValue = data.form.DUTIES;
}
if (fnFindValueInList("professionalTitleList", data.form.TITLE)) {
data.form.letTitleType = "select";
data.form.letTitleValue = "";
} else {
data.form.letTitleType = "value";
data.form.letTitleValue = data.form.TITLE;
}
if (data.form.faceFile?.[0]?.raw) {
const resData = await image2Base64(data.form.faceFile[0].url);
data.form.USERAVATARPREFIX = resData.substring(
0,
resData.indexOf("base64,") + 7
);
data.form.USERAVATARURL = resData.substring(
resData.indexOf("base64,") + 7
);
} else {
data.form.USERAVATARPREFIX = "";
data.form.USERAVATARURL = "";
}
data.form.ID_CARD_VALIDITY_START = data.form.ID_CARD_VALIDITY[0] || "";
data.form.ID_CARD_VALIDITY_END = data.form.ID_CARD_VALIDITY[1] || "";
data.form.DRIVING_MODEL = data.form.DRIVING_MODEL_ARR.join(",");
data.form.DRIVER_LICENSE_VALIDITY_START =
data.form.DRIVER_LICENSE_VALIDITY[0] || "";
data.form.DRIVER_LICENSE_VALIDITY_END =
data.form.DRIVER_LICENSE_VALIDITY[1] || "";
data.form.QUALIFICATION_CERTIFICATE_CATEGORY =
data.form.QUALIFICATION_CERTIFICATE_CATEGORY_ARR.join(",");
data.form.QUALIFICATION_CERTIFICATE_VALIDITY_START =
data.form.QUALIFICATION_CERTIFICATE_VALIDITY[0] || "";
data.form.QUALIFICATION_CERTIFICATE_VALIDITY_END =
data.form.QUALIFICATION_CERTIFICATE_VALIDITY[1] || "";
const formData = new FormData();
Object.keys(data.form).forEach((key) => {
formData.append(key, data.form[key]);
});
formData.delete("ID_CARD_VALIDITY");
formData.delete("DRIVING_MODEL_ARR");
formData.delete("DRIVER_LICENSE_VALIDITY");
formData.delete("QUALIFICATION_CERTIFICATE_CATEGORY_ARR");
formData.delete("QUALIFICATION_CERTIFICATE_VALIDITY");
data.form.ID_CARD_FRONT?.[0]?.raw &&
formData.append("imgFiles", data.form.ID_CARD_FRONT[0].raw);
data.form.ID_CARD_BACK?.[0]?.raw &&
formData.append("imgFiles", data.form.ID_CARD_BACK[0].raw);
data.form.DRIVER_LICENSE?.[0]?.raw &&
formData.append("imgFiles", data.form.DRIVER_LICENSE[0].raw);
data.form.QUALIFICATION_CERTIFICATE?.[0]?.raw &&
formData.append("imgFiles", data.form.QUALIFICATION_CERTIFICATE[0].raw);
if (!USER_ID) {
if (data.allUser > data.USERS_NUM) {
ElMessage.error("已超过可创建用户数量");
return;
}
await setPractitionerAdd(formData);
} else {
if (
data.oldDepartId !== data.form.DEPARTMENT_ID ||
data.oldPostId !== data.form.POST_ID
) {
await ElMessageBox.confirm(
"如变更了部门或岗位,保存后将删除该用户所有清单,是否确定?",
{ type: "warning" }
);
data.form.OPERATIONTYPE = 1;
}
await setPractitionerEdit(formData);
}
ElMessage.success("操作成功");
router.back();
},
{ atBegin: true }
);
const fnFindValueInList = (list, value) => {
let existence = false;
for (let i = 0; i < data[list].length; i++) {
if (data[list][i].DICTIONARIES_ID === value) {
existence = true;
break;
}
}
return existence;
};
</script>
<style scoped lang="scss"></style>