forked from integrated_whb/integrated_whb_vue
Merge remote-tracking branch 'origin/dev' into dev
commit
037e723d71
2
.env
2
.env
|
@ -1,4 +1,4 @@
|
|||
VITE_BASE_URL=http://192.168.0.49:8093/
|
||||
VITE_BASE_URL=http://192.168.0.55:8093/
|
||||
VITE_PROXY=/api/
|
||||
VITE_FILE_URL=https://file.zcloudchina.com/YTHFile
|
||||
VITE_TEMPLATE_URL=https://qaaq.qhdsafety.com/file/
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
"axios": "^1.6.3",
|
||||
"dayjs": "^1.11.10",
|
||||
"echarts": "^5.4.3",
|
||||
"element-plus": "^2.4.4",
|
||||
"element-plus": "^2.6.1",
|
||||
"html2canvas": "^1.4.1",
|
||||
"jspdf": "^2.5.1",
|
||||
"lodash-es": "^4.17.21",
|
||||
|
|
|
@ -11,6 +11,8 @@ import {
|
|||
getIndustryType,
|
||||
getPostType,
|
||||
getTrainingLevel,
|
||||
getLevelsByObject,
|
||||
getLevelCustom,
|
||||
} from "@/request/data_dictionary.js";
|
||||
import { ref } from "vue";
|
||||
|
||||
|
@ -83,10 +85,15 @@ export const layoutFnGetDegreeOfEducation = async () => {
|
|||
return ref(resData.list);
|
||||
};
|
||||
// 人员类型
|
||||
export const layoutFnGetPersonnelType = async () => {
|
||||
const resData = await getLevels({
|
||||
DICTIONARIES_ID: "0b62f92b0b624aab8e89a77304a64d5e",
|
||||
});
|
||||
// export const layoutFnGetPersonnelType = async () => {
|
||||
// const resData = await getLevels({
|
||||
// DICTIONARIES_ID: "0b62f92b0b624aab8e89a77304a64d5e",
|
||||
// });
|
||||
// return ref(resData.list);
|
||||
// };
|
||||
// 人员类型(交通版)
|
||||
export const layoutFnGetPersonnelTypeTraffic = async (params) => {
|
||||
const resData = await getLevelsByObject(params);
|
||||
return ref(resData.list);
|
||||
};
|
||||
// 签字人员类型
|
||||
|
@ -262,3 +269,28 @@ export const layoutFnGetTestQuestionLabels = async () => {
|
|||
});
|
||||
return ref(resData.list);
|
||||
};
|
||||
|
||||
// 准驾车型
|
||||
export const layoutFnGetDrivingModel = async () => {
|
||||
const resData = await getLevels({
|
||||
DICTIONARIES_ID: "b41e247057334789b60bdf3fe6d8d6ba",
|
||||
});
|
||||
return ref(resData.list);
|
||||
};
|
||||
|
||||
// 国籍
|
||||
export const layoutFnGetNationality = async () => {
|
||||
const resData = await getLevels({
|
||||
DICTIONARIES_ID: "3b614b43e8814f51a3492f2fdbc9a415",
|
||||
});
|
||||
return ref(resData.list);
|
||||
};
|
||||
|
||||
// 从业资格类别
|
||||
export const layoutFnGetQualificationCertificateCategory = async () => {
|
||||
const resData = await getLevelCustom({
|
||||
DICTIONARIES_ID: "ed38fa5f78c64e6d906d2bad0d72bd63",
|
||||
LEVEL: 3,
|
||||
});
|
||||
return ref(resData.list);
|
||||
};
|
||||
|
|
|
@ -280,6 +280,20 @@ export function addingPrefixToFile(list) {
|
|||
}
|
||||
return list;
|
||||
}
|
||||
/**
|
||||
* @description 附件添加前缀
|
||||
* @param {string} filepath 附件地址
|
||||
* @return {Array} 添加完的数组
|
||||
**/
|
||||
export function addingPrefixFile(filepath) {
|
||||
const list = [];
|
||||
const FILE_URL = import.meta.env.VITE_FILE_URL;
|
||||
const file = {};
|
||||
file.url = FILE_URL + filepath;
|
||||
file.name = getFileName(filepath);
|
||||
list.push(file);
|
||||
return list;
|
||||
}
|
||||
|
||||
/**
|
||||
* @description 验证重复选择
|
||||
|
|
|
@ -10,6 +10,18 @@ export const getLevels = (params) =>
|
|||
...params,
|
||||
});
|
||||
// 获取数据字典
|
||||
export const getLevelsByObject = (params) =>
|
||||
post("/dictionaries/getDictList", {
|
||||
loading: false,
|
||||
...params,
|
||||
});
|
||||
// 获取数据字典
|
||||
export const getLevelCustom = (params) =>
|
||||
post("/dictionaries/getLevelCustom", {
|
||||
loading: false,
|
||||
...params,
|
||||
});
|
||||
// 获取数据字典
|
||||
export const getLevelsCorp = (params) =>
|
||||
post("/dictionariesCorp/getLevels", {
|
||||
loading: false,
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import { post, upload } from "@/request/axios.js";
|
||||
import { getLevelsByParentId } from "@/request/data_dictionary.js";
|
||||
import { getLevelsByObject, getLevelsByParentId } from "@/request/data_dictionary.js";
|
||||
import { ref } from "vue";
|
||||
|
||||
export const getSecurityNoticeList = (params) =>
|
||||
|
@ -16,6 +16,7 @@ export const addSecurityNotice = (params) =>
|
|||
upload("/securitynotice/add", params); // 添加安全通知
|
||||
export const getUserListAll = (params) => post("/user/listSelect", params);
|
||||
|
||||
// 通知等级
|
||||
export const layoutFnGetNotificationsClassification = async () => {
|
||||
const resData = await getLevelsByParentId({
|
||||
parentId: "aaecb47d95524b84904809671e48a777",
|
||||
|
@ -23,9 +24,11 @@ export const layoutFnGetNotificationsClassification = async () => {
|
|||
return ref(resData);
|
||||
};
|
||||
|
||||
// 从业类型(人员类型)
|
||||
export const layoutFnGetSIGNEDSTATUSClassification = async () => {
|
||||
const resData = await getLevelsByParentId({
|
||||
parentId: "bbecb47d95524b84904809671e48a777",
|
||||
const resData = await getLevelsByObject({
|
||||
DICTIONARIES_ID: '0b62f92b0b624aab8e89a77304a64d5e',
|
||||
BIANMA: 'TRAFFIC_EMPLOYMENT'
|
||||
});
|
||||
return ref(resData);
|
||||
};
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
import { post } from "@/request/axios.js";
|
||||
export const getSafetyDrivingLogList = (params) =>
|
||||
post("/drivinglog/listForSafetyDrivingLog", params); // 行车日志列表
|
||||
post("/waybillregistration/listForSecurityWaybillre", params); // 行车日志列表
|
||||
|
||||
export const setDrivingLogDelete = (params) =>
|
||||
post("/drivinglog/delete", params); // 行车日志删除
|
||||
post("/waybillregistration/delete", params); // 行车日志删除
|
||||
|
||||
export const getSafetyDrivingLogView = (params) =>
|
||||
post("/drivinglog/goEdit", params); // 安全例会详情
|
||||
post("/waybillregistration/getDetail", params); // 安全例会详情
|
||||
|
|
|
@ -46,6 +46,33 @@ export const getClassManagementStudentExamRecordsList = (params) =>
|
|||
post("/stageexam/list", params); // 班级管理学员考试记录列表
|
||||
export const getClassManagementStudentExamRecordsView = (params) =>
|
||||
post("/stageexam/findExam", params); // 班级管理学员考试记录查看
|
||||
|
||||
export const getTrainingProgressList = (params) =>
|
||||
post("/student/studentList", params); // 查询进度列表
|
||||
|
||||
export const getTrainingProgressListExportStudentRecords = (params) =>
|
||||
post("/student/derivedRecord", params); // 导出学员信息
|
||||
|
||||
export const getExamdraftList = (params) =>
|
||||
post("/stageexampaperCache/list", params); // 试卷草稿管理列表
|
||||
|
||||
export const setpaperQuestionCacheQuestionsAdd = (params) =>
|
||||
post("/paperQuestionCache/add", params); // 草稿试卷管理试题新增
|
||||
|
||||
export const setpaperQuestionCacheQuestionsEdit = (params) =>
|
||||
post("/paperQuestionCache/edit", params); // 草稿试卷管理试题修改
|
||||
|
||||
export const setpaperQuestionCacheDelete = (params) =>
|
||||
post("/paperQuestionCache/delete", params); // 草稿试卷管理试题删除
|
||||
|
||||
export const setstageexampaperCacheEdit = (params) =>
|
||||
post("/stageexampaperCache/edit", params); // 草稿试卷管理保存修改
|
||||
|
||||
export const setstageexampaperCacheDelete = (params) =>
|
||||
post("/stageexampaperCache/delete", params); // 草稿试卷管理保存修改
|
||||
|
||||
export const setstageexampaperCacheformal = (params) =>
|
||||
post("/stageexampaperCache/convertStageexam", params); // 草稿试卷管理保存修改
|
||||
export const getClassManagementCurriculumList = (params) =>
|
||||
post("/classCurriculum/list", params); // 班级管理课程列表
|
||||
export const setClassManagementCurriculumDelete = (params) =>
|
||||
|
|
|
@ -24,3 +24,9 @@ export const getExamPaperManagementView = (params) =>
|
|||
post("/stageexampaperinput/goEdit", params); // 试卷管理查看
|
||||
export const getExamPaperManagementTestQuestions = (params) =>
|
||||
post("/paperQuestion/listForInherit", params); // 试卷管理试题
|
||||
|
||||
export const getpaperQuestionCacheQuestions = (params) =>
|
||||
post("/paperQuestionCache/list", params); // 试卷草稿管理试题
|
||||
|
||||
export const getStagexampaperCacheView = (params) =>
|
||||
post("/stageexampaperCache/goEdit", params); // 试卷管理查看
|
||||
|
|
|
@ -0,0 +1,27 @@
|
|||
import { post, upload } from "@/request/axios.js";
|
||||
|
||||
// 从业人员管理列表
|
||||
export const getPractitionerList = (params) =>
|
||||
post("/user/getPractitionerPage", params);
|
||||
|
||||
// 从业人员审核
|
||||
export const setPractitionerReview = (params) =>
|
||||
post("/user/setPractitionerReview", params);
|
||||
|
||||
// 从业人员信息
|
||||
export const getPractitionerInfo = (params) =>
|
||||
post("/user/getPractitionerInfo", params);
|
||||
|
||||
export const getPractitionerForEdit = (params) => post("/user/getPractitionerForEdit", params); // 用户管理查看
|
||||
|
||||
// 从业人员添加(需从业人员确认)
|
||||
export const setPractitionerAdd = (params) =>
|
||||
upload("/user/setPractitionerAdd", params);
|
||||
|
||||
// 从业人员修改(需从业人员确认)
|
||||
export const setPractitionerEdit = (params) =>
|
||||
upload("/user/setPractitionerEdit", params);
|
||||
|
||||
// 从业人员解聘
|
||||
export const setPractitionerDismissal = (params) =>
|
||||
post("/user/setPractitionerDismissal", params);
|
|
@ -41,8 +41,6 @@
|
|||
width="330"
|
||||
/>
|
||||
<el-table-column prop="INQUIRYCONCLUSION" label="问询结果" width="230" />
|
||||
<el-table-column prop="CORP_NAME" label="经营企业" width="230" />
|
||||
<el-table-column prop="TRANSPORTVEHICLE" label="经营类型" width="230" />
|
||||
<el-table-column prop="CREATTIME" label="创建时间" width="130" />
|
||||
<el-table-column prop="OPERATTIME" label="修改时间" width="130" />
|
||||
<el-table-column label="操作" >
|
||||
|
|
|
@ -1,229 +0,0 @@
|
|||
<template>
|
||||
<layout-card>
|
||||
<el-form
|
||||
ref="formRef"
|
||||
:model="data.form"
|
||||
:rules="rules"
|
||||
label-width="175px"
|
||||
>
|
||||
<el-divider content-position="left">添加</el-divider>
|
||||
<el-row>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="会议标题" prop="MEETING_TITLE">
|
||||
<el-input
|
||||
v-model="data.form.MEETING_TITLE"
|
||||
placeholder="请输入会议标题"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="5">
|
||||
<el-form-item label="会议类型" prop="MEETING_TYPE">
|
||||
<el-select
|
||||
v-model="data.form.MEETING_TYPE"
|
||||
placeholder="请选择会议类型"
|
||||
@change="handleMeetingTypeChange"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in relatedClassificationList"
|
||||
:key="item.BIANMA"
|
||||
:label="item.NAME"
|
||||
:value="item.BIANMA"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="运输企业" prop="TRANSPORTATIONCOMPANY">
|
||||
<el-input
|
||||
v-model="data.form.TRANSPORTATIONCOMPANY"
|
||||
placeholder="请输入运输企业"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="会议地点" prop="MEETING_ADDRESS">
|
||||
<el-input
|
||||
v-model="data.form.MEETING_ADDRESS"
|
||||
placeholder="请输入会议地点"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="10">
|
||||
<el-form-item prop="MEETING_DATE" label="会议时间">
|
||||
<el-date-picker
|
||||
type="daterange"
|
||||
v-model="data.form.MEETING_DATE"
|
||||
format="YYYY-MM-DD"
|
||||
value-format="YYYY-MM-DD"
|
||||
start-placeholder="开始时间"
|
||||
end-placeholder="结束时间"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="主持人" prop="HOST_PERSON">
|
||||
<el-input
|
||||
v-model="data.form.HOST_PERSON"
|
||||
placeholder="请输入主持人"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="记录人" prop="RECORDER">
|
||||
<el-input v-model="data.form.RECORDER" placeholder="请输入记录人" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="从业身份" prop="PRACTITIONER_TYPE">
|
||||
<el-checkbox-group
|
||||
v-model="data.form.PRACTITIONER_TYPE"
|
||||
@change="handleCheckedCitiesChange"
|
||||
>
|
||||
<el-checkbox v-for="city in cities" :key="city" :label="city">{{
|
||||
city
|
||||
}}</el-checkbox>
|
||||
</el-checkbox-group>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="24">
|
||||
<el-form-item label="会议附件" prop="fileList">
|
||||
<layout-upload
|
||||
v-model:file-list="data.form.fileList"
|
||||
accept=".pdf,.mp4"
|
||||
delete-to-server
|
||||
:limit="9"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="50">
|
||||
<el-form-item label="会议记要" prop="MEETING_CONTENT">
|
||||
<layout-editor
|
||||
v-model="data.form.MEETING_CONTENT"
|
||||
placeholder="请输入内容"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
<div class="tc mt-10">
|
||||
<el-button type="primary" @click="fnSubmit"> 确定 </el-button>
|
||||
</div>
|
||||
</layout-card>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import {
|
||||
layoutFnGetMEETINGTYPEClassification,
|
||||
getUserListAll,
|
||||
} from "@/request/safety_production_related.js";
|
||||
import { addSafetyMeetingView } from "@/request/traffic_safety_meeting.js";
|
||||
import { reactive, ref } from "vue";
|
||||
import LayoutUpload from "@/components/upload/index.vue";
|
||||
import LayoutEditor from "@/components/editor/index.vue";
|
||||
import useFormValidate from "@/assets/js/useFormValidate.js";
|
||||
import { ElMessage } from "element-plus";
|
||||
const formRef = ref(null);
|
||||
const cities = [
|
||||
"驾驶员",
|
||||
"押运员",
|
||||
"安全管理员",
|
||||
"装卸员",
|
||||
"安全负责人",
|
||||
"其他",
|
||||
"监控员",
|
||||
];
|
||||
const handleCheckedCitiesChange = () => {};
|
||||
const rules = {
|
||||
MEETING_TITLE: [
|
||||
{ required: true, message: "请输入会议标题", trigger: "blur" },
|
||||
],
|
||||
MEETING_TYPE: [
|
||||
{ required: true, message: "请选择会议类型", trigger: "change" },
|
||||
],
|
||||
TRANSPORTATIONCOMPANY: [
|
||||
{ required: true, message: "请输入运输企业", trigger: "blur" },
|
||||
],
|
||||
MEETING_ADDRESS: [
|
||||
{ required: true, message: "请输入会议地点", trigger: "blur" },
|
||||
],
|
||||
MEETING_DATE: [
|
||||
{ required: true, message: "请选择会议时间", trigger: "change" },
|
||||
],
|
||||
HOST_PERSON: [{ required: true, message: "请输入主持人", trigger: "blur" }],
|
||||
RECORDER: [{ required: true, message: "请输入记录人", trigger: "blur" }],
|
||||
MEETING_CONTENT: [
|
||||
{ required: true, message: "请输入会议记要", trigger: "blur" },
|
||||
],
|
||||
};
|
||||
|
||||
const fnGetUnitsList = async () => {
|
||||
const resData = await getUserListAll({});
|
||||
data.unitsList = resData.varList;
|
||||
};
|
||||
fnGetUnitsList();
|
||||
const relatedClassificationTempList =
|
||||
await layoutFnGetMEETINGTYPEClassification();
|
||||
const relatedClassificationList = [];
|
||||
JSON.parse(relatedClassificationTempList.value.zTreeNodes).forEach((e) => {
|
||||
relatedClassificationList.push({ name: e.id, BIANMA: e.name });
|
||||
});
|
||||
|
||||
const data = reactive({
|
||||
form: {
|
||||
MEETING_TITLE: "",
|
||||
MEETING_TYPE: "",
|
||||
TRANSPORTATIONCOMPANY: "",
|
||||
MEETING_ADDRESS: "",
|
||||
MEETING_DATE: "",
|
||||
HOST_PERSON: "",
|
||||
RECORDER: "",
|
||||
fileList: [],
|
||||
PRACTITIONER_TYPE: [],
|
||||
NOTIFICATIONCONTENT: "",
|
||||
},
|
||||
});
|
||||
const handleMeetingTypeChange = (value) => {
|
||||
data.form.MEETING_TYPE = value;
|
||||
};
|
||||
const fnSubmit = async () => {
|
||||
await useFormValidate(formRef);
|
||||
const formData = new FormData();
|
||||
|
||||
Object.keys(data.form).forEach((key) => {
|
||||
formData.append(key, data.form[key]);
|
||||
});
|
||||
|
||||
formData.delete("fileList");
|
||||
|
||||
for (let i = 0; i < data.form.fileList.length; i++) {
|
||||
if (data.form.fileList[i].raw)
|
||||
formData.append("FFILE", data.form.fileList[i].raw);
|
||||
}
|
||||
|
||||
try {
|
||||
await addSafetyMeetingView(formData);
|
||||
ElMessage.success("添加成功");
|
||||
Object.keys(data.form).forEach((key) => {
|
||||
if (Array.isArray(data.form[key])) {
|
||||
data.form[key] = [];
|
||||
} else {
|
||||
data.form[key] = "";
|
||||
}
|
||||
});
|
||||
} catch (error) {
|
||||
ElMessage.error("添加失败");
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
.flexBox {
|
||||
display: flex;
|
||||
align-items: flex-end;
|
||||
|
||||
.addBtn {
|
||||
margin-left: 12px;
|
||||
}
|
||||
}
|
||||
</style>
|
|
@ -1,341 +1,139 @@
|
|||
<template>
|
||||
<div>
|
||||
<layout-card>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="24">
|
||||
<el-descriptions :column="2" border>
|
||||
<el-descriptions-item label="会议标题">
|
||||
{{ detailItems.WAYBILLNUMBER }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="运输企业">
|
||||
{{ detailItems.TRANSPORTATIONCOMPANY }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="运输任务">
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="6">
|
||||
<el-descriptions :column="1" border>
|
||||
<el-descriptions-item label="运输车辆">
|
||||
{{ detailItems.TRANSPORTVEHICLE }}
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-descriptions :column="1" border>
|
||||
<el-descriptions-item label="运输性能">
|
||||
{{ detailItems.TRANSPORTNATURE }}
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-descriptions :column="1" border>
|
||||
<el-descriptions-item label="发车时间">
|
||||
{{ detailItems.DEPARTURETIME }}
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-descriptions :column="1" border>
|
||||
<el-descriptions-item label="发车地点">
|
||||
{{ detailItems.DEPARTUREPLACE }}
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-descriptions :column="1" border>
|
||||
<el-descriptions-item label="车架号">
|
||||
{{ detailItems.FRAMENUMBER }}
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-descriptions :column="1" border>
|
||||
<el-descriptions-item label="从业人员">
|
||||
{{ detailItems.EMPLOYEES }}
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-descriptions :column="1" border>
|
||||
<el-descriptions-item label="收车时间">
|
||||
{{ detailItems.ARRIVALTIME }}
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-descriptions :column="1" border>
|
||||
<el-descriptions-item label="收车地点">
|
||||
{{ detailItems.ARRIVALPLACE }}
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-descriptions :column="1" border>
|
||||
<el-descriptions-item label="天气情况">
|
||||
{{ detailItems.WEATHERCONDITION }}
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-descriptions :column="1" border>
|
||||
<el-descriptions-item label="联系电话">
|
||||
{{ detailItems.CONTACTPHONE }}
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-descriptions :column="1" border>
|
||||
<el-descriptions-item label="额定载荷">
|
||||
{{ detailItems.RATEDLOAD }}
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-descriptions :column="1" border>
|
||||
<el-descriptions-item label="实际载荷">
|
||||
{{ detailItems.ACTUALLOAD }}
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
<el-descriptions :column="1" border>
|
||||
<el-descriptions-item label="行车安全问询">
|
||||
{{ detailItems.DRIVINGSAFETYINQUIRY }}
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
<el-descriptions :column="1" border>
|
||||
<el-descriptions-item label="出车前检查">
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="6">
|
||||
<el-descriptions :column="1" border>
|
||||
<el-descriptions-item label="检查人">
|
||||
{{ detailItems.PREDEPARTUREINSPECTOR }}
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-descriptions :column="1" border>
|
||||
<el-descriptions-item label="检查时间">
|
||||
{{ detailItems.PREDEPARTUREINSPECTIONTIME }}
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-descriptions :column="1" border>
|
||||
<el-descriptions-item label="故障处理">
|
||||
{{ detailItems.PREDEPARTUREFAULTTREATMENT }}
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-descriptions :column="1" border>
|
||||
<el-descriptions-item label="出车结论">
|
||||
{{ detailItems.DEPARTURECONCLUSION }}
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-descriptions :column="1" border>
|
||||
<el-descriptions-item label="出车前照片">
|
||||
{{ detailItems.PREDEPARTUREPHOTO }}
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-descriptions :column="1" border>
|
||||
<el-descriptions-item label="出车前签字">
|
||||
{{ detailItems.PREDEPARTURESIGNATURE }}
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
<el-descriptions :column="1" border>
|
||||
<el-descriptions-item label="行车中检查">
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="6">
|
||||
<el-descriptions :column="1" border>
|
||||
<el-descriptions-item label="检查人">
|
||||
{{ detailItems.INDRIVINGINSPECTOR }}
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-descriptions :column="1" border>
|
||||
<el-descriptions-item label="检查时间">
|
||||
{{ detailItems.INSPECTIONTIMEWHILEDRIVING }}
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-descriptions :column="1" border>
|
||||
<el-descriptions-item label="故障处理">
|
||||
{{ detailItems.INDRIVINGFAULTTREATMENT }}
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-descriptions :column="1" border>
|
||||
<el-descriptions-item label="行车中照片">
|
||||
{{ detailItems.PHOTOSWHILEDRIVING }}
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-descriptions :column="1" border>
|
||||
<el-descriptions-item label="行车中签字">
|
||||
{{ detailItems.SIGNINGWHILEDRIVING }}
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
<el-descriptions :column="1" border>
|
||||
<el-descriptions-item label="收车后检查">
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="6">
|
||||
<el-descriptions :column="1" border>
|
||||
<el-descriptions-item label="检查人">
|
||||
{{ detailItems.POSTARRIVALINSPECTOR }}
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-descriptions :column="1" border>
|
||||
<el-descriptions-item label="检查时间">
|
||||
{{ detailItems.POSTARRIVALINSPECTIONTIME }}
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-descriptions :column="1" border>
|
||||
<el-descriptions-item label="故障处理">
|
||||
{{ detailItems.POSTARRIVALFAULTTREATMENT }}
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-descriptions :column="1" border>
|
||||
<el-descriptions-item label="收车后照片">
|
||||
{{ detailItems.CHECKPHOTOS }}
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-descriptions :column="1" border>
|
||||
<el-descriptions-item label="收车后签字">
|
||||
{{ detailItems.CHECKSIGNATURE }}
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
<el-descriptions :column="1" border>
|
||||
<el-descriptions-item label="交接班记录">
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="6">
|
||||
<el-descriptions :column="1" border>
|
||||
<el-descriptions-item label="驾驶时长">
|
||||
{{ detailItems.DRIVINGDURATION }}
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-descriptions :column="1" border>
|
||||
<el-descriptions-item label="时间区间">
|
||||
{{ detailItems.TIMEINTERVAL }}
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-descriptions :column="1" border>
|
||||
<el-descriptions-item label="交接地点">
|
||||
{{ detailItems.HANDOVERPLACE }}
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-descriptions :column="1" border>
|
||||
<el-descriptions-item label="交接班人">
|
||||
{{ detailItems.HANDOVERPERSON }}
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-descriptions :column="1" border>
|
||||
<el-descriptions-item label="接班图片">
|
||||
{{ detailItems.RELIEFPICTURE }}
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
<el-descriptions :column="1" border>
|
||||
<el-descriptions-item label="安全负责人">
|
||||
{{ detailItems.SAFETYOFFICER }}
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</layout-card>
|
||||
</div>
|
||||
<layout-card>
|
||||
<div id="printContent">
|
||||
<table class="archive_print_table">
|
||||
<thead>
|
||||
<tr>
|
||||
<td colspan="10" style="border: none">
|
||||
<el-divider content-position="left">
|
||||
{{data.info.TRANSPORTVEHICLE}}车辆行车三检日志
|
||||
</el-divider>
|
||||
</td>
|
||||
</tr>
|
||||
</thead>
|
||||
<tr>
|
||||
<td class="title">运单编号</td>
|
||||
<td colspan="5">{{ data.info.WAYBILLNUMBER }}</td>
|
||||
<td class="title">运单状态</td>
|
||||
<td colspan="4">
|
||||
<span v-if="data.info.WAYBILLSTATUS === '0'">未出发</span>
|
||||
<span v-else-if="data.info.WAYBILLSTATUS === '1'">已出发</span>
|
||||
<span v-else-if="data.info.WAYBILLSTATUS === '2'">已完成</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td :rowspan="4" class="title">运输任务</td>
|
||||
<td class="title" rowspan="1">运输车辆</td>
|
||||
<td colspan="4">{{ data.info.TRANSPORTVEHICLE }}</td>
|
||||
<td class="title" colspan="1">车架号</td>
|
||||
<td colspan="5">{{ data.info.VIN }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="title" rowspan="1">从业人员</td>
|
||||
<td colspan="4">{{ data.info.NAME }}</td>
|
||||
<td class="title" colspan="1">联系电话</td>
|
||||
<td colspan="5">{{ data.info.PHONE }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="title" rowspan="1">发车时间</td>
|
||||
<td colspan="4">{{ data.info.STARTTIME }}</td>
|
||||
<td class="title" colspan="1">收车时间</td>
|
||||
<td colspan="5">{{ data.info.STOPTIME }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="title" rowspan="1">发车地点</td>
|
||||
<td colspan="4">{{ data.info.ORIGIN_NAME }}</td>
|
||||
<td class="title" colspan="1">收车地点</td>
|
||||
<td colspan="5">{{ data.info.DESTINATION_NAME }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td :rowspan="4" class="title">行车安全问询</td>
|
||||
</tr>
|
||||
<tr v-for="(item, index) in data.commitmentList" :key="index">
|
||||
<td colspan="9">
|
||||
<span>{{ item.INQUIRYCONTENT }}</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr v-for="(item, index) in data.info.varList" :key="index">
|
||||
<td :rowspan="1" class="title">{{ item.CHECKTYPE_NAME }}检查</td>
|
||||
<td colspan="8">
|
||||
<table class="archive_print_table" v-for="(item1,index1) in item.pd1Children" :key="index1">
|
||||
<tr>
|
||||
<td :rowspan="10" class="title">检查记录</td>
|
||||
</tr>
|
||||
<tr v-for="(item2,index2) in item1.pd2Children" :key="index2">
|
||||
<td class="title">检查项名称</td>
|
||||
<td>{{item2.CHECKITEMNAME}}</td>
|
||||
<td class="title">检查项说明</td>
|
||||
<td>{{item2.REMARKS}}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="title">检查人</td>
|
||||
<td>
|
||||
<img
|
||||
v-viewer
|
||||
:src="VITE_FILE_URL + item1.SIGN_PATH"
|
||||
alt=""
|
||||
width="20"
|
||||
height="20"
|
||||
class="mr-10 mt-10"
|
||||
/>
|
||||
</td>
|
||||
<td class="title">检查时间</td>
|
||||
<td>{{item1.SIGN_TIME}}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="title">检查照片</td>
|
||||
<td colspan="3">
|
||||
<div>
|
||||
<template
|
||||
v-for="(item3, index3) in item1.IMG_PATH.split(',')"
|
||||
:key="index3"
|
||||
>
|
||||
<img
|
||||
v-viewer
|
||||
:src="VITE_FILE_URL + item3"
|
||||
alt=""
|
||||
width="20"
|
||||
height="20"
|
||||
class="mr-10 mt-10"
|
||||
/>
|
||||
</template>
|
||||
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
|
||||
|
||||
</table>
|
||||
</div>
|
||||
</layout-card>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ref } from "vue";
|
||||
import { getSafetyDrivingLogView } from "@/request/traffic_driving_log.js";
|
||||
import { reactive } from "vue";
|
||||
import { useRoute } from "vue-router";
|
||||
const route = useRoute();
|
||||
const { DRIVING_LOG_ID } = route.query;
|
||||
const detailItems = ref({
|
||||
WAYBILLNUMBER: "",
|
||||
TRANSPORTATIONCOMPANY: "",
|
||||
TRANSPORTVEHICLE: "",
|
||||
TRANSPORTNATURE: "",
|
||||
DEPARTURETIME: "",
|
||||
DEPARTUREPLACE: "",
|
||||
FRAMENUMBER: "",
|
||||
EMPLOYEES: "",
|
||||
ARRIVALTIME: "",
|
||||
ARRIVALPLACE: "",
|
||||
WEATHERCONDITION: "",
|
||||
CONTACTPHONE: "",
|
||||
ACTUALLOAD: "",
|
||||
DRIVINGSAFETYINQUIRY: "",
|
||||
DEPARTURECONCLUSION: "",
|
||||
PREDEPARTUREINSPECTOR: "",
|
||||
PREDEPARTUREINSPECTIONTIME: "",
|
||||
PREDEPARTUREFAULTTREATMENT: "",
|
||||
INDRIVINGINSPECTOR: "",
|
||||
INSPECTIONTIMEWHILEDRIVING: "",
|
||||
INDRIVINGFAULTTREATMENT: "",
|
||||
POSTARRIVALINSPECTOR: "",
|
||||
POSTARRIVALINSPECTIONTIME: "",
|
||||
POSTARRIVALFAULTTREATMENT: "",
|
||||
DRIVINGDURATION: "",
|
||||
TIMEINTERVAL: "",
|
||||
HANDOVERPLACE: "",
|
||||
HANDOVERPERSON: "",
|
||||
RELIEFPICTURE: "",
|
||||
SAFETYOFFICER: "",
|
||||
PREDEPARTUREPHOTO: "",
|
||||
PREDEPARTURESIGNATURE: "",
|
||||
PHOTOSWHILEDRIVING: "",
|
||||
SIGNINGWHILEDRIVING: "",
|
||||
CHECKPHOTOS: "",
|
||||
CHECKSIGNATURE: "",
|
||||
});
|
||||
import {getSafetyDrivingLogView} from "@/request/traffic_driving_log.js";
|
||||
|
||||
const VITE_FILE_URL = import.meta.env.VITE_FILE_URL;
|
||||
const route = useRoute();
|
||||
const { WAYBILLREGISTRATION_ID } = route.query;
|
||||
const data = reactive({
|
||||
info: {},
|
||||
commitmentList: {},
|
||||
});
|
||||
const fnGetData = async () => {
|
||||
const response = await getSafetyDrivingLogView({ DRIVING_LOG_ID });
|
||||
detailItems.value = response.pd;
|
||||
const resData = await getSafetyDrivingLogView({ WAYBILLREGISTRATION_ID });
|
||||
data.info = resData.pd;
|
||||
data.commitmentList = resData.commitmentList;
|
||||
|
||||
};
|
||||
fnGetData();
|
||||
</script>
|
||||
|
||||
<style scoped></style>
|
||||
<style scoped lang="scss"></style>
|
||||
|
|
|
@ -2,25 +2,37 @@
|
|||
<div>
|
||||
<el-card>
|
||||
<el-form
|
||||
:model="searchForm"
|
||||
label-width="100px"
|
||||
@submit.prevent="fnResetPagination"
|
||||
:model="searchForm"
|
||||
label-width="100px"
|
||||
@submit.prevent="fnResetPaginationTransfer"
|
||||
>
|
||||
<el-row>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="运输企业" prop="TRANSPORTCOMPANY">
|
||||
<el-input v-model="searchForm.TRANSPORTCOMPANY" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="运输车辆" prop="TRANSPORTVEHICLE">
|
||||
<el-input v-model="searchForm.TRANSPORTVEHICLE" />
|
||||
<el-input
|
||||
v-model="searchForm.TRANSPORTVEHICLE"
|
||||
placeholder="请输入运输车辆"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="状态" prop="STEP_ID">
|
||||
<el-select v-model="searchForm.STEP_ID">
|
||||
<el-option
|
||||
v-for="item in stepList"
|
||||
:key="item.STEP_ID"
|
||||
:label="item.STEP_NAME"
|
||||
:value="item.STEP_ID"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
<el-col :span="12">
|
||||
<el-form-item label-width="10px">
|
||||
<el-button type="primary" native-type="submit">搜索</el-button>
|
||||
<el-button native-type="reset" @click="fnResetPagination">
|
||||
<el-button native-type="reset" @click="fnResetPaginationTransfer">
|
||||
重置
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
|
@ -30,107 +42,78 @@
|
|||
</el-card>
|
||||
<layout-card>
|
||||
<layout-table
|
||||
v-model:pagination="pagination"
|
||||
:data="list"
|
||||
@get-data="fnGetData"
|
||||
v-model:pagination="pagination"
|
||||
:data="list"
|
||||
@get-data="fnGetData"
|
||||
>
|
||||
<el-table-column label="序号" width="60">
|
||||
<template #default="{ $index }">
|
||||
{{ serialNumber(pagination, $index) }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="REGISTRATIONNUMBER"
|
||||
label="登记编号"
|
||||
width="130"
|
||||
/>
|
||||
<el-table-column prop="DEPARTURESTATUS" label="出车状态" width="130" />
|
||||
<el-table-column prop="DRIVINGCONDITION" label="行车状态" width="130" />
|
||||
<el-table-column prop="TRANSPORTVEHICLE" label="运输车辆" width="130" />
|
||||
<el-table-column prop="EMPLOYEES" label="从业人员" width="130" />
|
||||
<el-table-column prop="CONTACTPHONE" label="联系电话" width="130" />
|
||||
<el-table-column prop="WEATHERCONDITION" label="天气预报" width="130" />
|
||||
<el-table-column prop="TRANSPORTNATURE" label="运输性质" width="130" />
|
||||
<el-table-column prop="DEPARTURETIME" label="发车时间" />
|
||||
<el-table-column prop="ARRIVALTIME" label="收车时间" />
|
||||
<el-table-column prop="TRANSPORTCOMPANY" label="运输企业" />
|
||||
<el-table-column prop="WAYBILLNUMBER" label="运单编号" width="230"/>
|
||||
<el-table-column label="行车状态" width="130" >
|
||||
<template #default="{ row }">
|
||||
<el-tag v-if="row.WAYBILLSTATUS === '0'">未出发</el-tag>
|
||||
<el-tag v-else-if="row.WAYBILLSTATUS === '1'">已出发</el-tag>
|
||||
<el-tag v-else-if="row.WAYBILLSTATUS === '2'">收车后</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="TRANSPORTVEHICLE" label="运输车辆" width="230" />
|
||||
<el-table-column prop="NAME" label="从业人员" width="130" />
|
||||
<el-table-column prop="PHONE" label="联系电话" width="130" />
|
||||
<el-table-column prop="STARTTIME" label="发车时间" />
|
||||
<el-table-column prop="STOPTIME" label="收车时间" />
|
||||
<el-table-column label="操作" width="180">
|
||||
<template #default="{ row }">
|
||||
<el-button
|
||||
type="primary"
|
||||
text
|
||||
link
|
||||
@click="
|
||||
type="primary"
|
||||
text
|
||||
link
|
||||
@click="
|
||||
router.push({
|
||||
path: '/driving_inspections/driving_log/drivingLog_info',
|
||||
query: {
|
||||
DRIVING_LOG_ID: row.DRIVING_LOG_ID,
|
||||
WAYBILLREGISTRATION_ID: row.WAYBILLREGISTRATION_ID
|
||||
},
|
||||
})
|
||||
"
|
||||
>
|
||||
查看
|
||||
</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
text
|
||||
link
|
||||
@click="
|
||||
router.push({
|
||||
path: '/driving_inspections/safety_meeting/add',
|
||||
})
|
||||
"
|
||||
>
|
||||
添加
|
||||
</el-button>
|
||||
<el-button
|
||||
type="danger"
|
||||
text
|
||||
link
|
||||
@click="deleteItem(row.DRIVING_LOG_ID)"
|
||||
>
|
||||
删除
|
||||
</el-button>
|
||||
<!-- <el-button-->
|
||||
<!-- type="danger"-->
|
||||
<!-- text-->
|
||||
<!-- link-->
|
||||
<!-- @click="deleteItem(row.WAYBILLREGISTRATION_ID)"-->
|
||||
<!-- >-->
|
||||
<!-- 删除-->
|
||||
<!-- </el-button>-->
|
||||
</template>
|
||||
</el-table-column>
|
||||
</layout-table>
|
||||
</layout-card>
|
||||
<edit
|
||||
v-model:visible="data.analysisDialog.visible"
|
||||
:info="data.analysisDialog.info"
|
||||
@get-data="fnResetPagination"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { serialNumber } from "@/assets/js/utils";
|
||||
import { serialNumber } from "@/assets/js/utils.js";
|
||||
import { useRouter } from "vue-router";
|
||||
import useListData from "@/assets/js/useListData.js";
|
||||
import { reactive } from "vue";
|
||||
import {
|
||||
getSafetyDrivingLogList,
|
||||
setDrivingLogDelete,
|
||||
} from "@/request/traffic_driving_log.js";
|
||||
import router from "@/router/index.js";
|
||||
import { ElMessage, ElMessageBox } from "element-plus";
|
||||
import { getSafetyDrivingLogList } from "@/request/traffic_driving_log.js";
|
||||
|
||||
const router = useRouter();
|
||||
const { list, pagination, searchForm, fnGetData, fnResetPagination } =
|
||||
useListData(getSafetyDrivingLogList);
|
||||
const data = reactive({
|
||||
analysisDialog: {
|
||||
visible: false,
|
||||
info: {},
|
||||
},
|
||||
});
|
||||
// 删除事件
|
||||
const deleteItem = async (value) => {
|
||||
await ElMessageBox.confirm(`确定要删除吗?`, {
|
||||
type: "warning",
|
||||
useListData(getSafetyDrivingLogList);
|
||||
|
||||
const fnResetPaginationTransfer = () => {
|
||||
fnResetPagination({
|
||||
TRANSPORTVEHICLE: searchForm.value.TRANSPORTVEHICLE,
|
||||
CONFIRM_DEPARTMENT_ID: searchForm.value.CONFIRM_DEPARTMENT_ID,
|
||||
WORK_START_DATE: searchForm.value.WORK_START_DATE,
|
||||
});
|
||||
await setDrivingLogDelete({ DRIVING_LOG_ID: value });
|
||||
ElMessage.success("删除成功");
|
||||
fnGetData();
|
||||
};
|
||||
|
||||
</script>
|
||||
|
||||
<style scoped></style>
|
|
@ -47,12 +47,10 @@
|
|||
label="检查项名称"
|
||||
width="330"
|
||||
/>
|
||||
<el-table-column prop="CHECKTYPE_NAME" label="检查项类型" width="130" />
|
||||
<el-table-column prop="REMARKS" label="检查项说明" width="230" />
|
||||
<el-table-column prop="CORP_NAME" label="经营企业" width="230" />
|
||||
<el-table-column prop="TRANSPORTVEHICLE" label="经营类型" width="230" />
|
||||
<el-table-column prop="CREATTIME" label="创建时间" width="130" />
|
||||
<el-table-column prop="OPERATTIME" label="修改时间" width="130" />
|
||||
<el-table-column prop="CHECKTYPE_NAME" label="检查项类型" width="230" />
|
||||
<el-table-column prop="REMARKS" label="检查项说明" width="330" />
|
||||
<el-table-column prop="CREATTIME" label="创建时间" width="230" />
|
||||
<el-table-column prop="OPERATTIME" label="修改时间" width="230" />
|
||||
<el-table-column label="操作" >
|
||||
<template #default="{ row }">
|
||||
|
||||
|
|
|
@ -1,422 +0,0 @@
|
|||
<template>
|
||||
<layout-card>
|
||||
<el-form
|
||||
ref="formRef"
|
||||
:model="data.form"
|
||||
:rules="rules"
|
||||
label-width="175px"
|
||||
>
|
||||
<!-- 承运信息 -->
|
||||
<el-divider content-position="left">承运信息</el-divider>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="8">
|
||||
<el-form-item prop="DEPARTMENT_ID" label="部门">
|
||||
<layout-department
|
||||
v-model="data.form.DEPARTMENT_ID"
|
||||
@update:model-value="fnDepartmentChange"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item v-if="!LISTMANAGER_ID" label="调度人" prop="USER_IDS">
|
||||
<el-select v-model="data.form.USER_IDS" multiple>
|
||||
<el-option
|
||||
v-for="item in data.userList"
|
||||
:key="item.USER_ID"
|
||||
:label="item.NAME"
|
||||
:value="item.USER_ID"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="承运日期" prop="SHIPPINGDATE">
|
||||
<el-date-picker
|
||||
v-model="data.form.SHIPPINGDATE"
|
||||
type="date"
|
||||
format="YYYY-MM-DD"
|
||||
value-format="YYYY-MM-DD"
|
||||
placeholder="选择时间"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="运输车辆" prop="TRANSPORTVEHICLE">
|
||||
<el-select
|
||||
v-model="data.form.TRANSPORTVEHICLE"
|
||||
placeholder="请选择运输车辆"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in data.OperationVehicle"
|
||||
:key="item"
|
||||
:label="item"
|
||||
:value="item"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="从业人员" prop="PRACTITIONER">
|
||||
<el-select
|
||||
v-model="data.form.PRACTITIONER"
|
||||
placeholder="请选择从业人员"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in PRACTITIONERMENU"
|
||||
:key="item.id"
|
||||
:label="item.id"
|
||||
:value="item.name"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="货运挂车" prop="TRUCKCART">
|
||||
<el-select
|
||||
v-model="data.form.TRUCKCART"
|
||||
placeholder="请选择货运挂车"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in TRUCKMENU"
|
||||
:key="item.id"
|
||||
:label="item.id"
|
||||
:value="item.name"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="人员电话" prop="EMPLOYEEPHONE">
|
||||
<el-input
|
||||
v-model="data.form.EMPLOYEEPHONE"
|
||||
placeholder="请输入人员电话"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="人员类型" prop="PRACTITIONERTYPE">
|
||||
<el-select
|
||||
v-model="data.form.PRACTITIONERTYPE"
|
||||
placeholder="请选择人员类型"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in PERSONTYPEMENU"
|
||||
:key="item.id"
|
||||
:label="item.id"
|
||||
:value="item.name"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="身份证号" prop="IDENTITYID">
|
||||
<el-input
|
||||
v-model="data.form.IDENTITYID"
|
||||
placeholder="请输入身份证号"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<!-- 客户信息 -->
|
||||
<el-divider content-position="left">客户信息</el-divider>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="8">
|
||||
<el-form-item label="委托方" prop="CLIENT">
|
||||
<el-select v-model="data.form.CLIENT" placeholder="请选择委托方">
|
||||
<el-option
|
||||
v-for="item in data.clientOptions"
|
||||
:key="item.CONTACT"
|
||||
:label="item.COMP_NAME"
|
||||
:value="item.CONTACT"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="联系人" prop="CLIENTCONTACTPERSON">
|
||||
<el-input
|
||||
v-model="data.form.CLIENTCONTACTPERSON"
|
||||
placeholder="请输入联系人"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="联系电话" prop="CLIENTCONTACTPHONE">
|
||||
<el-input
|
||||
v-model="data.form.CLIENTCONTACTPHONE"
|
||||
placeholder="请输入联系电话"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="确认方" prop="CONFIRMER">
|
||||
<el-select v-model="data.form.CONFIRMER" placeholder="请选择确认方">
|
||||
<el-option
|
||||
v-for="item in data.confirmerOptions"
|
||||
:key="item.CONTACT"
|
||||
:label="item.COMP_NAME"
|
||||
:value="item.CONTACT"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="联系人" prop="CONFIRMINGPERSON">
|
||||
<el-input
|
||||
v-model="data.form.CONFIRMINGPERSON"
|
||||
placeholder="请输入联系人"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="联系电话" prop="CONFIRMINGPHONE">
|
||||
<el-input
|
||||
v-model="data.form.CONFIRMINGPHONE"
|
||||
placeholder="请输入联系电话"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<!-- 地点信息 -->
|
||||
<el-divider content-position="left">地点信息</el-divider>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="8">
|
||||
<el-form-item label="起运地点" prop="ORIGIN">
|
||||
<el-select v-model="data.form.ORIGIN" placeholder="请选择起运地点">
|
||||
<el-option
|
||||
v-for="item in data.StartOptions"
|
||||
:key="item.LOCATIONMANAGEMENT_ID"
|
||||
:label="item.LOCATIONNAME"
|
||||
:value="item.LOCATIONMANAGEMENT_ID"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="起运地址" prop="SHIPPINGADDRESS">
|
||||
<el-input
|
||||
v-model="data.form.SHIPPINGADDRESS"
|
||||
placeholder="请输入起运地址"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="行政区域" prop="STARTADMINISTRATIVEAREA">
|
||||
<el-input
|
||||
v-model="data.form.STARTADMINISTRATIVEAREA"
|
||||
placeholder="请输入行政区域"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="目的地点" prop="DESTINATION">
|
||||
<el-select
|
||||
v-model="data.form.DESTINATION"
|
||||
placeholder="请选择目的地点"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in data.EndOptions"
|
||||
:key="item.LOCATIONMANAGEMENT_ID"
|
||||
:label="item.LOCATIONNAME"
|
||||
:value="item.LOCATIONMANAGEMENT_ID"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="目的地址" prop="DESTINATIONADDRESS">
|
||||
<el-input
|
||||
v-model="data.form.DESTINATIONADDRESS"
|
||||
placeholder="请输入目的地址"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="行政区域" prop="ENDDMINISTRATIVEAREA">
|
||||
<el-input
|
||||
v-model="data.form.ENDDMINISTRATIVEAREA"
|
||||
placeholder="请输入行政区域"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
<div class="tc mt-10">
|
||||
<el-button type="primary" @click="fnSubmit">确定</el-button>
|
||||
</div>
|
||||
</layout-card>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { layoutFnGetMEETINGTYPEClassification } from "@/request/safety_production_related.js";
|
||||
import {
|
||||
PRACTITIONERMENU,
|
||||
TRUCKMENU,
|
||||
PERSONTYPEMENU,
|
||||
} from "@/assets/js/constant";
|
||||
import {
|
||||
addSafetyThingsChecView,
|
||||
getSecurityPerson,
|
||||
} from "@/request/waybill_registration.js";
|
||||
import { onMounted, reactive, ref, watchEffect } from "vue";
|
||||
import useFormValidate from "@/assets/js/useFormValidate.js";
|
||||
import { ElMessage } from "element-plus";
|
||||
import LayoutDepartment from "@/components/department/index.vue";
|
||||
import { getPostListAll, getUserListAll } from "@/request/data_dictionary.js";
|
||||
import { getSecurityCustomerList } from "@/request/customer_management.js";
|
||||
import { getSecurityLocationList } from "@/request/location_management.js";
|
||||
import { getOperationVehicleList } from "@/request/operation_vehicle.js";
|
||||
|
||||
const formRef = ref(null);
|
||||
const rules = {
|
||||
TRANSPORTATIONCOMPANY: [
|
||||
{ required: true, message: "请输入运输企业名称", trigger: "blur" },
|
||||
],
|
||||
DISPATCHER: [
|
||||
{ required: true, message: "请输入调度人姓名", trigger: "blur" },
|
||||
],
|
||||
SHIPPINGDATE: [
|
||||
{ required: true, message: "请选择承运日期", trigger: "change" },
|
||||
],
|
||||
CLIENT: [{ required: true, message: "请选择委托方名称", trigger: "change" }],
|
||||
CLIENTCONTACTPERSON: [
|
||||
{ required: true, message: "请输入联系人姓名", trigger: "blur" },
|
||||
],
|
||||
CLIENTCONTACTPHONE: [
|
||||
{ required: true, message: "请输入联系电话", trigger: "blur" },
|
||||
],
|
||||
CONFIRMER: [
|
||||
{ required: true, message: "请选择确认方名称", trigger: "change" },
|
||||
],
|
||||
ORIGIN: [{ required: true, message: "请选择起运地点", trigger: "change" }],
|
||||
SHIPPINGADDRESS: [
|
||||
{ required: true, message: "请输入起运地址", trigger: "blur" },
|
||||
],
|
||||
DESTINATION: [
|
||||
{ required: true, message: "请选择目的地点", trigger: "change" },
|
||||
],
|
||||
DESTINATIONADDRESS: [
|
||||
{ required: true, message: "请输入目的地址", trigger: "blur" },
|
||||
],
|
||||
};
|
||||
|
||||
const relatedClassificationTempList =
|
||||
await layoutFnGetMEETINGTYPEClassification();
|
||||
const relatedClassificationList = [];
|
||||
JSON.parse(relatedClassificationTempList.value.zTreeNodes).forEach((e) => {
|
||||
relatedClassificationList.push({ name: e.id, BIANMA: e.name });
|
||||
});
|
||||
|
||||
const data = reactive({
|
||||
form: {
|
||||
TRANSPORTATIONCOMPANY: "",
|
||||
DISPATCHER: "",
|
||||
DEPARTMENT_ID: "",
|
||||
POST_ID: "",
|
||||
USER_IDS: [],
|
||||
USER_ID: "",
|
||||
SHIPPINGDATE: "",
|
||||
IDENTITYID: "",
|
||||
TRUCKCART: "",
|
||||
EMPLOYEEPHONE: "",
|
||||
PRACTITIONER: "",
|
||||
TRANSPORTVEHICLE: "",
|
||||
CLIENT: "",
|
||||
CLIENTCONTACTPERSON: "",
|
||||
CLIENTCONTACTPHONE: "",
|
||||
CONFIRMER: "",
|
||||
CONFIRMINGPERSON: "",
|
||||
CONFIRMINGPHONE: "",
|
||||
ORIGIN: "",
|
||||
SHIPPINGADDRESS: "",
|
||||
STARTADMINISTRATIVEAREA: "",
|
||||
DESTINATION: "",
|
||||
DESTINATIONADDRESS: "",
|
||||
ENDDMINISTRATIVEAREA: "",
|
||||
},
|
||||
clientOptions: [], // 委托方选项
|
||||
confirmerOptions: [], // 确认方选项
|
||||
StartOptions: [], // 起始地
|
||||
EndOptions: [], // 目的地
|
||||
OperationVehicle: [], // 运输车辆
|
||||
});
|
||||
const fnVehicle = async () => {
|
||||
const res = await getOperationVehicleList();
|
||||
const varList = res.varList || [];
|
||||
data.OperationVehicle = varList.map((item) => item.PLATE_NUMBER);
|
||||
};
|
||||
|
||||
const fnCustomerType = async () => {
|
||||
const res = await getSecurityCustomerList();
|
||||
const varList = res.varList || [];
|
||||
data.clientOptions = varList.filter((item) => item.CUSTOMERTYPE === "1");
|
||||
data.confirmerOptions = varList.filter((item) => item.CUSTOMERTYPE === "2");
|
||||
};
|
||||
|
||||
const fnLocation = async () => {
|
||||
const res = await getSecurityLocationList();
|
||||
const varList = res.varList || [];
|
||||
data.StartOptions = varList.filter((item) => item.LOCATIONTYPE === "1");
|
||||
data.EndOptions = varList.filter((item) => item.LOCATIONTYPE === "2");
|
||||
};
|
||||
const fnDepartmentChange = async () => {
|
||||
data.userList = [];
|
||||
data.form.USER_IDS = [];
|
||||
data.form.USER_ID = "";
|
||||
await fnGetUser(data.form.DEPARTMENT_ID);
|
||||
};
|
||||
const fnGetPost = async (DEPARTMENT_ID) => {
|
||||
const resData = await getPostListAll({ DEPARTMENT_ID });
|
||||
data.postList = resData.postList;
|
||||
};
|
||||
const fnGetUser = async (DEPARTMENT_ID) => {
|
||||
const resData = await getUserListAll({ DEPARTMENT_ID });
|
||||
data.userList = resData.userList;
|
||||
};
|
||||
watchEffect(() => {
|
||||
if (data.form.DEPARTMENT_ID) fnGetPost(data.form.DEPARTMENT_ID);
|
||||
});
|
||||
|
||||
onMounted(async () => {
|
||||
await fnPerson();
|
||||
await fnCustomerType();
|
||||
await fnLocation();
|
||||
await fnVehicle();
|
||||
});
|
||||
const fnPerson = async () => {
|
||||
const resData = await getSecurityPerson({});
|
||||
data.unitsList = [resData.pd];
|
||||
};
|
||||
|
||||
const fnSubmit = async () => {
|
||||
await useFormValidate(formRef);
|
||||
const formData = new FormData();
|
||||
|
||||
Object.keys(data.form).forEach((key) => {
|
||||
formData.append(key, data.form[key]);
|
||||
});
|
||||
|
||||
await addSafetyThingsChecView(formData);
|
||||
ElMessage.success("添加成功");
|
||||
Object.keys(data.form).forEach((key) => {
|
||||
if (Array.isArray(data.form[key])) {
|
||||
data.form[key] = [];
|
||||
} else {
|
||||
data.form[key] = "";
|
||||
}
|
||||
});
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
.flexBox {
|
||||
display: flex;
|
||||
align-items: flex-end;
|
||||
|
||||
.addBtn {
|
||||
margin-left: 12px;
|
||||
}
|
||||
}
|
||||
</style>
|
|
@ -1,155 +0,0 @@
|
|||
<template>
|
||||
<div>
|
||||
<el-card>
|
||||
<el-form
|
||||
:model="searchForm"
|
||||
label-width="100px"
|
||||
@submit.prevent="searchNotifications"
|
||||
>
|
||||
<el-row>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="从业人员" prop="PERSON">
|
||||
<el-input v-model="searchForm.PERSON" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="从业类型" prop="PRACTITIONERTYPE">
|
||||
<el-select v-model="searchForm.PRACTITIONERTYPE">
|
||||
<el-option
|
||||
v-for="item in relatedClassificationList"
|
||||
:key="item.BIANMA"
|
||||
:label="item.name"
|
||||
:value="item.BIANMA"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="签收状态" prop="SIGNEDSTATUS">
|
||||
<el-select v-model="searchForm.SIGNEDSTATUS">
|
||||
<el-option label="已签收" :value="1" />
|
||||
<!-- 1代表已签收 -->
|
||||
<el-option label="未签收" :value="0" />
|
||||
<!-- 0代表未签收 -->
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="回复状态" prop="REPLYSTATUS">
|
||||
<el-select v-model="searchForm.REPLYSTATUS">
|
||||
<el-option label="已回复" :value="1" />
|
||||
<!-- 1代表已回复 -->
|
||||
<el-option label="未回复" :value="0" />
|
||||
<!-- 0代表未回复 -->
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item>
|
||||
<el-button type="primary" native-type="submit">搜索</el-button>
|
||||
<el-button native-type="reset" @click="resetSearchForm"
|
||||
>重置</el-button
|
||||
>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
</el-card>
|
||||
<layout-card>
|
||||
<layout-table
|
||||
v-model:pagination="pagination"
|
||||
:data="list"
|
||||
stripe
|
||||
border
|
||||
show-header
|
||||
@get-data="fnGetData"
|
||||
>
|
||||
<el-table-column label="序号" width="60">
|
||||
<template #default="{ $index }">
|
||||
{{ serialNumber(pagination, $index) }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="从业人员" prop="PERSON" />
|
||||
<el-table-column label="从业类型" prop="PRACTITIONERTYPE" />
|
||||
<el-table-column label="签收时间" prop="SIGNEDDATE">
|
||||
<template #default="{ row }">
|
||||
<span v-if="row.SIGNEDDATE">{{ row.SIGNEDDATE }}</span>
|
||||
<el-tag v-else>未签收</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="回复时间" prop="REPLYDATE">
|
||||
<template #default="{ row }">
|
||||
<span v-if="row.REPLYDATE">{{ row.REPLYDATE }}</span>
|
||||
<el-tag v-else>未回复</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="回复内容" prop="REPLYCONTENT">
|
||||
<template #default="{ row }">
|
||||
<span v-if="row.REPLYCONTENT">{{ row.REPLYCONTENT }}</span>
|
||||
<el-tag v-else>未回复</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</layout-table>
|
||||
</layout-card>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { reactive, onMounted, ref } from "vue";
|
||||
import { useRoute } from "vue-router";
|
||||
import {
|
||||
getSecurityNotice,
|
||||
layoutFnGetSIGNEDSTATUSClassification,
|
||||
} from "@/request/safety_production_related.js";
|
||||
import { serialNumber } from "@/assets/js/utils";
|
||||
import useListData from "@/assets/js/useListData";
|
||||
|
||||
const route = useRoute();
|
||||
const NOTIFICATION_ID = route.query.NOTIFICATION_ID;
|
||||
|
||||
const searchForm = reactive({
|
||||
PERSON: "",
|
||||
PRACTITIONERTYPE: "",
|
||||
SIGNEDSTATUS: null,
|
||||
REPLYSTATUS: null,
|
||||
});
|
||||
|
||||
const { list, pagination, fnGetData, fnResetPagination } = useListData(
|
||||
getSecurityNotice,
|
||||
{
|
||||
searchForm,
|
||||
otherParams: { NOTIFICATION_ID },
|
||||
usePagination: true,
|
||||
}
|
||||
);
|
||||
|
||||
async function searchNotifications() {
|
||||
const params = Object.keys(searchForm).reduce((acc, key) => {
|
||||
acc[key] = searchForm[key];
|
||||
return acc;
|
||||
}, {});
|
||||
|
||||
params.NOTIFICATION_ID = NOTIFICATION_ID;
|
||||
await fnGetData(params);
|
||||
}
|
||||
|
||||
// 重置表单时,也确保重置为初始值
|
||||
function resetSearchForm() {
|
||||
Object.keys(searchForm).forEach((key) => {
|
||||
searchForm[key] = "";
|
||||
});
|
||||
fnResetPagination({ NOTIFICATION_ID });
|
||||
}
|
||||
|
||||
const relatedClassificationList = ref(null);
|
||||
|
||||
onMounted(async () => {
|
||||
const data = await layoutFnGetSIGNEDSTATUSClassification();
|
||||
relatedClassificationList.value = JSON.parse(data.value.zTreeNodes);
|
||||
});
|
||||
// onMounted(() => {
|
||||
// fnGetData({ NOTIFICATION_ID });
|
||||
// });
|
||||
</script>
|
||||
|
||||
<style scoped></style>
|
|
@ -1,422 +0,0 @@
|
|||
<template>
|
||||
<layout-card>
|
||||
<el-form
|
||||
ref="formRef"
|
||||
:model="data.form"
|
||||
:rules="rules"
|
||||
label-width="175px"
|
||||
>
|
||||
<!-- 承运信息 -->
|
||||
<el-divider content-position="left">承运信息</el-divider>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="8">
|
||||
<el-form-item prop="DEPARTMENT_ID" label="部门">
|
||||
<layout-department
|
||||
v-model="data.form.DEPARTMENT_ID"
|
||||
@update:model-value="fnDepartmentChange"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item v-if="!LISTMANAGER_ID" label="调度人" prop="USER_IDS">
|
||||
<el-select v-model="data.form.USER_IDS" multiple>
|
||||
<el-option
|
||||
v-for="item in data.userList"
|
||||
:key="item.USER_ID"
|
||||
:label="item.NAME"
|
||||
:value="item.USER_ID"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="承运日期" prop="SHIPPINGDATE">
|
||||
<el-date-picker
|
||||
v-model="data.form.SHIPPINGDATE"
|
||||
type="date"
|
||||
format="YYYY-MM-DD"
|
||||
value-format="YYYY-MM-DD"
|
||||
placeholder="选择时间"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="运输车辆" prop="TRANSPORTVEHICLE">
|
||||
<el-select
|
||||
v-model="data.form.TRANSPORTVEHICLE"
|
||||
placeholder="请选择运输车辆"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in data.OperationVehicle"
|
||||
:key="item"
|
||||
:label="item"
|
||||
:value="item"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="从业人员" prop="PRACTITIONER">
|
||||
<el-select
|
||||
v-model="data.form.PRACTITIONER"
|
||||
placeholder="请选择从业人员"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in PRACTITIONERMENU"
|
||||
:key="item.id"
|
||||
:label="item.id"
|
||||
:value="item.name"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="货运挂车" prop="TRUCKCART">
|
||||
<el-select
|
||||
v-model="data.form.TRUCKCART"
|
||||
placeholder="请选择货运挂车"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in TRUCKMENU"
|
||||
:key="item.id"
|
||||
:label="item.id"
|
||||
:value="item.name"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="人员电话" prop="EMPLOYEEPHONE">
|
||||
<el-input
|
||||
v-model="data.form.EMPLOYEEPHONE"
|
||||
placeholder="请输入人员电话"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="人员类型" prop="PRACTITIONERTYPE">
|
||||
<el-select
|
||||
v-model="data.form.PRACTITIONERTYPE"
|
||||
placeholder="请选择人员类型"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in PERSONTYPEMENU"
|
||||
:key="item.id"
|
||||
:label="item.id"
|
||||
:value="item.name"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="身份证号" prop="IDENTITYID">
|
||||
<el-input
|
||||
v-model="data.form.IDENTITYID"
|
||||
placeholder="请输入身份证号"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<!-- 客户信息 -->
|
||||
<el-divider content-position="left">客户信息</el-divider>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="8">
|
||||
<el-form-item label="委托方" prop="CLIENT">
|
||||
<el-select v-model="data.form.CLIENT" placeholder="请选择委托方">
|
||||
<el-option
|
||||
v-for="item in data.clientOptions"
|
||||
:key="item.CONTACT"
|
||||
:label="item.COMP_NAME"
|
||||
:value="item.CONTACT"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="联系人" prop="CLIENTCONTACTPERSON">
|
||||
<el-input
|
||||
v-model="data.form.CLIENTCONTACTPERSON"
|
||||
placeholder="请输入联系人"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="联系电话" prop="CLIENTCONTACTPHONE">
|
||||
<el-input
|
||||
v-model="data.form.CLIENTCONTACTPHONE"
|
||||
placeholder="请输入联系电话"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="确认方" prop="CONFIRMER">
|
||||
<el-select v-model="data.form.CONFIRMER" placeholder="请选择确认方">
|
||||
<el-option
|
||||
v-for="item in data.confirmerOptions"
|
||||
:key="item.CONTACT"
|
||||
:label="item.COMP_NAME"
|
||||
:value="item.CONTACT"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="联系人" prop="CONFIRMINGPERSON">
|
||||
<el-input
|
||||
v-model="data.form.CONFIRMINGPERSON"
|
||||
placeholder="请输入联系人"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="联系电话" prop="CONFIRMINGPHONE">
|
||||
<el-input
|
||||
v-model="data.form.CONFIRMINGPHONE"
|
||||
placeholder="请输入联系电话"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<!-- 地点信息 -->
|
||||
<el-divider content-position="left">地点信息</el-divider>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="8">
|
||||
<el-form-item label="起运地点" prop="ORIGIN">
|
||||
<el-select v-model="data.form.ORIGIN" placeholder="请选择起运地点">
|
||||
<el-option
|
||||
v-for="item in data.StartOptions"
|
||||
:key="item.LOCATIONMANAGEMENT_ID"
|
||||
:label="item.LOCATIONNAME"
|
||||
:value="item.LOCATIONMANAGEMENT_ID"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="起运地址" prop="SHIPPINGADDRESS">
|
||||
<el-input
|
||||
v-model="data.form.SHIPPINGADDRESS"
|
||||
placeholder="请输入起运地址"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="行政区域" prop="STARTADMINISTRATIVEAREA">
|
||||
<el-input
|
||||
v-model="data.form.STARTADMINISTRATIVEAREA"
|
||||
placeholder="请输入行政区域"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="目的地点" prop="DESTINATION">
|
||||
<el-select
|
||||
v-model="data.form.DESTINATION"
|
||||
placeholder="请选择目的地点"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in data.EndOptions"
|
||||
:key="item.LOCATIONMANAGEMENT_ID"
|
||||
:label="item.LOCATIONNAME"
|
||||
:value="item.LOCATIONMANAGEMENT_ID"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="目的地址" prop="DESTINATIONADDRESS">
|
||||
<el-input
|
||||
v-model="data.form.DESTINATIONADDRESS"
|
||||
placeholder="请输入目的地址"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="行政区域" prop="ENDDMINISTRATIVEAREA">
|
||||
<el-input
|
||||
v-model="data.form.ENDDMINISTRATIVEAREA"
|
||||
placeholder="请输入行政区域"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
<div class="tc mt-10">
|
||||
<el-button type="primary" @click="fnSubmit">确定</el-button>
|
||||
</div>
|
||||
</layout-card>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { layoutFnGetMEETINGTYPEClassification } from "@/request/safety_production_related.js";
|
||||
import {
|
||||
PRACTITIONERMENU,
|
||||
TRUCKMENU,
|
||||
PERSONTYPEMENU,
|
||||
} from "@/assets/js/constant";
|
||||
import {
|
||||
addSafetyThingsChecView,
|
||||
getSecurityPerson,
|
||||
} from "@/request/waybill_registration.js";
|
||||
import { onMounted, reactive, ref, watchEffect } from "vue";
|
||||
import useFormValidate from "@/assets/js/useFormValidate.js";
|
||||
import { ElMessage } from "element-plus";
|
||||
import LayoutDepartment from "@/components/department/index.vue";
|
||||
import { getPostListAll, getUserListAll } from "@/request/data_dictionary.js";
|
||||
import { getSecurityCustomerList } from "@/request/customer_management.js";
|
||||
import { getSecurityLocationList } from "@/request/location_management.js";
|
||||
import { getOperationVehicleList } from "@/request/operation_vehicle.js";
|
||||
|
||||
const formRef = ref(null);
|
||||
const rules = {
|
||||
TRANSPORTATIONCOMPANY: [
|
||||
{ required: true, message: "请输入运输企业名称", trigger: "blur" },
|
||||
],
|
||||
DISPATCHER: [
|
||||
{ required: true, message: "请输入调度人姓名", trigger: "blur" },
|
||||
],
|
||||
SHIPPINGDATE: [
|
||||
{ required: true, message: "请选择承运日期", trigger: "change" },
|
||||
],
|
||||
CLIENT: [{ required: true, message: "请选择委托方名称", trigger: "change" }],
|
||||
CLIENTCONTACTPERSON: [
|
||||
{ required: true, message: "请输入联系人姓名", trigger: "blur" },
|
||||
],
|
||||
CLIENTCONTACTPHONE: [
|
||||
{ required: true, message: "请输入联系电话", trigger: "blur" },
|
||||
],
|
||||
CONFIRMER: [
|
||||
{ required: true, message: "请选择确认方名称", trigger: "change" },
|
||||
],
|
||||
ORIGIN: [{ required: true, message: "请选择起运地点", trigger: "change" }],
|
||||
SHIPPINGADDRESS: [
|
||||
{ required: true, message: "请输入起运地址", trigger: "blur" },
|
||||
],
|
||||
DESTINATION: [
|
||||
{ required: true, message: "请选择目的地点", trigger: "change" },
|
||||
],
|
||||
DESTINATIONADDRESS: [
|
||||
{ required: true, message: "请输入目的地址", trigger: "blur" },
|
||||
],
|
||||
};
|
||||
|
||||
const relatedClassificationTempList =
|
||||
await layoutFnGetMEETINGTYPEClassification();
|
||||
const relatedClassificationList = [];
|
||||
JSON.parse(relatedClassificationTempList.value.zTreeNodes).forEach((e) => {
|
||||
relatedClassificationList.push({ name: e.id, BIANMA: e.name });
|
||||
});
|
||||
|
||||
const data = reactive({
|
||||
form: {
|
||||
TRANSPORTATIONCOMPANY: "",
|
||||
DISPATCHER: "",
|
||||
DEPARTMENT_ID: "",
|
||||
POST_ID: "",
|
||||
USER_IDS: [],
|
||||
USER_ID: "",
|
||||
SHIPPINGDATE: "",
|
||||
IDENTITYID: "",
|
||||
TRUCKCART: "",
|
||||
EMPLOYEEPHONE: "",
|
||||
PRACTITIONER: "",
|
||||
TRANSPORTVEHICLE: "",
|
||||
CLIENT: "",
|
||||
CLIENTCONTACTPERSON: "",
|
||||
CLIENTCONTACTPHONE: "",
|
||||
CONFIRMER: "",
|
||||
CONFIRMINGPERSON: "",
|
||||
CONFIRMINGPHONE: "",
|
||||
ORIGIN: "",
|
||||
SHIPPINGADDRESS: "",
|
||||
STARTADMINISTRATIVEAREA: "",
|
||||
DESTINATION: "",
|
||||
DESTINATIONADDRESS: "",
|
||||
ENDDMINISTRATIVEAREA: "",
|
||||
},
|
||||
clientOptions: [], // 委托方选项
|
||||
confirmerOptions: [], // 确认方选项
|
||||
StartOptions: [], // 起始地
|
||||
EndOptions: [], // 目的地
|
||||
OperationVehicle: [], // 运输车辆
|
||||
});
|
||||
const fnVehicle = async () => {
|
||||
const res = await getOperationVehicleList();
|
||||
const varList = res.varList || [];
|
||||
data.OperationVehicle = varList.map((item) => item.PLATE_NUMBER);
|
||||
};
|
||||
|
||||
const fnCustomerType = async () => {
|
||||
const res = await getSecurityCustomerList();
|
||||
const varList = res.varList || [];
|
||||
data.clientOptions = varList.filter((item) => item.CUSTOMERTYPE === "1");
|
||||
data.confirmerOptions = varList.filter((item) => item.CUSTOMERTYPE === "2");
|
||||
};
|
||||
|
||||
const fnLocation = async () => {
|
||||
const res = await getSecurityLocationList();
|
||||
const varList = res.varList || [];
|
||||
data.StartOptions = varList.filter((item) => item.LOCATIONTYPE === "1");
|
||||
data.EndOptions = varList.filter((item) => item.LOCATIONTYPE === "2");
|
||||
};
|
||||
const fnDepartmentChange = async () => {
|
||||
data.userList = [];
|
||||
data.form.USER_IDS = [];
|
||||
data.form.USER_ID = "";
|
||||
await fnGetUser(data.form.DEPARTMENT_ID);
|
||||
};
|
||||
const fnGetPost = async (DEPARTMENT_ID) => {
|
||||
const resData = await getPostListAll({ DEPARTMENT_ID });
|
||||
data.postList = resData.postList;
|
||||
};
|
||||
const fnGetUser = async (DEPARTMENT_ID) => {
|
||||
const resData = await getUserListAll({ DEPARTMENT_ID });
|
||||
data.userList = resData.userList;
|
||||
};
|
||||
watchEffect(() => {
|
||||
if (data.form.DEPARTMENT_ID) fnGetPost(data.form.DEPARTMENT_ID);
|
||||
});
|
||||
|
||||
onMounted(async () => {
|
||||
await fnPerson();
|
||||
await fnCustomerType();
|
||||
await fnLocation();
|
||||
await fnVehicle();
|
||||
});
|
||||
const fnPerson = async () => {
|
||||
const resData = await getSecurityPerson({});
|
||||
data.unitsList = [resData.pd];
|
||||
};
|
||||
|
||||
const fnSubmit = async () => {
|
||||
await useFormValidate(formRef);
|
||||
const formData = new FormData();
|
||||
|
||||
Object.keys(data.form).forEach((key) => {
|
||||
formData.append(key, data.form[key]);
|
||||
});
|
||||
|
||||
await addSafetyThingsChecView(formData);
|
||||
ElMessage.success("添加成功");
|
||||
Object.keys(data.form).forEach((key) => {
|
||||
if (Array.isArray(data.form[key])) {
|
||||
data.form[key] = [];
|
||||
} else {
|
||||
data.form[key] = "";
|
||||
}
|
||||
});
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
.flexBox {
|
||||
display: flex;
|
||||
align-items: flex-end;
|
||||
|
||||
.addBtn {
|
||||
margin-left: 12px;
|
||||
}
|
||||
}
|
||||
</style>
|
|
@ -1,181 +0,0 @@
|
|||
<template>
|
||||
<div>
|
||||
<el-card>
|
||||
<el-form
|
||||
:model="searchForm"
|
||||
label-width="100px"
|
||||
@submit.prevent="fnResetPagination"
|
||||
>
|
||||
<el-row>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="车辆车牌" prop="TRANSPORTVEHICLE">
|
||||
<el-input v-model="searchForm.TRANSPORTVEHICLE" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="运单状态" prop="WAYBILLSTATUS">
|
||||
<el-select v-model="searchForm.WAYBILLSTATUS">
|
||||
<el-option label="已出发" :value="1" />
|
||||
<el-option label="未出发" :value="0" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label-width="10px">
|
||||
<el-button type="primary" native-type="submit">搜索</el-button>
|
||||
<el-button native-type="reset" @click="fnResetPagination">
|
||||
重置
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
</el-card>
|
||||
<layout-card>
|
||||
<layout-table
|
||||
ref="tableRef"
|
||||
v-model:pagination="pagination"
|
||||
:data="list"
|
||||
@get-data="fnGetData"
|
||||
>
|
||||
<el-table-column type="selection" width="55"> </el-table-column>
|
||||
<el-table-column label="序号" width="60">
|
||||
<template #default="{ $index }">
|
||||
{{ serialNumber(pagination, $index) }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="WAYBILLNUMBER" label="运单编号" width="150" />
|
||||
<el-table-column prop="WAYBILLSTATUS" label="运单状态" width="150">
|
||||
<template #default="{ row }">
|
||||
<el-tag v-if="row.WAYBILLSTATUS === '0'">未出发</el-tag>
|
||||
<el-tag v-else-if="row.WAYBILLSTATUS === '1'">已出发</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="TRANSPORTVEHICLE" label="运输车辆" width="150" />
|
||||
<el-table-column prop="PRACTITIONER" label="从业人员" width="150" />
|
||||
<el-table-column prop="CLIENT" label="委托方" width="150">
|
||||
</el-table-column>
|
||||
<el-table-column prop="CONFIRMER" label="确认方" width="150">
|
||||
</el-table-column>
|
||||
<el-table-column prop="ORIGIN" label="起运地" width="150">
|
||||
</el-table-column>
|
||||
<el-table-column prop="DESTINATION" label="目的地" width="150">
|
||||
</el-table-column>
|
||||
<el-table-column prop="SHIPPINGDATE" label="起止时间" width="180">
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="120">
|
||||
<template #default="{ row }">
|
||||
<el-button
|
||||
type="primary"
|
||||
text
|
||||
link
|
||||
@click="
|
||||
router.push({
|
||||
path: '/safety_production_related/safety_meeting/meeting_info',
|
||||
query: {
|
||||
SAFETY_MEETING_ID: row.SAFETY_MEETING_ID,
|
||||
},
|
||||
})
|
||||
"
|
||||
>
|
||||
查看
|
||||
</el-button>
|
||||
<el-button
|
||||
type="danger"
|
||||
text
|
||||
link
|
||||
@click="deleteItem(row.SAFETY_MEETING_ID)"
|
||||
>
|
||||
删除
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<template #button>
|
||||
<el-button
|
||||
type="primary"
|
||||
@click="
|
||||
router.push({
|
||||
path: '/electronic_waybill_management/waybill_registration/add',
|
||||
})
|
||||
"
|
||||
>
|
||||
添加
|
||||
</el-button>
|
||||
<el-button
|
||||
v-if="buttonJurisdiction.del"
|
||||
type="danger"
|
||||
@click="fnBatchDelete"
|
||||
>
|
||||
批量删除
|
||||
</el-button>
|
||||
</template>
|
||||
</layout-table>
|
||||
</layout-card>
|
||||
<edit
|
||||
v-model:visible="data.analysisDialog.visible"
|
||||
:info="data.analysisDialog.info"
|
||||
@get-data="fnResetPagination"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { serialNumber } from "@/assets/js/utils.js";
|
||||
import useListData from "@/assets/js/useListData.js";
|
||||
import { onMounted, reactive, ref } from "vue";
|
||||
|
||||
import {
|
||||
layoutFnGetNotificationsClassification,
|
||||
dateteSecurityAllNotice,
|
||||
} from "@/request/safety_production_related.js";
|
||||
import { getSecurityWaybillreList } from "@/request/waybill_registration.js";
|
||||
import { ElMessageBox, ElMessage } from "element-plus";
|
||||
import { debounce } from "throttle-debounce";
|
||||
import useButtonJurisdiction from "@/assets/js/useButtonJurisdiction.js";
|
||||
import { useRoute } from "vue-router";
|
||||
|
||||
const router = useRoute();
|
||||
const buttonJurisdiction = await useButtonJurisdiction("riskunit");
|
||||
const tableRef = ref(null);
|
||||
const { list, pagination, searchForm, fnGetData, fnResetPagination } =
|
||||
useListData(getSecurityWaybillreList);
|
||||
const data = reactive({
|
||||
analysisDialog: {
|
||||
visible: false,
|
||||
info: {},
|
||||
},
|
||||
});
|
||||
const fnResetPaginationTransfer = () => {
|
||||
fnResetPagination({
|
||||
DEPTIDS: searchForm.value.DEPTIDS?.join(","),
|
||||
});
|
||||
};
|
||||
const fnBatchDelete = debounce(
|
||||
1000,
|
||||
async () => {
|
||||
// eslint-disable-next-line no-undef
|
||||
const selectionData = tableRef.value.getSelectionRows();
|
||||
if (selectionData.length === 0) {
|
||||
ElMessage.warning("请选中要删除的项");
|
||||
return;
|
||||
}
|
||||
await ElMessageBox.confirm("确定要删除选中的数据吗?", { type: "warning" });
|
||||
const DATA_IDS = selectionData
|
||||
.map((item) => item.NOTIFICATION_ID)
|
||||
.join(",");
|
||||
await dateteSecurityAllNotice({ DATA_IDS });
|
||||
ElMessage.success("删除成功");
|
||||
fnResetPaginationTransfer();
|
||||
},
|
||||
{ atBegin: true }
|
||||
);
|
||||
const relatedClassificationList = ref(null);
|
||||
|
||||
onMounted(async () => {
|
||||
const data = await layoutFnGetNotificationsClassification();
|
||||
relatedClassificationList.value = JSON.parse(data.value.zTreeNodes);
|
||||
});
|
||||
</script>
|
||||
|
||||
<style scoped></style>
|
|
@ -29,7 +29,7 @@
|
|||
<el-input v-model="data.form.CODE" placeholder="请输入内容" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<!-- <el-col :span="12">
|
||||
<el-form-item label="市行业监管部门" prop="INDUSTRY_DEPARTMENTName">
|
||||
<el-input
|
||||
v-model="data.form.INDUSTRY_DEPARTMENTName"
|
||||
|
@ -37,7 +37,7 @@
|
|||
placeholder="请输入内容"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-col>-->
|
||||
<el-col :span="12">
|
||||
<el-form-item label="属地" prop="POSSESSION">
|
||||
<layout-territory
|
||||
|
@ -47,14 +47,14 @@
|
|||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<!-- <el-col :span="12">
|
||||
<el-form-item label="监管类型" prop="REGULARTYPE">
|
||||
<layout-regulatory-type
|
||||
v-model="data.form.REGULARTYPE"
|
||||
:territory="data.form.POSSESSION"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-col>-->
|
||||
<el-col :span="12">
|
||||
<el-form-item label="所属行业" prop="INDUSTRYALL">
|
||||
<layout-industry
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="部门" prop="DEPARTMENT_ID">
|
||||
<layout-department
|
||||
v-model="data.form.DEPARTMENT_ID"
|
||||
|
@ -33,7 +33,7 @@
|
|||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="岗位" prop="POST_ID">
|
||||
<el-select v-model="data.form.POST_ID">
|
||||
<el-option
|
||||
|
@ -45,16 +45,39 @@
|
|||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="姓名" prop="NAME">
|
||||
<el-input v-model="data.form.NAME" placeholder="请输入" />
|
||||
</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="24">
|
||||
<el-form-item label="用户名" prop="USERNAME">
|
||||
<el-form-item label="身份证号" prop="USER_ID_CARD">
|
||||
<el-input
|
||||
v-model="data.form.USERNAME"
|
||||
v-model="data.form.USER_ID_CARD"
|
||||
:disabled="!!USER_ID"
|
||||
placeholder="请输入"
|
||||
@blur="fnChangeIdCard"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="手机号" prop="PHONE">
|
||||
<el-input v-model="data.form.PHONE" placeholder="请输入" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<!-- <el-col :span="24">
|
||||
<el-form-item label="定位卡号" prop="CARDNO">
|
||||
<el-input
|
||||
v-model="data.form.CARDNO"
|
||||
|
@ -64,12 +87,7 @@
|
|||
placeholder="请输入"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="姓名" prop="NAME">
|
||||
<el-input v-model="data.form.NAME" placeholder="请输入" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-col>-->
|
||||
<el-col :span="24">
|
||||
<el-form-item label="性别" prop="SEX">
|
||||
<el-select v-model="data.form.SEX">
|
||||
|
@ -214,15 +232,6 @@
|
|||
</el-col>
|
||||
<el-col v-if="data.form.ISSTUDENT === 'true'" :span="12">
|
||||
<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">
|
||||
|
@ -270,18 +279,6 @@
|
|||
</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
|
||||
|
@ -415,14 +412,13 @@ import {
|
|||
layoutFnGetDuties,
|
||||
layoutFnGetEmploymentSituation,
|
||||
layoutFnGetNation,
|
||||
layoutFnGetPersonnelType,
|
||||
layoutFnGetPersonnelTypeTraffic,
|
||||
layoutFnGetPoliticalLandscape,
|
||||
layoutFnGetProfessionalTitle,
|
||||
} from "@/assets/js/data_dictionary.js";
|
||||
import { ElMessageBox, ElMessage } from "element-plus";
|
||||
import { debounce } from "throttle-debounce";
|
||||
import {
|
||||
getVerifyDeduplicationUser,
|
||||
getVerifyDeduplicationUserIdCard,
|
||||
getVerifyDuplicateEmail,
|
||||
setUploadImg,
|
||||
|
@ -447,7 +443,7 @@ const fnHasEmail = async (rule, value, callback) => {
|
|||
callback();
|
||||
}
|
||||
};
|
||||
const fnHasUser = async (rule, value, callback) => {
|
||||
/* const fnHasUser = async (rule, value, callback) => {
|
||||
if (value) {
|
||||
const resData = await getVerifyDeduplicationUser({
|
||||
USERNAME: value,
|
||||
|
@ -458,7 +454,7 @@ const fnHasUser = async (rule, value, callback) => {
|
|||
} else {
|
||||
callback();
|
||||
}
|
||||
};
|
||||
}; */
|
||||
const fnHasUserIdCard = async (rule, value, callback) => {
|
||||
if (value) {
|
||||
const resData = await getVerifyDeduplicationUserIdCard({
|
||||
|
@ -472,8 +468,18 @@ const fnHasUserIdCard = async (rule, value, 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" }],
|
||||
USERNAME: [
|
||||
/* USERNAME: [
|
||||
{ required: true, message: "请输入手机号码", trigger: "blur" },
|
||||
{ min: 11, max: 11, message: "请输入11位手机号码", trigger: "blur" },
|
||||
{
|
||||
|
@ -482,6 +488,15 @@ const rules = {
|
|||
message: "请输入正确的手机号码",
|
||||
},
|
||||
{ validator: fnHasUser, 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" },
|
||||
|
@ -516,14 +531,14 @@ const rules = {
|
|||
ENTRY_DATE: [
|
||||
{ required: true, message: "请选择入职日期", trigger: "change" },
|
||||
],
|
||||
CARDNO: [
|
||||
{ required: false, message: "请输入定位卡号", trigger: "blur" },
|
||||
{
|
||||
pattern: /^-?[0-9]\d*$/,
|
||||
message: "请输入正确的定位卡号",
|
||||
trigger: "blur",
|
||||
},
|
||||
],
|
||||
// CARDNO: [
|
||||
// { required: false, message: "请输入定位卡号", trigger: "blur" },
|
||||
// {
|
||||
// pattern: /^-?[0-9]\d*$/,
|
||||
// message: "请输入正确的定位卡号",
|
||||
// trigger: "blur",
|
||||
// },
|
||||
// ],
|
||||
WORKING_DATE: [
|
||||
{ required: true, message: "请选择参加工作日期", trigger: "change" },
|
||||
],
|
||||
|
@ -532,16 +547,6 @@ const rules = {
|
|||
],
|
||||
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",
|
||||
},
|
||||
{ validator: fnHasUserIdCard, trigger: "blur" },
|
||||
],
|
||||
SHIFTDUTYONE: [{ required: true, message: "请选择排班", trigger: "change" }],
|
||||
SHIFTDUTYTWO: [{ required: true, message: "请选择排班", trigger: "change" }],
|
||||
periodStr: [
|
||||
|
@ -610,7 +615,7 @@ const fnGetData = async () => {
|
|||
if (!USER_ID) return;
|
||||
const resData = await getUserView({ USER_ID });
|
||||
const form = resData.pd;
|
||||
form.PASSWORD = "666666";
|
||||
form.PASSWORD = "Aa@123456";
|
||||
form.periodStr = resData.periodStr;
|
||||
form.ISSTUDENT = resData.pd.ISSTUDENT.toString();
|
||||
if (form.USERAVATARURL_CONVERT)
|
||||
|
@ -640,6 +645,12 @@ const fnGetUserScheduling = async (PARENTID, list) => {
|
|||
data[list] = resData.varList;
|
||||
};
|
||||
fnGetUserScheduling("0", "schedulingList");
|
||||
|
||||
const { value: personnelTypeList } = await layoutFnGetPersonnelTypeTraffic({
|
||||
DICTIONARIES_ID: "0b62f92b0b624aab8e89a77304a64d5e",
|
||||
BIANMA: "TRAFFIC_EMPLOYMENT_MANAGE",
|
||||
});
|
||||
data.personnelTypeList = personnelTypeList;
|
||||
const fnChangeSchedulingOne = () => {
|
||||
data.form.SHIFTDUTYTWO = "";
|
||||
data.periodList = [];
|
||||
|
@ -674,6 +685,8 @@ const fnChangeIdCard = () => {
|
|||
const { sex, date } = idCardGetDateAndGender(data.form.USER_ID_CARD);
|
||||
data.form.SEX = sex;
|
||||
data.form.DATE_OF_BIRTH = date;
|
||||
data.form.USERNAME = data.form.USER_ID_CARD;
|
||||
console.log(data.form.USERNAME);
|
||||
};
|
||||
const fnGetLevels = async () => {
|
||||
const { value: nationList } = await layoutFnGetNation();
|
||||
|
@ -683,8 +696,6 @@ const fnGetLevels = async () => {
|
|||
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();
|
||||
|
|
|
@ -96,8 +96,9 @@
|
|||
{{ serialNumber(pagination, $index) }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="USERNAME" label="用户名" />
|
||||
<el-table-column prop="USERNAME" label="用户名" width="150" />
|
||||
<el-table-column prop="NAME" label="姓名" />
|
||||
<el-table-column prop="PHONE" label="手机号" />
|
||||
<el-table-column prop="DEPARTMENT_NAME" label="部门" />
|
||||
<el-table-column
|
||||
prop="POST_NAME"
|
||||
|
@ -135,6 +136,13 @@
|
|||
排班表
|
||||
</el-button>
|
||||
<el-button
|
||||
v-if="
|
||||
!(
|
||||
row.PERSONNEL_TYPE_BIANMA?.indexOf(
|
||||
'TRAFFIC_EMPLOYMENT_DRIVE'
|
||||
) >= 0
|
||||
)
|
||||
"
|
||||
type="primary"
|
||||
text
|
||||
link
|
||||
|
@ -148,7 +156,15 @@
|
|||
编辑
|
||||
</el-button>
|
||||
<el-button
|
||||
v-if="buttonJurisdiction.del && row.ISMAIN === '0'"
|
||||
v-if="
|
||||
buttonJurisdiction.del &&
|
||||
row.ISMAIN === '0' &&
|
||||
!(
|
||||
row.PERSONNEL_TYPE_BIANMA?.indexOf(
|
||||
'TRAFFIC_EMPLOYMENT_DRIVE'
|
||||
) >= 0
|
||||
)
|
||||
"
|
||||
type="primary"
|
||||
text
|
||||
link
|
||||
|
@ -256,7 +272,7 @@ onBeforeRouteUpdate((to) => {
|
|||
const fnResetPassword = debounce(
|
||||
1000,
|
||||
async (USER_ID, NAME) => {
|
||||
await ElMessageBox.confirm(`是否将【${NAME}】重置密码为666666?`, {
|
||||
await ElMessageBox.confirm(`是否将【${NAME}】重置密码为Aa@123456?`, {
|
||||
type: "warning",
|
||||
});
|
||||
await setUserResetPassword({ USER_ID });
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,153 @@
|
|||
<template>
|
||||
<layout-card>
|
||||
<el-divider content-position="left">基本信息</el-divider>
|
||||
<el-descriptions :column="2" border>
|
||||
<el-descriptions-item label="姓名">
|
||||
{{ data.info.NAME }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="人员类型">
|
||||
{{ data.info.PERSONNEL_TYPE_NAME }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item v-if="data.info.CORPINFO_ID" label="部门">
|
||||
{{ data.info.DEPARTMENT_NAME }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item v-if="data.info.CORPINFO_ID" label="岗位">
|
||||
{{ data.info.POST_NAME }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item v-if="data.info.CORPINFO_ID" label="职务">
|
||||
{{ data.info.DUTIES_NAME }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item v-if="data.info.CORPINFO_ID" label="职称">
|
||||
{{ data.info.TITLE_NAME }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item v-if="data.info.CORPINFO_ID" label="入职时间">
|
||||
{{ data.info.ENTRY_DATE }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="生日">
|
||||
{{ data.info.DATE_OF_BIRTH }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="性别">
|
||||
{{ data.info.SEX ? (data.info.SEX === "1" ? "男" : "女") : "" }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="民族">
|
||||
{{ data.info.NATION_NAME }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="文化程度">
|
||||
{{ data.info.DEGREE_OF_EDUCATION_NAME }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="政治面貌">
|
||||
{{ data.info.POLITICAL_OUTLOOK_NAME }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="参加工作时间">
|
||||
{{ data.info.WORKING_DATE }}
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
<div v-for="(item, index) in data.certificateList" :key="index">
|
||||
<el-divider content-position="left">
|
||||
{{
|
||||
item.CERTIFICATE_CATEGORY === "1"
|
||||
? "身份证"
|
||||
: item.CERTIFICATE_CATEGORY === "2"
|
||||
? "驾驶证"
|
||||
: "道路运输从业资格证"
|
||||
}}
|
||||
</el-divider>
|
||||
<el-descriptions :column="2" border>
|
||||
<template>
|
||||
<el-descriptions-item
|
||||
:label="
|
||||
item.CERTIFICATE_CATEGORY === '1'
|
||||
? '身份证(正面)'
|
||||
: item.CERTIFICATE_CATEGORY === '2'
|
||||
? '驾驶证'
|
||||
: '道路运输从业资格证'
|
||||
"
|
||||
:span="item.CERTIFICATE_CATEGORY === '1' ? 1 : 2"
|
||||
>
|
||||
<img
|
||||
v-viewer
|
||||
:src="item.ID_PHOTO_FRONT"
|
||||
width="100"
|
||||
height="100"
|
||||
class="ml-10"
|
||||
/>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item
|
||||
v-if="item.CERTIFICATE_CATEGORY === '1'"
|
||||
label="身份证(背面)"
|
||||
>
|
||||
<img
|
||||
v-viewer
|
||||
:src="item.ID_PHOTO_BACK"
|
||||
width="100"
|
||||
height="100"
|
||||
class="ml-10"
|
||||
/>
|
||||
</el-descriptions-item>
|
||||
</template>
|
||||
<el-descriptions-item
|
||||
v-if="item.CERTIFICATE_CATEGORY === '1'"
|
||||
label="住址"
|
||||
:span="2"
|
||||
>
|
||||
{{ item.ID_ADDRESS }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="证件号码">
|
||||
{{ item.ID_NO }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item
|
||||
v-if="item.CERTIFICATE_CATEGORY !== '1'"
|
||||
:label="
|
||||
item.CERTIFICATE_CATEGORY === '2' ? '准驾车型' : '从业资格类别'
|
||||
"
|
||||
>
|
||||
{{ item.ALLOW_QUALIFICATION }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="签发机关">
|
||||
{{ item.ID_ORGAN }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="有效期" :span="2">
|
||||
{{ item.ID_VALIDITY_START + "至" + item.ID_VALIDITY_END }}
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</div>
|
||||
<div class="tc mt-10">
|
||||
<el-button
|
||||
type="primary"
|
||||
@click="router.back"
|
||||
>
|
||||
返回
|
||||
</el-button>
|
||||
</div>
|
||||
</layout-card>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { getPractitionerInfo } from "@/request/user_practitioner.js";
|
||||
import { reactive } from "vue";
|
||||
import { useRoute, useRouter } from "vue-router";
|
||||
const FILE_URL = import.meta.env.VITE_FILE_URL;
|
||||
const route = useRoute();
|
||||
const router = useRouter();
|
||||
const { USER_ID } = route.query;
|
||||
const data = reactive({
|
||||
info: {},
|
||||
certificateList: [],
|
||||
});
|
||||
const fnGetData = async () => {
|
||||
if (!USER_ID) return;
|
||||
const resData = await getPractitionerInfo({ USER_ID });
|
||||
data.info = resData.pd;
|
||||
resData.certificateList.forEach((item) => {
|
||||
item.ID_PHOTO_FRONT = FILE_URL + item.ID_PHOTO_FRONT;
|
||||
if (item.ID_PHOTO_BACK) {
|
||||
item.ID_PHOTO_BACK = FILE_URL + item.ID_PHOTO_BACK;
|
||||
}
|
||||
});
|
||||
data.certificateList = resData.certificateList;
|
||||
console.log(data.certificateList);
|
||||
};
|
||||
fnGetData();
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss"></style>
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,265 @@
|
|||
<template>
|
||||
<div>
|
||||
<el-card>
|
||||
<el-form
|
||||
:model="searchForm"
|
||||
label-width="100px"
|
||||
@submit.prevent="fnResetPagination"
|
||||
>
|
||||
<el-row>
|
||||
<el-col :span="6">
|
||||
<el-form-item
|
||||
label="用户名/姓名"
|
||||
prop="KEYWORDS"
|
||||
label-width="100px"
|
||||
>
|
||||
<el-input
|
||||
v-model="searchForm.KEYWORDS"
|
||||
placeholder="请输入关键字"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="4">
|
||||
<el-form-item label="人员类型" prop="PERSONNEL_TYPE">
|
||||
<el-select v-model="searchForm.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="6">
|
||||
<el-form-item label-width="10px">
|
||||
<el-button type="primary" native-type="submit">搜索</el-button>
|
||||
<el-button native-type="reset" @click="fnResetPagination">
|
||||
重置
|
||||
</el-button>
|
||||
<el-button native-type="reset" @click="fnWindow"> BI </el-button>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
</el-card>
|
||||
<layout-card>
|
||||
<layout-table
|
||||
ref="tableRef"
|
||||
v-model:pagination="pagination"
|
||||
:data="list"
|
||||
row-key="USER_ID"
|
||||
@get-data="fnGetDataTransfer"
|
||||
>
|
||||
<el-table-column type="selection" width="55"> </el-table-column>
|
||||
<el-table-column label="序号" width="60">
|
||||
<template #default="{ $index }">
|
||||
{{ serialNumber(pagination, $index) }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="NAME" label="从业人员" />
|
||||
<el-table-column
|
||||
prop="PERSONNEL_TYPE_NAME"
|
||||
label="人员类型"
|
||||
width="150"
|
||||
/>
|
||||
<el-table-column prop="USER_ID_CARD" label="身份证号" />
|
||||
<el-table-column prop="PHONE" label="手机号" />
|
||||
<el-table-column label="申请类别">
|
||||
<template #default="{ row }">
|
||||
<span v-if="row.APPLY_TYPE === '1'">入职申请</span>
|
||||
<span v-else-if="row.APPLY_TYPE === '2'">企业入职</span>
|
||||
<span v-else-if="row.APPLY_TYPE === '3'">离职申请</span>
|
||||
<span v-else-if="row.APPLY_TYPE === '4'">企业解聘</span>
|
||||
<span v-else></span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="审核状态">
|
||||
<template #default="{ row }">
|
||||
<div v-if="row.APPLY_TYPE === '1' || row.APPLY_TYPE === '3'">
|
||||
<span v-if="row.APPLY_STATUS === '0'">待审核</span>
|
||||
<span v-else-if="row.APPLY_STATUS === '-1'">审核未通过</span>
|
||||
<span v-else>审核通过</span>
|
||||
</div>
|
||||
<div v-else>
|
||||
<span v-if="row.APPLY_STATUS === '0'">待确认</span>
|
||||
<span v-else-if="row.APPLY_STATUS === '-1'">确认未认可</span>
|
||||
<span v-else>确认完成</span>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="150">
|
||||
<template #default="{ row }">
|
||||
<el-button
|
||||
type="primary"
|
||||
text
|
||||
link
|
||||
@click="
|
||||
router.push({
|
||||
path: '/enterprise_management/user_practitioner/details',
|
||||
query: {
|
||||
USER_ID: row.USER_ID,
|
||||
},
|
||||
})
|
||||
"
|
||||
>
|
||||
查看
|
||||
</el-button>
|
||||
<el-button
|
||||
v-if="
|
||||
buttonJurisdiction.edit &&
|
||||
row.APPLY_STATUS !== '0'
|
||||
"
|
||||
type="primary"
|
||||
text
|
||||
link
|
||||
@click="
|
||||
router.push({
|
||||
path: '/enterprise_management/user_practitioner/edit',
|
||||
query: {
|
||||
USER_ID: row.USER_ID,
|
||||
},
|
||||
})
|
||||
"
|
||||
>
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button
|
||||
v-if="
|
||||
buttonJurisdiction.del &&
|
||||
row.APPLY_STATUS === '0' &&
|
||||
(row.APPLY_TYPE === '1' || row.APPLY_TYPE === '3')
|
||||
"
|
||||
type="danger"
|
||||
text
|
||||
link
|
||||
@click="reviewItem(row)"
|
||||
>
|
||||
审核
|
||||
</el-button>
|
||||
<el-button
|
||||
v-if="buttonJurisdiction.del && row.APPLY_STATUS === '1'"
|
||||
type="danger"
|
||||
text
|
||||
link
|
||||
@click="fnDelete(row)"
|
||||
>
|
||||
解聘
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<template #button>
|
||||
<el-button
|
||||
v-if="buttonJurisdiction.add"
|
||||
type="primary"
|
||||
@click="
|
||||
router.push({
|
||||
path: '/enterprise_management/user_practitioner/add',
|
||||
})
|
||||
"
|
||||
>
|
||||
添加
|
||||
</el-button>
|
||||
<!-- <el-button
|
||||
v-if="buttonJurisdiction.del"
|
||||
type="danger"
|
||||
@click="fnBatchDelete"
|
||||
>
|
||||
批量删除
|
||||
</el-button>-->
|
||||
</template>
|
||||
</layout-table>
|
||||
</layout-card>
|
||||
|
||||
<review
|
||||
v-model:visible="data.reviewDialog.visible"
|
||||
:form="data.reviewDialog.form"
|
||||
@get-data="fnGetDataTransfer"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { nextTick, reactive, ref } from "vue";
|
||||
import { serialNumber } from "@/assets/js/utils.js";
|
||||
import useListData from "@/assets/js/useListData.js";
|
||||
import { ElMessageBox, ElMessage } from "element-plus";
|
||||
import Review from "./review.vue";
|
||||
import { debounce } from "throttle-debounce";
|
||||
import useButtonJurisdiction from "@/assets/js/useButtonJurisdiction.js";
|
||||
import { useRouter } from "vue-router";
|
||||
import {
|
||||
getPractitionerList,
|
||||
setPractitionerDismissal,
|
||||
} from "@/request/user_practitioner.js";
|
||||
import { layoutFnGetPersonnelTypeTraffic } from "@/assets/js/data_dictionary.js";
|
||||
|
||||
const router = useRouter();
|
||||
const buttonJurisdiction = await useButtonJurisdiction("user");
|
||||
const tableRef = ref(null);
|
||||
const { list, pagination, searchForm, fnGetData, fnResetPagination } =
|
||||
useListData(getPractitionerList, {
|
||||
otherParams: {
|
||||
// APPLY_TYPE: "1-3",
|
||||
},
|
||||
});
|
||||
const data = reactive({
|
||||
personnelTypeList: [],
|
||||
reviewDialog: {
|
||||
visible: false,
|
||||
form: {
|
||||
USER_ID: "",
|
||||
// 审核结果
|
||||
REVIEW_RESULT: "",
|
||||
// 审核意见
|
||||
REVIEW_COMMENTS: "",
|
||||
DEPARTMENT_ID: "",
|
||||
POST_ID: "",
|
||||
SHIFTDUTYONE: "",
|
||||
SHIFTDUTYTWO: "",
|
||||
},
|
||||
id: "",
|
||||
},
|
||||
visible: false,
|
||||
info: {},
|
||||
});
|
||||
const fnGetDataTransfer = () => {
|
||||
fnGetData({});
|
||||
};
|
||||
|
||||
const reviewItem = async (row) => {
|
||||
data.reviewDialog.visible = true;
|
||||
await nextTick();
|
||||
data.reviewDialog.form = row;
|
||||
};
|
||||
|
||||
const fnWindow = async () => {
|
||||
window.open(
|
||||
"http://60.10.47.50:9001/#/middlePage?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJwYXNzd2QiOiJMZmtmcUAxMjM0NTYiLCJleHAiOjE3MTEwMzMxMDksInVzZXIiOiJsZnlqemh6cCIsInRhcmdldCI6Imh0dHA6Ly8xOTIuMTY4LjAuNjk6ODA4Mi8jL21pZGRsZVBhZ2U_dG9rZW49ZXlKMGVYQWlPaUpLVjFRaUxDSmhiR2NpT2lKSVV6STFOaUo5LmV5SndZWE56ZDJRaU9pSTJOalkyTmpZaUxDSmxlSEFpT2pFM01UQTRPVFE1TURVc0luVnpaWElpT2lMbHU0cmxuWXJudTRfbXRZN21pb0RtbktfbHZJRGxqNUhsakxybHVwVG1nS1hsc1lBaUxDSjBZWEpuWlhRaU9pSm9kSFJ3T2k4dk5qQXVNVEF1TkRjdU5UQTZPVEF3TVM4akwySnBMMmx1WkdWNEluMC5VSlNtT1BwTjA4N1I3cGYyTDdpRDN2YkxjblQ5MFRQQmtTNm0wdHUtTFU0In0.qTqwPwlAmdqAOzyUJSt6kye5svfSBNV5fbcdhn0jey4"
|
||||
);
|
||||
};
|
||||
// 页面下拉选项字典获取
|
||||
const fnGetLevels = async () => {
|
||||
const { value: personnelTypeList } = await layoutFnGetPersonnelTypeTraffic({
|
||||
DICTIONARIES_ID: "0b62f92b0b624aab8e89a77304a64d5e",
|
||||
BIANMA: "TRAFFIC_EMPLOYMENT_DRIVE",
|
||||
});
|
||||
data.personnelTypeList = personnelTypeList;
|
||||
};
|
||||
fnGetLevels();
|
||||
const fnDelete = debounce(
|
||||
1000,
|
||||
async (row) => {
|
||||
await ElMessageBox.confirm(`确定要解聘【${row.NAME}】吗?`, {
|
||||
type: "warning",
|
||||
});
|
||||
await setPractitionerDismissal({ ...row });
|
||||
ElMessage.success("人员解聘完成");
|
||||
fnGetDataTransfer();
|
||||
},
|
||||
{ atBegin: true }
|
||||
);
|
||||
</script>
|
||||
|
||||
<style scoped></style>
|
|
@ -0,0 +1,377 @@
|
|||
<template>
|
||||
<el-dialog
|
||||
v-model="visible"
|
||||
:title="form.APPLY_TYPE === '1' ? '入职审核' : '离职审核'"
|
||||
:before-close="fnClose"
|
||||
>
|
||||
<el-form ref="formRef" :rules="rules" :model="form" label-width="150px">
|
||||
<el-form-item label="审核结果" prop="REVIEW_RESULT">
|
||||
<el-radio-group v-model="form.REVIEW_RESULT">
|
||||
<el-radio label="1">是</el-radio>
|
||||
<el-radio label="-1">否</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="审核意见" prop="REVIEW_COMMENTS">
|
||||
<el-input v-model="form.REVIEW_COMMENTS" />
|
||||
</el-form-item>
|
||||
<div v-if="form.APPLY_TYPE === '1'">
|
||||
<el-divider v-if="form.REVIEW_RESULT === '1'" content-position="left">
|
||||
工作安排
|
||||
</el-divider>
|
||||
<el-form-item
|
||||
v-if="form.REVIEW_RESULT === '1'"
|
||||
label="部门"
|
||||
prop="DEPARTMENT_ID"
|
||||
>
|
||||
<layout-department
|
||||
v-model="form.DEPARTMENT_ID"
|
||||
@update:model-value="form.POST_ID = ''"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item
|
||||
v-if="form.REVIEW_RESULT === '1'"
|
||||
label="岗位"
|
||||
prop="POST_ID"
|
||||
>
|
||||
<el-select v-model="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-row v-if="form.REVIEW_RESULT === '1'">
|
||||
<el-col :span="10">
|
||||
<el-form-item label="排班" prop="SHIFTDUTYONE">
|
||||
<el-select
|
||||
v-model="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="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-form-item
|
||||
v-if="form.REVIEW_RESULT === '1'"
|
||||
label="当前班次"
|
||||
prop="periodStr"
|
||||
>
|
||||
<el-radio-group v-model="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-form-item
|
||||
v-if="form.REVIEW_RESULT === '1'"
|
||||
label="部门排序"
|
||||
prop="SORT"
|
||||
>
|
||||
<el-input v-model.number="form.SORT" placeholder="请输入" />
|
||||
</el-form-item>
|
||||
<el-form-item
|
||||
v-if="form.REVIEW_RESULT === '1'"
|
||||
label="职务"
|
||||
prop="DUTIES"
|
||||
>
|
||||
<layout-select-create
|
||||
v-model="form.DUTIES"
|
||||
:list="data.dutiesList"
|
||||
@delete-option="fnDictionaryDelete($event, 'POSITION')"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item
|
||||
v-if="form.REVIEW_RESULT === '1'"
|
||||
label="职称"
|
||||
prop="TITLE"
|
||||
>
|
||||
<layout-select-create
|
||||
v-model="form.TITLE"
|
||||
:list="data.professionalTitleList"
|
||||
@delete-option="fnDictionaryDelete($event, 'JOB_TITLE')"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item
|
||||
v-if="form.REVIEW_RESULT === '1'"
|
||||
label="入职日期"
|
||||
prop="ENTRY_DATE"
|
||||
>
|
||||
<el-date-picker
|
||||
v-model="form.ENTRY_DATE"
|
||||
value-format="YYYY-MM-DD"
|
||||
format="YYYY-MM-DD"
|
||||
type="date"
|
||||
placeholder="选择日期"
|
||||
/>
|
||||
</el-form-item>
|
||||
</div>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<el-button @click="fnClose">取消</el-button>
|
||||
<el-button type="primary" @click="fnSubmit"> 确定 </el-button>
|
||||
</template>
|
||||
</el-dialog>
|
||||
|
||||
<scheduling
|
||||
:id="form.SHIFTDUTYTWO"
|
||||
v-model:visible="data.scheduleVisible"
|
||||
:info="data.scheduleInfo"
|
||||
/>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { reactive, ref, watch, watchEffect } from "vue";
|
||||
import { useVModels } from "@vueuse/core";
|
||||
import LayoutDepartment from "@/components/department/index.vue";
|
||||
import LayoutSelectCreate from "@/components/select_create/index.vue";
|
||||
import useFormValidate from "@/assets/js/useFormValidate.js";
|
||||
import { ElMessageBox, ElMessage } from "element-plus";
|
||||
import { debounce } from "throttle-debounce";
|
||||
import { getPostListAll } from "@/request/data_dictionary.js";
|
||||
import {
|
||||
getUserCurrentShiftList,
|
||||
getUserScheduling,
|
||||
setDictionaryDelete,
|
||||
} from "@/request/enterprise_management.js";
|
||||
import {
|
||||
layoutFnGetDuties,
|
||||
layoutFnGetProfessionalTitle,
|
||||
} from "@/assets/js/data_dictionary.js";
|
||||
import { setPractitionerReview } from "@/request/user_practitioner.js";
|
||||
|
||||
const props = defineProps({
|
||||
visible: {
|
||||
type: Boolean,
|
||||
required: true,
|
||||
default: false,
|
||||
},
|
||||
form: {
|
||||
type: Object,
|
||||
required: true,
|
||||
default: () => ({}),
|
||||
},
|
||||
});
|
||||
const emits = defineEmits(["update:visible", "update:form", "get-data"]);
|
||||
const { visible, form } = useVModels(props, emits);
|
||||
const formRef = ref(null);
|
||||
const data = reactive({
|
||||
postList: [],
|
||||
schedulingList: [],
|
||||
schedulingList1: [],
|
||||
periodList: [],
|
||||
dutiesList: [],
|
||||
professionalTitleList: [],
|
||||
scheduleInfo: {
|
||||
WORKSTATUS: "",
|
||||
DURATION: "",
|
||||
WORKPERIOD: "",
|
||||
},
|
||||
scheduleVisible: false,
|
||||
});
|
||||
const rules = {
|
||||
REVIEW_RESULT: [
|
||||
{ required: true, message: "审核结果不能为空", trigger: "blur" },
|
||||
],
|
||||
REVIEW_COMMENTS: [
|
||||
{ required: true, message: "审核意见不能为空", trigger: "change" },
|
||||
],
|
||||
DEPARTMENT_ID: [{ required: true, message: "请选择部门", trigger: "change" }],
|
||||
POST_ID: [{ required: true, message: "请选择岗位", trigger: "change" }],
|
||||
SHIFTDUTYONE: [{ required: true, message: "请选择排班", trigger: "change" }],
|
||||
SHIFTDUTYTWO: [{ required: true, message: "请选择排班", trigger: "change" }],
|
||||
periodStr: [
|
||||
{ required: true, message: "请选择完整的排班类型", trigger: "change" },
|
||||
],
|
||||
SORT: [
|
||||
{ required: true, message: "请输入排序", trigger: "blur" },
|
||||
{ type: "number", message: "请输入数字类型", trigger: "blur" },
|
||||
],
|
||||
INCUMBENCY: [
|
||||
{ required: true, message: "在职情况不能为空", trigger: "change" },
|
||||
],
|
||||
TITLE: [{ required: true, message: "职称不能为空", trigger: "change" }],
|
||||
DUTIES: [{ required: true, message: "职务不能为空", trigger: "change" }],
|
||||
ENTRY_DATE: [
|
||||
{ required: true, message: "请选择入职日期", trigger: "change" },
|
||||
],
|
||||
};
|
||||
watchEffect(() => {
|
||||
if (form.value.DEPARTMENT_ID) fnGetPost(form.value.DEPARTMENT_ID);
|
||||
if (form.value.SHIFTDUTYONE)
|
||||
fnGetUserScheduling(form.value.SHIFTDUTYONE, "schedulingList1");
|
||||
if (form.value.SHIFTDUTYTWO)
|
||||
fnGetUserCurrentShiftList(form.value.SHIFTDUTYTWO);
|
||||
});
|
||||
|
||||
const fnGetPost = async (DEPARTMENT_ID) => {
|
||||
const resData = await getPostListAll({ DEPARTMENT_ID });
|
||||
data.postList = resData.postList;
|
||||
};
|
||||
|
||||
const stop = watch(
|
||||
() => form.value.REVIEW_RESULT,
|
||||
(val) => {
|
||||
if (val === "1") {
|
||||
fnGetLevels();
|
||||
stop && stop();
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
const fnGetLevels = async () => {
|
||||
const { value: dutiesList } = await layoutFnGetDuties();
|
||||
data.dutiesList = dutiesList;
|
||||
const { value: professionalTitleList } = await layoutFnGetProfessionalTitle();
|
||||
data.professionalTitleList = professionalTitleList;
|
||||
};
|
||||
const fnGetUserScheduling = async (PARENTID, list) => {
|
||||
const resData = await getUserScheduling({ PARENTID });
|
||||
data[list] = resData.varList;
|
||||
};
|
||||
fnGetUserScheduling("0", "schedulingList");
|
||||
const fnChangeSchedulingOne = () => {
|
||||
form.SHIFTDUTYTWO = "";
|
||||
data.periodList = [];
|
||||
data.scheduleInfo = {
|
||||
WORKSTATUS: "",
|
||||
DURATION: "",
|
||||
WORKPERIOD: "",
|
||||
};
|
||||
form.periodStr = "";
|
||||
};
|
||||
const fnChangeSchedulingTwo = () => {
|
||||
data.scheduleInfo = {
|
||||
WORKSTATUS: "",
|
||||
DURATION: "",
|
||||
WORKPERIOD: "",
|
||||
};
|
||||
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 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,
|
||||
}
|
||||
);
|
||||
|
||||
const fnClose = () => {
|
||||
formRef.value.resetFields();
|
||||
visible.value = false;
|
||||
};
|
||||
const fnSubmit = debounce(
|
||||
1000,
|
||||
async () => {
|
||||
await useFormValidate(formRef);
|
||||
form.value.WORKSTATUS = data.scheduleInfo.WORKSTATUS;
|
||||
form.value.DURATION = data.scheduleInfo.DURATION;
|
||||
form.value.WORKPERIOD = data.scheduleInfo.WORKPERIOD;
|
||||
if (fnFindValueInList("dutiesList", form.value.DUTIES)) {
|
||||
form.value.letDutiesType = "select";
|
||||
form.value.DUTIESValue = "";
|
||||
} else {
|
||||
form.value.letDutiesType = "value";
|
||||
form.value.DUTIESValue = form.value.DUTIES;
|
||||
}
|
||||
if (fnFindValueInList("professionalTitleList", form.value.TITLE)) {
|
||||
form.value.letTitleType = "select";
|
||||
form.value.letTitleValue = "";
|
||||
} else {
|
||||
form.value.letTitleType = "value";
|
||||
form.value.letTitleValue = form.value.TITLE;
|
||||
}
|
||||
|
||||
if (form.value.APPLY_TYPE === "1" && form.value.REVIEW_RESULT === "1")
|
||||
form.value.INCUMBENCY = "bd4d802e94354230b1bb19cfabd7f810"; // 在职:bd4d802e94354230b1bb19cfabd7f810
|
||||
else if (form.value.APPLY_TYPE === "3" && form.value.REVIEW_RESULT === "1")
|
||||
form.value.INCUMBENCY = "4dd28e91b104410b85c25a792c424172"; // 离职:4dd28e91b104410b85c25a792c424172
|
||||
// console.log(form.value);
|
||||
await setPractitionerReview({ ...form.value });
|
||||
ElMessage.success("操作成功");
|
||||
fnClose();
|
||||
emits("get-data");
|
||||
},
|
||||
{ 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>
|
|
@ -0,0 +1,248 @@
|
|||
<template>
|
||||
<el-dialog
|
||||
v-model="visible"
|
||||
:title="type === 'add' ? '新增' : '修改'"
|
||||
@close="fnClose"
|
||||
@open="fnQuestionTypeChange"
|
||||
>
|
||||
<el-form ref="formRef" :rules="rules" :model="form" label-width="110px">
|
||||
<el-form-item label="试题类型" prop="QUESTIONTYPE">
|
||||
<el-select v-model="form.QUESTIONTYPE" @change="fnQuestionTypeChange">
|
||||
<el-option
|
||||
v-for="item in questionTypeOptions"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="题干" prop="QUESTIONDRY">
|
||||
<el-input
|
||||
v-model="form.QUESTIONDRY"
|
||||
type="textarea"
|
||||
:autosize="{ minRows: 3 }"
|
||||
/>
|
||||
</el-form-item>
|
||||
<template v-if="form.QUESTIONTYPE !== '3' && form.QUESTIONTYPE !== '4'">
|
||||
<el-form-item label="选项A" prop="OPTIONA">
|
||||
<el-input v-model="form.OPTIONA" />
|
||||
</el-form-item>
|
||||
<el-form-item label="选项B" prop="OPTIONB">
|
||||
<el-input v-model="form.OPTIONB" />
|
||||
</el-form-item>
|
||||
<el-form-item label="选项C" prop="OPTIONC">
|
||||
<el-input v-model="form.OPTIONC" />
|
||||
</el-form-item>
|
||||
<el-form-item label="选项D" prop="OPTIOND">
|
||||
<el-input v-model="form.OPTIOND" />
|
||||
</el-form-item>
|
||||
</template>
|
||||
<el-form-item label="答案" prop="ANSWER">
|
||||
<el-select v-model="form.ANSWER">
|
||||
<el-option
|
||||
v-for="item in answerOptions"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="分值" prop="SCORE">
|
||||
<el-input-number v-model="form.SCORE" />
|
||||
</el-form-item>
|
||||
<el-form-item label="试题标签" prop="LABEL_TYPE">
|
||||
<el-select v-model="form.LABEL_TYPE">
|
||||
<el-option
|
||||
v-for="item in testQuestionLabels"
|
||||
:key="item.DICTIONARIES_ID"
|
||||
:label="item.NAME"
|
||||
:value="item.DICTIONARIES_ID"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="关联课件名称" prop="VIDEOCOURSEWARE_ID">
|
||||
<el-select-v2
|
||||
v-model="form.VIDEOCOURSEWARE_ID"
|
||||
:options="associatedCoursewareName"
|
||||
filterable
|
||||
:props="{ label: 'COURSEWARENAME', value: 'VIDEOCOURSEWARE_ID' }"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="答案解析" prop="DESCR">
|
||||
<el-input
|
||||
v-model="form.DESCR"
|
||||
type="textarea"
|
||||
:autosize="{ minRows: 3 }"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<el-button @click="fnClose">取消</el-button>
|
||||
<el-button type="primary" @click="fnSubmit">确定</el-button>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { useVModels } from "@vueuse/core";
|
||||
import { nextTick, ref } from "vue";
|
||||
import { debounce } from "throttle-debounce";
|
||||
import useFormValidate from "@/assets/js/useFormValidate.js";
|
||||
import { ElMessage } from "element-plus";
|
||||
import { layoutFnGetTestQuestionLabels } from "@/assets/js/data_dictionary.js";
|
||||
import {
|
||||
getAssociatedCoursewareNameList,
|
||||
setpaperQuestionCacheQuestionsAdd,
|
||||
setpaperQuestionCacheQuestionsEdit,
|
||||
} from "@/request/training_process_management.js";
|
||||
import { cloneDeep } from "lodash-es";
|
||||
|
||||
const questionTypeOptions = [
|
||||
{ value: "1", label: "单选题" },
|
||||
{ value: "2", label: "多选题" },
|
||||
{ value: "3", label: "判断题" },
|
||||
];
|
||||
const props = defineProps({
|
||||
visible: {
|
||||
type: Boolean,
|
||||
required: true,
|
||||
default: false,
|
||||
},
|
||||
form: {
|
||||
type: Object,
|
||||
required: true,
|
||||
default: () => ({}),
|
||||
},
|
||||
type: {
|
||||
type: String,
|
||||
required: true,
|
||||
default: "",
|
||||
},
|
||||
id: {
|
||||
type: String,
|
||||
required: true,
|
||||
default: "",
|
||||
},
|
||||
isInherit: {
|
||||
type: Boolean,
|
||||
required: true,
|
||||
default: false,
|
||||
},
|
||||
});
|
||||
const emits = defineEmits([
|
||||
"update:visible",
|
||||
"update:form",
|
||||
"get-data",
|
||||
"confirm",
|
||||
]);
|
||||
const { visible, form } = useVModels(props, emits);
|
||||
const formRef = ref(null);
|
||||
const answerOptions = ref([]);
|
||||
const associatedCoursewareName = ref([]);
|
||||
const rules = {
|
||||
QUESTIONTYPE: [
|
||||
{ required: true, message: "请选择试题类型", trigger: "change" },
|
||||
],
|
||||
QUESTIONDRY: [{ required: true, message: "请输入题干", trigger: "blur" }],
|
||||
OPTIONA: [{ required: true, message: "请输入选项A", trigger: "blur" }],
|
||||
OPTIONB: [{ required: true, message: "请输入选项B", trigger: "blur" }],
|
||||
OPTIONC: [{ required: true, message: "请输入选项C", trigger: "blur" }],
|
||||
OPTIOND: [{ required: true, message: "请输入选项D", trigger: "blur" }],
|
||||
ANSWER: [{ required: true, message: "请选择答案", trigger: "change" }],
|
||||
SCORE: [{ required: true, message: "请输入分值", trigger: "blur" }],
|
||||
LABEL_TYPE: [
|
||||
{ required: true, message: "请选择试题标签", trigger: "change" },
|
||||
],
|
||||
VIDEOCOURSEWARE_ID: [
|
||||
{ required: true, message: "请选择关联课件名称", trigger: "change" },
|
||||
],
|
||||
};
|
||||
const testQuestionLabels = await layoutFnGetTestQuestionLabels();
|
||||
const fnGetAssociatedCoursewareNameList = async () => {
|
||||
const resData = await getAssociatedCoursewareNameList();
|
||||
associatedCoursewareName.value = resData.CourseWareNameList;
|
||||
};
|
||||
fnGetAssociatedCoursewareNameList();
|
||||
const fnQuestionTypeChange = async () => {
|
||||
await nextTick();
|
||||
if (form.value.QUESTIONTYPE === "1") {
|
||||
answerOptions.value = [
|
||||
{ value: "A", label: "A" },
|
||||
{ value: "B", label: "B" },
|
||||
{ value: "C", label: "C" },
|
||||
{ value: "D", label: "D" },
|
||||
];
|
||||
} else if (form.value.QUESTIONTYPE === "2") {
|
||||
answerOptions.value = [
|
||||
{ value: "AB", label: "AB" },
|
||||
{ value: "AC", label: "AC" },
|
||||
{ value: "AD", label: "AD" },
|
||||
{ value: "BC", label: "BC" },
|
||||
{ value: "BD", label: "BD" },
|
||||
{ value: "CD", label: "CD" },
|
||||
{ value: "ABC", label: "ABC" },
|
||||
{ value: "ABD", label: "ABD" },
|
||||
{ value: "ACD", label: "ACD" },
|
||||
{ value: "BCD", label: "BCD" },
|
||||
{ value: "ABCD", label: "ABCD" },
|
||||
];
|
||||
} else if (form.value.QUESTIONTYPE === "3") {
|
||||
answerOptions.value = [
|
||||
{ value: "A", label: "对" },
|
||||
{ value: "B", label: "错" },
|
||||
];
|
||||
} else {
|
||||
answerOptions.value = [];
|
||||
}
|
||||
};
|
||||
const fnClose = () => {
|
||||
formRef.value.resetFields();
|
||||
visible.value = false;
|
||||
};
|
||||
const fnSubmit = debounce(
|
||||
1000,
|
||||
async () => {
|
||||
await useFormValidate(formRef);
|
||||
if (form.value.QUESTIONTYPE === "3") {
|
||||
form.value.OPTIONA = "对";
|
||||
form.value.OPTIONB = "错";
|
||||
form.value.OPTIONC = "";
|
||||
form.value.OPTIOND = "";
|
||||
}
|
||||
let arr = [];
|
||||
if (form.value.QUESTIONTYPE === "3") {
|
||||
arr = ["#" + form.value.OPTIONA + "#", "#" + form.value.OPTIONB + "#"];
|
||||
} else if (form.value.QUESTIONTYPE !== "4") {
|
||||
arr = [
|
||||
"#" + form.value.OPTIONA + "#",
|
||||
"#" + form.value.OPTIONB + "#",
|
||||
"#" + form.value.OPTIONC + "#",
|
||||
"#" + form.value.OPTIOND + "#",
|
||||
];
|
||||
}
|
||||
const s = arr.join(",") + ",";
|
||||
for (let i = 0; i < arr.length - 1; i++) {
|
||||
if (s.replace(arr[i] + ",", "").indexOf(arr[i]) > -1) {
|
||||
ElMessage.warning("试题答案重复:" + arr[i].split("#").join(""));
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (!props.isInherit) {
|
||||
props.type === "add"
|
||||
? await setpaperQuestionCacheQuestionsAdd({
|
||||
...form.value,
|
||||
STAGEEXAMPAPERINPUT_ID: props.id,
|
||||
})
|
||||
: await setpaperQuestionCacheQuestionsEdit({ ...form.value });
|
||||
emits("get-data");
|
||||
} else {
|
||||
emits("confirm", cloneDeep(form.value));
|
||||
}
|
||||
ElMessage.success("操作成功");
|
||||
fnClose();
|
||||
},
|
||||
{ atBegin: true }
|
||||
);
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss"></style>
|
|
@ -0,0 +1,297 @@
|
|||
<template>
|
||||
<layout-card>
|
||||
<el-divider content-position="left">试卷基本信息</el-divider>
|
||||
<el-form
|
||||
ref="formRef"
|
||||
:model="data.form"
|
||||
:rules="rules"
|
||||
label-width="100px"
|
||||
>
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="试卷名称" prop="EXAMNAME">
|
||||
<el-input v-model="data.form.EXAMNAME" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="总分数" prop="EXAMSCORE">
|
||||
<el-input-number v-model="data.form.EXAMSCORE" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="合格分数" prop="PASSSCORE">
|
||||
<el-input-number v-model="data.form.PASSSCORE" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
<div v-if="type !== 'add'">
|
||||
<el-divider content-position="left">试卷题目信息</el-divider>
|
||||
<el-form
|
||||
:model="searchForm"
|
||||
label-width="100px"
|
||||
@submit.prevent="fnGetData"
|
||||
>
|
||||
<el-row>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="题目内容" prop="KEYWORDS">
|
||||
<el-input v-model="searchForm.KEYWORDS" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="题目类型" prop="QUESTIONTYPE">
|
||||
<el-select v-model="searchForm.QUESTIONTYPE">
|
||||
<el-option
|
||||
v-for="item in questionTypeOptions"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label-width="10px">
|
||||
<el-button type="primary" native-type="submit">搜索</el-button>
|
||||
<el-button native-type="reset" @click="fnGetData">
|
||||
重置
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label-width="10px" class="end">
|
||||
<el-button type="primary" @click="fnAddOrEdit({}, '')">
|
||||
新增试题
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
<div class="items mt-20 p-20">
|
||||
<div
|
||||
v-for="(item, index) in list"
|
||||
:key="item.PAPER_QUESTION_ID"
|
||||
class="item ptb-20"
|
||||
>
|
||||
<div class="mt-10">
|
||||
{{ index + 1 }}.
|
||||
<span v-if="item.QUESTIONTYPE === '1'"> (单选题) </span>
|
||||
<span v-if="item.QUESTIONTYPE === '2'"> (多选题) </span>
|
||||
<span v-if="item.QUESTIONTYPE === '3'"> (判断题) </span>
|
||||
{{ item.QUESTIONDRY }}
|
||||
<span class="ml-10">(题目分值:{{ item.SCORE }})</span>
|
||||
</div>
|
||||
<div class="mt-10 ml-30">
|
||||
<el-radio-group
|
||||
v-if="item.QUESTIONTYPE === '1'"
|
||||
disabled
|
||||
:model-value="item.ANSWER"
|
||||
>
|
||||
<el-radio label="A">A.{{ item.OPTIONA }}</el-radio>
|
||||
<el-radio label="B">B.{{ item.OPTIONB }}</el-radio>
|
||||
<el-radio label="C">C.{{ item.OPTIONC }}</el-radio>
|
||||
<el-radio label="D">D.{{ item.OPTIOND }}</el-radio>
|
||||
</el-radio-group>
|
||||
<el-checkbox-group
|
||||
v-if="item.QUESTIONTYPE === '2'"
|
||||
disabled
|
||||
:model-value="item.ANSWER?.split('')"
|
||||
>
|
||||
<el-checkbox label="A">A.{{ item.OPTIONA }}</el-checkbox>
|
||||
<el-checkbox label="B">B.{{ item.OPTIONB }}</el-checkbox>
|
||||
<el-checkbox label="C">C.{{ item.OPTIONC }}</el-checkbox>
|
||||
<el-checkbox label="D">D.{{ item.OPTIOND }}</el-checkbox>
|
||||
</el-checkbox-group>
|
||||
<el-radio-group
|
||||
v-if="item.QUESTIONTYPE === '3'"
|
||||
disabled
|
||||
:model-value="item.ANSWER"
|
||||
>
|
||||
<el-radio label="A">A.{{ item.OPTIONA }}</el-radio>
|
||||
<el-radio label="B">B.{{ item.OPTIONB }}</el-radio>
|
||||
</el-radio-group>
|
||||
</div>
|
||||
<div class="flex">
|
||||
<div>
|
||||
<div class="mt-10">答案:{{ item.ANSWER }}</div>
|
||||
<div class="mt-10">答案解析:{{ item.DESCR }}</div>
|
||||
<div class="mt-10">关联课件名称:{{ item.COURSEWARENAME }}</div>
|
||||
</div>
|
||||
<div class="tr">
|
||||
<el-button @click="fnAddOrEdit(item, index)">编辑</el-button>
|
||||
<el-button @click="fnDelete(item.PAPER_QUESTION_ID, index)">
|
||||
删除
|
||||
</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mt-10 tc">
|
||||
<el-button type="primary" @click="fnSubmit"> 保存修改 </el-button>
|
||||
</div>
|
||||
<add-test-questions
|
||||
:id="STAGEEXAMPAPERINPUT_ID"
|
||||
v-model:visible="data.addOrEditDialog.visible"
|
||||
v-model:form="data.addOrEditDialog.form"
|
||||
:type="data.addOrEditDialog.type"
|
||||
:is-inherit="type === 'inherit'"
|
||||
@get-data="fnGetDataInfo"
|
||||
@confirm="fnAddTestQuestionsConfirm"
|
||||
/>
|
||||
</layout-card>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { nextTick, reactive, ref } from "vue";
|
||||
import { ElMessage, ElMessageBox } from "element-plus";
|
||||
import { useRoute, useRouter } from "vue-router";
|
||||
import { debounce } from "throttle-debounce";
|
||||
import useFormValidate from "@/assets/js/useFormValidate.js";
|
||||
import {
|
||||
setpaperQuestionCacheDelete,
|
||||
setstageexampaperCacheEdit,
|
||||
} from "@/request/training_process_management.js";
|
||||
import {
|
||||
getpaperQuestionCacheQuestions,
|
||||
getStagexampaperCacheView,
|
||||
} from "@/request/training_resource_management.js";
|
||||
import useListData from "@/assets/js/useListData.js";
|
||||
import { cloneDeep, sumBy } from "lodash-es";
|
||||
import AddTestQuestions from "./components/add_test_questions.vue";
|
||||
|
||||
const route = useRoute();
|
||||
const router = useRouter();
|
||||
const { type, STAGEEXAMPAPERINPUT_ID } = route.query;
|
||||
|
||||
const questionTypeOptions = [
|
||||
{ value: "1", label: "单选题" },
|
||||
{ value: "2", label: "多选题" },
|
||||
{ value: "3", label: "判断题" },
|
||||
];
|
||||
const rules = {
|
||||
EXAMNAME: [{ required: true, message: "请输入试卷名称", trigger: "blur" }],
|
||||
EXAMSCORE: [{ required: true, message: "请输入总分数", trigger: "blur" }],
|
||||
PASSSCORE: [{ required: true, message: "请输入合格分数", trigger: "blur" }],
|
||||
fileList: [{ required: true, message: "请上传试题", trigger: "change" }],
|
||||
};
|
||||
const formRef = ref(null);
|
||||
const data = reactive({
|
||||
form: {
|
||||
EXAMNAME: "",
|
||||
EXAMSCORE: 0,
|
||||
PASSSCORE: 0,
|
||||
fileList: [],
|
||||
},
|
||||
addOrEditDialog: {
|
||||
visible: false,
|
||||
form: {
|
||||
QUESTIONTYPE: "",
|
||||
QUESTIONDRY: "",
|
||||
OPTIONA: "",
|
||||
OPTIONB: "",
|
||||
OPTIONC: "",
|
||||
OPTIOND: "",
|
||||
ANSWER: "",
|
||||
SCORE: 0,
|
||||
LABEL_TYPE: "",
|
||||
VIDEOCOURSEWARE_ID: "",
|
||||
},
|
||||
type: "",
|
||||
index: "",
|
||||
},
|
||||
});
|
||||
const { list, searchForm, fnGetData } = useListData(
|
||||
getpaperQuestionCacheQuestions,
|
||||
{
|
||||
otherParams: { STAGEEXAMPAPERINPUT_ID },
|
||||
immediate: false,
|
||||
usePagination: false,
|
||||
}
|
||||
);
|
||||
const fnGetDataInfo = async () => {
|
||||
if (!STAGEEXAMPAPERINPUT_ID) return;
|
||||
const resData = await getStagexampaperCacheView({ STAGEEXAMPAPERINPUT_ID });
|
||||
resData.pd.EXAMSCORE = +resData.pd.EXAMSCORE;
|
||||
resData.pd.PASSSCORE = +resData.pd.PASSSCORE;
|
||||
data.form = resData.pd;
|
||||
fnGetData();
|
||||
};
|
||||
fnGetDataInfo();
|
||||
|
||||
const fnAddOrEdit = async (row, index) => {
|
||||
data.addOrEditDialog.visible = true;
|
||||
await nextTick();
|
||||
data.addOrEditDialog.type = row.PAPER_QUESTION_ID ? "edit" : "add";
|
||||
data.addOrEditDialog.index = index;
|
||||
if (row.PAPER_QUESTION_ID) {
|
||||
data.addOrEditDialog.form = cloneDeep(row);
|
||||
data.addOrEditDialog.form.SCORE = +row.SCORE;
|
||||
}
|
||||
};
|
||||
const fnAddTestQuestionsConfirm = (value) => {
|
||||
if (data.addOrEditDialog.type === "add") list.value.push(value);
|
||||
else list.value.splice(data.addOrEditDialog.index, 1, value);
|
||||
data.form.EXAMSCORE = sumBy(list.value, (item) => +item.SCORE);
|
||||
};
|
||||
const fnDelete = debounce(
|
||||
1000,
|
||||
async (PAPER_QUESTION_ID) => {
|
||||
await ElMessageBox.confirm("确定要删除吗?", {
|
||||
type: "warning",
|
||||
});
|
||||
|
||||
await setpaperQuestionCacheDelete({
|
||||
PAPER_QUESTION_ID,
|
||||
STAGEEXAMPAPERINPUT_ID,
|
||||
});
|
||||
ElMessage.success("删除成功");
|
||||
await fnGetDataInfo();
|
||||
},
|
||||
{ atBegin: true }
|
||||
);
|
||||
|
||||
const fnSubmit = debounce(
|
||||
1000,
|
||||
async () => {
|
||||
await useFormValidate(formRef);
|
||||
if (data.form.PASSSCORE > data.form.EXAMSCORE) {
|
||||
ElMessage.warning("合格分数不能大于总分数");
|
||||
return;
|
||||
}
|
||||
await setstageexampaperCacheEdit({
|
||||
...data.form,
|
||||
});
|
||||
ElMessage.success("保存成功");
|
||||
router.back();
|
||||
},
|
||||
{ atBegin: true }
|
||||
);
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
.items {
|
||||
border: 1px solid var(--el-border-color);
|
||||
|
||||
.item {
|
||||
border-bottom: 1px dashed #ebeef5;
|
||||
|
||||
&:first-child {
|
||||
padding-top: 0;
|
||||
}
|
||||
|
||||
&:last-child {
|
||||
border-bottom: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.flex {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
div {
|
||||
flex: 1;
|
||||
}
|
||||
}
|
||||
</style>
|
|
@ -0,0 +1,153 @@
|
|||
<template>
|
||||
<div>
|
||||
<el-card>
|
||||
<el-form
|
||||
:model="searchForm"
|
||||
label-width="100px"
|
||||
@submit.prevent="fnResetPaginationTransfer"
|
||||
>
|
||||
<el-row>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="试卷名称:">
|
||||
<el-input v-model="searchForm.KEYWORDS" placeholder="搜索" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="创建时间" prop="dates">
|
||||
<el-date-picker
|
||||
v-model="searchForm.dates"
|
||||
value-format="YYYY-MM-DD"
|
||||
format="YYYY-MM-DD"
|
||||
type="daterange"
|
||||
range-separator="至"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="满分:">
|
||||
<el-input v-model="searchForm.EXAMSCORE" placeholder="满分" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label-width="10px">
|
||||
<el-button type="primary" native-type="submit">搜索</el-button>
|
||||
<el-button native-type="reset" @click="fnResetPaginationTransfer">
|
||||
重置
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
</el-card>
|
||||
<layout-card>
|
||||
<layout-table
|
||||
ref="tableRef"
|
||||
v-model:pagination="pagination"
|
||||
:data="list"
|
||||
@get-data="fnGetDataTransfer"
|
||||
>
|
||||
<el-table-column label="序号" width="60" fixed="left">
|
||||
<template #default="{ $index }">
|
||||
{{ serialNumber(pagination, $index) }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="EXAMNAME" label="试卷名称" />
|
||||
<el-table-column prop="CREATTIME" label="上传时间" align="center" />
|
||||
<el-table-column prop="EXAMSCORE" label="满分" align="center" />
|
||||
<el-table-column label="试卷类型" width="150">
|
||||
<template #default="{ row }">
|
||||
{{ translationStatus(row.SOURCETYPE, TypeOfTestPaperList) }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作">
|
||||
<template #default="{ row }">
|
||||
<el-button
|
||||
type="text"
|
||||
@click="
|
||||
router.push({
|
||||
path: '/training_process_management/examdraft_management/edit',
|
||||
query: {
|
||||
STAGEEXAMPAPERINPUT_ID: row.STAGEEXAMPAPERINPUT_ID,
|
||||
},
|
||||
})
|
||||
"
|
||||
>编辑</el-button
|
||||
>
|
||||
<el-button type="text" @click="fnDelete(row.STAGEEXAMPAPERINPUT_ID)"
|
||||
>删除</el-button
|
||||
>
|
||||
<el-button
|
||||
type="text"
|
||||
@click="convertStageexam(row.STAGEEXAMPAPERINPUT_ID, '0')"
|
||||
>转成正式试卷</el-button
|
||||
>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</layout-table>
|
||||
</layout-card>
|
||||
</div>
|
||||
</template>
|
||||
<script setup>
|
||||
import useListData from "@/assets/js/useListData.js";
|
||||
import { useRouter } from "vue-router";
|
||||
import {
|
||||
getExamdraftList,
|
||||
setstageexampaperCacheDelete,
|
||||
setstageexampaperCacheformal,
|
||||
} from "@/request/training_process_management.js";
|
||||
import { serialNumber, translationStatus } from "@/assets/js/utils.js";
|
||||
import { debounce } from "throttle-debounce";
|
||||
import { ElMessage, ElMessageBox } from "element-plus";
|
||||
const router = useRouter();
|
||||
|
||||
const TypeOfTestPaperList = [
|
||||
{ ID: "1", NAME: "平台试卷" },
|
||||
{ ID: "2", NAME: "自建试卷" },
|
||||
];
|
||||
|
||||
const { list, pagination, searchForm, fnGetData, fnResetPagination, tableRef } =
|
||||
useListData(getExamdraftList);
|
||||
|
||||
const fnGetDataTransfer = () => {
|
||||
fnGetData({
|
||||
STARTTIME: searchForm.value.dates?.[0],
|
||||
ENDTIME: searchForm.value.dates?.[1],
|
||||
});
|
||||
};
|
||||
const fnResetPaginationTransfer = () => {
|
||||
fnResetPagination({
|
||||
STARTTIME: searchForm.value.dates?.[0],
|
||||
ENDTIME: searchForm.value.dates?.[1],
|
||||
});
|
||||
};
|
||||
|
||||
const fnDelete = debounce(
|
||||
1000,
|
||||
async (STAGEEXAMPAPERINPUT_ID) => {
|
||||
await ElMessageBox.confirm("确定要删除吗?", {
|
||||
type: "warning",
|
||||
});
|
||||
await setstageexampaperCacheDelete({ STAGEEXAMPAPERINPUT_ID });
|
||||
ElMessage.success("删除成功");
|
||||
fnResetPaginationTransfer();
|
||||
},
|
||||
{ atBegin: true }
|
||||
);
|
||||
|
||||
const convertStageexam = debounce(
|
||||
1000,
|
||||
async (STAGEEXAMPAPERINPUT_ID) => {
|
||||
await ElMessageBox.confirm("确定要转成正式试卷吗?", {
|
||||
type: "warning",
|
||||
});
|
||||
await setstageexampaperCacheformal({ STAGEEXAMPAPERINPUT_ID });
|
||||
ElMessage.success("转成正式试卷成功");
|
||||
fnResetPaginationTransfer();
|
||||
},
|
||||
{ atBegin: true }
|
||||
);
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss"></style>
|
|
@ -0,0 +1,362 @@
|
|||
<template>
|
||||
<div>
|
||||
<el-card>
|
||||
<el-form
|
||||
:model="searchForm"
|
||||
label-width="100px"
|
||||
@submit.prevent="fnResetPaginationTransfer"
|
||||
>
|
||||
<el-row>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="学员姓名" prop="STUDENT_NAME">
|
||||
<el-input v-model="searchForm.STUDENT_NAME" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="班级编码" prop="CODE">
|
||||
<el-input v-model="searchForm.CODE" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="班级名称" prop="KEYWORDS">
|
||||
<el-input v-model="searchForm.KEYWORDS" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="开始时间" prop="TIME">
|
||||
<el-date-picker
|
||||
v-model="searchForm.TIME"
|
||||
value-format="YYYY-MM-DD"
|
||||
format="YYYY-MM-DD"
|
||||
type="daterange"
|
||||
range-separator="至"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="结束时间" prop="TIME1">
|
||||
<el-date-picker
|
||||
v-model="searchForm.TIME1"
|
||||
value-format="YYYY-MM-DD"
|
||||
format="YYYY-MM-DD"
|
||||
type="daterange"
|
||||
range-separator="至"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="入班时间" prop="TIME2">
|
||||
<el-date-picker
|
||||
v-model="searchForm.TIME2"
|
||||
value-format="YYYY-MM-DD"
|
||||
format="YYYY-MM-DD"
|
||||
type="daterange"
|
||||
range-separator="至"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
/>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="学习状态" prop="STUDYSTATE">
|
||||
<el-select v-model="searchForm.STUDYSTATE">
|
||||
<el-option
|
||||
v-for="item in studyStateList"
|
||||
:key="item.ID"
|
||||
:value="item.ID"
|
||||
:label="item.NAME"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="考试状态" prop="STAGEEXAMSTATE">
|
||||
<el-select v-model="searchForm.STAGEEXAMSTATE">
|
||||
<el-option
|
||||
v-for="item in stageExamStateList"
|
||||
:key="item.ID"
|
||||
:value="item.ID"
|
||||
:label="item.NAME"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label-width="10px">
|
||||
<el-button type="primary" native-type="submit">搜索</el-button>
|
||||
<el-button native-type="reset" @click="fnResetPaginationTransfer">
|
||||
重置
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
</el-card>
|
||||
|
||||
<layout-card>
|
||||
<div class="table_btn">
|
||||
<el-button type="primary" @click="fnStudentRecords"
|
||||
>导出学员信息</el-button
|
||||
>
|
||||
</div>
|
||||
<layout-table
|
||||
ref="tableRef"
|
||||
v-model:pagination="pagination"
|
||||
:data="list"
|
||||
@get-data="fnGetDataTransfer"
|
||||
>
|
||||
<el-table-column label="序号" width="60" fixed="left">
|
||||
<template #default="{ $index }">
|
||||
{{ serialNumber(pagination, $index) }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
label="学员姓名"
|
||||
prop="STUDENT_NAME"
|
||||
show-overflow-tooltip
|
||||
fixed="left"
|
||||
/>
|
||||
<el-table-column
|
||||
label="身份证号"
|
||||
prop="USER_ID_CARD"
|
||||
show-overflow-tooltip
|
||||
fixed="left"
|
||||
width="150"
|
||||
/>
|
||||
<el-table-column
|
||||
label="班级名称"
|
||||
prop="CLASS_NAME"
|
||||
show-overflow-tooltip
|
||||
width="150"
|
||||
/>
|
||||
<el-table-column
|
||||
label="班级编码"
|
||||
prop="CODE"
|
||||
show-overflow-tooltip
|
||||
width="150"
|
||||
/>
|
||||
<el-table-column
|
||||
label="部门"
|
||||
prop="DEPARTMENT_NAME"
|
||||
show-overflow-tooltip
|
||||
width="200"
|
||||
/>
|
||||
<el-table-column
|
||||
label="工种"
|
||||
prop="POST_NAME"
|
||||
show-overflow-tooltip
|
||||
width="150"
|
||||
/>
|
||||
<el-table-column
|
||||
show-overflow-tooltip
|
||||
prop="START_TIME"
|
||||
label="培训开始时间"
|
||||
width="200"
|
||||
/>
|
||||
<el-table-column
|
||||
show-overflow-tooltip
|
||||
prop="END_TIME"
|
||||
label="培训结束时间"
|
||||
align="center"
|
||||
width="100"
|
||||
/>
|
||||
<el-table-column
|
||||
show-overflow-tooltip
|
||||
prop="CREATTIME"
|
||||
label="入班时间"
|
||||
align="center"
|
||||
width="100"
|
||||
/>
|
||||
<el-table-column
|
||||
show-overflow-tooltip
|
||||
prop="CURRICULUMNAME"
|
||||
label="培训课程"
|
||||
align="center"
|
||||
width="200"
|
||||
/>
|
||||
<el-table-column
|
||||
show-overflow-tooltip
|
||||
prop="ALL_CLASSHOUR"
|
||||
label="要求学时"
|
||||
align="center"
|
||||
width="100"
|
||||
/>
|
||||
<el-table-column
|
||||
show-overflow-tooltip
|
||||
prop="COMPLETE_CLASSHOUR"
|
||||
label="已完成学时"
|
||||
align="center"
|
||||
width="100"
|
||||
/>
|
||||
<el-table-column label="学习状态" width="150">
|
||||
<template #default="{ row }">
|
||||
{{ translationStatus(row.STUDYSTATE, studyStateList) }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="考试状态" width="150">
|
||||
<template #default="{ row }">
|
||||
{{ translationStatus(row.STAGEEXAMSTATE, stageExamStateList) }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="EXAMSCORE" label="考试分数" width="100" />
|
||||
<el-table-column label="任务状态" width="150">
|
||||
<template #default="{ row }">
|
||||
{{ translationStatus(row.STATE, taskStatusList) }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
</layout-table>
|
||||
</layout-card>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import useListData from "@/assets/js/useListData.js";
|
||||
import { serialNumber, translationStatus } from "@/assets/js/utils.js";
|
||||
import {
|
||||
getTrainingProgressListExportStudentRecords,
|
||||
getTrainingProgressList,
|
||||
} from "@/request/training_process_management.js";
|
||||
import { ElMessage, ElMessageBox } from "element-plus";
|
||||
import * as XLSX from "xlsx";
|
||||
const studyStateList = [
|
||||
{ ID: "0", NAME: "未学习" },
|
||||
{ ID: "1", NAME: "学习中" },
|
||||
{ ID: "2", NAME: "已学完" },
|
||||
{ ID: "3", NAME: "已完成" },
|
||||
{ ID: "4", NAME: "未完成" },
|
||||
{ ID: "5", NAME: "待评估" },
|
||||
{ ID: "6", NAME: "评估未合格" },
|
||||
];
|
||||
const stageExamStateList = [
|
||||
{ ID: "0", NAME: "不考试" },
|
||||
{ ID: "1", NAME: "待考试" },
|
||||
{ ID: "2", NAME: "考试未通过" },
|
||||
{ ID: "3", NAME: "考试通过" },
|
||||
{ ID: "4", NAME: "未参加" },
|
||||
];
|
||||
const taskStatusList = [
|
||||
{ ID: "1", NAME: "未申请" },
|
||||
{ ID: "4", NAME: "待开班" },
|
||||
{ ID: "5", NAME: "培训中" },
|
||||
{ ID: "6", NAME: "培训结束" },
|
||||
];
|
||||
const { list, pagination, searchForm, fnGetData, fnResetPagination, tableRef } =
|
||||
useListData(getTrainingProgressList);
|
||||
const fnGetDataTransfer = () => {
|
||||
fnGetData({
|
||||
STARTTIME: searchForm.value.TIME?.[0],
|
||||
ENDTIME: searchForm.value.TIME?.[1],
|
||||
OVERSTARTTIME: searchForm.value.TIME1?.[0],
|
||||
OVERENDTIME: searchForm.value.TIME1?.[1],
|
||||
CREATESTARTTIME: searchForm.value.TIME2?.[0],
|
||||
CREATENDTIME: searchForm.value.TIME2?.[1],
|
||||
});
|
||||
};
|
||||
const fnResetPaginationTransfer = () => {
|
||||
fnResetPagination({
|
||||
STARTTIME: searchForm.value.TIME?.[0],
|
||||
ENDTIME: searchForm.value.TIME?.[1],
|
||||
OVERSTARTTIME: searchForm.value.TIME1?.[0],
|
||||
OVERENDTIME: searchForm.value.TIME1?.[1],
|
||||
CREATESTARTTIME: searchForm.value.TIME2?.[0],
|
||||
CREATENDTIME: searchForm.value.TIME2?.[1],
|
||||
});
|
||||
};
|
||||
const fnStudentRecords = async () => {
|
||||
await ElMessageBox.confirm("确定要导出查询出来所有的学员信息?", {
|
||||
type: "warning",
|
||||
});
|
||||
const resData = await getTrainingProgressListExportStudentRecords({
|
||||
...searchForm.value,
|
||||
STARTTIME: searchForm.value.TIME?.[0],
|
||||
ENDTIME: searchForm.value.TIME?.[1],
|
||||
OVERSTARTTIME: searchForm.value.TIME1?.[0],
|
||||
OVERENDTIME: searchForm.value.TIME1?.[1],
|
||||
CREATESTARTTIME: searchForm.value.TIME2?.[0],
|
||||
CREATENDTIME: searchForm.value.TIME2?.[1],
|
||||
});
|
||||
if (resData.varList.length > 0) fnExportStudentRecords(resData.varList);
|
||||
else ElMessage.warning("没有学员信息");
|
||||
};
|
||||
|
||||
const fnExportStudentRecords = (list) => {
|
||||
const tableData = [
|
||||
[
|
||||
"序号",
|
||||
"学员姓名",
|
||||
"身份证号",
|
||||
"班级名称",
|
||||
"班级编码",
|
||||
"部门",
|
||||
"工种",
|
||||
"培训开始时间",
|
||||
"培训结束时间",
|
||||
"入班时间",
|
||||
"培训课程",
|
||||
"要求学时",
|
||||
"已完成学时",
|
||||
"学习状态",
|
||||
"考试状态",
|
||||
"考试分数",
|
||||
"任务状态",
|
||||
],
|
||||
];
|
||||
list.forEach((item, index) => {
|
||||
for (let i = 0; i < studyStateList.length; i++) {
|
||||
if (studyStateList[i].ID === item.STUDYSTATE) {
|
||||
item.STUDYSTATE = studyStateList[i].NAME;
|
||||
break;
|
||||
}
|
||||
}
|
||||
for (let i = 0; i < stageExamStateList.length; i++) {
|
||||
if (stageExamStateList[i].ID === item.STAGEEXAMSTATE) {
|
||||
item.STAGEEXAMSTATE = stageExamStateList[i].NAME;
|
||||
break;
|
||||
}
|
||||
}
|
||||
for (let i = 0; i < taskStatusList.length; i++) {
|
||||
if (taskStatusList[i].ID === item.STATE) {
|
||||
item.STATE = taskStatusList[i].NAME;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (item.COMPLETE_CLASSHOUR === "0.0") item.COMPLETE_CLASSHOUR = "0";
|
||||
if (item.ALL_CLASSHOUR === "0.0") item.ALL_CLASSHOUR = "0";
|
||||
tableData.push([
|
||||
index + 1,
|
||||
item.STUDENT_NAME,
|
||||
item.USER_ID_CARD,
|
||||
item.CLASS_NAME,
|
||||
item.CODE,
|
||||
item.DEPARTMENT_NAME,
|
||||
item.POST_NAME,
|
||||
item.START_TIME,
|
||||
item.END_TIME,
|
||||
item.CREATTIME,
|
||||
item.CURRICULUMNAME,
|
||||
item.ALL_CLASSHOUR,
|
||||
item.COMPLETE_CLASSHOUR,
|
||||
item.STUDYSTATE,
|
||||
item.STAGEEXAMSTATE,
|
||||
item.EXAMSCORE,
|
||||
item.STATE,
|
||||
]);
|
||||
});
|
||||
const ws = XLSX.utils.aoa_to_sheet(tableData);
|
||||
const wb = XLSX.utils.book_new();
|
||||
XLSX.utils.book_append_sheet(wb, ws, "学员信息统计");
|
||||
XLSX.writeFile(wb, "学员信息统计表.xlsx");
|
||||
ElMessage.success("导出成功");
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
.table_btn {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
</style>
|
Loading…
Reference in New Issue