forked from integrated_whb/integrated_whb_vue
init
parent
3e489b86f3
commit
71eea9850c
Binary file not shown.
|
After Width: | Height: | Size: 10 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 5.0 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 20 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 7.0 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 8.0 KiB |
|
|
@ -2206,4 +2206,292 @@ export default [
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
path: "/training_record_management",
|
||||||
|
redirect: "/training_record_management/training_plan",
|
||||||
|
meta: { title: "培训记录管理", model: MODEL["5"] },
|
||||||
|
component: "children",
|
||||||
|
children: [
|
||||||
|
{
|
||||||
|
path: "/training_record_management/training_plan",
|
||||||
|
meta: { title: "培训计划", isSubMenu: false },
|
||||||
|
component: "children",
|
||||||
|
children: [
|
||||||
|
{
|
||||||
|
path: "",
|
||||||
|
component: "training_record_management/training_plan/index",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: "/training_record_management/training_plan/add",
|
||||||
|
meta: {
|
||||||
|
title: "新增",
|
||||||
|
activeMenu: "/training_record_management/training_plan",
|
||||||
|
},
|
||||||
|
component: "training_record_management/training_plan/add",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: "/training_record_management/training_plan/edit",
|
||||||
|
meta: {
|
||||||
|
title: "修改",
|
||||||
|
activeMenu: "/training_record_management/training_plan",
|
||||||
|
},
|
||||||
|
component: "training_record_management/training_plan/add",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: "/training_record_management/training_situation",
|
||||||
|
meta: { title: "培训情况", isSubMenu: false },
|
||||||
|
component: "children",
|
||||||
|
children: [
|
||||||
|
{
|
||||||
|
path: "",
|
||||||
|
component: "training_record_management/training_situation/index",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: "/training_record_management/training_situation/add",
|
||||||
|
meta: {
|
||||||
|
title: "新增",
|
||||||
|
activeMenu: "/training_record_management/training_situation",
|
||||||
|
},
|
||||||
|
component: "training_record_management/training_situation/add",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: "/training_record_management/training_situation/edit",
|
||||||
|
meta: {
|
||||||
|
title: "修改",
|
||||||
|
activeMenu: "/training_record_management/training_situation",
|
||||||
|
},
|
||||||
|
component: "training_record_management/training_situation/add",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: "/training_record_management/personnel_evidence_collection_situation",
|
||||||
|
meta: { title: "人员取证情况", isSubMenu: false },
|
||||||
|
component: "children",
|
||||||
|
children: [
|
||||||
|
{
|
||||||
|
path: "",
|
||||||
|
component:
|
||||||
|
"training_record_management/personnel_evidence_collection_situation/index",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: "/training_record_management/personnel_evidence_collection_situation/add",
|
||||||
|
meta: {
|
||||||
|
title: "新增",
|
||||||
|
activeMenu:
|
||||||
|
"/training_record_management/personnel_evidence_collection_situation",
|
||||||
|
},
|
||||||
|
component:
|
||||||
|
"training_record_management/personnel_evidence_collection_situation/add",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: "/training_record_management/personnel_evidence_collection_situation/edit",
|
||||||
|
meta: {
|
||||||
|
title: "修改",
|
||||||
|
activeMenu:
|
||||||
|
"/training_record_management/personnel_evidence_collection_situation",
|
||||||
|
},
|
||||||
|
component:
|
||||||
|
"training_record_management/personnel_evidence_collection_situation/add",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: "/sms_management",
|
||||||
|
redirect: "/sms_management/sms_type_management",
|
||||||
|
meta: { title: "短信管理", model: MODEL["5"] },
|
||||||
|
component: "children",
|
||||||
|
children: [
|
||||||
|
{
|
||||||
|
path: "/sms_management/sms_type_management",
|
||||||
|
meta: { title: "短信类型管理", isSubMenu: false },
|
||||||
|
component: "sms_management/sms_type_management/index",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: "/sms_management/sms_log_management",
|
||||||
|
meta: { title: "短信日志管理", isSubMenu: false },
|
||||||
|
component: "sms_management/sms_log_management/index",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: "/emergency_resource_management",
|
||||||
|
redirect: "/emergency_resource_management/emergency_plan_management",
|
||||||
|
meta: { title: "应急资源管理", model: MODEL["5"] },
|
||||||
|
component: "children",
|
||||||
|
children: [
|
||||||
|
{
|
||||||
|
path: "/emergency_resource_management/emergency_plan_management",
|
||||||
|
meta: { title: "应急预案管理", isSubMenu: false },
|
||||||
|
component: "children",
|
||||||
|
children: [
|
||||||
|
{
|
||||||
|
path: "",
|
||||||
|
component:
|
||||||
|
"emergency_resource_management/emergency_plan_management/index",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: "/emergency_resource_management/emergency_plan_management/view",
|
||||||
|
meta: {
|
||||||
|
title: "查看",
|
||||||
|
activeMenu:
|
||||||
|
"/emergency_resource_management/emergency_plan_management",
|
||||||
|
},
|
||||||
|
component:
|
||||||
|
"emergency_resource_management/emergency_plan_management/view",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: "/emergency_resource_management/emergency_plan_management/add",
|
||||||
|
meta: {
|
||||||
|
title: "新增",
|
||||||
|
activeMenu:
|
||||||
|
"/emergency_resource_management/emergency_plan_management",
|
||||||
|
},
|
||||||
|
component:
|
||||||
|
"emergency_resource_management/emergency_plan_management/add",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: "/emergency_resource_management/emergency_plan_management/edit",
|
||||||
|
meta: {
|
||||||
|
title: "修改",
|
||||||
|
activeMenu:
|
||||||
|
"/emergency_resource_management/emergency_plan_management",
|
||||||
|
},
|
||||||
|
component:
|
||||||
|
"emergency_resource_management/emergency_plan_management/add",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: "/emergency_resource_management/emergency_drill_management",
|
||||||
|
meta: { title: "应急演练管理", isSubMenu: false },
|
||||||
|
component: "children",
|
||||||
|
children: [
|
||||||
|
{
|
||||||
|
path: "",
|
||||||
|
component:
|
||||||
|
"emergency_resource_management/emergency_drill_management/index",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: "/emergency_resource_management/emergency_drill_management/add",
|
||||||
|
meta: {
|
||||||
|
title: "添加",
|
||||||
|
activeMenu:
|
||||||
|
"/emergency_resource_management/emergency_drill_management",
|
||||||
|
},
|
||||||
|
component:
|
||||||
|
"emergency_resource_management/emergency_drill_management/add",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: "/emergency_resource_management/emergency_drill_management/edit",
|
||||||
|
meta: {
|
||||||
|
title: "修改",
|
||||||
|
activeMenu:
|
||||||
|
"/emergency_resource_management/emergency_drill_management",
|
||||||
|
},
|
||||||
|
component:
|
||||||
|
"emergency_resource_management/emergency_drill_management/add",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: "/emergency_resource_management/emergency_drill_management/view",
|
||||||
|
meta: {
|
||||||
|
title: "查看",
|
||||||
|
activeMenu:
|
||||||
|
"/emergency_resource_management/emergency_drill_management",
|
||||||
|
},
|
||||||
|
component:
|
||||||
|
"emergency_resource_management/emergency_drill_management/view",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: "/emergency_resource_management/emergency_equipment_management",
|
||||||
|
meta: { title: "应急装备管理", isSubMenu: false },
|
||||||
|
component: "children",
|
||||||
|
children: [
|
||||||
|
{
|
||||||
|
path: "",
|
||||||
|
component:
|
||||||
|
"emergency_resource_management/emergency_equipment_management/index",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: "/emergency_resource_management/emergency_equipment_management/view",
|
||||||
|
meta: {
|
||||||
|
title: "查看",
|
||||||
|
activeMenu:
|
||||||
|
"/emergency_resource_management/emergency_equipment_management",
|
||||||
|
},
|
||||||
|
component:
|
||||||
|
"emergency_resource_management/emergency_equipment_management/view",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: "/emergency_resource_management/emergency_equipment_management/add",
|
||||||
|
meta: {
|
||||||
|
title: "新增",
|
||||||
|
activeMenu:
|
||||||
|
"/emergency_resource_management/emergency_equipment_management",
|
||||||
|
},
|
||||||
|
component:
|
||||||
|
"emergency_resource_management/emergency_equipment_management/add",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: "/emergency_resource_management/emergency_equipment_management/edit",
|
||||||
|
meta: {
|
||||||
|
title: "修改",
|
||||||
|
activeMenu:
|
||||||
|
"/emergency_resource_management/emergency_equipment_management",
|
||||||
|
},
|
||||||
|
component:
|
||||||
|
"emergency_resource_management/emergency_equipment_management/add",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: "/emergency_resource_management/emergency_rescue_team_management",
|
||||||
|
meta: { title: "应急救援队伍管理", isSubMenu: false },
|
||||||
|
component: "children",
|
||||||
|
children: [
|
||||||
|
{
|
||||||
|
path: "",
|
||||||
|
component:
|
||||||
|
"emergency_resource_management/emergency_rescue_team_management/index",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: "/emergency_resource_management/emergency_rescue_team_management/view",
|
||||||
|
meta: {
|
||||||
|
title: "查看",
|
||||||
|
activeMenu:
|
||||||
|
"/emergency_resource_management/emergency_rescue_team_management",
|
||||||
|
},
|
||||||
|
component:
|
||||||
|
"emergency_resource_management/emergency_rescue_team_management/view",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: "/emergency_resource_management/emergency_rescue_team_management/add",
|
||||||
|
meta: {
|
||||||
|
title: "新增",
|
||||||
|
activeMenu:
|
||||||
|
"/emergency_resource_management/emergency_rescue_team_management",
|
||||||
|
},
|
||||||
|
component:
|
||||||
|
"emergency_resource_management/emergency_rescue_team_management/add",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: "/emergency_resource_management/emergency_rescue_team_management/edit",
|
||||||
|
meta: {
|
||||||
|
title: "修改",
|
||||||
|
activeMenu:
|
||||||
|
"/emergency_resource_management/emergency_rescue_team_management",
|
||||||
|
},
|
||||||
|
component:
|
||||||
|
"emergency_resource_management/emergency_rescue_team_management/add",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
];
|
];
|
||||||
|
|
|
||||||
|
|
@ -272,6 +272,83 @@ export const layoutFnGetLearningGardenLearningType = async () => {
|
||||||
});
|
});
|
||||||
return ref(resData.list);
|
return ref(resData.list);
|
||||||
};
|
};
|
||||||
|
// 培训类型
|
||||||
|
export const layoutFnGetTrainingType = async () => {
|
||||||
|
const resData = await getLevels({
|
||||||
|
DICTIONARIES_ID: "10ffcf646d354ff0a94630c7435e73fe",
|
||||||
|
});
|
||||||
|
return ref(resData.list);
|
||||||
|
};
|
||||||
|
// 适用领域
|
||||||
|
export const layoutFnGetApplicableFields = async () => {
|
||||||
|
const resData = await getLevels({
|
||||||
|
DICTIONARIES_ID: "ab52643da4714042be2ebfb880097330",
|
||||||
|
});
|
||||||
|
return ref(resData.list);
|
||||||
|
};
|
||||||
|
// 预案类别
|
||||||
|
export const layoutFnGetPlanCategory = async () => {
|
||||||
|
const resData = await getLevels({
|
||||||
|
DICTIONARIES_ID: "b2759070db524cc4ae2d60ee4b263dc3",
|
||||||
|
});
|
||||||
|
return ref(resData.list);
|
||||||
|
};
|
||||||
|
// 预案备案状态
|
||||||
|
export const layoutFnGetPlanFilingStatus = async () => {
|
||||||
|
const resData = await getLevels({
|
||||||
|
DICTIONARIES_ID: "8d07af03be10473ca17e1516a8e860d2",
|
||||||
|
});
|
||||||
|
return ref(resData.list);
|
||||||
|
};
|
||||||
|
// 预案级别
|
||||||
|
export const layoutFnGetPlanLevel = async () => {
|
||||||
|
const resData = await getLevels({
|
||||||
|
DICTIONARIES_ID: "ab54d50f12ef4f578bc29c3b980b83e5",
|
||||||
|
});
|
||||||
|
return ref(resData.list);
|
||||||
|
};
|
||||||
|
// 装备类别
|
||||||
|
export const layoutFnGetEquipmentCategory = async () => {
|
||||||
|
const resData = await getLevels({
|
||||||
|
DICTIONARIES_ID: "716f792cfc354fcf81bf3c0e904fb4f8",
|
||||||
|
});
|
||||||
|
return ref(resData.list);
|
||||||
|
};
|
||||||
|
// 救援专业
|
||||||
|
export const layoutFnGetRescueSpecialty = async () => {
|
||||||
|
const resData = await getLevels({
|
||||||
|
DICTIONARIES_ID: "6a724d36c3ad416fad22049d932c329e",
|
||||||
|
});
|
||||||
|
return ref(resData.list);
|
||||||
|
};
|
||||||
|
// 队伍属性
|
||||||
|
export const layoutFnGetTeamAttribute = async () => {
|
||||||
|
const resData = await getLevels({
|
||||||
|
DICTIONARIES_ID: "afde28dd39c841d984fb331116781ff3",
|
||||||
|
});
|
||||||
|
return ref(resData.list);
|
||||||
|
};
|
||||||
|
// 队伍类别
|
||||||
|
export const layoutFnGetTeamCategory = async () => {
|
||||||
|
const resData = await getLevels({
|
||||||
|
DICTIONARIES_ID: "ef2f9a53723b4531968279fe4816be3d",
|
||||||
|
});
|
||||||
|
return ref(resData.list);
|
||||||
|
};
|
||||||
|
// 队伍等级
|
||||||
|
export const layoutFnGetTeamGrade = async () => {
|
||||||
|
const resData = await getLevels({
|
||||||
|
DICTIONARIES_ID: "4dca6d39490d4845ba7b02df2ab68aa4",
|
||||||
|
});
|
||||||
|
return ref(resData.list);
|
||||||
|
};
|
||||||
|
// 队伍级别
|
||||||
|
export const layoutFnGetTeamLevel = async () => {
|
||||||
|
const resData = await getLevels({
|
||||||
|
DICTIONARIES_ID: "bfd057e59c124b42ac93e13c6a30b85e",
|
||||||
|
});
|
||||||
|
return ref(resData.list);
|
||||||
|
};
|
||||||
// 部门树
|
// 部门树
|
||||||
export const layoutFnGetDepartmentTree = async (params) => {
|
export const layoutFnGetDepartmentTree = async (params) => {
|
||||||
const resData = await getDepartmentTree(params);
|
const resData = await getDepartmentTree(params);
|
||||||
|
|
|
||||||
|
|
@ -25,6 +25,18 @@
|
||||||
>
|
>
|
||||||
[预览]
|
[预览]
|
||||||
</el-button>
|
</el-button>
|
||||||
|
<el-button
|
||||||
|
link
|
||||||
|
type="primary"
|
||||||
|
v-if="
|
||||||
|
interceptTheSuffix(filePath, '.jpg') ||
|
||||||
|
interceptTheSuffix(filePath, '.png') ||
|
||||||
|
interceptTheSuffix(filePath, '.jpeg')
|
||||||
|
"
|
||||||
|
@click="fnPreviewImage(filePath)"
|
||||||
|
>
|
||||||
|
[预览]
|
||||||
|
</el-button>
|
||||||
<a
|
<a
|
||||||
v-if="
|
v-if="
|
||||||
interceptTheSuffix(filePath, '.doc') ||
|
interceptTheSuffix(filePath, '.doc') ||
|
||||||
|
|
@ -58,6 +70,13 @@
|
||||||
v-model:visible="data.videoDialog.visible"
|
v-model:visible="data.videoDialog.visible"
|
||||||
append-to-body
|
append-to-body
|
||||||
/>
|
/>
|
||||||
|
<el-dialog v-model="data.imageDialog.visible" title="图片" append-to-body>
|
||||||
|
<img
|
||||||
|
:src="data.imageDialog.src"
|
||||||
|
alt="Preview Image"
|
||||||
|
style="width: 100%; object-fit: scale-down"
|
||||||
|
/>
|
||||||
|
</el-dialog>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|
@ -92,6 +111,10 @@ const data = reactive({
|
||||||
visible: false,
|
visible: false,
|
||||||
src: "",
|
src: "",
|
||||||
},
|
},
|
||||||
|
imageDialog: {
|
||||||
|
visible: false,
|
||||||
|
src: "",
|
||||||
|
},
|
||||||
});
|
});
|
||||||
const fnPreviewTxt = async (FILEPATH) => {
|
const fnPreviewTxt = async (FILEPATH) => {
|
||||||
data.txtDialog.visible = true;
|
data.txtDialog.visible = true;
|
||||||
|
|
@ -105,6 +128,10 @@ const fnPreviewVideo = (FILEPATH) => {
|
||||||
data.videoDialog.visible = true;
|
data.videoDialog.visible = true;
|
||||||
data.videoDialog.src = FILEPATH;
|
data.videoDialog.src = FILEPATH;
|
||||||
};
|
};
|
||||||
|
const fnPreviewImage = (FILEPATH) => {
|
||||||
|
data.imageDialog.visible = true;
|
||||||
|
data.imageDialog.src = VITE_FILE_URL + FILEPATH;
|
||||||
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped lang="scss"></style>
|
<style scoped lang="scss"></style>
|
||||||
|
|
|
||||||
|
|
@ -221,7 +221,7 @@ const fnSignOut = async () => {
|
||||||
align-items: center;
|
align-items: center;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
right: 0;
|
right: 0;
|
||||||
top: 0;
|
top: -1px;
|
||||||
|
|
||||||
.el-dropdown {
|
.el-dropdown {
|
||||||
margin-right: 55px;
|
margin-right: 55px;
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,119 @@
|
||||||
|
import { post, upload } from "@/request/axios";
|
||||||
|
|
||||||
|
export const getEmergencyPlanManagementList = (params) =>
|
||||||
|
post("/emergencyplan/list", params); // 应急预案管理列表
|
||||||
|
export const getEmergencyPlanManagementView = (params) =>
|
||||||
|
post("/emergencyplan/goEdit", params); // 应急预案管理查看
|
||||||
|
export const setEmergencyPlanManagementDelete = (params) =>
|
||||||
|
post("/emergencyplan/delete", params); // 应急预案管理删除
|
||||||
|
export const setEmergencyPlanManagementDeleteMultiple = (params) =>
|
||||||
|
post("/emergencyplan/deleteAll", params); // 应急预案管理删除多选
|
||||||
|
export const setEmergencyPlanManagementEdit = (params) =>
|
||||||
|
upload("/emergencyplan/edit", params); // 应急预案管理修改
|
||||||
|
export const setEmergencyPlanManagementAdd = (params) =>
|
||||||
|
upload("/emergencyplan/add", params); // 应急预案管理添加
|
||||||
|
export const getEmergencyEquipmentManagementList = (params) =>
|
||||||
|
upload("/emergencyequipment/list", params); // 应急装备管理列表
|
||||||
|
export const getEmergencyEquipmentManagementView = (params) =>
|
||||||
|
post("/emergencyequipment/goEdit", params); // 应急装备管理查看
|
||||||
|
export const setEmergencyEquipmentManagementDelete = (params) =>
|
||||||
|
post("/emergencyequipment/delete", params); // 应急装备管理删除
|
||||||
|
export const setEmergencyEquipmentManagementDeleteMultiple = (params) =>
|
||||||
|
post("/emergencyequipment/deleteAll", params); // 应急装备管理删除多选
|
||||||
|
export const setEmergencyEquipmentManagementEdit = (params) =>
|
||||||
|
post("/emergencyequipment/edit", params); // 应急装备管理修改
|
||||||
|
export const setEmergencyEquipmentManagementAdd = (params) =>
|
||||||
|
post("/emergencyequipment/add", params); // 应急装备管理添加
|
||||||
|
export const getEmergencyRescueTeamManagementList = (params) =>
|
||||||
|
upload("/emergencyteam/list", params); // 应急救援队伍管理列表
|
||||||
|
export const getEmergencyRescueTeamManagementView = (params) =>
|
||||||
|
post("/emergencyteam/goEdit", params); // 应急救援队伍管理查看
|
||||||
|
export const setEmergencyRescueTeamManagementDelete = (params) =>
|
||||||
|
post("/emergencyteam/delete", params); // 应急救援队伍管理删除
|
||||||
|
export const setEmergencyRescueTeamManagementDeleteMultiple = (params) =>
|
||||||
|
post("/emergencyteam/deleteAll", params); // 应急救援队伍管理删除多选
|
||||||
|
export const setEmergencyRescueTeamManagementEdit = (params) =>
|
||||||
|
post("/emergencyteam/edit", params); // 应急救援队伍管理修改
|
||||||
|
export const setEmergencyRescueTeamManagementAdd = (params) =>
|
||||||
|
post("/emergencyteam/add", params); // 应急救援队伍管理添加
|
||||||
|
export const getEmergencyDrillManagementList = (params) =>
|
||||||
|
upload("/emergencydrillbasic/list", params); // 应急演练管理列表
|
||||||
|
export const setEmergencyDrillManagementDelete = (params) =>
|
||||||
|
post("/emergencydrillbasic/delete", params); // 应急演练管理删除
|
||||||
|
export const setEmergencyDrillManagementDeleteMultiple = (params) =>
|
||||||
|
post("/emergencydrillbasic/deleteAll", params); // 应急演练管理删除多选
|
||||||
|
export const getEmergencyDrillManagementViewInfo = (params) =>
|
||||||
|
post("/emergencydrillbasic/goEdit", params); // 应急演练管理查看基本信息
|
||||||
|
export const getEmergencyDrillManagementViewCommandingOrganization = (params) =>
|
||||||
|
post("/emergencydrillorg/listByBaseId", params); // 应急演练管理查看应急指挥机构
|
||||||
|
export const getEmergencyDrillManagementViewCommandingOrganizationPersonnel = (
|
||||||
|
params
|
||||||
|
) => post("/emergencydrillorgmember/listByBaseId", params); // 应急演练管理查看应急指挥机构人员
|
||||||
|
export const getEmergencyDrillManagementViewDrillContent = (params) =>
|
||||||
|
post("/emergencydrillcontent/listByBaseId", params); // 应急演练管理查看演练内容
|
||||||
|
export const getEmergencyDrillManagementViewDrillScene = (params) =>
|
||||||
|
post("/emergencydrillscene/listByBaseId", params); // 应急演练管理查看演练场景
|
||||||
|
export const getEmergencyDrillManagementViewSummaryEvaluation = (params) =>
|
||||||
|
post("/emergencydrillreport/goEditByBasicId", params); // 应急演练管理查看总结评估
|
||||||
|
export const getEmergencyDrillManagementViewSchemeText = (params) =>
|
||||||
|
post("/emergencydrillattachment/goEditByBasicId", params); // 应急演练管理查看应急演练方案文本
|
||||||
|
export const setEmergencyDrillManagementInfoAdd = (params) =>
|
||||||
|
post("/emergencydrillbasic/add", params); // 应急演练管理基本信息添加
|
||||||
|
export const setEmergencyDrillManagementInfoEdit = (params) =>
|
||||||
|
post("/emergencydrillbasic/edit", params); // 应急演练管理基本信息修改
|
||||||
|
export const getEmergencyDrillManagementMechanismList = (params) =>
|
||||||
|
post("/emergencydrillorg/list", params); // 应急演练管理应急指挥机构列表
|
||||||
|
export const getEmergencyDrillManagementMechanismView = (params) =>
|
||||||
|
post("/emergencydrillorg/goEdit", params); // 应急演练管理应急指挥机构查看
|
||||||
|
export const setEmergencyDrillManagementMechanismDelete = (params) =>
|
||||||
|
post("/emergencydrillorg/delete", params); // 应急演练管理应急指挥机构删除
|
||||||
|
export const setEmergencyDrillManagementMechanismDeleteMultiple = (params) =>
|
||||||
|
post("/emergencydrillorg/deleteAll", params); // 应急演练管理应急指挥机构删除多选
|
||||||
|
export const setEmergencyDrillManagementMechanismAdd = (params) =>
|
||||||
|
post("/emergencydrillorg/add", params); // 应急演练管理应急指挥机构添加
|
||||||
|
export const setEmergencyDrillManagementMechanismEdit = (params) =>
|
||||||
|
post("/emergencydrillorg/edit", params); // 应急演练管理应急指挥机构修改
|
||||||
|
export const getEmergencyDrillManagementPersonnelList = (params) =>
|
||||||
|
post("/emergencydrillorgmember/list", params); // 应急演练管理应急指挥机构人员列表
|
||||||
|
export const getEmergencyDrillManagementPersonnelView = (params) =>
|
||||||
|
post("/emergencydrillorgmember/goEdit", params); // 应急演练管理应急指挥机构人员查看
|
||||||
|
export const setEmergencyDrillManagementPersonnelDelete = (params) =>
|
||||||
|
post("/emergencydrillorgmember/delete", params); // 应急演练管理应急指挥机构人员删除
|
||||||
|
export const setEmergencyDrillManagementPersonnelDeleteMultiple = (params) =>
|
||||||
|
post("/emergencydrillorgmember/deleteAll", params); // 应急演练管理应急指挥机构人员删除多选
|
||||||
|
export const setEmergencyDrillManagementPersonnelAdd = (params) =>
|
||||||
|
post("/emergencydrillorgmember/add", params); // 应急演练管理应急指挥机构人员添加
|
||||||
|
export const setEmergencyDrillManagementPersonnelEdit = (params) =>
|
||||||
|
post("/emergencydrillorgmember/edit", params); // 应急演练管理应急指挥机构人员修改
|
||||||
|
export const getEmergencyDrillManagementContentList = (params) =>
|
||||||
|
post("/emergencydrillcontent/list", params); // 应急演练管理演练内容列表
|
||||||
|
export const getEmergencyDrillManagementContentView = (params) =>
|
||||||
|
post("/emergencydrillcontent/goEdit", params); // 应急演练管理演练内容查看
|
||||||
|
export const setEmergencyDrillManagementContentDelete = (params) =>
|
||||||
|
post("/emergencydrillcontent/delete", params); // 应急演练管理演练内容删除
|
||||||
|
export const setEmergencyDrillManagementContentDeleteMultiple = (params) =>
|
||||||
|
post("/emergencydrillcontent/deleteAll", params); // 应急演练管理演练内容删除多选
|
||||||
|
export const setEmergencyDrillManagementContentAdd = (params) =>
|
||||||
|
post("/emergencydrillcontent/add", params); // 应急演练管理演练内容添加
|
||||||
|
export const setEmergencyDrillManagementContentEdit = (params) =>
|
||||||
|
post("/emergencydrillcontent/edit", params); // 应急演练管理演练内容修改
|
||||||
|
export const getEmergencyDrillManagementSceneList = (params) =>
|
||||||
|
post("/emergencydrillscene/list", params); // 应急演练管理演练场景列表
|
||||||
|
export const getEmergencyDrillManagementSceneView = (params) =>
|
||||||
|
post("/emergencydrillscene/goEdit", params); // 应急演练管理演练场景查看
|
||||||
|
export const setEmergencyDrillManagementSceneDelete = (params) =>
|
||||||
|
post("/emergencydrillscene/delete", params); // 应急演练管理演练场景删除
|
||||||
|
export const setEmergencyDrillManagementSceneDeleteMultiple = (params) =>
|
||||||
|
post("/emergencydrillscene/deleteAll", params); // 应急演练管理演练场景删除多选
|
||||||
|
export const setEmergencyDrillManagementSceneAdd = (params) =>
|
||||||
|
post("/emergencydrillscene/add", params); // 应急演练管理演练场景添加
|
||||||
|
export const setEmergencyDrillManagementSceneEdit = (params) =>
|
||||||
|
post("/emergencydrillscene/edit", params); // 应急演练管理演练场景修改
|
||||||
|
export const setEmergencyDrillManagementViewSummaryEvaluationAdd = (params) =>
|
||||||
|
upload("/emergencydrillreport/add", params); // 应急演练管理总结评估添加
|
||||||
|
export const setEmergencyDrillManagementViewSummaryEvaluationEdit = (params) =>
|
||||||
|
upload("/emergencydrillreport/edit", params); // 应急演练管理总结评估修改
|
||||||
|
export const setEmergencyDrillManagementViewSchemeTextAdd = (params) =>
|
||||||
|
upload("/emergencydrillattachment/add", params); // 应急演练管理应急演练方案文本添加
|
||||||
|
export const setEmergencyDrillManagementViewSchemeTextEdit = (params) =>
|
||||||
|
upload("/emergencydrillattachment/edit", params); // 应急演练管理应急演练方案文本修改
|
||||||
|
|
@ -0,0 +1,16 @@
|
||||||
|
import { post } from "@/request/axios.js";
|
||||||
|
|
||||||
|
export const getSmsTypeManagementList = (params) =>
|
||||||
|
post("/smsmanagement/list", params); // 短信类型管理列表
|
||||||
|
export const setSmsTypeManagementChangeStatus = (params) =>
|
||||||
|
post("/smsmanagement/add", params); // 短信类型管理改变状态
|
||||||
|
export const getSmsTypeManagementConfigureList = (params) =>
|
||||||
|
post("/smsmanagement/userlist", params); // 短信类型管理配置列表
|
||||||
|
export const setSmsTypeManagementConfigure = (params) =>
|
||||||
|
post("/smsmanagement/editUserName", params); // 短信类型管理配置
|
||||||
|
export const getSmsLogManagementList = (params) =>
|
||||||
|
post("/msmlogin/list", params); // 短信日志管理列表
|
||||||
|
export const getSmsLogManagementObtainQRCode = (params) =>
|
||||||
|
post("/pay/payment", params); // 短信日志管理获取二维码
|
||||||
|
export const getSmsLogManagementIsPaymentWasSuccess = (params) =>
|
||||||
|
post("/pay/zypayment", params); // 短信日志管理是否支付成功
|
||||||
|
|
@ -0,0 +1,34 @@
|
||||||
|
import { post, upload } from "@/request/axios.js";
|
||||||
|
|
||||||
|
export const getTrainingPlanList = (params) =>
|
||||||
|
post("/trainingplan/list", params); // 培训计划列表
|
||||||
|
export const getTrainingPlanView = (params) =>
|
||||||
|
post("/trainingplan/goEdit", params); // 培训计划查看
|
||||||
|
export const setTrainingPlanDelete = (params) =>
|
||||||
|
post("/trainingplan/delete", params); // 培训计划删除
|
||||||
|
export const setTrainingPlanAdd = (params) =>
|
||||||
|
upload("/trainingplan/add", params); // 培训计划新增
|
||||||
|
export const setTrainingPlanEdit = (params) =>
|
||||||
|
upload("/trainingplan/edit", params); // 培训计划修改
|
||||||
|
export const getTrainingPlanListAll = (params) =>
|
||||||
|
post("/trainingplan/getPlanList", params); // 所有培训计划
|
||||||
|
export const getTrainingSituationList = (params) =>
|
||||||
|
post("/traininginfo/list", params); // 培训情况列表
|
||||||
|
export const getTrainingSituationView = (params) =>
|
||||||
|
post("/traininginfo/goEdit", params); // 培训情况查看
|
||||||
|
export const setTrainingSituationDelete = (params) =>
|
||||||
|
post("/traininginfo/delete", params); // 培训情况删除
|
||||||
|
export const setTrainingSituationAdd = (params) =>
|
||||||
|
upload("/traininginfo/add", params); // 培训情况新增
|
||||||
|
export const setTrainingSituationEdit = (params) =>
|
||||||
|
upload("/traininginfo/edit", params); // 培训情况修改
|
||||||
|
export const getPersonnelEvidenceCollectionSituationList = (params) =>
|
||||||
|
post("/personobtainevidence/list", params); // 人员取证情况列表
|
||||||
|
export const getPersonnelEvidenceCollectionSituationView = (params) =>
|
||||||
|
post("/personobtainevidence/goEdit", params); // 人员取证情况查看
|
||||||
|
export const setPersonnelEvidenceCollectionSituationDelete = (params) =>
|
||||||
|
post("/personobtainevidence/delete", params); // 人员取证情况删除
|
||||||
|
export const setPersonnelEvidenceCollectionSituationAdd = (params) =>
|
||||||
|
upload("/personobtainevidence/add", params); // 人员取证情况新增
|
||||||
|
export const setPersonnelEvidenceCollectionSituationEdit = (params) =>
|
||||||
|
upload("/personobtainevidence/edit", params); // 人员取证情况修改
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
leave-active-class="animate__animated animate__fadeOutUp"
|
leave-active-class="animate__animated animate__fadeOutUp"
|
||||||
>
|
>
|
||||||
<div class="header" :key="transitionKey">
|
<div class="header" :key="transitionKey">
|
||||||
<div class="back" @click="this.$router.back()">
|
<div class="back" @click="router.back()">
|
||||||
<img src="/src/assets/images/map/back.png" alt="" />
|
<img src="/src/assets/images/map/back.png" alt="" />
|
||||||
</div>
|
</div>
|
||||||
<div class="light"></div>
|
<div class="light"></div>
|
||||||
|
|
@ -50,11 +50,13 @@ import autofit from "autofit.js";
|
||||||
import { onBeforeUnmount, onMounted, ref } from "vue";
|
import { onBeforeUnmount, onMounted, ref } from "vue";
|
||||||
import RightIco from "./components/rightico.vue";
|
import RightIco from "./components/rightico.vue";
|
||||||
import BottomOptions from "./components/bottom_options.vue";
|
import BottomOptions from "./components/bottom_options.vue";
|
||||||
|
import { useRouter } from "vue-router";
|
||||||
|
|
||||||
|
const router = useRouter();
|
||||||
const right_option = ref(true);
|
const right_option = ref(true);
|
||||||
const transitionKey = ref(0);
|
const transitionKey = ref(0);
|
||||||
const leftCurrentComponent = ref("");
|
const leftCurrentComponent = ref("");
|
||||||
const rightCurrentComponent = ref("");
|
const rightCurrentComponent = ref("");
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
autofit.init({
|
autofit.init({
|
||||||
designHeight: 1080,
|
designHeight: 1080,
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,77 @@
|
||||||
|
<template>
|
||||||
|
<layout-card>
|
||||||
|
<el-tabs v-model="activeName" @tab-change="fnTabChange">
|
||||||
|
<el-tab-pane
|
||||||
|
v-for="item in tabsList"
|
||||||
|
:key="item.name"
|
||||||
|
:disabled="!EMERGENCYDRILLBASIC_ID"
|
||||||
|
lazy
|
||||||
|
:label="item.label"
|
||||||
|
:name="item.name"
|
||||||
|
>
|
||||||
|
<component
|
||||||
|
:is="item.component"
|
||||||
|
:emergency-drill-basic-id="EMERGENCYDRILLBASIC_ID"
|
||||||
|
:active-name="activeName"
|
||||||
|
/>
|
||||||
|
</el-tab-pane>
|
||||||
|
</el-tabs>
|
||||||
|
</layout-card>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { useRoute, useRouter, onBeforeRouteUpdate } from "vue-router";
|
||||||
|
import { ref, markRaw } from "vue";
|
||||||
|
import EssentialInformation from "./components/essentialInformation.vue";
|
||||||
|
import CommandingOrganization from "./components/commanding_organization/index.vue";
|
||||||
|
import ExerciseContentAndScenario from "./components/exercise_content_scenario/index.vue";
|
||||||
|
import SummaryEvaluation from "./components/summary_evaluation.vue";
|
||||||
|
import SchemeText from "./components/scheme_text.vue";
|
||||||
|
|
||||||
|
const route = useRoute();
|
||||||
|
const router = useRouter();
|
||||||
|
const activeName = ref(route.query.activeName || "essentialInformation");
|
||||||
|
const EMERGENCYDRILLBASIC_ID = ref(route.query.EMERGENCYDRILLBASIC_ID);
|
||||||
|
const tabsList = ref([
|
||||||
|
{
|
||||||
|
label: "应急方案基本信息",
|
||||||
|
name: "essentialInformation",
|
||||||
|
component: markRaw(EssentialInformation),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "应急指挥机构",
|
||||||
|
name: "commandingOrganization",
|
||||||
|
component: markRaw(CommandingOrganization),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "演练内容及场景",
|
||||||
|
name: "exerciseContentAndScenario",
|
||||||
|
component: markRaw(ExerciseContentAndScenario),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "总结评估",
|
||||||
|
name: "summaryEvaluation",
|
||||||
|
component: markRaw(SummaryEvaluation),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "应急演练方案文本",
|
||||||
|
name: "schemeText",
|
||||||
|
component: markRaw(SchemeText),
|
||||||
|
},
|
||||||
|
]);
|
||||||
|
const fnTabChange = (event) => {
|
||||||
|
router.replace({
|
||||||
|
path: route.path,
|
||||||
|
query: {
|
||||||
|
activeName: event,
|
||||||
|
EMERGENCYDRILLBASIC_ID: EMERGENCYDRILLBASIC_ID.value,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
};
|
||||||
|
onBeforeRouteUpdate((to) => {
|
||||||
|
activeName.value = to.query.activeName;
|
||||||
|
EMERGENCYDRILLBASIC_ID.value = to.query.EMERGENCYDRILLBASIC_ID;
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped></style>
|
||||||
|
|
@ -0,0 +1,57 @@
|
||||||
|
<template>
|
||||||
|
<el-row :gutter="24" class="pb-20">
|
||||||
|
<el-col :span="12" style="border-right: 1px dashed var(--el-border-color)">
|
||||||
|
<mechanism :emergency-drill-basic-id="emergencyDrillBasicId" />
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<personnel :emergency-drill-basic-id="emergencyDrillBasicId" />
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
<div class="tc pt-20" style="border-top: 1px dashed var(--el-border-color)">
|
||||||
|
<el-button
|
||||||
|
@click="
|
||||||
|
router.replace({
|
||||||
|
path: route.path,
|
||||||
|
query: {
|
||||||
|
activeName: 'essentialInformation',
|
||||||
|
EMERGENCYDRILLBASIC_ID: emergencyDrillBasicId,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
"
|
||||||
|
>
|
||||||
|
上一步
|
||||||
|
</el-button>
|
||||||
|
<el-button
|
||||||
|
type="primary"
|
||||||
|
@click="
|
||||||
|
router.replace({
|
||||||
|
path: route.path,
|
||||||
|
query: {
|
||||||
|
activeName: 'exerciseContentAndScenario',
|
||||||
|
EMERGENCYDRILLBASIC_ID: emergencyDrillBasicId,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
"
|
||||||
|
>
|
||||||
|
下一步
|
||||||
|
</el-button>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import Mechanism from "./mechanism.vue";
|
||||||
|
import Personnel from "./personnel.vue";
|
||||||
|
import { useRoute, useRouter } from "vue-router";
|
||||||
|
|
||||||
|
const router = useRouter();
|
||||||
|
const route = useRoute();
|
||||||
|
defineProps({
|
||||||
|
emergencyDrillBasicId: {
|
||||||
|
type: String,
|
||||||
|
default: "",
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped></style>
|
||||||
|
|
@ -0,0 +1,154 @@
|
||||||
|
<template>
|
||||||
|
<el-form
|
||||||
|
:model="searchForm"
|
||||||
|
label-width="80px"
|
||||||
|
@submit.prevent="fnResetPagination"
|
||||||
|
>
|
||||||
|
<el-row>
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="机构名称" prop="KEYWORDS">
|
||||||
|
<el-input v-model="searchForm.KEYWORDS" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
|
<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>
|
||||||
|
<layout-table
|
||||||
|
ref="tableRef"
|
||||||
|
row-key="EMERGENCYDRILLORG_ID"
|
||||||
|
:data="list"
|
||||||
|
@get-data="fnGetData"
|
||||||
|
v-model:pagination="pagination"
|
||||||
|
>
|
||||||
|
<el-table-column reserve-selection type="selection" width="55" />
|
||||||
|
<el-table-column label="序号" width="60">
|
||||||
|
<template #default="{ $index }">
|
||||||
|
{{ serialNumber(pagination, $index) }}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column prop="ORG_NAME" label="机构名称" />
|
||||||
|
<el-table-column prop="ORG_UNIT_IDS" label="组成单位" />
|
||||||
|
<el-table-column prop="ORG_DUTY" label="机构职责" />
|
||||||
|
<el-table-column label="操作" width="120">
|
||||||
|
<template v-slot="{ row }">
|
||||||
|
<el-button
|
||||||
|
type="primary"
|
||||||
|
text
|
||||||
|
link
|
||||||
|
@click="fnAddOrEdit(row.EMERGENCYDRILLORG_ID, 'edit')"
|
||||||
|
>
|
||||||
|
编辑
|
||||||
|
</el-button>
|
||||||
|
<el-button
|
||||||
|
type="primary"
|
||||||
|
text
|
||||||
|
link
|
||||||
|
@click="fnDelete(row.EMERGENCYDRILLORG_ID)"
|
||||||
|
>
|
||||||
|
删除
|
||||||
|
</el-button>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<template #button>
|
||||||
|
<el-button type="primary" @click="fnAddOrEdit('', 'add')">
|
||||||
|
新增
|
||||||
|
</el-button>
|
||||||
|
<el-button type="danger" @click="fnDeleteAll"> 批量删除 </el-button>
|
||||||
|
</template>
|
||||||
|
</layout-table>
|
||||||
|
<add
|
||||||
|
v-model:visible="data.addOrEditDialog.visible"
|
||||||
|
v-model:form="data.addOrEditDialog.form"
|
||||||
|
:type="data.addOrEditDialog.type"
|
||||||
|
:emergency-drill-basic-id="emergencyDrillBasicId"
|
||||||
|
@get-data="fnResetPagination"
|
||||||
|
/>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { nextTick, reactive } from "vue";
|
||||||
|
import {
|
||||||
|
getEmergencyDrillManagementMechanismList,
|
||||||
|
getEmergencyDrillManagementMechanismView,
|
||||||
|
setEmergencyDrillManagementMechanismDelete,
|
||||||
|
setEmergencyDrillManagementMechanismDeleteMultiple,
|
||||||
|
} from "@/request/emergency_resource_management.js";
|
||||||
|
import { serialNumber } from "@/assets/js/utils.js";
|
||||||
|
import { debounce } from "throttle-debounce";
|
||||||
|
import { ElMessage, ElMessageBox } from "element-plus";
|
||||||
|
import useListData from "@/assets/js/useListData.js";
|
||||||
|
import Add from "./mechanism_add.vue";
|
||||||
|
|
||||||
|
const props = defineProps({
|
||||||
|
emergencyDrillBasicId: {
|
||||||
|
type: String,
|
||||||
|
default: "",
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
const { list, searchForm, pagination, fnResetPagination, fnGetData, tableRef } =
|
||||||
|
useListData(getEmergencyDrillManagementMechanismList, {
|
||||||
|
otherParams: {
|
||||||
|
EMERGENCYDRILLBASIC_ID: props.emergencyDrillBasicId,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
const data = reactive({
|
||||||
|
addOrEditDialog: {
|
||||||
|
visible: false,
|
||||||
|
type: "",
|
||||||
|
form: {
|
||||||
|
ORG_NAME: "",
|
||||||
|
ORG_UNIT_IDS: "",
|
||||||
|
ORG_DUTY: "",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
const fnDelete = debounce(
|
||||||
|
1000,
|
||||||
|
async (EMERGENCYDRILLORG_ID) => {
|
||||||
|
await ElMessageBox.confirm("确定要删除吗?", { type: "warning" });
|
||||||
|
await setEmergencyDrillManagementMechanismDelete({ EMERGENCYDRILLORG_ID });
|
||||||
|
ElMessage.success("删除成功");
|
||||||
|
fnResetPagination();
|
||||||
|
},
|
||||||
|
{ atBegin: true }
|
||||||
|
);
|
||||||
|
const fnDeleteAll = debounce(
|
||||||
|
1000,
|
||||||
|
async () => {
|
||||||
|
const selectionData = tableRef.value.getSelectionRows();
|
||||||
|
if (selectionData.length === 0) {
|
||||||
|
ElMessage.warning("请选中要删除的项");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const DATA_IDS = selectionData
|
||||||
|
.map((item) => item.EMERGENCYDRILLORG_ID)
|
||||||
|
.join(",");
|
||||||
|
await ElMessageBox.confirm("确定要删除吗?", { type: "warning" });
|
||||||
|
await setEmergencyDrillManagementMechanismDeleteMultiple({ DATA_IDS });
|
||||||
|
ElMessage.success("删除成功");
|
||||||
|
fnResetPagination();
|
||||||
|
},
|
||||||
|
{ atBegin: true }
|
||||||
|
);
|
||||||
|
const fnAddOrEdit = async (EMERGENCYDRILLORG_ID, type) => {
|
||||||
|
data.addOrEditDialog.visible = true;
|
||||||
|
await nextTick();
|
||||||
|
data.addOrEditDialog.type = type;
|
||||||
|
if (type === "edit") {
|
||||||
|
const resData = await getEmergencyDrillManagementMechanismView({
|
||||||
|
EMERGENCYDRILLORG_ID,
|
||||||
|
});
|
||||||
|
data.addOrEditDialog.form = resData.pd;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped></style>
|
||||||
|
|
@ -0,0 +1,91 @@
|
||||||
|
<template>
|
||||||
|
<el-dialog
|
||||||
|
v-model="visible"
|
||||||
|
:title="type === 'edit' ? '修改' : '新增'"
|
||||||
|
:on-close="fnClose"
|
||||||
|
>
|
||||||
|
<el-form ref="formRef" :rules="rules" :model="form" label-width="150px">
|
||||||
|
<el-form-item label="机构名称" prop="ORG_NAME">
|
||||||
|
<el-input v-model="form.ORG_NAME" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="组成单位" prop="ORG_UNIT_IDS">
|
||||||
|
<el-input v-model="form.ORG_UNIT_IDS" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="机构职责" prop="ORG_DUTY">
|
||||||
|
<el-input :rows="3" v-model="form.ORG_DUTY" type="textarea" />
|
||||||
|
</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 { ref } from "vue";
|
||||||
|
import { debounce } from "throttle-debounce";
|
||||||
|
import useFormValidate from "@/assets/js/useFormValidate.js";
|
||||||
|
import {
|
||||||
|
setEmergencyDrillManagementMechanismAdd,
|
||||||
|
setEmergencyDrillManagementMechanismEdit,
|
||||||
|
} from "@/request/emergency_resource_management.js";
|
||||||
|
import { ElMessage } from "element-plus";
|
||||||
|
|
||||||
|
const props = defineProps({
|
||||||
|
visible: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false,
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
form: {
|
||||||
|
type: Object,
|
||||||
|
default: () => ({}),
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
type: {
|
||||||
|
type: String,
|
||||||
|
default: "add",
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
emergencyDrillBasicId: {
|
||||||
|
type: String,
|
||||||
|
default: "",
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
const emits = defineEmits(["update:visible", "update:form", "get-data"]);
|
||||||
|
const { visible, form } = useVModels(props, emits);
|
||||||
|
const rules = {
|
||||||
|
ORG_NAME: [{ required: true, message: "机构名称不能为空", trigger: "blur" }],
|
||||||
|
ORG_UNIT_IDS: [
|
||||||
|
{ required: true, message: "组成单位不能为空", trigger: "blur" },
|
||||||
|
],
|
||||||
|
ORG_DUTY: [{ required: true, message: "机构职责不能为空", trigger: "blur" }],
|
||||||
|
};
|
||||||
|
const formRef = ref(null);
|
||||||
|
const fnClose = () => {
|
||||||
|
formRef.value.resetFields();
|
||||||
|
visible.value = false;
|
||||||
|
};
|
||||||
|
const fnSubmit = debounce(
|
||||||
|
1000,
|
||||||
|
async () => {
|
||||||
|
await useFormValidate(formRef);
|
||||||
|
const params = {
|
||||||
|
...form.value,
|
||||||
|
EMERGENCYDRILLBASIC_ID: props.emergencyDrillBasicId,
|
||||||
|
};
|
||||||
|
props.type === "add"
|
||||||
|
? await setEmergencyDrillManagementMechanismAdd(params)
|
||||||
|
: await setEmergencyDrillManagementMechanismEdit(params);
|
||||||
|
ElMessage.success("操作成功");
|
||||||
|
fnClose();
|
||||||
|
emits("get-data");
|
||||||
|
},
|
||||||
|
{ atBegin: true }
|
||||||
|
);
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss"></style>
|
||||||
|
|
@ -0,0 +1,179 @@
|
||||||
|
<template>
|
||||||
|
<el-form
|
||||||
|
:model="searchForm"
|
||||||
|
label-width="80px"
|
||||||
|
@submit.prevent="fnResetPagination"
|
||||||
|
>
|
||||||
|
<el-row>
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="人员姓名" prop="KEYWORDS">
|
||||||
|
<el-input v-model="searchForm.KEYWORDS" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
|
<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>
|
||||||
|
<layout-table
|
||||||
|
ref="tableRef"
|
||||||
|
row-key="EMERGENCYDRILLORGMEMBER_ID"
|
||||||
|
:data="list"
|
||||||
|
@get-data="fnGetData"
|
||||||
|
v-model:pagination="pagination"
|
||||||
|
>
|
||||||
|
<el-table-column reserve-selection type="selection" width="55" />
|
||||||
|
<el-table-column label="序号" width="60">
|
||||||
|
<template #default="{ $index }">
|
||||||
|
{{ serialNumber(pagination, $index) }}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column
|
||||||
|
prop="EMERGENCYDRILLORG_NAME"
|
||||||
|
label="应急指挥机构"
|
||||||
|
width="110"
|
||||||
|
/>
|
||||||
|
<el-table-column prop="MEMBER_NAME" label="姓名" />
|
||||||
|
<el-table-column prop="MEMBER_UNIT" label="单位" />
|
||||||
|
<el-table-column prop="MEMBER_DUTY" label="职务" />
|
||||||
|
<el-table-column prop="MEMBER_PHONE" label="联系电话" width="110" />
|
||||||
|
<el-table-column
|
||||||
|
prop="MEMBER_EMERGENCY_PHONE"
|
||||||
|
label="紧急联系电话"
|
||||||
|
width="110"
|
||||||
|
/>
|
||||||
|
<el-table-column label="操作" width="120">
|
||||||
|
<template v-slot="{ row }">
|
||||||
|
<el-button
|
||||||
|
type="primary"
|
||||||
|
text
|
||||||
|
link
|
||||||
|
@click="fnAddOrEdit(row.EMERGENCYDRILLORGMEMBER_ID, 'edit')"
|
||||||
|
>
|
||||||
|
编辑
|
||||||
|
</el-button>
|
||||||
|
<el-button
|
||||||
|
type="primary"
|
||||||
|
text
|
||||||
|
link
|
||||||
|
@click="fnDelete(row.EMERGENCYDRILLORGMEMBER_ID)"
|
||||||
|
>
|
||||||
|
删除
|
||||||
|
</el-button>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<template #button>
|
||||||
|
<el-button type="primary" @click="fnAddOrEdit('', 'add')">
|
||||||
|
新增
|
||||||
|
</el-button>
|
||||||
|
<el-button type="danger" @click="fnDeleteAll"> 删除 </el-button>
|
||||||
|
</template>
|
||||||
|
</layout-table>
|
||||||
|
<add
|
||||||
|
v-model:visible="data.addOrEditDialog.visible"
|
||||||
|
v-model:form="data.addOrEditDialog.form"
|
||||||
|
:type="data.addOrEditDialog.type"
|
||||||
|
:emergency-drill-basic-id="emergencyDrillBasicId"
|
||||||
|
:commanding-organization-list="
|
||||||
|
data.addOrEditDialog.commandingOrganizationList
|
||||||
|
"
|
||||||
|
@get-data="fnResetPagination"
|
||||||
|
/>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { nextTick, reactive } from "vue";
|
||||||
|
import {
|
||||||
|
getEmergencyDrillManagementPersonnelList,
|
||||||
|
getEmergencyDrillManagementPersonnelView,
|
||||||
|
getEmergencyDrillManagementViewCommandingOrganization,
|
||||||
|
setEmergencyDrillManagementPersonnelDelete,
|
||||||
|
setEmergencyDrillManagementPersonnelDeleteMultiple,
|
||||||
|
} from "@/request/emergency_resource_management.js";
|
||||||
|
import { serialNumber } from "@/assets/js/utils.js";
|
||||||
|
import { debounce } from "throttle-debounce";
|
||||||
|
import { ElMessage, ElMessageBox } from "element-plus";
|
||||||
|
import useListData from "@/assets/js/useListData.js";
|
||||||
|
import Add from "./personnel_add.vue";
|
||||||
|
|
||||||
|
const props = defineProps({
|
||||||
|
emergencyDrillBasicId: {
|
||||||
|
type: String,
|
||||||
|
default: "",
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
const { list, searchForm, pagination, fnResetPagination, fnGetData, tableRef } =
|
||||||
|
useListData(getEmergencyDrillManagementPersonnelList, {
|
||||||
|
otherParams: {
|
||||||
|
EMERGENCYDRILLBASIC_ID: props.emergencyDrillBasicId,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
const data = reactive({
|
||||||
|
addOrEditDialog: {
|
||||||
|
visible: false,
|
||||||
|
type: "",
|
||||||
|
commandingOrganizationList: [],
|
||||||
|
form: {
|
||||||
|
EMERGENCYDRILLORG_ID: "",
|
||||||
|
MEMBER_NAME: "",
|
||||||
|
MEMBER_UNIT: "",
|
||||||
|
MEMBER_DUTY: "",
|
||||||
|
MEMBER_PHONE: "",
|
||||||
|
MEMBER_EMERGENCY_PHONE: "",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
const fnDelete = debounce(
|
||||||
|
1000,
|
||||||
|
async (EMERGENCYDRILLORGMEMBER_ID) => {
|
||||||
|
await ElMessageBox.confirm("确定要删除吗?", { type: "warning" });
|
||||||
|
await setEmergencyDrillManagementPersonnelDelete({
|
||||||
|
EMERGENCYDRILLORGMEMBER_ID,
|
||||||
|
});
|
||||||
|
ElMessage.success("删除成功");
|
||||||
|
fnResetPagination();
|
||||||
|
},
|
||||||
|
{ atBegin: true }
|
||||||
|
);
|
||||||
|
const fnDeleteAll = debounce(
|
||||||
|
1000,
|
||||||
|
async () => {
|
||||||
|
const selectionData = tableRef.value.getSelectionRows();
|
||||||
|
if (selectionData.length === 0) {
|
||||||
|
ElMessage.warning("请选中要删除的项");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const DATA_IDS = selectionData
|
||||||
|
.map((item) => item.EMERGENCYDRILLORGMEMBER_ID)
|
||||||
|
.join(",");
|
||||||
|
await ElMessageBox.confirm("确定要删除吗?", { type: "warning" });
|
||||||
|
await setEmergencyDrillManagementPersonnelDeleteMultiple({ DATA_IDS });
|
||||||
|
ElMessage.success("删除成功");
|
||||||
|
fnResetPagination();
|
||||||
|
},
|
||||||
|
{ atBegin: true }
|
||||||
|
);
|
||||||
|
const fnAddOrEdit = async (EMERGENCYDRILLORGMEMBER_ID, type) => {
|
||||||
|
data.addOrEditDialog.visible = true;
|
||||||
|
await nextTick();
|
||||||
|
data.addOrEditDialog.type = type;
|
||||||
|
const resData = await getEmergencyDrillManagementViewCommandingOrganization({
|
||||||
|
EMERGENCYDRILLBASIC_ID: props.emergencyDrillBasicId,
|
||||||
|
});
|
||||||
|
data.addOrEditDialog.commandingOrganizationList = resData.list;
|
||||||
|
if (type === "edit") {
|
||||||
|
const resData = await getEmergencyDrillManagementPersonnelView({
|
||||||
|
EMERGENCYDRILLORGMEMBER_ID,
|
||||||
|
});
|
||||||
|
data.addOrEditDialog.form = resData.pd;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped></style>
|
||||||
|
|
@ -0,0 +1,135 @@
|
||||||
|
<template>
|
||||||
|
<el-dialog
|
||||||
|
v-model="visible"
|
||||||
|
:title="type === 'edit' ? '修改' : '新增'"
|
||||||
|
:on-close="fnClose"
|
||||||
|
>
|
||||||
|
<el-form ref="formRef" :rules="rules" :model="form" label-width="150px">
|
||||||
|
<el-form-item label="应急指挥机构" prop="EMERGENCYDRILLORG_ID">
|
||||||
|
<el-select v-model="form.EMERGENCYDRILLORG_ID">
|
||||||
|
<el-option
|
||||||
|
v-for="item in commandingOrganizationList"
|
||||||
|
:key="item.EMERGENCYDRILLORG_ID"
|
||||||
|
:label="item.ORG_NAME"
|
||||||
|
:value="item.EMERGENCYDRILLORG_ID"
|
||||||
|
/>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="姓名" prop="MEMBER_NAME">
|
||||||
|
<el-input v-model="form.MEMBER_NAME" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="单位" prop="MEMBER_UNIT">
|
||||||
|
<el-input v-model="form.MEMBER_UNIT" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="职务" prop="MEMBER_DUTY">
|
||||||
|
<el-input v-model="form.MEMBER_DUTY" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="联系电话" prop="MEMBER_PHONE">
|
||||||
|
<el-input v-model="form.MEMBER_PHONE" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="紧急联系电话" prop="MEMBER_EMERGENCY_PHONE">
|
||||||
|
<el-input v-model="form.MEMBER_EMERGENCY_PHONE" />
|
||||||
|
</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 { ref } from "vue";
|
||||||
|
import { debounce } from "throttle-debounce";
|
||||||
|
import useFormValidate from "@/assets/js/useFormValidate.js";
|
||||||
|
import {
|
||||||
|
setEmergencyDrillManagementPersonnelAdd,
|
||||||
|
setEmergencyDrillManagementPersonnelEdit,
|
||||||
|
} from "@/request/emergency_resource_management.js";
|
||||||
|
import { ElMessage } from "element-plus";
|
||||||
|
|
||||||
|
const props = defineProps({
|
||||||
|
visible: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false,
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
form: {
|
||||||
|
type: Object,
|
||||||
|
default: () => ({}),
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
type: {
|
||||||
|
type: String,
|
||||||
|
default: "add",
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
emergencyDrillBasicId: {
|
||||||
|
type: String,
|
||||||
|
default: "",
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
commandingOrganizationList: {
|
||||||
|
type: Array,
|
||||||
|
default: () => [],
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
const emits = defineEmits(["update:visible", "update:form", "get-data"]);
|
||||||
|
const { visible, form } = useVModels(props, emits);
|
||||||
|
const rules = {
|
||||||
|
EMERGENCYDRILLORG_ID: [
|
||||||
|
{
|
||||||
|
required: true,
|
||||||
|
message: "应急指挥机构不能为空",
|
||||||
|
trigger: "change",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
MEMBER_NAME: [{ required: true, message: "姓名不能为空", trigger: "blur" }],
|
||||||
|
MEMBER_UNIT: [{ required: true, message: "单位不能为空", trigger: "blur" }],
|
||||||
|
MEMBER_DUTY: [{ required: true, message: "职务不能为空", trigger: "blur" }],
|
||||||
|
MEMBER_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: "请输入正确的手机号码",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
MEMBER_EMERGENCY_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: "请输入正确的手机号码",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
};
|
||||||
|
const formRef = ref(null);
|
||||||
|
const fnClose = () => {
|
||||||
|
formRef.value.resetFields();
|
||||||
|
visible.value = false;
|
||||||
|
};
|
||||||
|
const fnSubmit = debounce(
|
||||||
|
1000,
|
||||||
|
async () => {
|
||||||
|
await useFormValidate(formRef);
|
||||||
|
const params = {
|
||||||
|
...form.value,
|
||||||
|
EMERGENCYDRILLBASIC_ID: props.emergencyDrillBasicId,
|
||||||
|
};
|
||||||
|
props.type === "add"
|
||||||
|
? await setEmergencyDrillManagementPersonnelAdd(params)
|
||||||
|
: await setEmergencyDrillManagementPersonnelEdit(params);
|
||||||
|
ElMessage.success("操作成功");
|
||||||
|
fnClose();
|
||||||
|
emits("get-data");
|
||||||
|
},
|
||||||
|
{ atBegin: true }
|
||||||
|
);
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss"></style>
|
||||||
|
|
@ -0,0 +1,138 @@
|
||||||
|
<template>
|
||||||
|
<el-form ref="formRef" :rules="rules" :model="form" label-width="140px">
|
||||||
|
<el-form-item label="应急演练方案名称" prop="DRILL_NAME">
|
||||||
|
<el-input v-model="form.DRILL_NAME" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="演练单位" prop="DRILL_UNIT">
|
||||||
|
<el-input v-model="form.DRILL_UNIT" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="演练时间" prop="DRILL_DATE">
|
||||||
|
<el-date-picker
|
||||||
|
v-model="form.DRILL_DATE"
|
||||||
|
value-format="YYYY-MM-DD"
|
||||||
|
format="YYYY-MM-DD"
|
||||||
|
type="date"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="演练目的" prop="DRILL_PURPOSE">
|
||||||
|
<el-input
|
||||||
|
v-model="form.DRILL_PURPOSE"
|
||||||
|
type="textarea"
|
||||||
|
:autosize="{ minRows: 3 }"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="演练特点" prop="DRILL_PROPERTY">
|
||||||
|
<el-input
|
||||||
|
v-model="form.DRILL_PROPERTY"
|
||||||
|
type="textarea"
|
||||||
|
:autosize="{ minRows: 3 }"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="应急演练地点" prop="DRILL_PLACE">
|
||||||
|
<el-input v-model="form.DRILL_PLACE" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="参加人员" prop="DRILL_ATTENDERS">
|
||||||
|
<el-input v-model="form.DRILL_ATTENDERS" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
<div class="tc mt-10">
|
||||||
|
<el-button type="primary" @click="fnSubmit(0)">保存</el-button>
|
||||||
|
<el-button type="success" @click="fnSubmit(1)">保存并下一步</el-button>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { ref } from "vue";
|
||||||
|
import { debounce } from "throttle-debounce";
|
||||||
|
import { ElMessage } from "element-plus";
|
||||||
|
import {
|
||||||
|
getEmergencyDrillManagementViewInfo,
|
||||||
|
setEmergencyDrillManagementInfoAdd,
|
||||||
|
setEmergencyDrillManagementInfoEdit,
|
||||||
|
} from "@/request/emergency_resource_management.js";
|
||||||
|
import { useRoute, useRouter } from "vue-router";
|
||||||
|
import useFormValidate from "@/assets/js/useFormValidate.js";
|
||||||
|
|
||||||
|
const props = defineProps({
|
||||||
|
emergencyDrillBasicId: {
|
||||||
|
type: String,
|
||||||
|
default: "",
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
activeName: {
|
||||||
|
type: String,
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
const route = useRoute();
|
||||||
|
const router = useRouter();
|
||||||
|
const rules = {
|
||||||
|
DRILL_NAME: [
|
||||||
|
{ required: true, message: "应急演练方案名称不能为空", trigger: "blur" },
|
||||||
|
],
|
||||||
|
DRILL_UNIT: [
|
||||||
|
{ required: true, message: "演练单位不能为空", trigger: "blur" },
|
||||||
|
],
|
||||||
|
DRILL_DATE: [
|
||||||
|
{ required: true, message: "演练时间不能为空", trigger: "change" },
|
||||||
|
],
|
||||||
|
DRILL_PURPOSE: [
|
||||||
|
{ required: true, message: "演练目的不能为空", trigger: "blur" },
|
||||||
|
],
|
||||||
|
DRILL_PROPERTY: [
|
||||||
|
{ required: true, message: "演练特点不能为空", trigger: "blur" },
|
||||||
|
],
|
||||||
|
DRILL_PLACE: [
|
||||||
|
{ required: true, message: "应急演练地点不能为空", trigger: "blur" },
|
||||||
|
],
|
||||||
|
DRILL_ATTENDERS: [
|
||||||
|
{ required: true, message: "参加人员不能为空", trigger: "blur" },
|
||||||
|
],
|
||||||
|
};
|
||||||
|
const form = ref({
|
||||||
|
DRILL_NAME: "",
|
||||||
|
DRILL_UNIT: "",
|
||||||
|
DRILL_DATE: "",
|
||||||
|
DRILL_PURPOSE: "",
|
||||||
|
DRILL_PROPERTY: "",
|
||||||
|
DRILL_PLACE: "",
|
||||||
|
DRILL_ATTENDERS: "",
|
||||||
|
});
|
||||||
|
const formRef = ref(null);
|
||||||
|
const fnGetData = async () => {
|
||||||
|
if (!props.emergencyDrillBasicId) return;
|
||||||
|
const resData = await getEmergencyDrillManagementViewInfo({
|
||||||
|
EMERGENCYDRILLBASIC_ID: props.emergencyDrillBasicId,
|
||||||
|
});
|
||||||
|
form.value = resData.pd;
|
||||||
|
};
|
||||||
|
fnGetData();
|
||||||
|
const fnSubmit = debounce(
|
||||||
|
1000,
|
||||||
|
async (type) => {
|
||||||
|
await useFormValidate(formRef);
|
||||||
|
let EMERGENCYDRILLBASIC_ID = props.emergencyDrillBasicId;
|
||||||
|
if (props.emergencyDrillBasicId)
|
||||||
|
await setEmergencyDrillManagementInfoEdit({ ...form.value });
|
||||||
|
else {
|
||||||
|
const resData = await setEmergencyDrillManagementInfoAdd({
|
||||||
|
...form.value,
|
||||||
|
});
|
||||||
|
EMERGENCYDRILLBASIC_ID = resData.pd.EMERGENCYDRILLBASIC_ID;
|
||||||
|
}
|
||||||
|
ElMessage.success("操作成功");
|
||||||
|
let activeName = props.activeName;
|
||||||
|
if (type === 1) activeName = "commandingOrganization";
|
||||||
|
await router.replace({
|
||||||
|
path: route.path,
|
||||||
|
query: {
|
||||||
|
activeName,
|
||||||
|
EMERGENCYDRILLBASIC_ID,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
},
|
||||||
|
{ atBegin: true }
|
||||||
|
);
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped></style>
|
||||||
|
|
@ -0,0 +1,151 @@
|
||||||
|
<template>
|
||||||
|
<el-form
|
||||||
|
:model="searchForm"
|
||||||
|
label-width="80px"
|
||||||
|
@submit.prevent="fnResetPagination"
|
||||||
|
>
|
||||||
|
<el-row>
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="演练内容" prop="KEYWORDS">
|
||||||
|
<el-input v-model="searchForm.KEYWORDS" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
|
<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>
|
||||||
|
<layout-table
|
||||||
|
ref="tableRef"
|
||||||
|
row-key="EMERGENCYDRILLCONTENT_ID"
|
||||||
|
:data="list"
|
||||||
|
@get-data="fnGetData"
|
||||||
|
v-model:pagination="pagination"
|
||||||
|
>
|
||||||
|
<el-table-column reserve-selection type="selection" width="55" />
|
||||||
|
<el-table-column label="序号" width="60">
|
||||||
|
<template #default="{ $index }">
|
||||||
|
{{ serialNumber(pagination, $index) }}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column prop="DRILL_CONTENT" label="演练内容" />
|
||||||
|
<el-table-column label="操作" width="120">
|
||||||
|
<template v-slot="{ row }">
|
||||||
|
<el-button
|
||||||
|
type="primary"
|
||||||
|
text
|
||||||
|
link
|
||||||
|
@click="fnAddOrEdit(row.EMERGENCYDRILLCONTENT_ID, 'edit')"
|
||||||
|
>
|
||||||
|
编辑
|
||||||
|
</el-button>
|
||||||
|
<el-button
|
||||||
|
type="primary"
|
||||||
|
text
|
||||||
|
link
|
||||||
|
@click="fnDelete(row.EMERGENCYDRILLCONTENT_ID)"
|
||||||
|
>
|
||||||
|
删除
|
||||||
|
</el-button>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<template #button>
|
||||||
|
<el-button type="primary" @click="fnAddOrEdit('', 'add')">
|
||||||
|
新增
|
||||||
|
</el-button>
|
||||||
|
<el-button type="danger" @click="fnDeleteAll"> 删除 </el-button>
|
||||||
|
</template>
|
||||||
|
</layout-table>
|
||||||
|
<add
|
||||||
|
v-model:visible="data.addOrEditDialog.visible"
|
||||||
|
v-model:form="data.addOrEditDialog.form"
|
||||||
|
:type="data.addOrEditDialog.type"
|
||||||
|
:emergency-drill-basic-id="emergencyDrillBasicId"
|
||||||
|
@get-data="fnResetPagination"
|
||||||
|
/>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { serialNumber } from "@/assets/js/utils.js";
|
||||||
|
import useListData from "@/assets/js/useListData.js";
|
||||||
|
import {
|
||||||
|
getEmergencyDrillManagementContentList,
|
||||||
|
getEmergencyDrillManagementContentView,
|
||||||
|
setEmergencyDrillManagementContentDelete,
|
||||||
|
setEmergencyDrillManagementContentDeleteMultiple,
|
||||||
|
} from "@/request/emergency_resource_management.js";
|
||||||
|
import { debounce } from "throttle-debounce";
|
||||||
|
import { ElMessage, ElMessageBox } from "element-plus";
|
||||||
|
import { nextTick, reactive } from "vue";
|
||||||
|
import Add from "./content_add.vue";
|
||||||
|
|
||||||
|
const props = defineProps({
|
||||||
|
emergencyDrillBasicId: {
|
||||||
|
type: String,
|
||||||
|
default: "",
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
const { list, pagination, searchForm, fnGetData, fnResetPagination, tableRef } =
|
||||||
|
useListData(getEmergencyDrillManagementContentList, {
|
||||||
|
otherParams: { EMERGENCYDRILLBASIC_ID: props.emergencyDrillBasicId },
|
||||||
|
});
|
||||||
|
const data = reactive({
|
||||||
|
addOrEditDialog: {
|
||||||
|
visible: false,
|
||||||
|
type: "",
|
||||||
|
form: {
|
||||||
|
DRILL_CONTENT: "",
|
||||||
|
DRILL_CONTENT_NUM: "",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
const fnDelete = debounce(
|
||||||
|
1000,
|
||||||
|
async (EMERGENCYDRILLCONTENT_ID) => {
|
||||||
|
await ElMessageBox.confirm("确定要删除吗?", { type: "warning" });
|
||||||
|
await setEmergencyDrillManagementContentDelete({
|
||||||
|
EMERGENCYDRILLCONTENT_ID,
|
||||||
|
});
|
||||||
|
ElMessage.success("删除成功");
|
||||||
|
fnResetPagination();
|
||||||
|
},
|
||||||
|
{ atBegin: true }
|
||||||
|
);
|
||||||
|
const fnDeleteAll = debounce(
|
||||||
|
1000,
|
||||||
|
async () => {
|
||||||
|
const selectionData = tableRef.value.getSelectionRows();
|
||||||
|
if (selectionData.length === 0) {
|
||||||
|
ElMessage.warning("请选中要删除的项");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const DATA_IDS = selectionData
|
||||||
|
.map((item) => item.EMERGENCYDRILLCONTENT_ID)
|
||||||
|
.join(",");
|
||||||
|
await ElMessageBox.confirm("确定要删除吗?", { type: "warning" });
|
||||||
|
await setEmergencyDrillManagementContentDeleteMultiple({ DATA_IDS });
|
||||||
|
ElMessage.success("删除成功");
|
||||||
|
fnResetPagination();
|
||||||
|
},
|
||||||
|
{ atBegin: true }
|
||||||
|
);
|
||||||
|
const fnAddOrEdit = async (EMERGENCYDRILLCONTENT_ID, type) => {
|
||||||
|
data.addOrEditDialog.visible = true;
|
||||||
|
await nextTick();
|
||||||
|
data.addOrEditDialog.type = type;
|
||||||
|
if (type === "edit") {
|
||||||
|
const resData = await getEmergencyDrillManagementContentView({
|
||||||
|
EMERGENCYDRILLCONTENT_ID,
|
||||||
|
});
|
||||||
|
data.addOrEditDialog.form = resData.pd;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss"></style>
|
||||||
|
|
@ -0,0 +1,89 @@
|
||||||
|
<template>
|
||||||
|
<el-dialog
|
||||||
|
v-model="visible"
|
||||||
|
:title="type === 'edit' ? '修改' : '新增'"
|
||||||
|
:on-close="fnClose"
|
||||||
|
>
|
||||||
|
<el-form ref="formRef" :rules="rules" :model="form" label-width="150px">
|
||||||
|
<el-form-item label="演练内容" prop="DRILL_CONTENT">
|
||||||
|
<el-input v-model="form.DRILL_CONTENT" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="演练内容序号" prop="DRILL_CONTENT_NUM">
|
||||||
|
<el-input v-model="form.DRILL_CONTENT_NUM" />
|
||||||
|
</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 { debounce } from "throttle-debounce";
|
||||||
|
import useFormValidate from "@/assets/js/useFormValidate.js";
|
||||||
|
import {
|
||||||
|
setEmergencyDrillManagementContentAdd,
|
||||||
|
setEmergencyDrillManagementContentEdit,
|
||||||
|
} from "@/request/emergency_resource_management.js";
|
||||||
|
import { ElMessage } from "element-plus";
|
||||||
|
import { useVModels } from "@vueuse/core";
|
||||||
|
import { ref } from "vue";
|
||||||
|
|
||||||
|
const props = defineProps({
|
||||||
|
visible: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false,
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
form: {
|
||||||
|
type: Object,
|
||||||
|
default: () => ({}),
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
type: {
|
||||||
|
type: String,
|
||||||
|
default: "add",
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
emergencyDrillBasicId: {
|
||||||
|
type: String,
|
||||||
|
default: "",
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
const emits = defineEmits(["update:visible", "update:form", "get-data"]);
|
||||||
|
const { visible, form } = useVModels(props, emits);
|
||||||
|
const rules = {
|
||||||
|
DRILL_CONTENT: [
|
||||||
|
{ required: true, message: "演练内容不能为空", trigger: "blur" },
|
||||||
|
],
|
||||||
|
DRILL_CONTENT_NUM: [
|
||||||
|
{ required: true, message: "演练内容序号不能为空", trigger: "blur" },
|
||||||
|
],
|
||||||
|
};
|
||||||
|
const formRef = ref(null);
|
||||||
|
const fnClose = () => {
|
||||||
|
formRef.value.resetFields();
|
||||||
|
visible.value = false;
|
||||||
|
};
|
||||||
|
const fnSubmit = debounce(
|
||||||
|
1000,
|
||||||
|
async () => {
|
||||||
|
await useFormValidate(formRef);
|
||||||
|
const params = {
|
||||||
|
...form.value,
|
||||||
|
EMERGENCYDRILLBASIC_ID: props.emergencyDrillBasicId,
|
||||||
|
};
|
||||||
|
props.type === "add"
|
||||||
|
? await setEmergencyDrillManagementContentAdd(params)
|
||||||
|
: await setEmergencyDrillManagementContentEdit(params);
|
||||||
|
ElMessage.success("操作成功");
|
||||||
|
fnClose();
|
||||||
|
emits("get-data");
|
||||||
|
},
|
||||||
|
{ atBegin: true }
|
||||||
|
);
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss"></style>
|
||||||
|
|
@ -0,0 +1,57 @@
|
||||||
|
<template>
|
||||||
|
<el-row :gutter="24" class="pb-20">
|
||||||
|
<el-col :span="12" style="border-right: 1px dashed var(--el-border-color)">
|
||||||
|
<content :emergency-drill-basic-id="emergencyDrillBasicId" />
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<scene :emergency-drill-basic-id="emergencyDrillBasicId" />
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
<div class="tc pt-20" style="border-top: 1px dashed var(--el-border-color)">
|
||||||
|
<el-button
|
||||||
|
@click="
|
||||||
|
router.replace({
|
||||||
|
path: route.path,
|
||||||
|
query: {
|
||||||
|
activeName: 'commandingOrganization',
|
||||||
|
EMERGENCYDRILLBASIC_ID: emergencyDrillBasicId,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
"
|
||||||
|
>
|
||||||
|
上一步
|
||||||
|
</el-button>
|
||||||
|
<el-button
|
||||||
|
type="primary"
|
||||||
|
@click="
|
||||||
|
router.replace({
|
||||||
|
path: route.path,
|
||||||
|
query: {
|
||||||
|
activeName: 'summaryEvaluation',
|
||||||
|
EMERGENCYDRILLBASIC_ID: emergencyDrillBasicId,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
"
|
||||||
|
>
|
||||||
|
下一步
|
||||||
|
</el-button>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { useRoute, useRouter } from "vue-router";
|
||||||
|
import Content from "./content.vue";
|
||||||
|
import Scene from "./scene.vue";
|
||||||
|
|
||||||
|
const router = useRouter();
|
||||||
|
const route = useRoute();
|
||||||
|
defineProps({
|
||||||
|
emergencyDrillBasicId: {
|
||||||
|
type: String,
|
||||||
|
default: "",
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped></style>
|
||||||
|
|
@ -0,0 +1,151 @@
|
||||||
|
<template>
|
||||||
|
<el-form
|
||||||
|
:model="searchForm"
|
||||||
|
label-width="80px"
|
||||||
|
@submit.prevent="fnResetPagination"
|
||||||
|
>
|
||||||
|
<el-row>
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="演练场景" prop="KEYWORDS">
|
||||||
|
<el-input v-model="searchForm.KEYWORDS" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
|
<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>
|
||||||
|
<layout-table
|
||||||
|
ref="tableRef"
|
||||||
|
row-key="EMERGENCYDRILLSCENE_ID"
|
||||||
|
:data="list"
|
||||||
|
@get-data="fnGetData"
|
||||||
|
v-model:pagination="pagination"
|
||||||
|
>
|
||||||
|
<el-table-column reserve-selection type="selection" width="55" />
|
||||||
|
<el-table-column label="序号" width="60">
|
||||||
|
<template #default="{ $index }">
|
||||||
|
{{ serialNumber(pagination, $index) }}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column prop="DRILL_SCENE" label="演练场景" />
|
||||||
|
<el-table-column label="操作" width="120">
|
||||||
|
<template v-slot="{ row }">
|
||||||
|
<el-button
|
||||||
|
type="primary"
|
||||||
|
text
|
||||||
|
link
|
||||||
|
@click="fnAddOrEdit(row.EMERGENCYDRILLSCENE_ID, 'edit')"
|
||||||
|
>
|
||||||
|
编辑
|
||||||
|
</el-button>
|
||||||
|
<el-button
|
||||||
|
type="primary"
|
||||||
|
text
|
||||||
|
link
|
||||||
|
@click="fnDelete(row.EMERGENCYDRILLSCENE_ID)"
|
||||||
|
>
|
||||||
|
删除
|
||||||
|
</el-button>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<template #button>
|
||||||
|
<el-button type="primary" @click="fnAddOrEdit('', 'add')">
|
||||||
|
新增
|
||||||
|
</el-button>
|
||||||
|
<el-button type="danger" @click="fnDeleteAll"> 删除</el-button>
|
||||||
|
</template>
|
||||||
|
</layout-table>
|
||||||
|
<add
|
||||||
|
v-model:visible="data.addOrEditDialog.visible"
|
||||||
|
v-model:form="data.addOrEditDialog.form"
|
||||||
|
:type="data.addOrEditDialog.type"
|
||||||
|
:emergency-drill-basic-id="emergencyDrillBasicId"
|
||||||
|
@get-data="fnResetPagination"
|
||||||
|
/>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { serialNumber } from "@/assets/js/utils.js";
|
||||||
|
import {
|
||||||
|
getEmergencyDrillManagementSceneList,
|
||||||
|
getEmergencyDrillManagementSceneView,
|
||||||
|
setEmergencyDrillManagementSceneDelete,
|
||||||
|
setEmergencyDrillManagementSceneDeleteMultiple,
|
||||||
|
} from "@/request/emergency_resource_management.js";
|
||||||
|
import { debounce } from "throttle-debounce";
|
||||||
|
import { ElMessage, ElMessageBox } from "element-plus";
|
||||||
|
import { nextTick, reactive } from "vue";
|
||||||
|
import useListData from "@/assets/js/useListData.js";
|
||||||
|
import Add from "./scene_add.vue";
|
||||||
|
|
||||||
|
const props = defineProps({
|
||||||
|
emergencyDrillBasicId: {
|
||||||
|
type: String,
|
||||||
|
default: "",
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
const { list, pagination, searchForm, fnGetData, fnResetPagination, tableRef } =
|
||||||
|
useListData(getEmergencyDrillManagementSceneList, {
|
||||||
|
otherParams: { EMERGENCYDRILLBASIC_ID: props.emergencyDrillBasicId },
|
||||||
|
});
|
||||||
|
const data = reactive({
|
||||||
|
addOrEditDialog: {
|
||||||
|
visible: false,
|
||||||
|
type: "",
|
||||||
|
form: {
|
||||||
|
DRILL_SCENE: "",
|
||||||
|
DRILL_SCENE_NUM: "",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
const fnDelete = debounce(
|
||||||
|
1000,
|
||||||
|
async (EMERGENCYDRILLSCENE_ID) => {
|
||||||
|
await ElMessageBox.confirm("确定要删除吗?", { type: "warning" });
|
||||||
|
await setEmergencyDrillManagementSceneDelete({
|
||||||
|
EMERGENCYDRILLSCENE_ID,
|
||||||
|
});
|
||||||
|
ElMessage.success("删除成功");
|
||||||
|
fnResetPagination();
|
||||||
|
},
|
||||||
|
{ atBegin: true }
|
||||||
|
);
|
||||||
|
const fnDeleteAll = debounce(
|
||||||
|
1000,
|
||||||
|
async () => {
|
||||||
|
const selectionData = tableRef.value.getSelectionRows();
|
||||||
|
if (selectionData.length === 0) {
|
||||||
|
ElMessage.warning("请选中要删除的项");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const DATA_IDS = selectionData
|
||||||
|
.map((item) => item.EMERGENCYDRILLSCENE_ID)
|
||||||
|
.join(",");
|
||||||
|
await ElMessageBox.confirm("确定要删除吗?", { type: "warning" });
|
||||||
|
await setEmergencyDrillManagementSceneDeleteMultiple({ DATA_IDS });
|
||||||
|
ElMessage.success("删除成功");
|
||||||
|
fnResetPagination();
|
||||||
|
},
|
||||||
|
{ atBegin: true }
|
||||||
|
);
|
||||||
|
const fnAddOrEdit = async (EMERGENCYDRILLSCENE_ID, type) => {
|
||||||
|
data.addOrEditDialog.visible = true;
|
||||||
|
await nextTick();
|
||||||
|
data.addOrEditDialog.type = type;
|
||||||
|
if (type === "edit") {
|
||||||
|
const resData = await getEmergencyDrillManagementSceneView({
|
||||||
|
EMERGENCYDRILLSCENE_ID,
|
||||||
|
});
|
||||||
|
data.addOrEditDialog.form = resData.pd;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss"></style>
|
||||||
|
|
@ -0,0 +1,88 @@
|
||||||
|
<template>
|
||||||
|
<el-dialog
|
||||||
|
v-model="visible"
|
||||||
|
:title="type === 'edit' ? '修改' : '新增'"
|
||||||
|
:on-close="fnClose"
|
||||||
|
>
|
||||||
|
<el-form ref="formRef" :rules="rules" :model="form" label-width="150px">
|
||||||
|
<el-form-item label="演练场景" prop="DRILL_SCENE">
|
||||||
|
<el-input v-model="form.DRILL_SCENE" />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="演练场景序号" prop="DRILL_SCENE_NUM">
|
||||||
|
<el-input v-model="form.DRILL_SCENE_NUM" />
|
||||||
|
</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 { debounce } from "throttle-debounce";
|
||||||
|
import useFormValidate from "@/assets/js/useFormValidate.js";
|
||||||
|
import {
|
||||||
|
setEmergencyDrillManagementSceneAdd,
|
||||||
|
setEmergencyDrillManagementSceneEdit,
|
||||||
|
} from "@/request/emergency_resource_management.js";
|
||||||
|
import { ElMessage } from "element-plus";
|
||||||
|
import { useVModels } from "@vueuse/core";
|
||||||
|
import { ref } from "vue";
|
||||||
|
const props = defineProps({
|
||||||
|
visible: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false,
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
form: {
|
||||||
|
type: Object,
|
||||||
|
default: () => ({}),
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
type: {
|
||||||
|
type: String,
|
||||||
|
default: "add",
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
emergencyDrillBasicId: {
|
||||||
|
type: String,
|
||||||
|
default: "",
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
const emits = defineEmits(["update:visible", "update:form", "get-data"]);
|
||||||
|
const { visible, form } = useVModels(props, emits);
|
||||||
|
const rules = {
|
||||||
|
DRILL_SCENE: [
|
||||||
|
{ required: true, message: "演练场景不能为空", trigger: "blur" },
|
||||||
|
],
|
||||||
|
DRILL_SCENE_NUM: [
|
||||||
|
{ required: true, message: "演练场景序号不能为空", trigger: "blur" },
|
||||||
|
],
|
||||||
|
};
|
||||||
|
const formRef = ref(null);
|
||||||
|
const fnClose = () => {
|
||||||
|
formRef.value.resetFields();
|
||||||
|
visible.value = false;
|
||||||
|
};
|
||||||
|
const fnSubmit = debounce(
|
||||||
|
1000,
|
||||||
|
async () => {
|
||||||
|
await useFormValidate(formRef);
|
||||||
|
const params = {
|
||||||
|
...form.value,
|
||||||
|
EMERGENCYDRILLBASIC_ID: props.emergencyDrillBasicId,
|
||||||
|
};
|
||||||
|
props.type === "add"
|
||||||
|
? await setEmergencyDrillManagementSceneAdd(params)
|
||||||
|
: await setEmergencyDrillManagementSceneEdit(params);
|
||||||
|
ElMessage.success("操作成功");
|
||||||
|
fnClose();
|
||||||
|
emits("get-data");
|
||||||
|
},
|
||||||
|
{ atBegin: true }
|
||||||
|
);
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss"></style>
|
||||||
|
|
@ -0,0 +1,98 @@
|
||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<el-form ref="formRef" :rules="rules" :model="form" label-width="80px">
|
||||||
|
<el-form-item label="附件" prop="file">
|
||||||
|
<layout-upload v-model:file-list="form.file" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
<div class="tc mt-10">
|
||||||
|
<el-button
|
||||||
|
@click="
|
||||||
|
router.replace({
|
||||||
|
path: route.path,
|
||||||
|
query: {
|
||||||
|
activeName: 'summaryEvaluation',
|
||||||
|
EMERGENCYDRILLBASIC_ID: emergencyDrillBasicId,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
"
|
||||||
|
>
|
||||||
|
上一步
|
||||||
|
</el-button>
|
||||||
|
<el-button type="primary" @click="fnSubmit">保存</el-button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { ref } from "vue";
|
||||||
|
import { useRoute, useRouter } from "vue-router";
|
||||||
|
import {
|
||||||
|
getEmergencyDrillManagementViewSchemeText,
|
||||||
|
setEmergencyDrillManagementViewSchemeTextAdd,
|
||||||
|
setEmergencyDrillManagementViewSchemeTextEdit,
|
||||||
|
} from "@/request/emergency_resource_management.js";
|
||||||
|
import { debounce } from "throttle-debounce";
|
||||||
|
import { ElMessage } from "element-plus";
|
||||||
|
import LayoutUpload from "@/components/upload/index.vue";
|
||||||
|
import useFormValidate from "@/assets/js/useFormValidate.js";
|
||||||
|
|
||||||
|
const props = defineProps({
|
||||||
|
emergencyDrillBasicId: {
|
||||||
|
type: String,
|
||||||
|
default: "",
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
activeName: {
|
||||||
|
type: String,
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
const FILE_URL = import.meta.env.VITE_FILE_URL;
|
||||||
|
const route = useRoute();
|
||||||
|
const router = useRouter();
|
||||||
|
const rules = {
|
||||||
|
file: [{ required: true, message: "附件不能为空", trigger: "blur" }],
|
||||||
|
};
|
||||||
|
const formRef = ref(null);
|
||||||
|
const form = ref({
|
||||||
|
file: [],
|
||||||
|
});
|
||||||
|
const fnGetData = async () => {
|
||||||
|
if (!props.emergencyDrillBasicId) return;
|
||||||
|
const resData = await getEmergencyDrillManagementViewSchemeText({
|
||||||
|
EMERGENCYDRILLBASIC_ID: props.emergencyDrillBasicId,
|
||||||
|
});
|
||||||
|
if (!resData.pd) return;
|
||||||
|
form.value = resData.pd;
|
||||||
|
form.value.file = [
|
||||||
|
{
|
||||||
|
url: FILE_URL + resData.pd.DRILL_ATTACHMENT_FILE_PATH,
|
||||||
|
name: resData.pd.DRILL_ATTACHMENT_FILE_NAME,
|
||||||
|
},
|
||||||
|
];
|
||||||
|
};
|
||||||
|
fnGetData();
|
||||||
|
const fnSubmit = debounce(
|
||||||
|
1000,
|
||||||
|
async () => {
|
||||||
|
await useFormValidate(formRef);
|
||||||
|
const formData = new FormData();
|
||||||
|
Object.keys(form.value).forEach((key) => {
|
||||||
|
formData.append(key, form.value[key]);
|
||||||
|
});
|
||||||
|
formData.delete("file");
|
||||||
|
formData.append("file", form.value.file[0].raw);
|
||||||
|
formData.append("DRILL_REPORT_FILE_NAME", form.value.file[0].name);
|
||||||
|
formData.append("EMERGENCYDRILLBASIC_ID", props.emergencyDrillBasicId);
|
||||||
|
!props.emergencyDrillBasicId
|
||||||
|
? await setEmergencyDrillManagementViewSchemeTextAdd(formData)
|
||||||
|
: await setEmergencyDrillManagementViewSchemeTextEdit(formData);
|
||||||
|
ElMessage.success("操作成功");
|
||||||
|
router.back();
|
||||||
|
},
|
||||||
|
{ atBegin: true }
|
||||||
|
);
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped></style>
|
||||||
|
|
@ -0,0 +1,118 @@
|
||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<el-form ref="formRef" :rules="rules" :model="form" label-width="80px">
|
||||||
|
<el-form-item label="总结评估" prop="DRILL_REPORT">
|
||||||
|
<el-input
|
||||||
|
v-model="form.DRILL_REPORT"
|
||||||
|
type="textarea"
|
||||||
|
:autosize="{ minRows: 3 }"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="附件" prop="file">
|
||||||
|
<layout-upload v-model:file-list="form.file" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
<div class="tc mt-10">
|
||||||
|
<el-button
|
||||||
|
@click="
|
||||||
|
router.replace({
|
||||||
|
path: route.path,
|
||||||
|
query: {
|
||||||
|
activeName: 'exerciseContentAndScenario',
|
||||||
|
EMERGENCYDRILLBASIC_ID: emergencyDrillBasicId,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
"
|
||||||
|
>
|
||||||
|
上一步
|
||||||
|
</el-button>
|
||||||
|
<el-button type="primary" @click="fnSubmit(0)">保存</el-button>
|
||||||
|
<el-button type="success" @click="fnSubmit(1)">保存并下一步</el-button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { ref } from "vue";
|
||||||
|
import { useRoute, useRouter } from "vue-router";
|
||||||
|
import {
|
||||||
|
getEmergencyDrillManagementViewSummaryEvaluation,
|
||||||
|
setEmergencyDrillManagementViewSummaryEvaluationAdd,
|
||||||
|
setEmergencyDrillManagementViewSummaryEvaluationEdit,
|
||||||
|
} from "@/request/emergency_resource_management.js";
|
||||||
|
import { debounce } from "throttle-debounce";
|
||||||
|
import { ElMessage } from "element-plus";
|
||||||
|
import LayoutUpload from "@/components/upload/index.vue";
|
||||||
|
import useFormValidate from "@/assets/js/useFormValidate.js";
|
||||||
|
|
||||||
|
const props = defineProps({
|
||||||
|
emergencyDrillBasicId: {
|
||||||
|
type: String,
|
||||||
|
default: "",
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
activeName: {
|
||||||
|
type: String,
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
const FILE_URL = import.meta.env.VITE_FILE_URL;
|
||||||
|
const route = useRoute();
|
||||||
|
const router = useRouter();
|
||||||
|
const rules = {
|
||||||
|
DRILL_REPORT: [
|
||||||
|
{ required: true, message: "总结评估不能为空", trigger: "blur" },
|
||||||
|
],
|
||||||
|
file: [{ required: true, message: "附件不能为空", trigger: "blur" }],
|
||||||
|
};
|
||||||
|
const formRef = ref(null);
|
||||||
|
const form = ref({
|
||||||
|
DRILL_REPORT: "",
|
||||||
|
file: [],
|
||||||
|
});
|
||||||
|
const fnGetData = async () => {
|
||||||
|
if (!props.emergencyDrillBasicId) return;
|
||||||
|
const resData = await getEmergencyDrillManagementViewSummaryEvaluation({
|
||||||
|
EMERGENCYDRILLBASIC_ID: props.emergencyDrillBasicId,
|
||||||
|
});
|
||||||
|
if (!resData.pd) return;
|
||||||
|
form.value = resData.pd;
|
||||||
|
form.value.file = [
|
||||||
|
{
|
||||||
|
url: FILE_URL + resData.pd.DRILL_REPORT_FILE_PATH,
|
||||||
|
name: resData.pd.DRILL_REPORT_FILE_NAME,
|
||||||
|
},
|
||||||
|
];
|
||||||
|
};
|
||||||
|
fnGetData();
|
||||||
|
const fnSubmit = debounce(
|
||||||
|
1000,
|
||||||
|
async (type) => {
|
||||||
|
await useFormValidate(formRef);
|
||||||
|
const formData = new FormData();
|
||||||
|
Object.keys(form.value).forEach((key) => {
|
||||||
|
formData.append(key, form.value[key]);
|
||||||
|
});
|
||||||
|
formData.delete("file");
|
||||||
|
formData.append("file", form.value.file[0].raw);
|
||||||
|
formData.append("DRILL_REPORT_FILE_NAME", form.value.file[0].name);
|
||||||
|
formData.append("EMERGENCYDRILLBASIC_ID", props.emergencyDrillBasicId);
|
||||||
|
!props.emergencyDrillBasicId
|
||||||
|
? await setEmergencyDrillManagementViewSummaryEvaluationAdd(formData)
|
||||||
|
: await setEmergencyDrillManagementViewSummaryEvaluationEdit(formData);
|
||||||
|
ElMessage.success("操作成功");
|
||||||
|
let activeName = props.activeName;
|
||||||
|
if (type === 1) activeName = "schemeText";
|
||||||
|
await router.replace({
|
||||||
|
path: route.path,
|
||||||
|
query: {
|
||||||
|
activeName,
|
||||||
|
EMERGENCYDRILLBASIC_ID: props.emergencyDrillBasicId,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
},
|
||||||
|
{ atBegin: true }
|
||||||
|
);
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped></style>
|
||||||
|
|
@ -0,0 +1,192 @@
|
||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<el-card>
|
||||||
|
<el-form
|
||||||
|
:model="searchForm"
|
||||||
|
label-width="80px"
|
||||||
|
@submit.prevent="fnResetPaginationTransfer"
|
||||||
|
>
|
||||||
|
<el-row>
|
||||||
|
<el-col :span="6">
|
||||||
|
<el-form-item
|
||||||
|
label="应急演练方案名称"
|
||||||
|
prop="KEYWORDS"
|
||||||
|
label-width="140px"
|
||||||
|
>
|
||||||
|
<el-input v-model="searchForm.KEYWORDS" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="6">
|
||||||
|
<el-form-item label="演练时间" prop="CATEGORY">
|
||||||
|
<el-date-picker
|
||||||
|
v-model="searchForm.dates"
|
||||||
|
type="daterange"
|
||||||
|
value-format="YYYY-MM-DD"
|
||||||
|
format="YYYY-MM-DD"
|
||||||
|
range-separator="至"
|
||||||
|
start-placeholder="开始日期"
|
||||||
|
end-placeholder="结束日期"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="4">
|
||||||
|
<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"
|
||||||
|
row-key="EMERGENCYDRILLBASIC_ID"
|
||||||
|
:data="list"
|
||||||
|
@get-data="fnGetDataTransfer"
|
||||||
|
v-model:pagination="pagination"
|
||||||
|
>
|
||||||
|
<el-table-column reserve-selection type="selection" width="55" />
|
||||||
|
<el-table-column label="序号" width="60">
|
||||||
|
<template #default="{ $index }">
|
||||||
|
{{ serialNumber(pagination, $index) }}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column
|
||||||
|
prop="DRILL_NAME"
|
||||||
|
label="应急演练方案名称"
|
||||||
|
show-overflow-tooltip
|
||||||
|
/>
|
||||||
|
<el-table-column
|
||||||
|
prop="DRILL_UNIT"
|
||||||
|
label="演练单位"
|
||||||
|
show-overflow-tooltip
|
||||||
|
/>
|
||||||
|
<el-table-column prop="DRILL_DATE" label="演练时间" width="130" />
|
||||||
|
<el-table-column label="操作" width="150">
|
||||||
|
<template #default="{ row }">
|
||||||
|
<el-button
|
||||||
|
type="primary"
|
||||||
|
text
|
||||||
|
link
|
||||||
|
@click="
|
||||||
|
router.push({
|
||||||
|
path: '/emergency_resource_management/emergency_drill_management/view',
|
||||||
|
query: { EMERGENCYDRILLBASIC_ID: row.EMERGENCYDRILLBASIC_ID },
|
||||||
|
})
|
||||||
|
"
|
||||||
|
>
|
||||||
|
查看
|
||||||
|
</el-button>
|
||||||
|
<el-button
|
||||||
|
v-if="buttonJurisdiction.edit"
|
||||||
|
type="primary"
|
||||||
|
text
|
||||||
|
link
|
||||||
|
@click="
|
||||||
|
router.push({
|
||||||
|
path: '/emergency_resource_management/emergency_drill_management/edit',
|
||||||
|
query: { EMERGENCYDRILLBASIC_ID: row.EMERGENCYDRILLBASIC_ID },
|
||||||
|
})
|
||||||
|
"
|
||||||
|
>
|
||||||
|
编辑
|
||||||
|
</el-button>
|
||||||
|
<el-button
|
||||||
|
v-if="buttonJurisdiction.del"
|
||||||
|
type="primary"
|
||||||
|
text
|
||||||
|
link
|
||||||
|
@click="fnDelete(row.EMERGENCYDRILLBASIC_ID)"
|
||||||
|
>
|
||||||
|
删除
|
||||||
|
</el-button>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<template #button>
|
||||||
|
<el-button
|
||||||
|
v-if="buttonJurisdiction.add"
|
||||||
|
type="primary"
|
||||||
|
@click="
|
||||||
|
router.push({
|
||||||
|
path: '/emergency_resource_management/emergency_drill_management/add',
|
||||||
|
})
|
||||||
|
"
|
||||||
|
>
|
||||||
|
新增
|
||||||
|
</el-button>
|
||||||
|
<el-button
|
||||||
|
v-if="buttonJurisdiction.del"
|
||||||
|
type="danger"
|
||||||
|
@click="fnDeleteAll"
|
||||||
|
>
|
||||||
|
批量删除
|
||||||
|
</el-button>
|
||||||
|
</template>
|
||||||
|
</layout-table>
|
||||||
|
</layout-card>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { serialNumber } from "@/assets/js/utils";
|
||||||
|
import { ElMessage, ElMessageBox } from "element-plus";
|
||||||
|
import { debounce } from "throttle-debounce";
|
||||||
|
import {
|
||||||
|
getEmergencyDrillManagementList,
|
||||||
|
setEmergencyDrillManagementDelete,
|
||||||
|
setEmergencyDrillManagementDeleteMultiple,
|
||||||
|
} from "@/request/emergency_resource_management.js";
|
||||||
|
import useButtonJurisdiction from "@/assets/js/useButtonJurisdiction.js";
|
||||||
|
import useListData from "@/assets/js/useListData.js";
|
||||||
|
import { useRouter } from "vue-router";
|
||||||
|
|
||||||
|
const router = useRouter();
|
||||||
|
const { list, searchForm, pagination, fnGetData, fnResetPagination, tableRef } =
|
||||||
|
useListData(getEmergencyDrillManagementList);
|
||||||
|
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 buttonJurisdiction = await useButtonJurisdiction("emergencydrillbasic");
|
||||||
|
const fnDelete = debounce(
|
||||||
|
1000,
|
||||||
|
async (EMERGENCYDRILLBASIC_ID) => {
|
||||||
|
await ElMessageBox.confirm("确定要删除吗?", { type: "warning" });
|
||||||
|
await setEmergencyDrillManagementDelete({ EMERGENCYDRILLBASIC_ID });
|
||||||
|
ElMessage.success("删除成功");
|
||||||
|
fnResetPaginationTransfer();
|
||||||
|
},
|
||||||
|
{ atBegin: true }
|
||||||
|
);
|
||||||
|
const fnDeleteAll = debounce(
|
||||||
|
1000,
|
||||||
|
async () => {
|
||||||
|
const selectionData = tableRef.value.getSelectionRows();
|
||||||
|
if (selectionData.length === 0) {
|
||||||
|
ElMessage.warning("请选中要删除的项");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const DATA_IDS = selectionData
|
||||||
|
.map((item) => item.EMERGENCYDRILLBASIC_ID)
|
||||||
|
.join(",");
|
||||||
|
await ElMessageBox.confirm("确定要删除吗?", { type: "warning" });
|
||||||
|
await setEmergencyDrillManagementDeleteMultiple({ DATA_IDS });
|
||||||
|
ElMessage.success("删除成功");
|
||||||
|
fnResetPaginationTransfer();
|
||||||
|
},
|
||||||
|
{ atBegin: true }
|
||||||
|
);
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped></style>
|
||||||
|
|
@ -0,0 +1,203 @@
|
||||||
|
<template>
|
||||||
|
<layout-card>
|
||||||
|
<el-divider content-position="left">应急方案基本信息</el-divider>
|
||||||
|
<el-descriptions border :column="2">
|
||||||
|
<el-descriptions-item label="应急演练方案名称" :span="2">
|
||||||
|
{{ data.info.DRILL_NAME }}
|
||||||
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="演练单位">
|
||||||
|
{{ data.info.DRILL_UNIT }}
|
||||||
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="演练时间">
|
||||||
|
{{ data.info.DRILL_DATE }}
|
||||||
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="演练目的">
|
||||||
|
{{ data.info.DRILL_PURPOSE }}
|
||||||
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="演练特点">
|
||||||
|
{{ data.info.DRILL_PROPERTY }}
|
||||||
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="应急演练地点">
|
||||||
|
{{ data.info.DRILL_PLACE }}
|
||||||
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="参加人员">
|
||||||
|
{{ data.info.DRILL_ATTENDERS }}
|
||||||
|
</el-descriptions-item>
|
||||||
|
</el-descriptions>
|
||||||
|
<el-divider content-position="left">应急指挥机构</el-divider>
|
||||||
|
<layout-table
|
||||||
|
:data="data.commandingOrganizationList"
|
||||||
|
:show-pagination="false"
|
||||||
|
>
|
||||||
|
<el-table-column type="index" label="序号" width="50" />
|
||||||
|
<el-table-column prop="ORG_NAME" label="机构名称" />
|
||||||
|
<el-table-column prop="ORG_UNIT_IDS" label="组成单位" />
|
||||||
|
<el-table-column prop="ORG_DUTY" label="机构职责" />
|
||||||
|
</layout-table>
|
||||||
|
<el-divider content-position="left">应急指挥机构人员</el-divider>
|
||||||
|
<layout-table
|
||||||
|
:data="data.commandingOrganizationPersonnelList"
|
||||||
|
:show-pagination="false"
|
||||||
|
>
|
||||||
|
<el-table-column type="index" label="序号" width="50" />
|
||||||
|
<el-table-column
|
||||||
|
prop="EMERGENCYDRILLORG_NAME"
|
||||||
|
label="应急指挥机构"
|
||||||
|
width="260"
|
||||||
|
/>
|
||||||
|
<el-table-column prop="MEMBER_NAME" label="姓名" width="110" />
|
||||||
|
<el-table-column prop="MEMBER_DUTY" label="职务" width="110" />
|
||||||
|
<el-table-column prop="MEMBER_PHONE" label="联系电话" width="200" />
|
||||||
|
<el-table-column
|
||||||
|
prop="MEMBER_EMERGENCY_PHONE"
|
||||||
|
label="紧急联系电话"
|
||||||
|
width="200"
|
||||||
|
/>
|
||||||
|
<el-table-column prop="MEMBER_UNIT" label="单位" />
|
||||||
|
</layout-table>
|
||||||
|
<el-divider content-position="left">演练内容</el-divider>
|
||||||
|
<layout-table :data="data.drillContentList" :show-pagination="false">
|
||||||
|
<el-table-column type="index" label="序号" width="50" />
|
||||||
|
<el-table-column
|
||||||
|
prop="DRILL_CONTENT_NUM"
|
||||||
|
label="演练内容序号"
|
||||||
|
width="120"
|
||||||
|
/>
|
||||||
|
<el-table-column prop="DRILL_CONTENT" label="演练内容" />
|
||||||
|
</layout-table>
|
||||||
|
<el-divider content-position="left">演练场景</el-divider>
|
||||||
|
<layout-table :data="data.drillSceneList" :show-pagination="false">
|
||||||
|
<el-table-column type="index" label="序号" width="50" />
|
||||||
|
<el-table-column
|
||||||
|
prop="DRILL_SCENE_NUM"
|
||||||
|
label="演练场景序号"
|
||||||
|
width="120"
|
||||||
|
/>
|
||||||
|
<el-table-column prop="DRILL_SCENE" label="演练场景" />
|
||||||
|
</layout-table>
|
||||||
|
<el-divider content-position="left">总结评估</el-divider>
|
||||||
|
<el-descriptions border>
|
||||||
|
<el-descriptions-item label="总结评估">
|
||||||
|
{{ data.summaryEvaluationInfo.DRILL_REPORT }}
|
||||||
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item
|
||||||
|
label="附件"
|
||||||
|
v-if="data.summaryEvaluationInfo.DRILL_REPORT_FILE_PATH"
|
||||||
|
>
|
||||||
|
{{ data.summaryEvaluationInfo.DRILL_REPORT_FILE_NAME }}
|
||||||
|
<el-button
|
||||||
|
class="ml-10"
|
||||||
|
type="primary"
|
||||||
|
@click="
|
||||||
|
useDownloadFile(
|
||||||
|
data.summaryEvaluationInfo.DRILL_REPORT_FILE_PATH,
|
||||||
|
data.summaryEvaluationInfo.DRILL_REPORT_FILE_NAME
|
||||||
|
)
|
||||||
|
"
|
||||||
|
>
|
||||||
|
下载
|
||||||
|
</el-button>
|
||||||
|
</el-descriptions-item>
|
||||||
|
</el-descriptions>
|
||||||
|
<el-divider content-position="left">应急演练方案文本</el-divider>
|
||||||
|
<el-descriptions border>
|
||||||
|
<el-descriptions-item
|
||||||
|
label="附件"
|
||||||
|
v-if="data.schemeTextInfo.DRILL_ATTACHMENT_FILE_PATH"
|
||||||
|
>
|
||||||
|
{{ data.schemeTextInfo.DRILL_ATTACHMENT_FILE_NAME }}
|
||||||
|
<el-button
|
||||||
|
class="ml-10"
|
||||||
|
type="primary"
|
||||||
|
@click="
|
||||||
|
useDownloadFile(
|
||||||
|
data.schemeTextInfo.DRILL_ATTACHMENT_FILE_PATH,
|
||||||
|
data.schemeTextInfo.DRILL_ATTACHMENT_FILE_NAME
|
||||||
|
)
|
||||||
|
"
|
||||||
|
>
|
||||||
|
下载
|
||||||
|
</el-button>
|
||||||
|
</el-descriptions-item>
|
||||||
|
</el-descriptions>
|
||||||
|
</layout-card>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { useRoute } from "vue-router";
|
||||||
|
import {
|
||||||
|
getEmergencyDrillManagementViewCommandingOrganization,
|
||||||
|
getEmergencyDrillManagementViewCommandingOrganizationPersonnel,
|
||||||
|
getEmergencyDrillManagementViewDrillContent,
|
||||||
|
getEmergencyDrillManagementViewDrillScene,
|
||||||
|
getEmergencyDrillManagementViewInfo,
|
||||||
|
getEmergencyDrillManagementViewSchemeText,
|
||||||
|
getEmergencyDrillManagementViewSummaryEvaluation,
|
||||||
|
} from "@/request/emergency_resource_management.js";
|
||||||
|
import { reactive } from "vue";
|
||||||
|
import useDownloadFile from "@/assets/js/useDownloadFile.js";
|
||||||
|
|
||||||
|
const route = useRoute();
|
||||||
|
const { EMERGENCYDRILLBASIC_ID } = route.query;
|
||||||
|
const data = reactive({
|
||||||
|
info: {},
|
||||||
|
commandingOrganizationList: [],
|
||||||
|
commandingOrganizationPersonnelList: [],
|
||||||
|
drillContentList: [],
|
||||||
|
drillSceneList: [],
|
||||||
|
summaryEvaluationInfo: {},
|
||||||
|
schemeTextInfo: {},
|
||||||
|
});
|
||||||
|
const fnGetData = async () => {
|
||||||
|
const resData = await getEmergencyDrillManagementViewInfo({
|
||||||
|
EMERGENCYDRILLBASIC_ID,
|
||||||
|
});
|
||||||
|
data.info = resData.pd;
|
||||||
|
};
|
||||||
|
const fnGetDataCommandingOrganization = async () => {
|
||||||
|
const resData = await getEmergencyDrillManagementViewCommandingOrganization({
|
||||||
|
EMERGENCYDRILLBASIC_ID,
|
||||||
|
});
|
||||||
|
data.commandingOrganizationList = resData.list;
|
||||||
|
};
|
||||||
|
const fnGetDataCommandingOrganizationPersonnel = async () => {
|
||||||
|
const resData =
|
||||||
|
await getEmergencyDrillManagementViewCommandingOrganizationPersonnel({
|
||||||
|
EMERGENCYDRILLBASIC_ID,
|
||||||
|
});
|
||||||
|
data.commandingOrganizationPersonnelList = resData.list;
|
||||||
|
};
|
||||||
|
const fnGetDataDrillContent = async () => {
|
||||||
|
const resData = await getEmergencyDrillManagementViewDrillContent({
|
||||||
|
EMERGENCYDRILLBASIC_ID,
|
||||||
|
});
|
||||||
|
data.drillContentList = resData.list;
|
||||||
|
};
|
||||||
|
const fnGetDataDrillScene = async () => {
|
||||||
|
const resData = await getEmergencyDrillManagementViewDrillScene({
|
||||||
|
EMERGENCYDRILLBASIC_ID,
|
||||||
|
});
|
||||||
|
data.drillSceneList = resData.list;
|
||||||
|
};
|
||||||
|
const fnGetDataSummaryEvaluation = async () => {
|
||||||
|
const resData = await getEmergencyDrillManagementViewSummaryEvaluation({
|
||||||
|
EMERGENCYDRILLBASIC_ID,
|
||||||
|
});
|
||||||
|
data.summaryEvaluationInfo = resData.pd;
|
||||||
|
};
|
||||||
|
const fnGetDataSchemeText = async () => {
|
||||||
|
const resData = await getEmergencyDrillManagementViewSchemeText({
|
||||||
|
EMERGENCYDRILLBASIC_ID,
|
||||||
|
});
|
||||||
|
data.schemeTextInfo = resData.pd;
|
||||||
|
};
|
||||||
|
fnGetData();
|
||||||
|
fnGetDataCommandingOrganization();
|
||||||
|
fnGetDataCommandingOrganizationPersonnel();
|
||||||
|
fnGetDataDrillContent();
|
||||||
|
fnGetDataDrillScene();
|
||||||
|
fnGetDataSummaryEvaluation();
|
||||||
|
fnGetDataSchemeText();
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped></style>
|
||||||
|
|
@ -0,0 +1,170 @@
|
||||||
|
<template>
|
||||||
|
<layout-card>
|
||||||
|
<el-form ref="formRef" :rules="rules" :model="form" label-width="140px">
|
||||||
|
<el-row>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="装备名称" prop="EQUIP_NAME">
|
||||||
|
<el-input v-model="form.EQUIP_NAME" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="装备类别" prop="CATEGORY">
|
||||||
|
<el-select v-model="form.CATEGORY">
|
||||||
|
<el-option
|
||||||
|
v-for="item in equipmentCategoryList"
|
||||||
|
:key="item.BIANMA"
|
||||||
|
:label="item.NAME"
|
||||||
|
:value="item.BIANMA"
|
||||||
|
/>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="规格型号" prop="SPEC">
|
||||||
|
<el-input v-model="form.SPEC" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="技术性能指标" prop="EQUIP_PERFORMANCE">
|
||||||
|
<el-input v-model="form.EQUIP_PERFORMANCE" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="保养周期" prop="MAINTAIN_DATE">
|
||||||
|
<el-input v-model="form.MAINTAIN_DATE" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="有效期" prop="VALIDATE_DATE">
|
||||||
|
<el-date-picker
|
||||||
|
v-model="form.VALIDATE_DATE"
|
||||||
|
value-format="YYYY-MM-DD"
|
||||||
|
format="YYYY-MM-DD"
|
||||||
|
type="date"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="用途" prop="USE">
|
||||||
|
<el-input v-model="form.USE" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="存放场所" prop="STORAGE_PLACE">
|
||||||
|
<el-input v-model="form.STORAGE_PLACE" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="24">
|
||||||
|
<el-form-item label="用途说明" prop="USE_DESC">
|
||||||
|
<el-input
|
||||||
|
v-model="form.USE_DESC"
|
||||||
|
type="textarea"
|
||||||
|
:autosize="{ minRows: 3 }"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="负责保管人姓名" prop="STORAGE_PERSON_NAME">
|
||||||
|
<el-input v-model="form.STORAGE_PERSON_NAME" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="负责保管人电话" prop="STORAGE_PERSON_PHONE">
|
||||||
|
<el-input v-model="form.STORAGE_PERSON_PHONE" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
</el-form>
|
||||||
|
<div class="mt-10 tc">
|
||||||
|
<el-button type="primary" @click="fnSubmit">保存</el-button>
|
||||||
|
</div>
|
||||||
|
</layout-card>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { ref } from "vue";
|
||||||
|
import { debounce } from "throttle-debounce";
|
||||||
|
import useFormValidate from "@/assets/js/useFormValidate.js";
|
||||||
|
import {
|
||||||
|
getEmergencyEquipmentManagementView,
|
||||||
|
setEmergencyEquipmentManagementAdd,
|
||||||
|
setEmergencyEquipmentManagementEdit,
|
||||||
|
} from "@/request/emergency_resource_management.js";
|
||||||
|
import { ElMessage } from "element-plus";
|
||||||
|
import { useRoute, useRouter } from "vue-router";
|
||||||
|
import { layoutFnGetEquipmentCategory } from "@/assets/js/data_dictionary.js";
|
||||||
|
|
||||||
|
const router = useRouter();
|
||||||
|
const route = useRoute();
|
||||||
|
const { EMERGENCYEQUIPMENT_ID } = route.query;
|
||||||
|
const rules = {
|
||||||
|
EQUIP_NAME: [
|
||||||
|
{ required: true, message: "装备名称不能为空", trigger: "blur" },
|
||||||
|
],
|
||||||
|
CATEGORY: [{ required: true, message: "请选择装备类别", trigger: "change" }],
|
||||||
|
SPEC: [{ required: true, message: "规格型号不能为空", trigger: "blur" }],
|
||||||
|
EQUIP_PERFORMANCE: [
|
||||||
|
{ required: true, message: "技术性能指标不能为空", trigger: "blur" },
|
||||||
|
],
|
||||||
|
MAINTAIN_DATE: [
|
||||||
|
{ required: true, message: "保养周期不能为空", trigger: "blur" },
|
||||||
|
],
|
||||||
|
VALIDATE_DATE: [
|
||||||
|
{ required: true, message: "有效期不能为空", trigger: "change" },
|
||||||
|
],
|
||||||
|
USE: [{ required: true, message: "用途不能为空", trigger: "blur" }],
|
||||||
|
USE_DESC: [{ required: true, message: "用途说明不能为空", trigger: "blur" }],
|
||||||
|
STORAGE_PLACE: [
|
||||||
|
{ required: true, message: "存放场所不能为空", trigger: "blur" },
|
||||||
|
],
|
||||||
|
STORAGE_PERSON_NAME: [
|
||||||
|
{ required: true, message: "负责保管人姓名不能为空", trigger: "blur" },
|
||||||
|
],
|
||||||
|
STORAGE_PERSON_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: "请输入正确的手机号码",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
};
|
||||||
|
const form = ref({
|
||||||
|
EQUIP_NAME: "",
|
||||||
|
CATEGORY: "",
|
||||||
|
SPEC: "",
|
||||||
|
EQUIP_PERFORMANCE: "",
|
||||||
|
MAINTAIN_DATE: "",
|
||||||
|
VALIDATE_DATE: "",
|
||||||
|
USE: "",
|
||||||
|
USE_DESC: "",
|
||||||
|
STORAGE_PLACE: "",
|
||||||
|
STORAGE_PERSON_NAME: "",
|
||||||
|
STORAGE_PERSON_PHONE: "",
|
||||||
|
});
|
||||||
|
const formRef = ref(null);
|
||||||
|
const fnGetData = async () => {
|
||||||
|
if (!EMERGENCYEQUIPMENT_ID) return;
|
||||||
|
const resData = await getEmergencyEquipmentManagementView({
|
||||||
|
EMERGENCYEQUIPMENT_ID,
|
||||||
|
});
|
||||||
|
form.value = resData.pd;
|
||||||
|
};
|
||||||
|
fnGetData();
|
||||||
|
const equipmentCategoryList = await layoutFnGetEquipmentCategory();
|
||||||
|
const fnSubmit = debounce(
|
||||||
|
1000,
|
||||||
|
async () => {
|
||||||
|
await useFormValidate(formRef);
|
||||||
|
!EMERGENCYEQUIPMENT_ID
|
||||||
|
? await setEmergencyEquipmentManagementAdd({ ...form.value })
|
||||||
|
: await setEmergencyEquipmentManagementEdit({ ...form.value });
|
||||||
|
ElMessage.success("操作成功");
|
||||||
|
router.back();
|
||||||
|
},
|
||||||
|
{ atBegin: true }
|
||||||
|
);
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss"></style>
|
||||||
|
|
@ -0,0 +1,183 @@
|
||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<el-card>
|
||||||
|
<el-form
|
||||||
|
:model="searchForm"
|
||||||
|
label-width="80px"
|
||||||
|
@submit.prevent="fnResetPagination"
|
||||||
|
>
|
||||||
|
<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="CATEGORY">
|
||||||
|
<el-select v-model="searchForm.CATEGORY">
|
||||||
|
<el-option
|
||||||
|
v-for="item in equipmentCategoryList"
|
||||||
|
:key="item.BIANMA"
|
||||||
|
:label="item.NAME"
|
||||||
|
:value="item.BIANMA"
|
||||||
|
/>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="4">
|
||||||
|
<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"
|
||||||
|
row-key="EMERGENCYEQUIPMENT_ID"
|
||||||
|
:data="list"
|
||||||
|
@get-data="fnGetData"
|
||||||
|
v-model:pagination="pagination"
|
||||||
|
>
|
||||||
|
<el-table-column reserve-selection type="selection" width="55" />
|
||||||
|
<el-table-column label="序号" width="60">
|
||||||
|
<template #default="{ $index }">
|
||||||
|
{{ serialNumber(pagination, $index) }}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="装备名称" show-overflow-tooltip>
|
||||||
|
<template v-slot="{ row }">
|
||||||
|
<span
|
||||||
|
:class="{
|
||||||
|
'text-red':
|
||||||
|
dayjs(row.VALIDATE_DATE).format('YYYY-MM-DD') <
|
||||||
|
dayjs().format('YYYY-MM-DD'),
|
||||||
|
}"
|
||||||
|
>
|
||||||
|
{{ row.EQUIP_NAME }}
|
||||||
|
</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column prop="CATEGORY_NAME" label="装备类别" />
|
||||||
|
<el-table-column prop="SPEC" label="规格型号" />
|
||||||
|
<el-table-column prop="USE" label="用途" />
|
||||||
|
<el-table-column label="操作" width="150">
|
||||||
|
<template #default="{ row }">
|
||||||
|
<el-button
|
||||||
|
type="primary"
|
||||||
|
text
|
||||||
|
link
|
||||||
|
@click="
|
||||||
|
router.push({
|
||||||
|
path: '/emergency_resource_management/emergency_equipment_management/view',
|
||||||
|
query: { EMERGENCYEQUIPMENT_ID: row.EMERGENCYEQUIPMENT_ID },
|
||||||
|
})
|
||||||
|
"
|
||||||
|
>
|
||||||
|
查看
|
||||||
|
</el-button>
|
||||||
|
<el-button
|
||||||
|
v-if="buttonJurisdiction.edit"
|
||||||
|
type="primary"
|
||||||
|
text
|
||||||
|
link
|
||||||
|
@click="
|
||||||
|
router.push({
|
||||||
|
path: '/emergency_resource_management/emergency_equipment_management/edit',
|
||||||
|
query: { EMERGENCYEQUIPMENT_ID: row.EMERGENCYEQUIPMENT_ID },
|
||||||
|
})
|
||||||
|
"
|
||||||
|
>
|
||||||
|
编辑
|
||||||
|
</el-button>
|
||||||
|
<el-button
|
||||||
|
v-if="buttonJurisdiction.del"
|
||||||
|
type="primary"
|
||||||
|
text
|
||||||
|
link
|
||||||
|
@click="fnDelete(row.EMERGENCYEQUIPMENT_ID)"
|
||||||
|
>
|
||||||
|
删除
|
||||||
|
</el-button>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<template #button>
|
||||||
|
<el-button
|
||||||
|
v-if="buttonJurisdiction.add"
|
||||||
|
type="primary"
|
||||||
|
@click="
|
||||||
|
router.push({
|
||||||
|
path: '/emergency_resource_management/emergency_equipment_management/add',
|
||||||
|
})
|
||||||
|
"
|
||||||
|
>
|
||||||
|
新增
|
||||||
|
</el-button>
|
||||||
|
<el-button
|
||||||
|
v-if="buttonJurisdiction.del"
|
||||||
|
type="danger"
|
||||||
|
@click="fnDeleteAll"
|
||||||
|
>
|
||||||
|
批量删除
|
||||||
|
</el-button>
|
||||||
|
</template>
|
||||||
|
</layout-table>
|
||||||
|
</layout-card>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import dayjs from "dayjs";
|
||||||
|
import { serialNumber } from "@/assets/js/utils";
|
||||||
|
import { ElMessage, ElMessageBox } from "element-plus";
|
||||||
|
import { debounce } from "throttle-debounce";
|
||||||
|
import {
|
||||||
|
getEmergencyEquipmentManagementList,
|
||||||
|
setEmergencyEquipmentManagementDelete,
|
||||||
|
setEmergencyEquipmentManagementDeleteMultiple,
|
||||||
|
} from "@/request/emergency_resource_management.js";
|
||||||
|
import useButtonJurisdiction from "@/assets/js/useButtonJurisdiction.js";
|
||||||
|
import { layoutFnGetEquipmentCategory } from "@/assets/js/data_dictionary.js";
|
||||||
|
import useListData from "@/assets/js/useListData.js";
|
||||||
|
import { useRouter } from "vue-router";
|
||||||
|
|
||||||
|
const router = useRouter();
|
||||||
|
const { list, searchForm, pagination, fnResetPagination, fnGetData, tableRef } =
|
||||||
|
useListData(getEmergencyEquipmentManagementList);
|
||||||
|
const buttonJurisdiction = await useButtonJurisdiction("emergencyequipment");
|
||||||
|
const equipmentCategoryList = await layoutFnGetEquipmentCategory();
|
||||||
|
const fnDelete = debounce(
|
||||||
|
1000,
|
||||||
|
async (EMERGENCYEQUIPMENT_ID) => {
|
||||||
|
await ElMessageBox.confirm("确定要删除吗?", { type: "warning" });
|
||||||
|
await setEmergencyEquipmentManagementDelete({ EMERGENCYEQUIPMENT_ID });
|
||||||
|
ElMessage.success("删除成功");
|
||||||
|
fnResetPagination();
|
||||||
|
},
|
||||||
|
{ atBegin: true }
|
||||||
|
);
|
||||||
|
const fnDeleteAll = debounce(
|
||||||
|
1000,
|
||||||
|
async () => {
|
||||||
|
const selectionData = tableRef.value.getSelectionRows();
|
||||||
|
if (selectionData.length === 0) {
|
||||||
|
ElMessage.warning("请选中要删除的项");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const DATA_IDS = selectionData
|
||||||
|
.map((item) => item.EMERGENCYEQUIPMENT_ID)
|
||||||
|
.join(",");
|
||||||
|
await ElMessageBox.confirm("确定要删除吗?", { type: "warning" });
|
||||||
|
await setEmergencyEquipmentManagementDeleteMultiple({ DATA_IDS });
|
||||||
|
ElMessage.success("删除成功");
|
||||||
|
fnResetPagination();
|
||||||
|
},
|
||||||
|
{ atBegin: true }
|
||||||
|
);
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped></style>
|
||||||
|
|
@ -0,0 +1,58 @@
|
||||||
|
<template>
|
||||||
|
<layout-card>
|
||||||
|
<el-descriptions border :column="2">
|
||||||
|
<el-descriptions-item label="装备名称">
|
||||||
|
{{ info.EQUIP_NAME }}
|
||||||
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="装备类别">
|
||||||
|
{{ info.CATEGORY_NAME }}
|
||||||
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="规格型号">
|
||||||
|
{{ info.SPEC }}
|
||||||
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="技术性能指标">
|
||||||
|
{{ info.EQUIP_PERFORMANCE }}
|
||||||
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="保养周期">
|
||||||
|
{{ info.MAINTAIN_DATE }}
|
||||||
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="有效期">
|
||||||
|
{{ info.VALIDATE_DATE }}
|
||||||
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="用途">
|
||||||
|
{{ info.USE }}
|
||||||
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="存放场所">
|
||||||
|
{{ info.STORAGE_PLACE }}
|
||||||
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="用途说明" :span="2">
|
||||||
|
{{ info.USE_DESC }}
|
||||||
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="负责保管人姓名">
|
||||||
|
{{ info.STORAGE_PERSON_NAME }}
|
||||||
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="负责保管人电话">
|
||||||
|
{{ info.STORAGE_PERSON_PHONE }}
|
||||||
|
</el-descriptions-item>
|
||||||
|
</el-descriptions>
|
||||||
|
</layout-card>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { useRoute } from "vue-router";
|
||||||
|
import { getEmergencyEquipmentManagementView } from "@/request/emergency_resource_management.js";
|
||||||
|
import { ref } from "vue";
|
||||||
|
|
||||||
|
const route = useRoute();
|
||||||
|
const { EMERGENCYEQUIPMENT_ID } = route.query;
|
||||||
|
const info = ref({});
|
||||||
|
const fnGetData = async () => {
|
||||||
|
const resData = await getEmergencyEquipmentManagementView({
|
||||||
|
EMERGENCYEQUIPMENT_ID,
|
||||||
|
});
|
||||||
|
info.value = resData.pd;
|
||||||
|
};
|
||||||
|
fnGetData();
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped></style>
|
||||||
|
|
@ -0,0 +1,283 @@
|
||||||
|
<template>
|
||||||
|
<layout-card>
|
||||||
|
<el-form ref="formRef" :rules="rules" :model="form" label-width="110px">
|
||||||
|
<el-row :gutter="20">
|
||||||
|
<el-col :span="24">
|
||||||
|
<el-form-item label="应急预案名称" prop="PLAN_NAME">
|
||||||
|
<el-input v-model="form.PLAN_NAME" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="预案编号" prop="PLAN_NO">
|
||||||
|
<el-input v-model="form.PLAN_NO" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="适用领域" prop="PLAN_USE_SCOPE">
|
||||||
|
<el-select v-model="form.PLAN_USE_SCOPE">
|
||||||
|
<el-option
|
||||||
|
v-for="item in applicableFieldsList"
|
||||||
|
:key="item.BIANMA"
|
||||||
|
:label="item.NAME"
|
||||||
|
:value="item.BIANMA"
|
||||||
|
/>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="预案类别" prop="PLAN_CATEGORY">
|
||||||
|
<el-select v-model="form.PLAN_CATEGORY">
|
||||||
|
<el-option
|
||||||
|
v-for="item in planCategoryList"
|
||||||
|
:key="item.BIANMA"
|
||||||
|
:label="item.NAME"
|
||||||
|
:value="item.BIANMA"
|
||||||
|
/>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="预案级别" prop="PLAN_LEVEL">
|
||||||
|
<el-select v-model="form.PLAN_LEVEL">
|
||||||
|
<el-option
|
||||||
|
v-for="item in planLevelList"
|
||||||
|
:key="item.BIANMA"
|
||||||
|
:label="item.NAME"
|
||||||
|
:value="item.BIANMA"
|
||||||
|
/>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="编制单位" prop="ESTAB_UNIT">
|
||||||
|
<el-input v-model="form.ESTAB_UNIT" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="编制人" prop="ESTAB_USER">
|
||||||
|
<el-input v-model="form.ESTAB_USER" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="发布日期" prop="PUBLISH_DATE">
|
||||||
|
<el-date-picker
|
||||||
|
v-model="form.PUBLISH_DATE"
|
||||||
|
value-format="YYYY-MM-DD"
|
||||||
|
format="YYYY-MM-DD"
|
||||||
|
type="date"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="发布文号" prop="PUBLISH_DOC_NO">
|
||||||
|
<el-input v-model="form.PUBLISH_DOC_NO" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="24">
|
||||||
|
<el-form-item label="发布单位" prop="PUBLISH_UNIT">
|
||||||
|
<el-input v-model="form.PUBLISH_UNIT" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="签发人" prop="ISSUER">
|
||||||
|
<el-input v-model="form.ISSUER" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="预案备案状态" prop="PLAN_RECORD_STATUS">
|
||||||
|
<el-select v-model="form.PLAN_RECORD_STATUS">
|
||||||
|
<el-option
|
||||||
|
v-for="item in planFilingStatusList"
|
||||||
|
:key="item.BIANMA"
|
||||||
|
:label="item.NAME"
|
||||||
|
:value="item.BIANMA"
|
||||||
|
/>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="24">
|
||||||
|
<el-form-item
|
||||||
|
:rules="{
|
||||||
|
required: form.PLAN_RECORD_STATUS === 'STATUS01',
|
||||||
|
message: '预案备案时间不能为空',
|
||||||
|
trigger: 'blur',
|
||||||
|
}"
|
||||||
|
label="预案备案时间"
|
||||||
|
prop="PLAN_RECORD_DATE"
|
||||||
|
>
|
||||||
|
<el-date-picker
|
||||||
|
v-model="form.PLAN_RECORD_DATE"
|
||||||
|
value-format="YYYY-MM-DD"
|
||||||
|
format="YYYY-MM-DD"
|
||||||
|
type="date"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="24">
|
||||||
|
<el-form-item
|
||||||
|
:rules="{
|
||||||
|
required: form.PLAN_RECORD_STATUS === 'STATUS01',
|
||||||
|
message: '备案接收单位不能为空',
|
||||||
|
trigger: 'blur',
|
||||||
|
}"
|
||||||
|
label="备案接收单位"
|
||||||
|
prop="PLAN_RECORD_UNIT"
|
||||||
|
>
|
||||||
|
<el-input v-model="form.PLAN_RECORD_UNIT" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="24">
|
||||||
|
<el-form-item
|
||||||
|
:rules="{
|
||||||
|
required: form.PLAN_RECORD_STATUS === 'STATUS01',
|
||||||
|
message: '预案摘要不能为空',
|
||||||
|
trigger: 'blur',
|
||||||
|
}"
|
||||||
|
label="预案摘要"
|
||||||
|
prop="PLAN_SUMMARY"
|
||||||
|
>
|
||||||
|
<el-input
|
||||||
|
v-model="form.PLAN_SUMMARY"
|
||||||
|
type="textarea"
|
||||||
|
:autosize="{ minRows: 3 }"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="24">
|
||||||
|
<el-form-item label="备注" prop="PLAN_REMARK">
|
||||||
|
<el-input
|
||||||
|
v-model="form.PLAN_REMARK"
|
||||||
|
type="textarea"
|
||||||
|
:autosize="{ minRows: 3 }"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="24">
|
||||||
|
<el-form-item label="相关附件" prop="file">
|
||||||
|
<layout-upload v-model:file-list="form.file" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
</el-form>
|
||||||
|
<div class="mt-10 tc">
|
||||||
|
<el-button type="primary" @click="fnSubmit">提交</el-button>
|
||||||
|
</div>
|
||||||
|
</layout-card>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import LayoutUpload from "@/components/upload/index.vue";
|
||||||
|
import {
|
||||||
|
layoutFnGetApplicableFields,
|
||||||
|
layoutFnGetPlanCategory,
|
||||||
|
layoutFnGetPlanFilingStatus,
|
||||||
|
layoutFnGetPlanLevel,
|
||||||
|
} from "@/assets/js/data_dictionary.js";
|
||||||
|
import { debounce } from "throttle-debounce";
|
||||||
|
import useFormValidate from "@/assets/js/useFormValidate.js";
|
||||||
|
import {
|
||||||
|
getEmergencyPlanManagementView,
|
||||||
|
setEmergencyPlanManagementAdd,
|
||||||
|
setEmergencyPlanManagementEdit,
|
||||||
|
} from "@/request/emergency_resource_management.js";
|
||||||
|
import { ElMessage } from "element-plus";
|
||||||
|
import { ref } from "vue";
|
||||||
|
import { useRoute, useRouter } from "vue-router";
|
||||||
|
|
||||||
|
const router = useRouter();
|
||||||
|
const route = useRoute();
|
||||||
|
const { EMERGENCYPLAN_ID } = route.query;
|
||||||
|
const VITE_FILE_URL = import.meta.env.VITE_FILE_URL;
|
||||||
|
const rules = {
|
||||||
|
PLAN_NAME: [
|
||||||
|
{ required: true, message: "应急预案名称不能为空", trigger: "blur" },
|
||||||
|
],
|
||||||
|
PLAN_NO: [{ required: true, message: "预案编号不能为空", trigger: "blur" }],
|
||||||
|
PLAN_USE_SCOPE: [
|
||||||
|
{ required: true, message: "请选择适用领域", trigger: "change" },
|
||||||
|
],
|
||||||
|
PLAN_CATEGORY: [
|
||||||
|
{ required: true, message: "请选择预案类别", trigger: "change" },
|
||||||
|
],
|
||||||
|
PLAN_LEVEL: [
|
||||||
|
{ required: true, message: "请选择预案级别", trigger: "change" },
|
||||||
|
],
|
||||||
|
ESTAB_UNIT: [
|
||||||
|
{ required: true, message: "编制单位不能为空", trigger: "blur" },
|
||||||
|
],
|
||||||
|
ESTAB_USER: [{ required: true, message: "编制人不能为空", trigger: "blur" }],
|
||||||
|
PUBLISH_DATE: [
|
||||||
|
{ required: true, message: "发布日期不能为空", trigger: "change" },
|
||||||
|
],
|
||||||
|
PUBLISH_DOC_NO: [
|
||||||
|
{ required: true, message: "发布文号不能为空", trigger: "blur" },
|
||||||
|
],
|
||||||
|
PUBLISH_UNIT: [
|
||||||
|
{ required: true, message: "发布单位不能为空", trigger: "blur" },
|
||||||
|
],
|
||||||
|
ISSUER: [{ required: true, message: "签发人不能为空", trigger: "blur" }],
|
||||||
|
PLAN_RECORD_STATUS: [
|
||||||
|
{ required: true, message: "请选择预案备案状态", trigger: "change" },
|
||||||
|
],
|
||||||
|
};
|
||||||
|
const form = ref({
|
||||||
|
PLAN_NAME: "",
|
||||||
|
PLAN_NO: "",
|
||||||
|
PLAN_USE_SCOPE: "",
|
||||||
|
PLAN_CATEGORY: "",
|
||||||
|
PLAN_LEVEL: "",
|
||||||
|
ESTAB_UNIT: "",
|
||||||
|
ESTAB_USER: "",
|
||||||
|
PUBLISH_DATE: "",
|
||||||
|
PUBLISH_DOC_NO: "",
|
||||||
|
PUBLISH_UNIT: "",
|
||||||
|
ISSUER: "",
|
||||||
|
PLAN_RECORD_STATUS: "",
|
||||||
|
PLAN_RECORD_DATE: "",
|
||||||
|
PLAN_RECORD_UNIT: "",
|
||||||
|
PLAN_SUMMARY: "",
|
||||||
|
PLAN_REMARK: "",
|
||||||
|
PLAN_ATTACH_NAME: "",
|
||||||
|
file: [],
|
||||||
|
});
|
||||||
|
const formRef = ref(null);
|
||||||
|
const fnGetData = async () => {
|
||||||
|
if (!EMERGENCYPLAN_ID) return;
|
||||||
|
const resData = await getEmergencyPlanManagementView({ EMERGENCYPLAN_ID });
|
||||||
|
form.value = resData.pd;
|
||||||
|
form.value.file = [
|
||||||
|
{
|
||||||
|
url: VITE_FILE_URL + resData.pd.PLAN_ATTACH_IDS,
|
||||||
|
name: resData.pd.PLAN_ATTACH_NAME,
|
||||||
|
},
|
||||||
|
];
|
||||||
|
};
|
||||||
|
fnGetData();
|
||||||
|
const applicableFieldsList = await layoutFnGetApplicableFields();
|
||||||
|
const planCategoryList = await layoutFnGetPlanCategory();
|
||||||
|
const planLevelList = await layoutFnGetPlanLevel();
|
||||||
|
const planFilingStatusList = await layoutFnGetPlanFilingStatus();
|
||||||
|
const fnSubmit = debounce(
|
||||||
|
1000,
|
||||||
|
async () => {
|
||||||
|
await useFormValidate(formRef);
|
||||||
|
const formData = new FormData();
|
||||||
|
Object.keys(form.value).forEach((key) => {
|
||||||
|
formData.append(key, form.value[key]);
|
||||||
|
});
|
||||||
|
if (form.value.file.length > 0) {
|
||||||
|
formData.delete("file");
|
||||||
|
formData.append("PLAN_ATTACH_NAME", form.value.file[0].name);
|
||||||
|
formData.append("file", form.value.file[0].raw);
|
||||||
|
}
|
||||||
|
!EMERGENCYPLAN_ID
|
||||||
|
? await setEmergencyPlanManagementAdd(formData)
|
||||||
|
: await setEmergencyPlanManagementEdit(formData);
|
||||||
|
ElMessage.success("操作成功");
|
||||||
|
router.back();
|
||||||
|
},
|
||||||
|
{ atBegin: true }
|
||||||
|
);
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss"></style>
|
||||||
|
|
@ -0,0 +1,178 @@
|
||||||
|
<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">
|
||||||
|
<el-input v-model="searchForm.KEYWORDS" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="4">
|
||||||
|
<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"
|
||||||
|
row-key="EMERGENCYPLAN_ID"
|
||||||
|
:data="list"
|
||||||
|
@get-data="fnGetData"
|
||||||
|
v-model:pagination="pagination"
|
||||||
|
>
|
||||||
|
<el-table-column reserve-selection type="selection" width="55" />
|
||||||
|
<el-table-column label="序号" width="60">
|
||||||
|
<template #default="{ $index }">
|
||||||
|
{{ serialNumber(pagination, $index) }}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column
|
||||||
|
prop="PLAN_NAME"
|
||||||
|
label="应急预案名称"
|
||||||
|
width="300"
|
||||||
|
show-overflow-tooltip
|
||||||
|
/>
|
||||||
|
<el-table-column
|
||||||
|
prop="PLAN_CATEGORY_NAME"
|
||||||
|
label="预案类别"
|
||||||
|
width="150"
|
||||||
|
/>
|
||||||
|
<el-table-column prop="PLAN_LEVEL_NAME" label="预案级别" width="150" />
|
||||||
|
<el-table-column
|
||||||
|
prop="PLAN_RECORD_STATUS_NAME"
|
||||||
|
label="备案状态"
|
||||||
|
width="150"
|
||||||
|
/>
|
||||||
|
<el-table-column label="相关附件">
|
||||||
|
<template v-slot="{ row }">
|
||||||
|
{{ row.PLAN_ATTACH_NAME }}
|
||||||
|
<layout-multiple-attachment-previews
|
||||||
|
:file-path="row.PLAN_ATTACH_IDS"
|
||||||
|
/>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="操作" width="150">
|
||||||
|
<template #default="{ row }">
|
||||||
|
<el-button
|
||||||
|
type="primary"
|
||||||
|
text
|
||||||
|
link
|
||||||
|
@click="
|
||||||
|
router.push({
|
||||||
|
path: '/emergency_resource_management/emergency_plan_management/view',
|
||||||
|
query: { EMERGENCYPLAN_ID: row.EMERGENCYPLAN_ID },
|
||||||
|
})
|
||||||
|
"
|
||||||
|
>
|
||||||
|
查看
|
||||||
|
</el-button>
|
||||||
|
<el-button
|
||||||
|
v-if="buttonJurisdiction.edit"
|
||||||
|
type="primary"
|
||||||
|
text
|
||||||
|
link
|
||||||
|
@click="
|
||||||
|
router.push({
|
||||||
|
path: '/emergency_resource_management/emergency_plan_management/edit',
|
||||||
|
query: { EMERGENCYPLAN_ID: row.EMERGENCYPLAN_ID },
|
||||||
|
})
|
||||||
|
"
|
||||||
|
>
|
||||||
|
编辑
|
||||||
|
</el-button>
|
||||||
|
<el-button
|
||||||
|
v-if="buttonJurisdiction.del"
|
||||||
|
type="primary"
|
||||||
|
text
|
||||||
|
link
|
||||||
|
@click="fnDelete(row.EMERGENCYPLAN_ID)"
|
||||||
|
>
|
||||||
|
删除
|
||||||
|
</el-button>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<template #button>
|
||||||
|
<el-button
|
||||||
|
v-if="buttonJurisdiction.add"
|
||||||
|
type="primary"
|
||||||
|
@click="
|
||||||
|
router.push({
|
||||||
|
path: '/emergency_resource_management/emergency_plan_management/add',
|
||||||
|
})
|
||||||
|
"
|
||||||
|
>
|
||||||
|
新增
|
||||||
|
</el-button>
|
||||||
|
<el-button
|
||||||
|
v-if="buttonJurisdiction.del"
|
||||||
|
type="danger"
|
||||||
|
@click="fnDeleteAll"
|
||||||
|
>
|
||||||
|
批量删除
|
||||||
|
</el-button>
|
||||||
|
</template>
|
||||||
|
</layout-table>
|
||||||
|
</layout-card>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { serialNumber } from "@/assets/js/utils";
|
||||||
|
import { ElMessage, ElMessageBox } from "element-plus";
|
||||||
|
import { debounce } from "throttle-debounce";
|
||||||
|
import {
|
||||||
|
getEmergencyPlanManagementList,
|
||||||
|
setEmergencyPlanManagementDelete,
|
||||||
|
setEmergencyPlanManagementDeleteMultiple,
|
||||||
|
} from "@/request/emergency_resource_management.js";
|
||||||
|
import useButtonJurisdiction from "@/assets/js/useButtonJurisdiction.js";
|
||||||
|
import useListData from "@/assets/js/useListData.js";
|
||||||
|
import LayoutMultipleAttachmentPreviews from "@/components/multiple_attachment_previews/index.vue";
|
||||||
|
import { useRouter } from "vue-router";
|
||||||
|
|
||||||
|
const router = useRouter();
|
||||||
|
const { list, pagination, searchForm, fnGetData, fnResetPagination, tableRef } =
|
||||||
|
useListData(getEmergencyPlanManagementList);
|
||||||
|
const buttonJurisdiction = await useButtonJurisdiction("emergencyplan");
|
||||||
|
const fnDelete = debounce(
|
||||||
|
1000,
|
||||||
|
async (EMERGENCYPLAN_ID) => {
|
||||||
|
await ElMessageBox.confirm("确定要删除吗?", { type: "warning" });
|
||||||
|
await setEmergencyPlanManagementDelete({ EMERGENCYPLAN_ID });
|
||||||
|
ElMessage.success("删除成功");
|
||||||
|
fnResetPagination();
|
||||||
|
},
|
||||||
|
{ atBegin: true }
|
||||||
|
);
|
||||||
|
const fnDeleteAll = debounce(
|
||||||
|
1000,
|
||||||
|
async () => {
|
||||||
|
const selectionData = tableRef.value.getSelectionRows();
|
||||||
|
if (selectionData.length === 0) {
|
||||||
|
ElMessage.warning("请选中要删除的项");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const DATA_IDS = selectionData
|
||||||
|
.map((item) => item.EMERGENCYPLAN_ID)
|
||||||
|
.join(",");
|
||||||
|
await ElMessageBox.confirm("确定要删除吗?", { type: "warning" });
|
||||||
|
await setEmergencyPlanManagementDeleteMultiple({ DATA_IDS });
|
||||||
|
ElMessage.success("删除成功");
|
||||||
|
fnResetPagination();
|
||||||
|
},
|
||||||
|
{ atBegin: true }
|
||||||
|
);
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped></style>
|
||||||
|
|
@ -0,0 +1,88 @@
|
||||||
|
<template>
|
||||||
|
<layout-card>
|
||||||
|
<el-descriptions border :column="2">
|
||||||
|
<el-descriptions-item label="应急预案名称" :span="2">
|
||||||
|
{{ info.PLAN_NAME }}
|
||||||
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="预案编号">
|
||||||
|
{{ info.PLAN_NO }}
|
||||||
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="适用领域">
|
||||||
|
{{ info.PLAN_USE_SCOPE_NAME }}
|
||||||
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="预案类别">
|
||||||
|
{{ info.PLAN_CATEGORY_NAME }}
|
||||||
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="预案级别">
|
||||||
|
{{ info.PLAN_LEVEL_NAME }}
|
||||||
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="编制单位">
|
||||||
|
{{ info.ESTAB_UNIT }}
|
||||||
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="编制人">
|
||||||
|
{{ info.ESTAB_USER }}
|
||||||
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="发布日期">
|
||||||
|
{{ info.PUBLISH_DATE }}
|
||||||
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="发布文号">
|
||||||
|
{{ info.PUBLISH_DOC_NO }}
|
||||||
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="发布单位">
|
||||||
|
{{ info.PUBLISH_UNIT }}
|
||||||
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="签发人">
|
||||||
|
{{ info.ISSUER }}
|
||||||
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="预案备案状态">
|
||||||
|
{{ info.PLAN_RECORD_STATUS_NAME }}
|
||||||
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="预案备案时间">
|
||||||
|
{{ info.PLAN_RECORD_DATE }}
|
||||||
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="备案接收单位" :span="2">
|
||||||
|
{{ info.PLAN_RECORD_UNIT }}
|
||||||
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="预案摘要" :span="2">
|
||||||
|
{{ info.PLAN_SUMMARY }}
|
||||||
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="备注" :span="2">
|
||||||
|
{{ info.PLAN_REMARK }}
|
||||||
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item
|
||||||
|
label="相关附件"
|
||||||
|
:span="2"
|
||||||
|
v-if="info.PLAN_ATTACH_IDS"
|
||||||
|
>
|
||||||
|
{{ info.PLAN_ATTACH_NAME }}
|
||||||
|
<el-button
|
||||||
|
class="ml-10"
|
||||||
|
type="primary"
|
||||||
|
@click="useDownloadFile(info.PLAN_ATTACH_IDS, info.PLAN_ATTACH_NAME)"
|
||||||
|
>
|
||||||
|
下载
|
||||||
|
</el-button>
|
||||||
|
</el-descriptions-item>
|
||||||
|
</el-descriptions>
|
||||||
|
</layout-card>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { useRoute } from "vue-router";
|
||||||
|
import { getEmergencyPlanManagementView } from "@/request/emergency_resource_management.js";
|
||||||
|
import { ref } from "vue";
|
||||||
|
import useDownloadFile from "@/assets/js/useDownloadFile.js";
|
||||||
|
|
||||||
|
const route = useRoute();
|
||||||
|
const { EMERGENCYPLAN_ID } = route.query;
|
||||||
|
const info = ref({});
|
||||||
|
const fnGetData = async () => {
|
||||||
|
const resData = await getEmergencyPlanManagementView({
|
||||||
|
EMERGENCYPLAN_ID,
|
||||||
|
});
|
||||||
|
info.value = resData.pd;
|
||||||
|
};
|
||||||
|
fnGetData();
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped></style>
|
||||||
|
|
@ -0,0 +1,305 @@
|
||||||
|
<template>
|
||||||
|
<layout-card>
|
||||||
|
<el-form ref="formRef" :rules="rules" :model="form" label-width="140px">
|
||||||
|
<el-row :gutter="20">
|
||||||
|
<el-col :span="24">
|
||||||
|
<el-form-item label="队伍名称" prop="TEAM_NAME">
|
||||||
|
<el-input v-model="form.TEAM_NAME" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="队伍类别" prop="TEAM_CATEGORY">
|
||||||
|
<el-select v-model="form.TEAM_CATEGORY">
|
||||||
|
<el-option
|
||||||
|
v-for="item in teamCategoryList"
|
||||||
|
:key="item.BIANMA"
|
||||||
|
:label="item.NAME"
|
||||||
|
:value="item.BIANMA"
|
||||||
|
/>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="队伍属性" prop="TEAM_PROPERTY">
|
||||||
|
<el-select v-model="form.TEAM_PROPERTY">
|
||||||
|
<el-option
|
||||||
|
v-for="item in teamAttributeList"
|
||||||
|
:key="item.BIANMA"
|
||||||
|
:label="item.NAME"
|
||||||
|
:value="item.BIANMA"
|
||||||
|
/>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="队伍级别" prop="TEAM_LEVEL">
|
||||||
|
<el-select v-model="form.TEAM_LEVEL">
|
||||||
|
<el-option
|
||||||
|
v-for="item in teamLevelList"
|
||||||
|
:key="item.BIANMA"
|
||||||
|
:label="item.NAME"
|
||||||
|
:value="item.BIANMA"
|
||||||
|
/>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="队伍等级" prop="TEAM_GRADE">
|
||||||
|
<el-select v-model="form.TEAM_GRADE">
|
||||||
|
<el-option
|
||||||
|
v-for="item in teamGradeList"
|
||||||
|
:key="item.BIANMA"
|
||||||
|
:label="item.NAME"
|
||||||
|
:value="item.BIANMA"
|
||||||
|
/>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="成立日期" prop="TEAM_CREATE_TIME">
|
||||||
|
<el-date-picker
|
||||||
|
v-model="form.TEAM_CREATE_TIME"
|
||||||
|
value-format="YYYY-MM-DD"
|
||||||
|
format="YYYY-MM-DD"
|
||||||
|
type="date"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="服务区域" prop="SERVICE_PLACE">
|
||||||
|
<el-input v-model="form.SERVICE_PLACE" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="24">
|
||||||
|
<el-form-item label="地址" prop="ADDRESS">
|
||||||
|
<el-input v-model="form.ADDRESS" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="队伍负责人姓名" prop="TEAM_LEADER_NAME">
|
||||||
|
<el-input v-model="form.TEAM_LEADER_NAME" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="队伍负责人电话" prop="TEAM_LEADER_PHONE">
|
||||||
|
<el-input v-model="form.TEAM_LEADER_PHONE" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="应急值班电话" prop="DUTY_TELEPHONE">
|
||||||
|
<el-input v-model="form.DUTY_TELEPHONE" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="救援专业" prop="SPECIAL_TYPE">
|
||||||
|
<el-select v-model="form.SPECIAL_TYPE">
|
||||||
|
<el-option
|
||||||
|
v-for="item in rescueSpecialtyList"
|
||||||
|
:key="item.BIANMA"
|
||||||
|
:label="item.NAME"
|
||||||
|
:value="item.BIANMA"
|
||||||
|
/>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="总人数" prop="TOTLE_PERSON_NUM">
|
||||||
|
<el-input v-model.number="form.TOTLE_PERSON_NUM" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="指战人数" prop="COMMANDER_NUM">
|
||||||
|
<el-input v-model.number="form.COMMANDER_NUM" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="车辆数" prop="CAR_NUM">
|
||||||
|
<el-input v-model.number="form.CAR_NUM" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="后勤人数" prop="LOGISTICS_PERSON_NUM">
|
||||||
|
<el-input v-model.number="form.LOGISTICS_PERSON_NUM" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="24">
|
||||||
|
<el-form-item label="队员信息" prop="TEAM_MEMBER_INFO">
|
||||||
|
<el-input
|
||||||
|
v-model="form.TEAM_MEMBER_INFO"
|
||||||
|
type="textarea"
|
||||||
|
:autosize="{ minRows: 3 }"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="24">
|
||||||
|
<el-form-item label="专长描述" prop="SPECIAL_DESC">
|
||||||
|
<el-input
|
||||||
|
v-model="form.SPECIAL_DESC"
|
||||||
|
type="textarea"
|
||||||
|
:autosize="{ minRows: 3 }"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="24">
|
||||||
|
<el-form-item label="队伍简介" prop="TEAM_DESC">
|
||||||
|
<el-input
|
||||||
|
v-model="form.TEAM_DESC"
|
||||||
|
type="textarea"
|
||||||
|
:autosize="{ minRows: 3 }"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
</el-form>
|
||||||
|
<div class="mt-10 tc">
|
||||||
|
<el-button type="primary" @click="fnSubmit">保存</el-button>
|
||||||
|
</div>
|
||||||
|
</layout-card>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { ref } from "vue";
|
||||||
|
import {
|
||||||
|
layoutFnGetRescueSpecialty,
|
||||||
|
layoutFnGetTeamAttribute,
|
||||||
|
layoutFnGetTeamCategory,
|
||||||
|
layoutFnGetTeamGrade,
|
||||||
|
layoutFnGetTeamLevel,
|
||||||
|
} from "@/assets/js/data_dictionary.js";
|
||||||
|
import { debounce } from "throttle-debounce";
|
||||||
|
import useFormValidate from "@/assets/js/useFormValidate.js";
|
||||||
|
import {
|
||||||
|
getEmergencyRescueTeamManagementView,
|
||||||
|
setEmergencyRescueTeamManagementAdd,
|
||||||
|
setEmergencyRescueTeamManagementEdit,
|
||||||
|
} from "@/request/emergency_resource_management.js";
|
||||||
|
import { ElMessage } from "element-plus";
|
||||||
|
import { useRoute, useRouter } from "vue-router";
|
||||||
|
|
||||||
|
const router = useRouter();
|
||||||
|
const route = useRoute();
|
||||||
|
const { EMERGENCYTEAM_ID } = route.query;
|
||||||
|
const rules = {
|
||||||
|
TEAM_NAME: [{ required: true, message: "队伍名称不能为空", trigger: "blur" }],
|
||||||
|
TEAM_CATEGORY: [
|
||||||
|
{ required: true, message: "请选择队伍类别", trigger: "change" },
|
||||||
|
],
|
||||||
|
TEAM_PROPERTY: [
|
||||||
|
{ required: true, message: "请选择队伍属性", trigger: "change" },
|
||||||
|
],
|
||||||
|
TEAM_LEVEL: [
|
||||||
|
{ required: true, message: "请选择队伍级别", trigger: "change" },
|
||||||
|
],
|
||||||
|
TEAM_GRADE: [
|
||||||
|
{ required: true, message: "请选择队伍等级", trigger: "change" },
|
||||||
|
],
|
||||||
|
TEAM_CREATE_TIME: [
|
||||||
|
{ required: true, message: "成立日期不能为空", trigger: "change" },
|
||||||
|
],
|
||||||
|
ADDRESS: [{ required: true, message: "地址不能为空", trigger: "blur" }],
|
||||||
|
SERVICE_PLACE: [
|
||||||
|
{ required: true, message: "服务区域不能为空", trigger: "blur" },
|
||||||
|
],
|
||||||
|
TEAM_LEADER_NAME: [
|
||||||
|
{ required: true, message: "队伍负责人姓名不能为空", trigger: "blur" },
|
||||||
|
],
|
||||||
|
TEAM_LEADER_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: "请输入正确的手机号码",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
DUTY_TELEPHONE: [
|
||||||
|
{ required: true, message: "请输入应急值班电话", trigger: "blur" },
|
||||||
|
{
|
||||||
|
min: 11,
|
||||||
|
max: 13,
|
||||||
|
message: "请输入正确的11位手机号码或座机号(例:010-12345678)",
|
||||||
|
trigger: "blur",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
pattern:
|
||||||
|
/^(13[0-9]|14[579]|15[0-3,5-9]|16[6]|17[0135678]|18[0-9]|19[89])\d{8}$|^0\d{2,3}-?\d{7,8}$/,
|
||||||
|
message: "请输入正确的11位手机号码或座机号(例:010-12345678)",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
TOTLE_PERSON_NUM: [
|
||||||
|
{ required: true, message: "总人数不能为空", trigger: "change" },
|
||||||
|
{ type: "number", message: "总人数必须为数字" },
|
||||||
|
],
|
||||||
|
COMMANDER_NUM: [
|
||||||
|
{ required: true, message: "指战人数不能为空", trigger: "change" },
|
||||||
|
{ type: "number", message: "指战人数必须为数字" },
|
||||||
|
],
|
||||||
|
CAR_NUM: [
|
||||||
|
{ required: true, message: "车辆数不能为空", trigger: "change" },
|
||||||
|
{ type: "number", message: "车辆数必须为数字" },
|
||||||
|
],
|
||||||
|
LOGISTICS_PERSON_NUM: [
|
||||||
|
{ required: true, message: "后勤人数不能为空", trigger: "change" },
|
||||||
|
{ type: "number", message: "后勤人数必须为数字" },
|
||||||
|
],
|
||||||
|
TEAM_MEMBER_INFO: [
|
||||||
|
{ required: true, message: "队员信息不能为空", trigger: "blur" },
|
||||||
|
],
|
||||||
|
SPECIAL_TYPE: [
|
||||||
|
{ required: true, message: "请选择救援专业", trigger: "change" },
|
||||||
|
],
|
||||||
|
SPECIAL_DESC: [
|
||||||
|
{ required: true, message: "专长描述不能为空", trigger: "blur" },
|
||||||
|
],
|
||||||
|
TEAM_DESC: [{ required: true, message: "队伍简介不能为空", trigger: "blur" }],
|
||||||
|
};
|
||||||
|
const form = ref({
|
||||||
|
TEAM_NAME: "",
|
||||||
|
TEAM_CATEGORY: "",
|
||||||
|
TEAM_PROPERTY: "",
|
||||||
|
TEAM_LEVEL: "",
|
||||||
|
TEAM_GRADE: "",
|
||||||
|
TEAM_CREATE_TIME: "",
|
||||||
|
ADDRESS: "",
|
||||||
|
SERVICE_PLACE: "",
|
||||||
|
TEAM_LEADER_NAME: "",
|
||||||
|
TEAM_LEADER_PHONE: "",
|
||||||
|
DUTY_TELEPHONE: "",
|
||||||
|
TOTLE_PERSON_NUM: "",
|
||||||
|
COMMANDER_NUM: "",
|
||||||
|
CAR_NUM: "",
|
||||||
|
LOGISTICS_PERSON_NUM: "",
|
||||||
|
TEAM_MEMBER_INFO: "",
|
||||||
|
SPECIAL_TYPE: "",
|
||||||
|
SPECIAL_DESC: "",
|
||||||
|
TEAM_DESC: "",
|
||||||
|
});
|
||||||
|
const formRef = ref(null);
|
||||||
|
const fnGetData = async () => {
|
||||||
|
if (!EMERGENCYTEAM_ID) return;
|
||||||
|
const resData = await getEmergencyRescueTeamManagementView({
|
||||||
|
EMERGENCYTEAM_ID,
|
||||||
|
});
|
||||||
|
form.value = resData.pd;
|
||||||
|
};
|
||||||
|
fnGetData();
|
||||||
|
const teamCategoryList = await layoutFnGetTeamCategory();
|
||||||
|
const teamAttributeList = await layoutFnGetTeamAttribute();
|
||||||
|
const teamLevelList = await layoutFnGetTeamLevel();
|
||||||
|
const teamGradeList = await layoutFnGetTeamGrade();
|
||||||
|
const rescueSpecialtyList = await layoutFnGetRescueSpecialty();
|
||||||
|
const fnSubmit = debounce(
|
||||||
|
1000,
|
||||||
|
async () => {
|
||||||
|
await useFormValidate(formRef);
|
||||||
|
!EMERGENCYTEAM_ID
|
||||||
|
? await setEmergencyRescueTeamManagementAdd({ ...form.value })
|
||||||
|
: await setEmergencyRescueTeamManagementEdit({ ...form.value });
|
||||||
|
ElMessage.success("操作成功");
|
||||||
|
router.back();
|
||||||
|
},
|
||||||
|
{ atBegin: true }
|
||||||
|
);
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss"></style>
|
||||||
|
|
@ -0,0 +1,164 @@
|
||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<el-card>
|
||||||
|
<el-form
|
||||||
|
:model="searchForm"
|
||||||
|
label-width="80px"
|
||||||
|
@submit.prevent="fnResetPagination"
|
||||||
|
>
|
||||||
|
<el-row>
|
||||||
|
<el-col :span="4">
|
||||||
|
<el-form-item label="队伍名称" prop="KEYWORDS">
|
||||||
|
<el-input v-model="searchForm.KEYWORDS" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="4">
|
||||||
|
<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"
|
||||||
|
row-key="EMERGENCYTEAM_ID"
|
||||||
|
:data="list"
|
||||||
|
@get-data="fnGetData"
|
||||||
|
v-model:pagination="pagination"
|
||||||
|
>
|
||||||
|
<el-table-column reserve-selection type="selection" width="55" />
|
||||||
|
<el-table-column label="序号" width="60">
|
||||||
|
<template #default="{ $index }">
|
||||||
|
{{ serialNumber(pagination, $index) }}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column
|
||||||
|
prop="TEAM_NAME"
|
||||||
|
label="队伍名称"
|
||||||
|
show-overflow-tooltip
|
||||||
|
/>
|
||||||
|
<el-table-column prop="TEAM_CATEGORY_NAME" label="队伍类别" />
|
||||||
|
<el-table-column prop="TEAM_PROPERTY_NAME" label="队伍属性" />
|
||||||
|
<el-table-column prop="TEAM_LEVEL_NAME" label="队伍级别" />
|
||||||
|
<el-table-column prop="TEAM_GRADE_NAME" label="队伍等级" />
|
||||||
|
<el-table-column prop="SPECIAL_TYPE_NAME" label="救援专业" />
|
||||||
|
<el-table-column prop="TEAM_LEADER_NAME" label="队伍负责人姓名" />
|
||||||
|
<el-table-column prop="TEAM_LEADER_PHONE" label="队伍负责人电话" />
|
||||||
|
<el-table-column label="操作" width="150">
|
||||||
|
<template #default="{ row }">
|
||||||
|
<el-button
|
||||||
|
type="primary"
|
||||||
|
text
|
||||||
|
link
|
||||||
|
@click="
|
||||||
|
router.push({
|
||||||
|
path: '/emergency_resource_management/emergency_rescue_team_management/view',
|
||||||
|
query: { EMERGENCYTEAM_ID: row.EMERGENCYTEAM_ID },
|
||||||
|
})
|
||||||
|
"
|
||||||
|
>
|
||||||
|
查看
|
||||||
|
</el-button>
|
||||||
|
<el-button
|
||||||
|
v-if="buttonJurisdiction.edit"
|
||||||
|
type="primary"
|
||||||
|
text
|
||||||
|
link
|
||||||
|
@click="
|
||||||
|
router.push({
|
||||||
|
path: '/emergency_resource_management/emergency_rescue_team_management/edit',
|
||||||
|
query: { EMERGENCYTEAM_ID: row.EMERGENCYTEAM_ID },
|
||||||
|
})
|
||||||
|
"
|
||||||
|
>
|
||||||
|
编辑
|
||||||
|
</el-button>
|
||||||
|
<el-button
|
||||||
|
v-if="buttonJurisdiction.del"
|
||||||
|
type="primary"
|
||||||
|
text
|
||||||
|
link
|
||||||
|
@click="fnDelete(row.EMERGENCYTEAM_ID)"
|
||||||
|
>
|
||||||
|
删除
|
||||||
|
</el-button>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<template #button>
|
||||||
|
<el-button
|
||||||
|
v-if="buttonJurisdiction.add"
|
||||||
|
type="primary"
|
||||||
|
@click="
|
||||||
|
router.push({
|
||||||
|
path: '/emergency_resource_management/emergency_rescue_team_management/add',
|
||||||
|
})
|
||||||
|
"
|
||||||
|
>
|
||||||
|
新增
|
||||||
|
</el-button>
|
||||||
|
<el-button
|
||||||
|
v-if="buttonJurisdiction.del"
|
||||||
|
type="danger"
|
||||||
|
@click="fnDeleteAll"
|
||||||
|
>
|
||||||
|
批量删除
|
||||||
|
</el-button>
|
||||||
|
</template>
|
||||||
|
</layout-table>
|
||||||
|
</layout-card>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { serialNumber } from "@/assets/js/utils";
|
||||||
|
import { ElMessage, ElMessageBox } from "element-plus";
|
||||||
|
import { debounce } from "throttle-debounce";
|
||||||
|
import {
|
||||||
|
getEmergencyRescueTeamManagementList,
|
||||||
|
setEmergencyRescueTeamManagementDelete,
|
||||||
|
setEmergencyRescueTeamManagementDeleteMultiple,
|
||||||
|
} from "@/request/emergency_resource_management.js";
|
||||||
|
import useButtonJurisdiction from "@/assets/js/useButtonJurisdiction.js";
|
||||||
|
import useListData from "@/assets/js/useListData.js";
|
||||||
|
import { useRouter } from "vue-router";
|
||||||
|
|
||||||
|
const router = useRouter();
|
||||||
|
const { list, searchForm, pagination, fnGetData, fnResetPagination, tableRef } =
|
||||||
|
useListData(getEmergencyRescueTeamManagementList);
|
||||||
|
const buttonJurisdiction = await useButtonJurisdiction("emergencyteam");
|
||||||
|
const fnDelete = debounce(
|
||||||
|
1000,
|
||||||
|
async (EMERGENCYTEAM_ID) => {
|
||||||
|
await ElMessageBox.confirm("确定要删除吗?", { type: "warning" });
|
||||||
|
await setEmergencyRescueTeamManagementDelete({ EMERGENCYTEAM_ID });
|
||||||
|
ElMessage.success("删除成功");
|
||||||
|
fnResetPagination();
|
||||||
|
},
|
||||||
|
{ atBegin: true }
|
||||||
|
);
|
||||||
|
const fnDeleteAll = debounce(
|
||||||
|
1000,
|
||||||
|
async () => {
|
||||||
|
const selectionData = tableRef.value.getSelectionRows();
|
||||||
|
if (selectionData.length === 0) {
|
||||||
|
ElMessage.warning("请选中要删除的项");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const DATA_IDS = selectionData
|
||||||
|
.map((item) => item.EMERGENCYTEAM_ID)
|
||||||
|
.join(",");
|
||||||
|
await ElMessageBox.confirm("确定要删除吗?", { type: "warning" });
|
||||||
|
await setEmergencyRescueTeamManagementDeleteMultiple({ DATA_IDS });
|
||||||
|
ElMessage.success("删除成功");
|
||||||
|
fnResetPagination();
|
||||||
|
},
|
||||||
|
{ atBegin: true }
|
||||||
|
);
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped></style>
|
||||||
|
|
@ -0,0 +1,82 @@
|
||||||
|
<template>
|
||||||
|
<layout-card>
|
||||||
|
<el-descriptions border :column="2">
|
||||||
|
<el-descriptions-item label="队伍名称">
|
||||||
|
{{ info.TEAM_NAME }}
|
||||||
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="队伍类别">
|
||||||
|
{{ info.TEAM_CATEGORY_NAME }}
|
||||||
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="队伍属性">
|
||||||
|
{{ info.TEAM_PROPERTY_NAME }}
|
||||||
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="队伍级别">
|
||||||
|
{{ info.TEAM_LEVEL_NAME }}
|
||||||
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="队伍等级">
|
||||||
|
{{ info.TEAM_GRADE_NAME }}
|
||||||
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="成立日期">
|
||||||
|
{{ info.TEAM_CREATE_TIME }}
|
||||||
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="地址">
|
||||||
|
{{ info.ADDRESS }}
|
||||||
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="服务区域">
|
||||||
|
{{ info.SERVICE_PLACE }}
|
||||||
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="应急值班电话">
|
||||||
|
{{ info.DUTY_TELEPHONE }}
|
||||||
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="救援专业">
|
||||||
|
{{ info.SPECIAL_TYPE_NAME }}
|
||||||
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="队伍负责人姓名">
|
||||||
|
{{ info.TEAM_LEADER_NAME }}
|
||||||
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="队伍负责人电话">
|
||||||
|
{{ info.TEAM_LEADER_PHONE }}
|
||||||
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="总人数">
|
||||||
|
{{ info.TOTLE_PERSON_NUM }}
|
||||||
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="指战人数">
|
||||||
|
{{ info.COMMANDER_NUM }}
|
||||||
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="车辆数">
|
||||||
|
{{ info.CAR_NUM }}
|
||||||
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="后勤人数">
|
||||||
|
{{ info.LOGISTICS_PERSON_NUM }}
|
||||||
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="队员信息" :span="2">
|
||||||
|
{{ info.TEAM_MEMBER_INFO }}
|
||||||
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="专长描述" :span="2">
|
||||||
|
{{ info.SPECIAL_DESC }}
|
||||||
|
</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="队伍简介" :span="2">
|
||||||
|
{{ info.TEAM_DESC }}
|
||||||
|
</el-descriptions-item>
|
||||||
|
</el-descriptions>
|
||||||
|
</layout-card>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { useRoute } from "vue-router";
|
||||||
|
import { getEmergencyRescueTeamManagementView } from "@/request/emergency_resource_management.js";
|
||||||
|
import { ref } from "vue";
|
||||||
|
|
||||||
|
const route = useRoute();
|
||||||
|
const { EMERGENCYTEAM_ID } = route.query;
|
||||||
|
const info = ref({});
|
||||||
|
const fnGetData = async () => {
|
||||||
|
const resData = await getEmergencyRescueTeamManagementView({
|
||||||
|
EMERGENCYTEAM_ID,
|
||||||
|
});
|
||||||
|
info.value = resData.pd;
|
||||||
|
};
|
||||||
|
fnGetData();
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped></style>
|
||||||
|
|
@ -489,7 +489,8 @@ const rules = {
|
||||||
{ required: true, message: "请输入手机号码", trigger: "blur" },
|
{ required: true, message: "请输入手机号码", trigger: "blur" },
|
||||||
{ min: 11, max: 11, message: "请输入11位手机号码", trigger: "blur" },
|
{ min: 11, max: 11, message: "请输入11位手机号码", trigger: "blur" },
|
||||||
{
|
{
|
||||||
pattern: /^(1[3-9][0-9])\d{8}$/,
|
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: "请输入正确的手机号码",
|
message: "请输入正确的手机号码",
|
||||||
},
|
},
|
||||||
{ validator: fnHasUser, trigger: "blur" },
|
{ validator: fnHasUser, trigger: "blur" },
|
||||||
|
|
|
||||||
|
|
@ -97,7 +97,7 @@
|
||||||
link
|
link
|
||||||
:disabled="fnCompareDate(row) !== '已结束'"
|
:disabled="fnCompareDate(row) !== '已结束'"
|
||||||
@click="
|
@click="
|
||||||
$router.push({
|
router.push({
|
||||||
path: '/file_management/personnel/task_details/file_details',
|
path: '/file_management/personnel/task_details/file_details',
|
||||||
query: {
|
query: {
|
||||||
STUDYTASK_ID: row.STUDYTASK_ID,
|
STUDYTASK_ID: row.STUDYTASK_ID,
|
||||||
|
|
@ -118,10 +118,11 @@
|
||||||
<script setup>
|
<script setup>
|
||||||
import { serialNumber } from "@/assets/js/utils";
|
import { serialNumber } from "@/assets/js/utils";
|
||||||
import { getPersonnelTaskDetailsList } from "@/request/file_management.js";
|
import { getPersonnelTaskDetailsList } from "@/request/file_management.js";
|
||||||
import { useRoute } from "vue-router";
|
import { useRoute, useRouter } from "vue-router";
|
||||||
import dayjs from "dayjs";
|
import dayjs from "dayjs";
|
||||||
import useListData from "@/assets/js/useListData.js";
|
import useListData from "@/assets/js/useListData.js";
|
||||||
|
|
||||||
|
const router = useRouter();
|
||||||
const route = useRoute();
|
const route = useRoute();
|
||||||
const { USER_ID } = route.query;
|
const { USER_ID } = route.query;
|
||||||
const { list, pagination, searchForm, fnResetPagination, fnGetData } =
|
const { list, pagination, searchForm, fnResetPagination, fnGetData } =
|
||||||
|
|
|
||||||
|
|
@ -78,7 +78,7 @@
|
||||||
text
|
text
|
||||||
link
|
link
|
||||||
@click="
|
@click="
|
||||||
$router.push({
|
router.push({
|
||||||
path: '/file_management/stage/archival_catalogue',
|
path: '/file_management/stage/archival_catalogue',
|
||||||
query: {
|
query: {
|
||||||
STUDYTASK_ID: row.STUDYTASK_ID,
|
STUDYTASK_ID: row.STUDYTASK_ID,
|
||||||
|
|
@ -100,7 +100,9 @@ import { serialNumber } from "@/assets/js/utils";
|
||||||
import { getStageList } from "@/request/file_management.js";
|
import { getStageList } from "@/request/file_management.js";
|
||||||
import dayjs from "dayjs";
|
import dayjs from "dayjs";
|
||||||
import useListData from "@/assets/js/useListData.js";
|
import useListData from "@/assets/js/useListData.js";
|
||||||
|
import { useRouter } from "vue-router";
|
||||||
|
|
||||||
|
const router = useRouter();
|
||||||
const { list, pagination, searchForm, fnResetPagination, fnGetData } =
|
const { list, pagination, searchForm, fnResetPagination, fnGetData } =
|
||||||
useListData(getStageList);
|
useListData(getStageList);
|
||||||
const fnCompareDate = (row) => {
|
const fnCompareDate = (row) => {
|
||||||
|
|
|
||||||
|
|
@ -58,7 +58,7 @@
|
||||||
<el-button
|
<el-button
|
||||||
type="primary"
|
type="primary"
|
||||||
@click="
|
@click="
|
||||||
$router.push({
|
router.push({
|
||||||
path: '/major_hazard_sources/real_time_data_monitoring/view/emergency_handling_record',
|
path: '/major_hazard_sources/real_time_data_monitoring/view/emergency_handling_record',
|
||||||
query: { MAJORDANGERSOURCE_ID },
|
query: { MAJORDANGERSOURCE_ID },
|
||||||
})
|
})
|
||||||
|
|
@ -176,7 +176,7 @@
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import { useRoute } from "vue-router";
|
import { useRoute, useRouter } from "vue-router";
|
||||||
import { nextTick, onBeforeUnmount, reactive, ref } from "vue";
|
import { nextTick, onBeforeUnmount, reactive, ref } from "vue";
|
||||||
import {
|
import {
|
||||||
getRealTimeDataMonitoringEquipmentInfo,
|
getRealTimeDataMonitoringEquipmentInfo,
|
||||||
|
|
@ -189,6 +189,7 @@ import * as echarts from "echarts";
|
||||||
import { cloneDeep } from "lodash-es";
|
import { cloneDeep } from "lodash-es";
|
||||||
import EmergencyResponse from "./components/emergency_response.vue";
|
import EmergencyResponse from "./components/emergency_response.vue";
|
||||||
|
|
||||||
|
const router = useRouter();
|
||||||
const route = useRoute();
|
const route = useRoute();
|
||||||
const { MAJORDANGERSOURCE_ID } = route.query;
|
const { MAJORDANGERSOURCE_ID } = route.query;
|
||||||
let messageExample = null;
|
let messageExample = null;
|
||||||
|
|
|
||||||
|
|
@ -113,7 +113,7 @@ const fnInit = async () => {
|
||||||
props.userList.forEach((item) => {
|
props.userList.forEach((item) => {
|
||||||
tableRef.value.toggleRowSelection(item);
|
tableRef.value.toggleRowSelection(item);
|
||||||
});
|
});
|
||||||
fnGetData();
|
fnResetPagination();
|
||||||
};
|
};
|
||||||
const fnClose = () => {
|
const fnClose = () => {
|
||||||
tableRef.value.clearSelection();
|
tableRef.value.clearSelection();
|
||||||
|
|
|
||||||
|
|
@ -86,7 +86,7 @@ onBeforeRouteUpdate((to, from, next) => {
|
||||||
next();
|
next();
|
||||||
});
|
});
|
||||||
const fnTabChange = (name) => {
|
const fnTabChange = (name) => {
|
||||||
router.push({
|
router.replace({
|
||||||
path: "/performance_appraisal/departmental",
|
path: "/performance_appraisal/departmental",
|
||||||
query: {
|
query: {
|
||||||
name,
|
name,
|
||||||
|
|
|
||||||
|
|
@ -86,7 +86,7 @@ onBeforeRouteUpdate((to, from, next) => {
|
||||||
next();
|
next();
|
||||||
});
|
});
|
||||||
const fnTabChange = (name) => {
|
const fnTabChange = (name) => {
|
||||||
router.push({
|
router.replace({
|
||||||
path: "/performance_appraisal/departmental",
|
path: "/performance_appraisal/departmental",
|
||||||
query: {
|
query: {
|
||||||
name,
|
name,
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,183 @@
|
||||||
|
<template>
|
||||||
|
<el-dialog v-model="visible" title="充值" :show-close="false">
|
||||||
|
<div>
|
||||||
|
<div v-show="numberOfPages === 1">
|
||||||
|
<div class="pay-def">
|
||||||
|
<div class="pay-image">
|
||||||
|
<img src="/src/assets/images/payment/no-duanxin.png" alt="" />
|
||||||
|
</div>
|
||||||
|
<div class="pay-title">
|
||||||
|
<p>您的短信提醒功能未开通或短信提示条数已用尽,</p>
|
||||||
|
<p>如需使用短信提醒功能请进行短信充值。</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="pay-foot">
|
||||||
|
<el-button type="success" @click="fnObtainQRCode">支付</el-button>
|
||||||
|
<el-button @click="fnClose">取消</el-button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div v-show="numberOfPages === 2">
|
||||||
|
<div class="code-logo">
|
||||||
|
<img src="/src/assets/images/payment/WePayLogo.png" alt="" />
|
||||||
|
</div>
|
||||||
|
<div class="code-img">
|
||||||
|
<layout-qr-code :src="qrcodeSrc" />
|
||||||
|
</div>
|
||||||
|
<div class="code-time">
|
||||||
|
距离二维码过去还剩
|
||||||
|
<span>{{ seconds }}</span>
|
||||||
|
秒,过期后请刷新页面重新获取二维码。
|
||||||
|
</div>
|
||||||
|
<div class="code-info">
|
||||||
|
<img src="/src/assets/images/payment/smwz.png" alt="" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div v-show="numberOfPages === 3">
|
||||||
|
<div class="pay-sure">
|
||||||
|
<img src="/src/assets/images/payment/sure.png" alt="" />
|
||||||
|
</div>
|
||||||
|
<div class="pay-title">
|
||||||
|
<p>恭喜您,支付成功!</p>
|
||||||
|
</div>
|
||||||
|
<div class="pay-btn">
|
||||||
|
<el-button @click="fnClose">关闭</el-button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div v-show="numberOfPages === 4">
|
||||||
|
<div class="pay-sure">
|
||||||
|
<img src="/src/assets/images/payment/err-code.png" alt="" />
|
||||||
|
</div>
|
||||||
|
<div class="pay-title">
|
||||||
|
<p>二维码已失效</p>
|
||||||
|
<p>请点击按钮获取新的二维码</p>
|
||||||
|
</div>
|
||||||
|
<div class="pay-btn">
|
||||||
|
<el-button type="success" @click="fnObtainQRCode">
|
||||||
|
重新获取
|
||||||
|
</el-button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</el-dialog>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import LayoutQrCode from "@/components/qr_code/index.vue";
|
||||||
|
import { useIntervalFn, useVModel } from "@vueuse/core";
|
||||||
|
import { ref } from "vue";
|
||||||
|
import {
|
||||||
|
getSmsLogManagementIsPaymentWasSuccess,
|
||||||
|
getSmsLogManagementObtainQRCode,
|
||||||
|
} from "@/request/sms_management.js";
|
||||||
|
|
||||||
|
const props = defineProps({
|
||||||
|
visible: {
|
||||||
|
type: Boolean,
|
||||||
|
required: true,
|
||||||
|
default: false,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
const emits = defineEmits(["update:visible"]);
|
||||||
|
const visible = useVModel(props, "visible", emits);
|
||||||
|
const { pause, resume } = useIntervalFn(
|
||||||
|
() => {
|
||||||
|
fnGetSmsLogManagementIsPaymentWasSuccess();
|
||||||
|
},
|
||||||
|
1000,
|
||||||
|
{ immediate: false }
|
||||||
|
);
|
||||||
|
const numberOfPages = ref(1);
|
||||||
|
const seconds = ref(0);
|
||||||
|
const info = ref({});
|
||||||
|
const qrcodeSrc = ref("");
|
||||||
|
const fnClose = () => {
|
||||||
|
visible.value = false;
|
||||||
|
};
|
||||||
|
const fnObtainQRCode = async () => {
|
||||||
|
numberOfPages.value = 2;
|
||||||
|
const resData = await getSmsLogManagementObtainQRCode();
|
||||||
|
qrcodeSrc.value = resData.msg.code_url;
|
||||||
|
info.value = resData.pd;
|
||||||
|
seconds.value = 60;
|
||||||
|
resume();
|
||||||
|
};
|
||||||
|
const fnGetSmsLogManagementIsPaymentWasSuccess = async () => {
|
||||||
|
if (seconds.value > 0) {
|
||||||
|
seconds.value--;
|
||||||
|
if (seconds.value % 2 === 0) {
|
||||||
|
const resData = await getSmsLogManagementIsPaymentWasSuccess({
|
||||||
|
ordernumber: info.value.ordernumber,
|
||||||
|
loading: false,
|
||||||
|
});
|
||||||
|
if (resData.payType === "true") {
|
||||||
|
pause();
|
||||||
|
numberOfPages.value = 3;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
pause();
|
||||||
|
numberOfPages.value = 4;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss">
|
||||||
|
img {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pay-image {
|
||||||
|
width: 200px;
|
||||||
|
height: 181px;
|
||||||
|
margin: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pay-title {
|
||||||
|
p {
|
||||||
|
margin-top: 20px;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.pay-foot {
|
||||||
|
width: 50%;
|
||||||
|
margin: 20px auto auto;
|
||||||
|
|
||||||
|
.el-button {
|
||||||
|
width: 45%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.code-logo {
|
||||||
|
width: 400px;
|
||||||
|
height: 108px;
|
||||||
|
margin: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.code-time {
|
||||||
|
margin-top: 20px;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.code-info {
|
||||||
|
width: 260px;
|
||||||
|
height: 86px;
|
||||||
|
margin: 20px auto auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pay-sure {
|
||||||
|
width: 194px;
|
||||||
|
height: 194px;
|
||||||
|
margin: 20px auto auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pay-btn {
|
||||||
|
width: 50%;
|
||||||
|
margin: 20px auto auto;
|
||||||
|
|
||||||
|
.el-button {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
@ -0,0 +1,105 @@
|
||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<el-card>
|
||||||
|
<el-form
|
||||||
|
:model="searchForm"
|
||||||
|
label-width="60px"
|
||||||
|
@submit.prevent="fnResetPagination"
|
||||||
|
>
|
||||||
|
<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-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-col :span="12">
|
||||||
|
<el-form-item label-width="10px" class="end">
|
||||||
|
<div>
|
||||||
|
总条数:<b>{{ data.zts }}</b>
|
||||||
|
</div>
|
||||||
|
<div class="ml-10">
|
||||||
|
已发送条数:<b class="text-blue">{{ data.fsts }}</b>
|
||||||
|
</div>
|
||||||
|
<div class="ml-10">
|
||||||
|
剩余条数:<b class="text-green">{{ data.syts }}</b>
|
||||||
|
</div>
|
||||||
|
<el-button
|
||||||
|
class="ml-10"
|
||||||
|
v-if="buttonJurisdiction.edit"
|
||||||
|
type="primary"
|
||||||
|
@click="data.rechargeDialogVisible = true"
|
||||||
|
>
|
||||||
|
充值
|
||||||
|
</el-button>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
</el-form>
|
||||||
|
</el-card>
|
||||||
|
<layout-card>
|
||||||
|
<layout-table
|
||||||
|
:data="list"
|
||||||
|
v-model:pagination="pagination"
|
||||||
|
@get-data="fnGetData"
|
||||||
|
>
|
||||||
|
<el-table-column label="序号" width="60">
|
||||||
|
<template #default="{ $index }">
|
||||||
|
{{ serialNumber(pagination, $index) }}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column prop="PHONE" label="手机号" />
|
||||||
|
<el-table-column prop="mbmc" label="短信模板" />
|
||||||
|
<el-table-column prop="STATE" label="状态">
|
||||||
|
<template v-slot="{ row }">
|
||||||
|
<span v-if="row.STATE === 'OK'">发送成功</span>
|
||||||
|
<span v-else-if="row.STATE === 'isv.DOMESTIC_NUMBER_NOT_SUPPORTED'">
|
||||||
|
国际/港澳台消息模板不支持发送境内号码
|
||||||
|
</span>
|
||||||
|
<span v-else-if="row.STATE === 'isv.MOBILE_NUMBER_ILLEGAL'">
|
||||||
|
非法手机号
|
||||||
|
</span>
|
||||||
|
<span v-else>发送失败</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column prop="CREATTIME" label="创建时间" />
|
||||||
|
<el-table-column prop="corpName" label="企业名称" />
|
||||||
|
</layout-table>
|
||||||
|
</layout-card>
|
||||||
|
<recharge v-model:visible="data.rechargeDialogVisible" />
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { reactive } from "vue";
|
||||||
|
import { serialNumber } from "@/assets/js/utils";
|
||||||
|
import useButtonJurisdiction from "@/assets/js/useButtonJurisdiction.js";
|
||||||
|
import { getSmsLogManagementList } from "@/request/sms_management.js";
|
||||||
|
import useListData from "@/assets/js/useListData.js";
|
||||||
|
import Recharge from "./components/recharge.vue";
|
||||||
|
|
||||||
|
const data = reactive({
|
||||||
|
zts: 0,
|
||||||
|
fsts: 0,
|
||||||
|
syts: 0,
|
||||||
|
rechargeDialogVisible: false,
|
||||||
|
});
|
||||||
|
const { list, searchForm, pagination, fnResetPagination, fnGetData } =
|
||||||
|
useListData(getSmsLogManagementList, {
|
||||||
|
callbackFn: (list, resData) => {
|
||||||
|
data.zts = resData.zts;
|
||||||
|
data.fsts = resData.fsts;
|
||||||
|
data.syts = resData.syts;
|
||||||
|
},
|
||||||
|
});
|
||||||
|
const buttonJurisdiction = await useButtonJurisdiction("msmlogin");
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss"></style>
|
||||||
|
|
@ -0,0 +1,122 @@
|
||||||
|
<template>
|
||||||
|
<el-dialog v-model="visible" title="配置" :on-close="fnClose">
|
||||||
|
<layout-table
|
||||||
|
ref="tableRef"
|
||||||
|
row-key="USER_ID"
|
||||||
|
:data="list"
|
||||||
|
v-model:pagination="pagination"
|
||||||
|
@get-data="fnGetDataTransfer"
|
||||||
|
>
|
||||||
|
<el-table-column reserve-selection type="selection" width="55" />
|
||||||
|
<el-table-column label="序号" width="60">
|
||||||
|
<template #default="{ $index }">
|
||||||
|
{{ serialNumber(pagination, $index) }}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column prop="USERNAME" label="用户名" />
|
||||||
|
<el-table-column prop="NAME" label="姓名" />
|
||||||
|
<el-table-column prop="DEPARTMENT_NAME" label="部门" />
|
||||||
|
<el-table-column prop="POST_NAME" label="岗位" />
|
||||||
|
</layout-table>
|
||||||
|
<template #footer>
|
||||||
|
<el-button @click="fnClose">取消</el-button>
|
||||||
|
<el-button type="primary" @click="fnSubmit"> 确定 </el-button>
|
||||||
|
</template>
|
||||||
|
</el-dialog>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import useListData from "@/assets/js/useListData.js";
|
||||||
|
import { serialNumber } from "@/assets/js/utils.js";
|
||||||
|
import { useVModel } from "@vueuse/core";
|
||||||
|
import { debounce } from "throttle-debounce";
|
||||||
|
import { ElMessage, ElMessageBox } from "element-plus";
|
||||||
|
import {
|
||||||
|
getSmsTypeManagementConfigureList,
|
||||||
|
setSmsTypeManagementConfigure,
|
||||||
|
} from "@/request/sms_management.js";
|
||||||
|
import { nextTick, ref, watch } from "vue";
|
||||||
|
|
||||||
|
const props = defineProps({
|
||||||
|
visible: {
|
||||||
|
type: Boolean,
|
||||||
|
required: true,
|
||||||
|
default: false,
|
||||||
|
},
|
||||||
|
id: {
|
||||||
|
type: String,
|
||||||
|
required: true,
|
||||||
|
default: "",
|
||||||
|
},
|
||||||
|
});
|
||||||
|
const emits = defineEmits(["update:visible", "get-data"]);
|
||||||
|
const visible = useVModel(props, "visible", emits);
|
||||||
|
const checkUserList = ref([]);
|
||||||
|
const { list, pagination, fnGetData, fnResetPagination, tableRef } =
|
||||||
|
useListData(getSmsTypeManagementConfigureList, {
|
||||||
|
immediate: false,
|
||||||
|
clearSelection: false,
|
||||||
|
key: "userList",
|
||||||
|
callbackFn: (list, resData) => {
|
||||||
|
checkUserList.value = resData.checkuserList;
|
||||||
|
},
|
||||||
|
});
|
||||||
|
const fnGetDataTransfer = () => {
|
||||||
|
fnGetData({ SMSMANAGEMENT_ID: props.id });
|
||||||
|
};
|
||||||
|
const fnResetPaginationTransfer = async () => {
|
||||||
|
await fnResetPagination({ SMSMANAGEMENT_ID: props.id });
|
||||||
|
};
|
||||||
|
const fnInit = async () => {
|
||||||
|
await fnResetPaginationTransfer();
|
||||||
|
await nextTick();
|
||||||
|
checkUserList.value.forEach((item) => {
|
||||||
|
tableRef.value.toggleRowSelection(item);
|
||||||
|
});
|
||||||
|
fnResetPaginationTransfer();
|
||||||
|
};
|
||||||
|
watch(
|
||||||
|
() => props.visible,
|
||||||
|
(val) => {
|
||||||
|
if (val) {
|
||||||
|
fnInit();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
const fnClose = () => {
|
||||||
|
tableRef.value.clearSelection();
|
||||||
|
visible.value = false;
|
||||||
|
};
|
||||||
|
const fnSubmit = debounce(
|
||||||
|
1000,
|
||||||
|
async () => {
|
||||||
|
const selectionData = tableRef.value.getSelectionRows();
|
||||||
|
if (selectionData.length === 0) {
|
||||||
|
ElMessage.warning("请选择要发送的用户");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const ADDRESSEE = selectionData.map((item) => item.USER_ID).join(",");
|
||||||
|
const USERNAME = selectionData.map((item) => item.NAME).join(",");
|
||||||
|
await ElMessageBox.confirm(
|
||||||
|
`确定要发送短信给<span class="text-green">${USERNAME.split(",").join(
|
||||||
|
"、"
|
||||||
|
)}</span>吗?`,
|
||||||
|
{
|
||||||
|
type: "warning",
|
||||||
|
dangerouslyUseHTMLString: true,
|
||||||
|
}
|
||||||
|
);
|
||||||
|
await setSmsTypeManagementConfigure({
|
||||||
|
SMSMANAGEMENT_ID: props.id,
|
||||||
|
ADDRESSEE,
|
||||||
|
USERNAME,
|
||||||
|
});
|
||||||
|
ElMessage.success("保存成功");
|
||||||
|
fnClose();
|
||||||
|
emits("get-data");
|
||||||
|
},
|
||||||
|
{ atBegin: true }
|
||||||
|
);
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss"></style>
|
||||||
|
|
@ -0,0 +1,114 @@
|
||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<el-card>
|
||||||
|
<el-form
|
||||||
|
:model="searchForm"
|
||||||
|
label-width="50px"
|
||||||
|
@submit.prevent="fnResetPagination"
|
||||||
|
>
|
||||||
|
<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-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
|
||||||
|
:data="list"
|
||||||
|
v-model:pagination="pagination"
|
||||||
|
@get-data="fnGetData"
|
||||||
|
>
|
||||||
|
<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="USERNAME" label="姓名" />
|
||||||
|
<el-table-column label="启用状态" width="150">
|
||||||
|
<template v-slot="{ row }">
|
||||||
|
<el-switch
|
||||||
|
:model-value="row.ISENABLE"
|
||||||
|
active-value="1"
|
||||||
|
inactive-value="0"
|
||||||
|
@change="
|
||||||
|
fnChangeStatus(row.SMSMANAGEMENT_ID, row.DICTIONARIES_ID)
|
||||||
|
"
|
||||||
|
/>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="操作" width="80">
|
||||||
|
<template v-slot="{ row }">
|
||||||
|
<el-button
|
||||||
|
v-if="buttonJurisdiction.edit"
|
||||||
|
type="primary"
|
||||||
|
text
|
||||||
|
link
|
||||||
|
@click="fnConfigure(row.SMSMANAGEMENT_ID)"
|
||||||
|
>
|
||||||
|
配置
|
||||||
|
</el-button>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</layout-table>
|
||||||
|
</layout-card>
|
||||||
|
<configure
|
||||||
|
v-model:visible="data.configureDialog.visible"
|
||||||
|
:id="data.configureDialog.SMSMANAGEMENT_ID"
|
||||||
|
@get-data="fnResetPagination"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { reactive } from "vue";
|
||||||
|
import { serialNumber } from "@/assets/js/utils";
|
||||||
|
import useButtonJurisdiction from "@/assets/js/useButtonJurisdiction.js";
|
||||||
|
import {
|
||||||
|
getSmsTypeManagementList,
|
||||||
|
setSmsTypeManagementChangeStatus,
|
||||||
|
} from "@/request/sms_management.js";
|
||||||
|
import { debounce } from "throttle-debounce";
|
||||||
|
import { ElMessage } from "element-plus";
|
||||||
|
import useListData from "@/assets/js/useListData.js";
|
||||||
|
import Configure from "./components/configure.vue";
|
||||||
|
|
||||||
|
const data = reactive({
|
||||||
|
configureDialog: {
|
||||||
|
visible: false,
|
||||||
|
SMSMANAGEMENT_ID: "",
|
||||||
|
},
|
||||||
|
});
|
||||||
|
const { list, pagination, searchForm, fnGetData, fnResetPagination } =
|
||||||
|
useListData(getSmsTypeManagementList);
|
||||||
|
const buttonJurisdiction = await useButtonJurisdiction("smsmanagement");
|
||||||
|
const fnChangeStatus = debounce(
|
||||||
|
1000,
|
||||||
|
async (SMSMANAGEMENT_ID, DICTIONARIES_ID) => {
|
||||||
|
await setSmsTypeManagementChangeStatus({
|
||||||
|
SMSMANAGEMENT_ID,
|
||||||
|
DICTIONARIES_ID,
|
||||||
|
});
|
||||||
|
ElMessage.success("状态修改成功");
|
||||||
|
fnResetPagination();
|
||||||
|
},
|
||||||
|
{ atBegin: true }
|
||||||
|
);
|
||||||
|
const fnConfigure = async (SMSMANAGEMENT_ID) => {
|
||||||
|
data.configureDialog.visible = true;
|
||||||
|
data.configureDialog.SMSMANAGEMENT_ID = SMSMANAGEMENT_ID;
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped></style>
|
||||||
|
|
@ -0,0 +1,217 @@
|
||||||
|
<template>
|
||||||
|
<layout-card>
|
||||||
|
<el-form ref="formRef" :rules="rules" :model="form" label-width="130px">
|
||||||
|
<el-row>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="部门" prop="DEPARTMENT_ID">
|
||||||
|
<layout-department
|
||||||
|
v-model="form.DEPARTMENT_ID"
|
||||||
|
@update:model-value="fnDepartmentChange"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="职务" prop="POST_ID">
|
||||||
|
<el-select v-model="form.POST_ID">
|
||||||
|
<el-option
|
||||||
|
v-for="item in postList"
|
||||||
|
:key="item.POST_ID"
|
||||||
|
:label="item.NAME"
|
||||||
|
:value="item.POST_ID"
|
||||||
|
/>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="类别" prop="TYPE">
|
||||||
|
<el-input v-model="form.TYPE" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="姓名" prop="PERSONNAME">
|
||||||
|
<el-input v-model="form.PERSONNAME" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="证书名称" prop="CERTIFICATENAME">
|
||||||
|
<el-input v-model="form.CERTIFICATENAME" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="证书编号" prop="CERTIFICATENUMBER">
|
||||||
|
<el-input v-model="form.CERTIFICATENUMBER" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="证书到期日期" prop="EXPIRATIONDATE">
|
||||||
|
<el-date-picker
|
||||||
|
v-model="form.EXPIRATIONDATE"
|
||||||
|
value-format="YYYY-MM-DD"
|
||||||
|
format="YYYY-MM-DD"
|
||||||
|
type="date"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="提醒日期" prop="REMINDERDATE">
|
||||||
|
<el-date-picker
|
||||||
|
v-model="form.REMINDERDATE"
|
||||||
|
value-format="YYYY-MM-DD"
|
||||||
|
format="YYYY-MM-DD"
|
||||||
|
type="date"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="提醒人员" prop="REMINDPEOPLE">
|
||||||
|
<el-input v-model="form.REMINDPEOPLE" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="提醒人员手机" prop="REMINDPEOPLEPHONE">
|
||||||
|
<el-input v-model="form.REMINDPEOPLEPHONE" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="24">
|
||||||
|
<el-form-item label="证书图片" prop="file">
|
||||||
|
<layout-upload
|
||||||
|
v-model:file-list="form.file"
|
||||||
|
accept=".jpg,.jpeg,.png"
|
||||||
|
list-type="picture-card"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="24">
|
||||||
|
<el-form-item label="备注" prop="DESCR">
|
||||||
|
<el-input
|
||||||
|
v-model="form.DESCR"
|
||||||
|
type="textarea"
|
||||||
|
:autosize="{ minRows: 3 }"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
</el-form>
|
||||||
|
<div class="mt-10 tc">
|
||||||
|
<el-button type="primary" @click="fnSubmit">提交</el-button>
|
||||||
|
</div>
|
||||||
|
</layout-card>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import LayoutUpload from "@/components/upload/index.vue";
|
||||||
|
import LayoutDepartment from "@/components/department/index.vue";
|
||||||
|
import { useRoute, useRouter } from "vue-router";
|
||||||
|
import { ref, watchEffect } from "vue";
|
||||||
|
import { getPostListAll } from "@/request/data_dictionary.js";
|
||||||
|
import { debounce } from "throttle-debounce";
|
||||||
|
import useFormValidate from "@/assets/js/useFormValidate.js";
|
||||||
|
import {
|
||||||
|
getPersonnelEvidenceCollectionSituationView,
|
||||||
|
setPersonnelEvidenceCollectionSituationAdd,
|
||||||
|
setPersonnelEvidenceCollectionSituationEdit,
|
||||||
|
} from "@/request/training_record_management.js";
|
||||||
|
import { ElMessage } from "element-plus";
|
||||||
|
import { getFileName } from "@/assets/js/utils.js";
|
||||||
|
|
||||||
|
const router = useRouter();
|
||||||
|
const route = useRoute();
|
||||||
|
const { PERSONOBTAINEVIDENCE_ID } = route.query;
|
||||||
|
const VITE_FILE_URL = import.meta.env.VITE_FILE_URL;
|
||||||
|
const rules = {
|
||||||
|
DEPARTMENT_ID: [{ required: true, message: "请选择部门", trigger: "blur" }],
|
||||||
|
POST_ID: [{ required: true, message: "请选择职务", trigger: "blur" }],
|
||||||
|
TYPE: [{ required: true, message: "请输入类别", trigger: "blur" }],
|
||||||
|
PERSONNAME: [{ required: true, message: "请输入姓名", trigger: "blur" }],
|
||||||
|
CERTIFICATENAME: [
|
||||||
|
{ required: true, message: "请输入证书名称", trigger: "blur" },
|
||||||
|
],
|
||||||
|
CERTIFICATENUMBER: [
|
||||||
|
{ required: true, message: "请输入证书编号", trigger: "blur" },
|
||||||
|
],
|
||||||
|
EXPIRATIONDATE: [
|
||||||
|
{ required: true, message: "请输入证书到期日期", trigger: "blur" },
|
||||||
|
],
|
||||||
|
REMINDERDATE: [
|
||||||
|
{ required: true, message: "请输入提醒日期", trigger: "blur" },
|
||||||
|
],
|
||||||
|
REMINDPEOPLE: [
|
||||||
|
{ required: true, message: "请输入提醒人员", trigger: "blur" },
|
||||||
|
],
|
||||||
|
REMINDPEOPLEPHONE: [
|
||||||
|
{ required: true, message: "请输入提醒人员手机", trigger: "blur" },
|
||||||
|
{
|
||||||
|
pattern:
|
||||||
|
/^(13[0-9]|14[579]|15[0-3,5-9]|16[6]|17[0135678]|18[0-9]|19[189])\d{8}$/,
|
||||||
|
message: "请输入正确的手机号码",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
file: [{ required: true, message: "证书图片不能为空", trigger: "blur" }],
|
||||||
|
};
|
||||||
|
const form = ref({
|
||||||
|
DEPARTMENT_ID: "",
|
||||||
|
POST_ID: "",
|
||||||
|
TYPE: "",
|
||||||
|
PERSONNAME: "",
|
||||||
|
CERTIFICATENAME: "",
|
||||||
|
CERTIFICATENUMBER: "",
|
||||||
|
EXPIRATIONDATE: "",
|
||||||
|
REMINDERDATE: "",
|
||||||
|
REMINDPEOPLE: "",
|
||||||
|
REMINDPEOPLEPHONE: "",
|
||||||
|
DESCR: "",
|
||||||
|
file: [],
|
||||||
|
});
|
||||||
|
const formRef = ref(null);
|
||||||
|
const postList = ref([]);
|
||||||
|
const fnGetData = async () => {
|
||||||
|
if (!PERSONOBTAINEVIDENCE_ID) return;
|
||||||
|
const resData = await getPersonnelEvidenceCollectionSituationView({
|
||||||
|
PERSONOBTAINEVIDENCE_ID,
|
||||||
|
});
|
||||||
|
form.value = resData.pd;
|
||||||
|
if (resData.pd.IMGPATH) {
|
||||||
|
form.value.file = [
|
||||||
|
{
|
||||||
|
url: VITE_FILE_URL + resData.pd.IMGPATH,
|
||||||
|
name: getFileName(resData.pd.IMGPATH),
|
||||||
|
},
|
||||||
|
];
|
||||||
|
}
|
||||||
|
};
|
||||||
|
fnGetData();
|
||||||
|
const fnDepartmentChange = () => {
|
||||||
|
form.value.POST_ID = "";
|
||||||
|
postList.value = [];
|
||||||
|
};
|
||||||
|
const fnGetPostList = async (DEPARTMENT_ID) => {
|
||||||
|
const resData = await getPostListAll({ DEPARTMENT_ID });
|
||||||
|
postList.value = resData.postList;
|
||||||
|
};
|
||||||
|
watchEffect(() => {
|
||||||
|
if (form.value.DEPARTMENT_ID) fnGetPostList(form.value.DEPARTMENT_ID);
|
||||||
|
});
|
||||||
|
const fnSubmit = debounce(
|
||||||
|
1000,
|
||||||
|
async () => {
|
||||||
|
await useFormValidate(formRef);
|
||||||
|
const formData = new FormData();
|
||||||
|
Object.keys(form.value).forEach((key) => {
|
||||||
|
formData.append(key, form.value[key]);
|
||||||
|
});
|
||||||
|
formData.delete("file");
|
||||||
|
if (form.value.file[0].raw) {
|
||||||
|
formData.append("file", form.value.file[0].raw);
|
||||||
|
formData.append("FILEPATH", form.value.file[0].raw);
|
||||||
|
}
|
||||||
|
!PERSONOBTAINEVIDENCE_ID
|
||||||
|
? await setPersonnelEvidenceCollectionSituationAdd(formData)
|
||||||
|
: await setPersonnelEvidenceCollectionSituationEdit(formData);
|
||||||
|
ElMessage.success("保存成功");
|
||||||
|
router.back();
|
||||||
|
},
|
||||||
|
{ atBegin: true }
|
||||||
|
);
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss"></style>
|
||||||
|
|
@ -0,0 +1,123 @@
|
||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<el-card>
|
||||||
|
<el-form
|
||||||
|
:model="searchForm"
|
||||||
|
label-width="110px"
|
||||||
|
@submit.prevent="fnResetPagination"
|
||||||
|
>
|
||||||
|
<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-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
|
||||||
|
:data="list"
|
||||||
|
v-model:pagination="pagination"
|
||||||
|
@get-data="fnGetData"
|
||||||
|
>
|
||||||
|
<el-table-column label="序号" width="60">
|
||||||
|
<template #default="{ $index }">
|
||||||
|
{{ serialNumber(pagination, $index) }}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column prop="TYPE" label="类别" show-overflow-tooltip />
|
||||||
|
<el-table-column prop="DEPARTMENTNAME_ALL" label="部门" width="200" />
|
||||||
|
<el-table-column prop="PERSONNAME" label="姓名" width="150" />
|
||||||
|
<el-table-column prop="CERTIFICATENAME" label="证书名称" width="150" />
|
||||||
|
<el-table-column prop="REMINDERDATE" label="提醒日期" width="150" />
|
||||||
|
<el-table-column label="证书图片" width="100">
|
||||||
|
<template v-slot="{ row }">
|
||||||
|
<layout-tooltip-img
|
||||||
|
:imgs="row.IMGPATH ? [{ FILEPATH: row.IMGPATH }] : []"
|
||||||
|
/>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column prop="DESCR" label="备注" show-overflow-tooltip />
|
||||||
|
<el-table-column label="操作" width="120">
|
||||||
|
<template v-slot="{ row }">
|
||||||
|
<el-button
|
||||||
|
v-if="buttonJurisdiction.edit"
|
||||||
|
type="primary"
|
||||||
|
text
|
||||||
|
link
|
||||||
|
@click="
|
||||||
|
router.push({
|
||||||
|
path: '/training_record_management/personnel_evidence_collection_situation/edit',
|
||||||
|
query: {
|
||||||
|
PERSONOBTAINEVIDENCE_ID: row.PERSONOBTAINEVIDENCE_ID,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
"
|
||||||
|
>
|
||||||
|
修改
|
||||||
|
</el-button>
|
||||||
|
<el-button
|
||||||
|
v-if="buttonJurisdiction.del"
|
||||||
|
type="primary"
|
||||||
|
text
|
||||||
|
link
|
||||||
|
@click="fnDelete(row.PERSONOBTAINEVIDENCE_ID)"
|
||||||
|
>
|
||||||
|
删除
|
||||||
|
</el-button>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<template #button>
|
||||||
|
<el-button
|
||||||
|
v-if="buttonJurisdiction.add"
|
||||||
|
type="primary"
|
||||||
|
@click="
|
||||||
|
router.push({
|
||||||
|
path: '/training_record_management/personnel_evidence_collection_situation/add',
|
||||||
|
})
|
||||||
|
"
|
||||||
|
>
|
||||||
|
新增
|
||||||
|
</el-button>
|
||||||
|
</template>
|
||||||
|
</layout-table>
|
||||||
|
</layout-card>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { serialNumber } from "@/assets/js/utils";
|
||||||
|
import useButtonJurisdiction from "@/assets/js/useButtonJurisdiction.js";
|
||||||
|
import { ElMessageBox, ElMessage } from "element-plus";
|
||||||
|
import {
|
||||||
|
getPersonnelEvidenceCollectionSituationList,
|
||||||
|
setPersonnelEvidenceCollectionSituationDelete,
|
||||||
|
} from "@/request/training_record_management.js";
|
||||||
|
import useListData from "@/assets/js/useListData.js";
|
||||||
|
import LayoutTooltipImg from "@/components/tooltip_img/index.vue";
|
||||||
|
import { useRouter } from "vue-router";
|
||||||
|
|
||||||
|
const router = useRouter();
|
||||||
|
const { list, pagination, searchForm, fnGetData, fnResetPagination } =
|
||||||
|
useListData(getPersonnelEvidenceCollectionSituationList);
|
||||||
|
const buttonJurisdiction = await useButtonJurisdiction("personobtainevidence");
|
||||||
|
const fnDelete = async (PERSONOBTAINEVIDENCE_ID) => {
|
||||||
|
await ElMessageBox.confirm("确认删除吗?", { type: "warning" });
|
||||||
|
await setPersonnelEvidenceCollectionSituationDelete({
|
||||||
|
PERSONOBTAINEVIDENCE_ID,
|
||||||
|
});
|
||||||
|
ElMessage.success("删除成功");
|
||||||
|
fnResetPagination();
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped></style>
|
||||||
|
|
@ -0,0 +1,142 @@
|
||||||
|
<template>
|
||||||
|
<layout-card>
|
||||||
|
<el-form ref="formRef" :rules="rules" :model="form" label-width="130px">
|
||||||
|
<el-row>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="计划名称" prop="PLANNAME">
|
||||||
|
<el-input v-model="form.PLANNAME" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="培训地点" prop="ADDRESS">
|
||||||
|
<el-input v-model="form.ADDRESS" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="计划开始时间" prop="STARTTIME">
|
||||||
|
<el-date-picker
|
||||||
|
v-model="form.STARTTIME"
|
||||||
|
value-format="YYYY-MM-DD"
|
||||||
|
format="YYYY-MM-DD"
|
||||||
|
type="date"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="计划结束时间" prop="ENDTIME">
|
||||||
|
<el-date-picker
|
||||||
|
v-model="form.ENDTIME"
|
||||||
|
value-format="YYYY-MM-DD"
|
||||||
|
format="YYYY-MM-DD"
|
||||||
|
type="date"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="培训学时" prop="HOURS">
|
||||||
|
<el-input v-model="form.HOURS" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="培训内容" prop="CONTENT">
|
||||||
|
<el-input v-model="form.CONTENT" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="24">
|
||||||
|
<el-form-item label="附件" prop="file">
|
||||||
|
<layout-upload v-model:file-list="form.file" accept=".pdf" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="24">
|
||||||
|
<el-form-item label="备注" prop="PLANDESCR">
|
||||||
|
<el-input
|
||||||
|
v-model="form.PLANDESCR"
|
||||||
|
type="textarea"
|
||||||
|
:autosize="{ minRows: 3 }"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
</el-form>
|
||||||
|
<div class="mt-10 tc">
|
||||||
|
<el-button type="primary" @click="fnSubmit">保存</el-button>
|
||||||
|
</div>
|
||||||
|
</layout-card>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import LayoutUpload from "@/components/upload/index.vue";
|
||||||
|
import { ref } from "vue";
|
||||||
|
import { debounce } from "throttle-debounce";
|
||||||
|
import useFormValidate from "@/assets/js/useFormValidate.js";
|
||||||
|
import { ElMessage } from "element-plus";
|
||||||
|
import {
|
||||||
|
getTrainingPlanView,
|
||||||
|
setTrainingPlanAdd,
|
||||||
|
setTrainingPlanEdit,
|
||||||
|
} from "@/request/training_record_management.js";
|
||||||
|
import { useRoute, useRouter } from "vue-router";
|
||||||
|
import { getFileName } from "@/assets/js/utils.js";
|
||||||
|
|
||||||
|
const route = useRoute();
|
||||||
|
const router = useRouter();
|
||||||
|
const { TRAININGPLAN_ID } = route.query;
|
||||||
|
const VITE_FILE_URL = import.meta.env.VITE_FILE_URL;
|
||||||
|
const rules = {
|
||||||
|
PLANNAME: [{ required: true, message: "请输入计划名称", trigger: "blur" }],
|
||||||
|
ADDRESS: [{ required: true, message: "请输入培训地点", trigger: "blur" }],
|
||||||
|
STARTTIME: [
|
||||||
|
{ required: true, message: "请选择计划开始时间", trigger: "blur" },
|
||||||
|
],
|
||||||
|
ENDTIME: [{ required: true, message: "请选择计划结束时间", trigger: "blur" }],
|
||||||
|
HOURS: [{ required: true, message: "请输入培训学时", trigger: "blur" }],
|
||||||
|
CONTENT: [{ required: true, message: "请输入培训内容", trigger: "blur" }],
|
||||||
|
file: [{ required: true, message: "附件不能为空", trigger: "blur" }],
|
||||||
|
};
|
||||||
|
const form = ref({
|
||||||
|
PLANNAME: "",
|
||||||
|
ADDRESS: "",
|
||||||
|
STARTTIME: "",
|
||||||
|
ENDTIME: "",
|
||||||
|
HOURS: "",
|
||||||
|
CONTENT: "",
|
||||||
|
PLANDESCR: "",
|
||||||
|
file: [],
|
||||||
|
});
|
||||||
|
const formRef = ref(null);
|
||||||
|
const fnGetData = async () => {
|
||||||
|
if (!TRAININGPLAN_ID) return;
|
||||||
|
const resData = await getTrainingPlanView({ TRAININGPLAN_ID });
|
||||||
|
form.value = resData.pd;
|
||||||
|
form.value.file = [
|
||||||
|
{
|
||||||
|
url: VITE_FILE_URL + resData.pd.FILEPATH,
|
||||||
|
name: getFileName(resData.pd.FILEPATH),
|
||||||
|
},
|
||||||
|
];
|
||||||
|
};
|
||||||
|
fnGetData();
|
||||||
|
const fnSubmit = debounce(
|
||||||
|
1000,
|
||||||
|
async () => {
|
||||||
|
await useFormValidate(formRef);
|
||||||
|
const formData = new FormData();
|
||||||
|
Object.keys(form.value).forEach((key) => {
|
||||||
|
formData.append(key, form.value[key]);
|
||||||
|
});
|
||||||
|
formData.delete("file");
|
||||||
|
if (form.value.file[0].raw) {
|
||||||
|
formData.append("file", form.value.file[0].raw);
|
||||||
|
formData.append("FILEPATH", form.value.file[0].raw);
|
||||||
|
}
|
||||||
|
!TRAININGPLAN_ID
|
||||||
|
? await setTrainingPlanAdd(formData)
|
||||||
|
: await setTrainingPlanEdit(formData);
|
||||||
|
ElMessage.success("保存成功");
|
||||||
|
router.back();
|
||||||
|
},
|
||||||
|
{ atBegin: true }
|
||||||
|
);
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss"></style>
|
||||||
|
|
@ -0,0 +1,147 @@
|
||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<el-card>
|
||||||
|
<el-form
|
||||||
|
:model="searchForm"
|
||||||
|
label-width="80px"
|
||||||
|
@submit.prevent="fnResetPagination"
|
||||||
|
>
|
||||||
|
<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-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
|
||||||
|
:data="list"
|
||||||
|
v-model:pagination="pagination"
|
||||||
|
@get-data="fnGetData"
|
||||||
|
>
|
||||||
|
<el-table-column label="序号" width="60">
|
||||||
|
<template #default="{ $index }">
|
||||||
|
{{ serialNumber(pagination, $index) }}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column
|
||||||
|
prop="PLANNAME"
|
||||||
|
label="计划名称"
|
||||||
|
show-overflow-tooltip
|
||||||
|
/>
|
||||||
|
<el-table-column
|
||||||
|
prop="ADDRESS"
|
||||||
|
label="培训地点"
|
||||||
|
show-overflow-tooltip
|
||||||
|
/>
|
||||||
|
<el-table-column prop="STARTTIME" label="计划开始时间" width="150" />
|
||||||
|
<el-table-column prop="ENDTIME" label="计划结束时间" width="150" />
|
||||||
|
<el-table-column
|
||||||
|
prop="CONTENT"
|
||||||
|
label="培训内容"
|
||||||
|
show-overflow-tooltip
|
||||||
|
/>
|
||||||
|
<el-table-column prop="PLANDESCR" label="备注" show-overflow-tooltip />
|
||||||
|
<el-table-column label="操作" width="180">
|
||||||
|
<template v-slot="{ row }">
|
||||||
|
<el-button
|
||||||
|
type="primary"
|
||||||
|
text
|
||||||
|
link
|
||||||
|
@click="fnPreviewPdf(row.FILEPATH)"
|
||||||
|
>
|
||||||
|
预览附件
|
||||||
|
</el-button>
|
||||||
|
<el-button
|
||||||
|
v-if="buttonJurisdiction.edit"
|
||||||
|
type="primary"
|
||||||
|
text
|
||||||
|
link
|
||||||
|
@click="
|
||||||
|
router.push({
|
||||||
|
path: '/training_record_management/training_plan/edit',
|
||||||
|
query: { TRAININGPLAN_ID: row.TRAININGPLAN_ID },
|
||||||
|
})
|
||||||
|
"
|
||||||
|
>
|
||||||
|
修改
|
||||||
|
</el-button>
|
||||||
|
<el-button
|
||||||
|
v-if="buttonJurisdiction.del"
|
||||||
|
type="primary"
|
||||||
|
text
|
||||||
|
link
|
||||||
|
@click="fnDelete(row.TRAININGPLAN_ID)"
|
||||||
|
>
|
||||||
|
删除
|
||||||
|
</el-button>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<template #button>
|
||||||
|
<el-button
|
||||||
|
v-if="buttonJurisdiction.add"
|
||||||
|
type="primary"
|
||||||
|
@click="
|
||||||
|
router.push({
|
||||||
|
path: '/training_record_management/training_plan/add',
|
||||||
|
})
|
||||||
|
"
|
||||||
|
>
|
||||||
|
新增
|
||||||
|
</el-button>
|
||||||
|
</template>
|
||||||
|
</layout-table>
|
||||||
|
</layout-card>
|
||||||
|
<layout-pdf
|
||||||
|
:src="data.pdfDialog.FILEPATH"
|
||||||
|
v-model:visible="data.pdfDialog.visible"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { reactive } from "vue";
|
||||||
|
import { serialNumber } from "@/assets/js/utils";
|
||||||
|
import useButtonJurisdiction from "@/assets/js/useButtonJurisdiction.js";
|
||||||
|
import { ElMessageBox, ElMessage } from "element-plus";
|
||||||
|
import LayoutPdf from "@/components/pdf/index.vue";
|
||||||
|
import {
|
||||||
|
getTrainingPlanList,
|
||||||
|
setTrainingPlanDelete,
|
||||||
|
} from "@/request/training_record_management.js";
|
||||||
|
import useListData from "@/assets/js/useListData.js";
|
||||||
|
import { useRouter } from "vue-router";
|
||||||
|
|
||||||
|
const router = useRouter();
|
||||||
|
const data = reactive({
|
||||||
|
pdfDialog: {
|
||||||
|
visible: false,
|
||||||
|
FILEPATH: "",
|
||||||
|
},
|
||||||
|
});
|
||||||
|
const { list, pagination, searchForm, fnGetData, fnResetPagination } =
|
||||||
|
useListData(getTrainingPlanList);
|
||||||
|
const buttonJurisdiction = await useButtonJurisdiction("trainingplan");
|
||||||
|
const fnPreviewPdf = (FILEPATH) => {
|
||||||
|
data.pdfDialog.visible = true;
|
||||||
|
data.pdfDialog.FILEPATH = FILEPATH;
|
||||||
|
};
|
||||||
|
const fnDelete = async (TRAININGPLAN_ID) => {
|
||||||
|
await ElMessageBox.confirm("确认删除吗?", { type: "warning" });
|
||||||
|
await setTrainingPlanDelete({ TRAININGPLAN_ID });
|
||||||
|
ElMessage.success("删除成功");
|
||||||
|
fnResetPagination();
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped></style>
|
||||||
|
|
@ -0,0 +1,163 @@
|
||||||
|
<template>
|
||||||
|
<layout-card>
|
||||||
|
<el-form ref="formRef" :rules="rules" :model="form" label-width="130px">
|
||||||
|
<el-row>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="计划名称" prop="TRAININGPLAN_ID">
|
||||||
|
<el-select v-model="form.TRAININGPLAN_ID">
|
||||||
|
<el-option
|
||||||
|
v-for="item in planList.varList"
|
||||||
|
:key="item.TRAININGPLAN_ID"
|
||||||
|
:label="item.PLANNAME"
|
||||||
|
:value="item.TRAININGPLAN_ID"
|
||||||
|
/>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="培训主题" prop="TRAININGTHEME">
|
||||||
|
<el-input v-model="form.TRAININGTHEME" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="培训类型" prop="TRAININGTYPE">
|
||||||
|
<el-select v-model="form.TRAININGTYPE">
|
||||||
|
<el-option
|
||||||
|
v-for="item in trainingTypeList"
|
||||||
|
:key="item.BIANMA"
|
||||||
|
:label="item.NAME"
|
||||||
|
:value="item.BIANMA"
|
||||||
|
/>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="培训时间" prop="TRAININGTIME">
|
||||||
|
<el-date-picker
|
||||||
|
v-model="form.TRAININGTIME"
|
||||||
|
value-format="YYYY-MM-DD"
|
||||||
|
format="YYYY-MM-DD"
|
||||||
|
type="date"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="参加培训人员" prop="PARTICIPANT">
|
||||||
|
<el-input v-model="form.PARTICIPANT" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="培训讲师" prop="INSTRUCTORS">
|
||||||
|
<el-input v-model="form.INSTRUCTORS" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="24">
|
||||||
|
<el-form-item label="附件" prop="file">
|
||||||
|
<layout-upload v-model:file-list="form.file" accept=".pdf" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="24">
|
||||||
|
<el-form-item label="备注" prop="TRAININGDESCR">
|
||||||
|
<el-input
|
||||||
|
v-model="form.TRAININGDESCR"
|
||||||
|
type="textarea"
|
||||||
|
:autosize="{ minRows: 3 }"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
</el-form>
|
||||||
|
<div class="mt-10 tc">
|
||||||
|
<el-button type="primary" @click="fnSubmit">保存</el-button>
|
||||||
|
</div>
|
||||||
|
</layout-card>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import LayoutUpload from "@/components/upload/index.vue";
|
||||||
|
import { ref } from "vue";
|
||||||
|
import { debounce } from "throttle-debounce";
|
||||||
|
import useFormValidate from "@/assets/js/useFormValidate.js";
|
||||||
|
import {
|
||||||
|
getTrainingPlanListAll,
|
||||||
|
getTrainingSituationView,
|
||||||
|
setTrainingSituationAdd,
|
||||||
|
setTrainingSituationEdit,
|
||||||
|
} from "@/request/training_record_management.js";
|
||||||
|
import { ElMessage } from "element-plus";
|
||||||
|
import { layoutFnGetTrainingType } from "@/assets/js/data_dictionary.js";
|
||||||
|
import { useRoute, useRouter } from "vue-router";
|
||||||
|
import { getFileName } from "@/assets/js/utils.js";
|
||||||
|
|
||||||
|
const router = useRouter();
|
||||||
|
const route = useRoute();
|
||||||
|
const { TRAININGINFO_ID } = route.query;
|
||||||
|
const VITE_FILE_URL = import.meta.env.VITE_FILE_URL;
|
||||||
|
const rules = {
|
||||||
|
TRAININGPLAN_ID: [
|
||||||
|
{ required: true, message: "请选择计划名称", trigger: "blur" },
|
||||||
|
],
|
||||||
|
TRAININGTHEME: [
|
||||||
|
{ required: true, message: "请输入培训主题", trigger: "blur" },
|
||||||
|
],
|
||||||
|
TRAININGTYPE: [
|
||||||
|
{ required: true, message: "请选择培训类型", trigger: "blur" },
|
||||||
|
],
|
||||||
|
TRAININGTIME: [
|
||||||
|
{ required: true, message: "请选择培训时间", trigger: "blur" },
|
||||||
|
],
|
||||||
|
PARTICIPANT: [
|
||||||
|
{ required: true, message: "请输入参加培训人员", trigger: "blur" },
|
||||||
|
],
|
||||||
|
INSTRUCTORS: [{ required: true, message: "请输入培训讲师", trigger: "blur" }],
|
||||||
|
file: [{ required: true, message: "附件不能为空", trigger: "blur" }],
|
||||||
|
};
|
||||||
|
const form = ref({
|
||||||
|
TRAININGPLAN_ID: "",
|
||||||
|
TRAININGTHEME: "",
|
||||||
|
TRAININGTYPE: "",
|
||||||
|
TRAININGTIME: "",
|
||||||
|
PARTICIPANT: "",
|
||||||
|
INSTRUCTORS: "",
|
||||||
|
TRAININGDESCR: "",
|
||||||
|
file: [],
|
||||||
|
});
|
||||||
|
const formRef = ref(null);
|
||||||
|
const fnGetData = async () => {
|
||||||
|
if (!TRAININGINFO_ID) return;
|
||||||
|
const resData = await getTrainingSituationView({ TRAININGINFO_ID });
|
||||||
|
form.value = resData.pd;
|
||||||
|
form.value.file = [
|
||||||
|
{
|
||||||
|
url: VITE_FILE_URL + resData.pd.FILEPATH,
|
||||||
|
name: getFileName(resData.pd.FILEPATH),
|
||||||
|
},
|
||||||
|
];
|
||||||
|
};
|
||||||
|
fnGetData();
|
||||||
|
const planList = await getTrainingPlanListAll();
|
||||||
|
const trainingTypeList = await layoutFnGetTrainingType();
|
||||||
|
const fnSubmit = debounce(
|
||||||
|
1000,
|
||||||
|
async () => {
|
||||||
|
await useFormValidate(formRef);
|
||||||
|
const formData = new FormData();
|
||||||
|
Object.keys(form.value).forEach((key) => {
|
||||||
|
formData.append(key, form.value[key]);
|
||||||
|
});
|
||||||
|
formData.delete("file");
|
||||||
|
if (form.value.file[0].raw) {
|
||||||
|
formData.append("file", form.value.file[0].raw);
|
||||||
|
formData.append("LISTING_FILE", form.value.file[0].raw);
|
||||||
|
}
|
||||||
|
!TRAININGINFO_ID
|
||||||
|
? await setTrainingSituationAdd(formData)
|
||||||
|
: await setTrainingSituationEdit(formData);
|
||||||
|
ElMessage.success("保存成功");
|
||||||
|
router.back();
|
||||||
|
},
|
||||||
|
{ atBegin: true }
|
||||||
|
);
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss"></style>
|
||||||
|
|
@ -0,0 +1,151 @@
|
||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<el-card>
|
||||||
|
<el-form
|
||||||
|
:model="searchForm"
|
||||||
|
label-width="80px"
|
||||||
|
@submit.prevent="fnResetPagination"
|
||||||
|
>
|
||||||
|
<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-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
|
||||||
|
:data="list"
|
||||||
|
v-model:pagination="pagination"
|
||||||
|
@get-data="fnGetData"
|
||||||
|
>
|
||||||
|
<el-table-column label="序号" width="60">
|
||||||
|
<template #default="{ $index }">
|
||||||
|
{{ serialNumber(pagination, $index) }}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column
|
||||||
|
prop="PLANNAME"
|
||||||
|
label="计划名称"
|
||||||
|
show-overflow-tooltip
|
||||||
|
/>
|
||||||
|
<el-table-column
|
||||||
|
prop="TRAININGTHEME"
|
||||||
|
label="培训主题"
|
||||||
|
show-overflow-tooltip
|
||||||
|
/>
|
||||||
|
<el-table-column prop="TRAININGTYPENAME" label="培训类型" width="150" />
|
||||||
|
<el-table-column prop="TRAININGTIME" label="培训时间" width="150" />
|
||||||
|
<el-table-column
|
||||||
|
prop="PARTICIPANT"
|
||||||
|
label="参加培训人员"
|
||||||
|
show-overflow-tooltip
|
||||||
|
/>
|
||||||
|
<el-table-column
|
||||||
|
prop="INSTRUCTORS"
|
||||||
|
label="培训讲师"
|
||||||
|
show-overflow-tooltip
|
||||||
|
/>
|
||||||
|
<el-table-column label="操作" width="180">
|
||||||
|
<template v-slot="{ row }">
|
||||||
|
<el-button
|
||||||
|
type="primary"
|
||||||
|
text
|
||||||
|
link
|
||||||
|
@click="fnPreviewPdf(row.FILEPATH)"
|
||||||
|
>
|
||||||
|
预览附件
|
||||||
|
</el-button>
|
||||||
|
<el-button
|
||||||
|
v-if="buttonJurisdiction.edit"
|
||||||
|
type="primary"
|
||||||
|
text
|
||||||
|
link
|
||||||
|
@click="
|
||||||
|
router.push({
|
||||||
|
path: '/training_record_management/training_situation/edit',
|
||||||
|
query: { TRAININGINFO_ID: row.TRAININGINFO_ID },
|
||||||
|
})
|
||||||
|
"
|
||||||
|
>
|
||||||
|
修改
|
||||||
|
</el-button>
|
||||||
|
<el-button
|
||||||
|
v-if="buttonJurisdiction.del"
|
||||||
|
type="primary"
|
||||||
|
text
|
||||||
|
link
|
||||||
|
@click="fnDelete(row.TRAININGINFO_ID)"
|
||||||
|
>
|
||||||
|
删除
|
||||||
|
</el-button>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<template #button>
|
||||||
|
<el-button
|
||||||
|
v-if="buttonJurisdiction.add"
|
||||||
|
type="primary"
|
||||||
|
@click="
|
||||||
|
router.push({
|
||||||
|
path: '/training_record_management/training_situation/add',
|
||||||
|
})
|
||||||
|
"
|
||||||
|
>
|
||||||
|
新增
|
||||||
|
</el-button>
|
||||||
|
</template>
|
||||||
|
</layout-table>
|
||||||
|
</layout-card>
|
||||||
|
<layout-pdf
|
||||||
|
:src="data.pdfDialog.FILEPATH"
|
||||||
|
v-model:visible="data.pdfDialog.visible"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { reactive } from "vue";
|
||||||
|
import { serialNumber } from "@/assets/js/utils";
|
||||||
|
import useButtonJurisdiction from "@/assets/js/useButtonJurisdiction.js";
|
||||||
|
import { ElMessageBox, ElMessage } from "element-plus";
|
||||||
|
import LayoutPdf from "@/components/pdf/index.vue";
|
||||||
|
import {
|
||||||
|
getTrainingSituationList,
|
||||||
|
setTrainingSituationDelete,
|
||||||
|
} from "@/request/training_record_management.js";
|
||||||
|
import useListData from "@/assets/js/useListData.js";
|
||||||
|
import { useRouter } from "vue-router";
|
||||||
|
|
||||||
|
const router = useRouter();
|
||||||
|
const data = reactive({
|
||||||
|
pdfDialog: {
|
||||||
|
visible: false,
|
||||||
|
FILEPATH: "",
|
||||||
|
},
|
||||||
|
});
|
||||||
|
const { list, pagination, searchForm, fnGetData, fnResetPagination } =
|
||||||
|
useListData(getTrainingSituationList);
|
||||||
|
const buttonJurisdiction = await useButtonJurisdiction("traininginfo");
|
||||||
|
const fnPreviewPdf = (FILEPATH) => {
|
||||||
|
data.pdfDialog.visible = true;
|
||||||
|
data.pdfDialog.FILEPATH = FILEPATH;
|
||||||
|
};
|
||||||
|
const fnDelete = async (TRAININGINFO_ID) => {
|
||||||
|
await ElMessageBox.confirm("确认删除吗?", { type: "warning" });
|
||||||
|
await setTrainingSituationDelete({ TRAININGINFO_ID });
|
||||||
|
ElMessage.success("删除成功");
|
||||||
|
fnResetPagination();
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped></style>
|
||||||
|
|
@ -3,12 +3,12 @@
|
||||||
<el-card>
|
<el-card>
|
||||||
<el-form
|
<el-form
|
||||||
:model="searchForm"
|
:model="searchForm"
|
||||||
label-width="50px"
|
label-width="60px"
|
||||||
@submit.prevent="fnResetPagination"
|
@submit.prevent="fnResetPagination"
|
||||||
>
|
>
|
||||||
<el-row>
|
<el-row>
|
||||||
<el-col :span="6">
|
<el-col :span="6">
|
||||||
<el-form-item prop="KEYWORDS">
|
<el-form-item prop="KEYWORDS" label="关键字">
|
||||||
<el-input
|
<el-input
|
||||||
v-model="searchForm.KEYWORDS"
|
v-model="searchForm.KEYWORDS"
|
||||||
placeholder="请输入关键字"
|
placeholder="请输入关键字"
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue