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

845 lines
29 KiB
Vue
Raw Normal View History

2024-01-06 17:44:23 +08:00
<template>
<layout-card>
<el-form
ref="formRef"
:rules="rules"
:model="data.form"
label-width="130px"
>
<el-row :gutter="20">
<el-col :span="12">
<el-row>
<el-col :span="24">
<el-form-item label="角色" prop="ROLE_ID">
<el-select
v-model="data.form.ROLE_ID"
:disabled="data.form.ISMAIN === '1'"
>
<template v-for="item in data.roleList" :key="item.role_ID">
<el-option
v-if="item.ismain !== '1'"
:label="item.role_NAME"
:value="item.role_ID"
/>
</template>
</el-select>
</el-form-item>
</el-col>
<el-col :span="24">
<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="24">
<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="24">
<el-form-item label="用户名" prop="USERNAME">
<el-input
:disabled="!!USER_ID"
v-model="data.form.USERNAME"
placeholder="请输入"
/>
</el-form-item>
</el-col>
2024-01-25 14:22:04 +08:00
<el-col :span="24">
<el-form-item label="定位卡号" prop="CARDNO">
<el-input
v-model="data.form.CARDNO"
maxlength="4"
minlength="4"
show-word-limit
placeholder="请输入"
/>
</el-form-item>
</el-col>
2024-01-06 17:44:23 +08:00
<el-col :span="24">
<el-form-item label="姓名" prop="NAME">
<el-input v-model="data.form.NAME" placeholder="请输入" />
</el-form-item>
</el-col>
2024-01-10 18:01:56 +08:00
<el-col :span="24">
<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>
2024-01-06 17:44:23 +08:00
<el-col :span="24">
<el-form-item label="部门排序" prop="SORT">
<el-input
v-model.number="data.form.SORT"
placeholder="请输入"
/>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="邮箱" prop="EMAIL">
<el-input v-model="data.form.EMAIL" placeholder="请输入" />
</el-form-item>
</el-col>
<el-col :span="24">
<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="24" v-show="data.periodList.length > 0">
<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-col :span="24">
<el-form-item label="备注" prop="BZ">
<el-input
:autosize="{
minRows: 3,
}"
v-model="data.form.BZ"
type="textarea"
placeholder="请输入"
/>
</el-form-item>
</el-col>
<el-col :span="24">
<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="24">
<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="24">
<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>
<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-row>
</el-col>
<el-col :span="12" v-if="data.form.ISSTUDENT === 'true'">
<el-row :gutter="20">
<el-col :span="24">
<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="12">
<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="12">
<el-form-item label="性别" prop="SEX">
<el-select v-model="data.form.SEX">
<el-option
2024-01-10 18:01:56 +08:00
v-for="item in [
{ NAME: '男', DICTIONARIES_ID: '1' },
{ NAME: '女', DICTIONARIES_ID: '0' },
]"
2024-01-06 17:44:23 +08:00
:key="item.DICTIONARIES_ID"
:label="item.NAME"
:value="item.DICTIONARIES_ID"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<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="12">
<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="12">
<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="12">
<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="12">
<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="12">
<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="12">
<el-form-item label="工种" prop="TYPE_OF_WORK">
<layout-select-create
v-model="data.form.TYPE_OF_WORK"
:list="data.jobTypeList"
@delete-option="fnDictionaryDelete($event, 'WORK_TYPE')"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<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="12">
<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="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-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-col>
</el-row>
</el-form>
<div class="tc mt-10">
<el-button type="primary" @click="fnSubmit"></el-button>
</div>
<scheduling
v-model:visible="data.scheduleVisible"
:info="data.scheduleInfo"
:id="data.form.SHIFTDUTYTWO"
/>
</layout-card>
</template>
<script setup>
import { reactive, ref, watch, watchEffect } from "vue";
import {
getUserCurrentShiftList,
getUserInfo,
getUserScheduling,
2024-01-08 14:31:18 +08:00
getUserView,
2024-01-06 17:44:23 +08:00
setDictionaryDelete,
2024-01-08 14:31:18 +08:00
setUserAdd,
setUserEdit,
2024-01-06 17:44:23 +08:00
} 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 "./components/scheduling.vue";
import { InfoFilled } from "@element-plus/icons-vue";
2024-01-08 14:31:18 +08:00
import {
addingPrefixToFile,
idCardGetDateAndGender,
image2Base64,
} from "@/assets/js/utils.js";
2024-01-06 17:44:23 +08:00
import {
layoutFnGetDegreeOfEducation,
layoutFnGetDuties,
layoutFnGetEmploymentSituation,
layoutFnGetJobType,
layoutFnGetNation,
layoutFnGetPersonnelType,
layoutFnGetPoliticalLandscape,
layoutFnGetProfessionalTitle,
} from "@/assets/js/data_dictionary.js";
import { ElMessageBox, ElMessage } from "element-plus";
import { debounce } from "throttle-debounce";
import {
getVerifyDeduplicationUser,
getVerifyDuplicateEmail,
2024-01-08 14:31:18 +08:00
setUploadImg,
2024-01-06 17:44:23 +08:00
} from "@/request/api.js";
import useFormValidate from "@/assets/js/useFormValidate.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,
USERNAME: data.form.USERNAME,
});
callback();
} catch {
callback(new Error("邮箱重复"));
}
} else {
callback();
}
};
const fnHasUser = async (rule, value, callback) => {
if (value) {
const resData = await getVerifyDeduplicationUser({
USERNAME: value,
VERIFYUSER_ID: data.form.USER_ID,
});
if (resData?.pd?.USER_ID) callback(new Error("用户名重复"));
else callback();
} else {
callback();
}
};
const rules = {
NAME: [{ required: true, message: "姓名不能为空", trigger: "blur" }],
USERNAME: [
{ required: true, message: "请输入手机号码", trigger: "blur" },
{ min: 11, max: 11, message: "请输入11位手机号码", trigger: "blur" },
{
pattern: /^(1[3-9][0-9])\d{8}$/,
message: "请输入正确的手机号码",
},
{ validator: fnHasUser, trigger: "blur" },
],
EMAIL: [
{ required: false, message: "请输入邮箱", trigger: "blur" },
{
pattern: /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+/,
message: "请输入正确的邮箱",
},
{ validator: fnHasEmail, trigger: "blur" },
],
ROLE_ID: [{ required: true, message: "请选择角色", trigger: "change" }],
DEPARTMENT_ID: [{ required: true, message: "请选择部门", trigger: "change" }],
DUTIES_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" },
],
POST: [{ required: true, message: "职务不能为空", trigger: "change" }],
TYPE_OF_WORK: [
{ required: true, message: "工种不能为空", trigger: "change" },
],
ENTRY_DATE: [
{ required: true, message: "请选择入职日期", trigger: "change" },
],
2024-01-25 14:22:04 +08:00
CARDNO: [
{ required: true, message: "请输入定位卡号(4位纯数字)", trigger: "blur" },
{
pattern: /^-?[0-9]\d*$/,
message: "请输入正确的定位卡号(4位纯数字)",
trigger: "blur",
},
],
2024-01-06 17:44:23 +08:00
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" }],
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",
},
],
SHIFTDUTYONE: [{ required: true, message: "请选择排班", trigger: "change" }],
SHIFTDUTYTWO: [{ required: true, message: "请选择排班", trigger: "change" }],
periodStr: [
{ required: true, message: "请选择完整的排班类型", trigger: "change" },
],
};
const formRef = ref(null);
const data = reactive({
roleList: [],
postList: [],
schedulingList: [],
schedulingList1: [],
periodList: [],
nationList: [],
politicalLandscapeList: [],
degreeOfEducationList: [],
personnelTypeList: [],
dutiesList: [],
professionalTitleList: [],
jobTypeList: [],
employmentSituationList: [],
allUser: 0,
USERS_NUM: 0,
2024-01-08 14:31:18 +08:00
oldPostId: "",
oldDepartId: "",
2024-01-06 17:44:23 +08:00
form: {
ROLE_ID: "",
2024-01-25 14:22:04 +08:00
CARDNO: "",
2024-01-06 17:44:23 +08:00
DEPARTMENT_ID: "",
POST_ID: "",
USERNAME: "",
NAME: "",
SORT: "",
EMAIL: "",
SHIFTDUTYONE: "",
SHIFTDUTYTWO: "",
periodStr: "",
BZ: "",
IS_SAFETY: 0,
ISHEAD: "0",
ISLEADER: "0",
ISSTUDENT: "false",
USER_ID_CARD: "",
NATION: "",
SEX: "",
POLITICAL_OUTLOOK: "",
DATE_OF_BIRTH: "",
DEGREE_OF_EDUCATION: "",
PERSONNEL_TYPE: "",
DUTIES: "",
TITLE: "",
TYPE_OF_WORK: "",
ENTRY_DATE: "",
WORKING_DATE: "",
INCUMBENCY: "",
faceFile: [],
userCerFile: [],
},
scheduleInfo: {
WORKSTATUS: "",
DURATION: "",
WORKPERIOD: "",
},
scheduleVisible: false,
});
2024-01-08 14:31:18 +08:00
const fnGetData = async () => {
if (!USER_ID) return;
const resData = await getUserView({ USER_ID });
const form = resData.pd;
form.PASSWORD = "666666";
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();
2024-01-06 17:44:23 +08:00
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;
};
2024-01-08 14:31:18 +08:00
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 layoutFnGetPersonnelType();
data.personnelTypeList = personnelTypeList;
const { value: dutiesList } = await layoutFnGetDuties();
data.dutiesList = dutiesList;
const { value: professionalTitleList } = await layoutFnGetProfessionalTitle();
data.professionalTitleList = professionalTitleList;
const { value: jobTypeList } = await layoutFnGetJobType();
data.jobTypeList = jobTypeList;
const { value: employmentSituationList } =
await layoutFnGetEmploymentSituation();
data.employmentSituationList = employmentSituationList;
2024-01-06 17:44:23 +08:00
};
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;
} else if (DICTTYPE === "WORK_TYPE") {
DICTIONARIES_ID = data.jobTypeList[index].DICTIONARIES_ID;
msgTitle = "工种:" + data.jobTypeList[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);
} else if (DICTTYPE === "WORK_TYPE") {
data.jobTypeList.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") {
2024-01-08 14:31:18 +08:00
fnGetLevels();
2024-01-06 17:44:23 +08:00
stop && stop();
}
}
);
const fnSubmit = debounce(
1000,
async () => {
await useFormValidate(formRef);
const form = { ...data.form };
form.WORKSTATUS = data.scheduleInfo.WORKSTATUS;
form.DURATION = data.scheduleInfo.DURATION;
form.WORKPERIOD = data.scheduleInfo.WORKPERIOD;
2024-01-08 14:31:18 +08:00
if (fnFindValueInList("dutiesList", form.DUTIES)) {
form.letDutiesType = "select";
form.DUTIESValue = "";
} else {
form.letDutiesType = "value";
form.DUTIESValue = form.DUTIES;
}
if (fnFindValueInList("professionalTitleList", form.TITLE)) {
form.letTitleType = "select";
form.letTitleValue = "";
} else {
form.letTitleType = "value";
form.letTitleValue = form.TITLE;
}
if (fnFindValueInList("jobTypeList", form.TYPE_OF_WORK)) {
form.letTypeOfWorkType = "select";
form.letTypeOfWorkValue = "";
} else {
form.letTypeOfWorkType = "value";
form.letTypeOfWorkValue = form.TYPE_OF_WORK;
}
if (data.form.faceFile?.[0]?.raw) {
const resData = await image2Base64(data.form.faceFile[0].url);
form.USERAVATARPREFIX = resData.substring(
0,
resData.indexOf("base64,") + 7
);
form.USERAVATARURL = resData.substring(resData.indexOf("base64,") + 7);
}
2024-01-06 17:44:23 +08:00
if (!USER_ID) {
2024-01-08 14:31:18 +08:00
if (data.allUser > data.USERS_NUM) {
2024-01-06 17:44:23 +08:00
ElMessage.error("已超过可创建用户数量");
return;
}
2024-01-08 14:31:18 +08:00
const resData = await setUserAdd({ ...form });
if (data.form.ISSTUDENT === "true") await fnUploadImage(resData.USER_ID);
2024-01-06 17:44:23 +08:00
} else {
2024-01-08 14:31:18 +08:00
if (
data.oldDepartId !== data.form.DEPARTMENT_ID ||
data.oldPostId !== data.form.POST_ID
) {
await ElMessageBox.confirm(
"如变更了部门或岗位,保存后将删除该用户所有清单,是否确定?",
{ type: "warning" }
);
form.OPERATIONTYPE = 1;
}
await setUserEdit({ ...form });
if (data.form.ISSTUDENT === "true")
await fnUploadImage(data.form.USER_ID);
2024-01-06 17:44:23 +08:00
}
ElMessage.success("操作成功");
router.back();
},
{ atBegin: true }
);
2024-01-08 14:31:18 +08:00
const fnUploadImage = async (USER_ID) => {
const formData = new FormData();
for (let i = 0; i < data.form.userCerFile.length; i++) {
if (data.form.userCerFile[i].raw)
formData.append("FFILE", data.form.userCerFile[i].raw);
}
formData.append("FOREIGN_KEY", USER_ID);
formData.append("TYPE", 18);
await setUploadImg(formData);
};
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;
};
2024-01-06 17:44:23 +08:00
</script>
<style scoped lang="scss"></style>