Compare commits

..

3 Commits

Author SHA1 Message Date
wangyan 9c4f408256 搬运龙钢修复bug 2025-10-17 16:26:41 +08:00
wangyan 88d1e485f2 Merge remote-tracking branch 'origin/dev' into dev 2025-10-16 09:45:36 +08:00
wangyan dae8de2d5d feat(dahua): 更新大华视频控制器并优化动态库加载逻辑
- 将 VideoController重命名为 DahuaVideoController以明确功能归属
- 优化 LibraryLoad 类中的动态库加载逻辑,支持从资源和文件系统双重加载- 增强异常处理信息提示,便于调试和问题排查
- 添加 dynamic-lib-load.xml 配置文件,定义不同平台所需的动态库列表- 更新 SMB 配置信息,调整文件存储路径及访问地址- 注释掉前端视频播放相关代码,预留后续开发接口
2025-10-16 09:41:27 +08:00
44 changed files with 1398 additions and 404 deletions

View File

@ -14,7 +14,7 @@
<el-option <el-option
v-for="item in data.personList" v-for="item in data.personList"
:key="item.id" :key="item.id"
:label="item.name" :label="item.u_name"
:value="item.id" :value="item.id"
/> />
</el-select> </el-select>

View File

@ -218,8 +218,8 @@
<el-button <el-button
v-if=" v-if="
userStore.getUserInfo.ISMAIN === '1' && userStore.getUserInfo.ISMAIN === '1' &&
entrance === 'archive' && row.STEP_ID !== -1 &&
row.STEP_ID !== -1 row.STEP_ID !== 0
" "
type="danger" type="danger"
text text
@ -240,7 +240,7 @@
<check-list <check-list
v-if="data.checkListDialog.visible" v-if="data.checkListDialog.visible"
v-model:visible="data.checkListDialog.visible" v-model:visible="data.checkListDialog.visible"
v-model:foreign-key="data.checkListDialog.FOREIGN_KEY" v-model:foreignKey="data.checkListDialog.FOREIGN_KEY"
/> />
<layout-video <layout-video
v-model:visible="data.videoDialog.visible" v-model:visible="data.videoDialog.visible"

View File

@ -29,7 +29,7 @@
/> />
</el-form-item> </el-form-item>
<el-form-item label="工段负责人" prop="WORKSHOP_USER_ID"> <el-form-item label="工段负责人" prop="WORKSHOP_USER_ID">
<el-select v-model="form.WORKSHOP_USER_ID" filterable> <el-select v-model="form.WORKSHOP_USER_ID" filterable multiple>
<el-option <el-option
v-for="item in data.workshopUserList" v-for="item in data.workshopUserList"
:key="item.USER_ID" :key="item.USER_ID"
@ -45,7 +45,7 @@
/> />
</el-form-item> </el-form-item>
<el-form-item label="分厂贯标中心负责人" prop="LEADER_USER_ID"> <el-form-item label="分厂贯标中心负责人" prop="LEADER_USER_ID">
<el-select v-model="form.LEADER_USER_ID" filterable> <el-select v-model="form.LEADER_USER_ID" filterable multiple>
<el-option <el-option
v-for="item in data.leaderUserList" v-for="item in data.leaderUserList"
:key="item.USER_ID" :key="item.USER_ID"
@ -61,7 +61,7 @@
/> />
</el-form-item> </el-form-item>
<el-form-item label="分厂负责人" prop="AUDIT_USER_ID"> <el-form-item label="分厂负责人" prop="AUDIT_USER_ID">
<el-select v-model="form.AUDIT_USER_ID" filterable> <el-select v-model="form.AUDIT_USER_ID" filterable multiple>
<el-option <el-option
v-for="item in data.auditUserList" v-for="item in data.auditUserList"
:key="item.USER_ID" :key="item.USER_ID"
@ -78,7 +78,7 @@
/> />
</el-form-item> </el-form-item>
<el-form-item label="煤气防护站负责人" prop="APPROVE_USER_ID"> <el-form-item label="煤气防护站负责人" prop="APPROVE_USER_ID">
<el-select v-model="form.APPROVE_USER_ID" filterable> <el-select v-model="form.APPROVE_USER_ID" filterable multiple>
<el-option <el-option
v-for="item in data.approveUserList" v-for="item in data.approveUserList"
:key="item.USER_ID" :key="item.USER_ID"
@ -94,7 +94,7 @@
/> />
</el-form-item> </el-form-item>
<el-form-item label="总调度室负责人" prop="PROJECT_MANAGER_USER_ID"> <el-form-item label="总调度室负责人" prop="PROJECT_MANAGER_USER_ID">
<el-select v-model="form.PROJECT_MANAGER_USER_ID" filterable> <el-select v-model="form.PROJECT_MANAGER_USER_ID" filterable multiple>
<el-option <el-option
v-for="item in data.projectUserList" v-for="item in data.projectUserList"
:key="item.USER_ID" :key="item.USER_ID"
@ -151,23 +151,18 @@ const props = defineProps({
const emits = defineEmits(["update:visible", "update:form", "get-data"]); const emits = defineEmits(["update:visible", "update:form", "get-data"]);
const { visible, form } = useVModels(props, emits); const { visible, form } = useVModels(props, emits);
const fnHasLevel = async (rule, value, callback) => { const fnHasLevel = async () => {
if (value) { const resData = await getBlindBoardVerifyConfigurationUser({
const resData = await getBlindBoardVerifyConfigurationUser({ APPLY_DEPARTMENT_ID: form.value.APPLY_DEPARTMENT_ID,
APPLY_DEPARTMENT_ID: form.value.APPLY_DEPARTMENT_ID, });
}); if (resData?.pd?.APPLY_DEPARTMENT_ID)
if (resData?.pd?.APPLY_DEPARTMENT_ID) return ElMessage.error("该申请单位已存在");
callback(new Error("该申请部门已存在"));
else callback();
} else {
callback();
}
}; };
const rules = { const rules = {
APPLY_DEPARTMENT_ID: [ APPLY_DEPARTMENT_ID: [
{ required: true, message: "请选择申请部门", trigger: "change" }, { required: true, message: "请选择申请部门", trigger: "change" },
{ validator: fnHasLevel, trigger: "blur" }, // { validator: fnHasLevel, trigger: "blur" },
], ],
LEADER_DEPARTMENT_ID: [ LEADER_DEPARTMENT_ID: [
{ {
@ -222,24 +217,24 @@ const data = reactive({
const fnLeaderDepartmentChange = () => { const fnLeaderDepartmentChange = () => {
data.leaderUserList = []; data.leaderUserList = [];
form.value.LEADER_USER_ID = ""; form.value.LEADER_USER_ID = [];
}; };
const fnAuditDepartmentChange = () => { const fnAuditDepartmentChange = () => {
data.auditUserList = []; data.auditUserList = [];
form.value.AUDIT_USER_ID = ""; form.value.AUDIT_USER_ID = [];
}; };
const fnApproveDepartmentChange = () => { const fnApproveDepartmentChange = () => {
data.approveUserList = []; data.approveUserList = [];
form.value.APPROVE_USER_ID = ""; form.value.APPROVE_USER_ID = [];
}; };
const fnWorkshopDepartmentChange = () => { const fnWorkshopDepartmentChange = () => {
data.workshopUserList = []; data.workshopUserList = [];
form.value.WORKSHOP_USER_ID = ""; form.value.WORKSHOP_USER_ID = [];
}; };
const fnProjectDepartmentChange = () => { const fnProjectDepartmentChange = () => {
data.projectUserList = []; data.projectUserList = [];
form.value.PROJECT_MANAGER_USER_ID = ""; form.value.PROJECT_MANAGER_USER_ID = [];
}; };
const fnClose = () => { const fnClose = () => {
@ -252,11 +247,39 @@ const fnSubmit = debounce(
1000, 1000,
async () => { async () => {
const form = props.form; const form = props.form;
await useFormValidate(formRef);
const WORKSHOP_USER_ID = form.WORKSHOP_USER_ID
? form.WORKSHOP_USER_ID.join(",")
: "";
const LEADER_USER_ID = form.LEADER_USER_ID
? form.LEADER_USER_ID.join(",")
: "";
const AUDIT_USER_ID = form.AUDIT_USER_ID
? form.AUDIT_USER_ID.join(",")
: "";
const APPROVE_USER_ID = form.APPROVE_USER_ID
? form.APPROVE_USER_ID.join(",")
: "";
const PROJECT_MANAGER_USER_ID = form.PROJECT_MANAGER_USER_ID
? form.PROJECT_MANAGER_USER_ID.join(",")
: "";
const params = {
...form,
WORKSHOP_USER_ID,
LEADER_USER_ID,
AUDIT_USER_ID,
APPROVE_USER_ID,
PROJECT_MANAGER_USER_ID,
};
if (props.type === "add") { if (props.type === "add") {
await useFormValidate(formRef); const isCon = await fnHasLevel();
await setBlindBoardConfigurationUserAdd(form); if (!isCon) {
await setBlindBoardConfigurationUserAdd(params);
} else {
return false;
}
} else { } else {
await setBlindBoardConfigurationUserEdit(form); await setBlindBoardConfigurationUserEdit(params);
} }
ElMessage.success("提交成功"); ElMessage.success("提交成功");
fnClose(); fnClose();
@ -305,6 +328,7 @@ watchEffect(() => {
if (form.value.PROJECT_MANAGER_DEPARTMENT_ID) if (form.value.PROJECT_MANAGER_DEPARTMENT_ID)
fnGetProjectUser(form.value.PROJECT_MANAGER_DEPARTMENT_ID); fnGetProjectUser(form.value.PROJECT_MANAGER_DEPARTMENT_ID);
}); });
watchEffect(() => {});
</script> </script>
<style scoped lang="scss"></style> <style scoped lang="scss"></style>

View File

@ -169,16 +169,16 @@ const data = reactive({
CONFIGURATION_ID: "", CONFIGURATION_ID: "",
APPLY_DEPARTMENT_ID: "", APPLY_DEPARTMENT_ID: "",
WORK_LEVEL: "", WORK_LEVEL: "",
WORKSHOP_DEPARTMENT_ID: "",
WORKSHOP_USER_ID: [],
LEADER_DEPARTMENT_ID: "", LEADER_DEPARTMENT_ID: "",
LEADER_USER_ID: "", LEADER_USER_ID: [],
AUDIT_DEPARTMENT_ID: "", AUDIT_DEPARTMENT_ID: "",
AUDIT_USER_ID: "", AUDIT_USER_ID: [],
APPROVE_DEPARTMENT_ID: "", APPROVE_DEPARTMENT_ID: "",
APPROVE_USER_ID: "", APPROVE_USER_ID: [],
MONITOR_DEPARTMENT_ID: "",
MONITOR_USER_ID: "",
PROJECT_MANAGER_DEPARTMENT_ID: "", PROJECT_MANAGER_DEPARTMENT_ID: "",
PROJECT_MANAGER_USER_ID: "", PROJECT_MANAGER_USER_ID: [],
}, },
}, },
}); });
@ -228,6 +228,13 @@ const fnGoEdit = async (id) => {
const resData = await getBlindBoardConfigurationUserView({ const resData = await getBlindBoardConfigurationUserView({
CONFIGURATION_ID: id, CONFIGURATION_ID: id,
}); });
resData.pd.LEADER_USER_ID = resData.pd.LEADER_USER_ID.toString().split(",");
resData.pd.AUDIT_USER_ID = resData.pd.AUDIT_USER_ID.toString().split(",");
resData.pd.APPROVE_USER_ID = resData.pd.APPROVE_USER_ID.toString().split(",");
resData.pd.WORKSHOP_USER_ID =
resData.pd.WORKSHOP_USER_ID.toString().split(",");
resData.pd.PROJECT_MANAGER_USER_ID =
resData.pd.PROJECT_MANAGER_USER_ID.toString().split(",");
data.editDialog.form = resData.pd; data.editDialog.form = resData.pd;
}; };

View File

@ -224,8 +224,8 @@
<el-button <el-button
v-if=" v-if="
userStore.getUserInfo.ISMAIN === '1' && userStore.getUserInfo.ISMAIN === '1' &&
entrance === 'archive' && row.STEP_ID !== -1 &&
row.STEP_ID !== -1 row.STEP_ID !== 0
" "
type="danger" type="danger"
text text
@ -246,7 +246,7 @@
<check-list <check-list
v-if="data.checkListDialog.visible" v-if="data.checkListDialog.visible"
v-model:visible="data.checkListDialog.visible" v-model:visible="data.checkListDialog.visible"
v-model:foreign-key="data.checkListDialog.FOREIGN_KEY" v-model:foreignKey="data.checkListDialog.FOREIGN_KEY"
/> />
<layout-video <layout-video
v-model:visible="data.videoDialog.visible" v-model:visible="data.videoDialog.visible"

View File

@ -29,7 +29,7 @@
/> />
</el-form-item> </el-form-item>
<el-form-item label="工段负责人" prop="WORKSHOP_USER_ID"> <el-form-item label="工段负责人" prop="WORKSHOP_USER_ID">
<el-select v-model="form.WORKSHOP_USER_ID" filterable> <el-select v-model="form.WORKSHOP_USER_ID" filterable multiple>
<el-option <el-option
v-for="item in data.workshopUserList" v-for="item in data.workshopUserList"
:key="item.USER_ID" :key="item.USER_ID"
@ -45,7 +45,7 @@
/> />
</el-form-item> </el-form-item>
<el-form-item label="分厂贯标中心负责人" prop="LEADER_USER_ID"> <el-form-item label="分厂贯标中心负责人" prop="LEADER_USER_ID">
<el-select v-model="form.LEADER_USER_ID" filterable> <el-select v-model="form.LEADER_USER_ID" filterable multiple>
<el-option <el-option
v-for="item in data.leaderUserList" v-for="item in data.leaderUserList"
:key="item.USER_ID" :key="item.USER_ID"
@ -61,7 +61,7 @@
/> />
</el-form-item> </el-form-item>
<el-form-item label="分厂负责人" prop="AUDIT_USER_ID"> <el-form-item label="分厂负责人" prop="AUDIT_USER_ID">
<el-select v-model="form.AUDIT_USER_ID" filterable> <el-select v-model="form.AUDIT_USER_ID" filterable multiple>
<el-option <el-option
v-for="item in data.auditUserList" v-for="item in data.auditUserList"
:key="item.USER_ID" :key="item.USER_ID"
@ -78,7 +78,7 @@
/> />
</el-form-item> </el-form-item>
<el-form-item label="煤气防护站负责人" prop="APPROVE_USER_ID"> <el-form-item label="煤气防护站负责人" prop="APPROVE_USER_ID">
<el-select v-model="form.APPROVE_USER_ID" filterable> <el-select v-model="form.APPROVE_USER_ID" filterable multiple>
<el-option <el-option
v-for="item in data.approveUserList" v-for="item in data.approveUserList"
:key="item.USER_ID" :key="item.USER_ID"
@ -94,7 +94,7 @@
/> />
</el-form-item> </el-form-item>
<el-form-item label="生产部负责人" prop="SAFETY_USER_ID"> <el-form-item label="生产部负责人" prop="SAFETY_USER_ID">
<el-select v-model="form.SAFETY_USER_ID" filterable> <el-select v-model="form.SAFETY_USER_ID" filterable multiple>
<el-option <el-option
v-for="item in data.safetyUserList" v-for="item in data.safetyUserList"
:key="item.USER_ID" :key="item.USER_ID"
@ -110,7 +110,7 @@
/> />
</el-form-item> </el-form-item>
<el-form-item label="公司领导" prop="PROJECT_MANAGER_USER_ID"> <el-form-item label="公司领导" prop="PROJECT_MANAGER_USER_ID">
<el-select v-model="form.PROJECT_MANAGER_USER_ID" filterable> <el-select v-model="form.PROJECT_MANAGER_USER_ID" filterable multiple>
<el-option <el-option
v-for="item in data.projectUserList" v-for="item in data.projectUserList"
:key="item.USER_ID" :key="item.USER_ID"
@ -167,24 +167,18 @@ const props = defineProps({
const emits = defineEmits(["update:visible", "update:form", "get-data"]); const emits = defineEmits(["update:visible", "update:form", "get-data"]);
const { visible, form } = useVModels(props, emits); const { visible, form } = useVModels(props, emits);
const fnHasLevel = async (rule, value, callback) => { const fnHasLevel = async () => {
if (value) { const resData = await getConfinedspaceVerifyConfigurationUser({
const resData = await getConfinedspaceVerifyConfigurationUser({ APPLY_DEPARTMENT_ID: form.value.APPLY_DEPARTMENT_ID,
WORK_LEVEL: value, });
APPLY_DEPARTMENT_ID: form.value.APPLY_DEPARTMENT_ID, if (resData?.pd?.APPLY_DEPARTMENT_ID)
}); return ElMessage.error("该申请单位已存在");
if (resData?.pd?.APPLY_DEPARTMENT_ID)
callback(new Error("该申请部门已存在"));
else callback();
} else {
callback();
}
}; };
const rules = { const rules = {
APPLY_DEPARTMENT_ID: [ APPLY_DEPARTMENT_ID: [
{ required: true, message: "请选择申请部门", trigger: "change" }, { required: true, message: "请选择申请部门", trigger: "change" },
{ validator: fnHasLevel, trigger: "blur" }, // { validator: fnHasLevel, trigger: "blur" },
], ],
LEADER_DEPARTMENT_ID: [ LEADER_DEPARTMENT_ID: [
{ {
@ -213,10 +207,10 @@ const rules = {
{ required: true, message: "请选择安全处负责人", trigger: "change" }, { required: true, message: "请选择安全处负责人", trigger: "change" },
], ],
SAFETY_DEPARTMENT_ID: [ SAFETY_DEPARTMENT_ID: [
{ required: true, message: "请选择安全部", trigger: "change" }, { required: true, message: "请选择生产部", trigger: "change" },
], ],
SAFETY_USER_ID: [ SAFETY_USER_ID: [
{ required: true, message: "请选择安全部负责人", trigger: "change" }, { required: true, message: "请选择生产部负责人", trigger: "change" },
], ],
WORKSHOP_DEPARTMENT_ID: [ WORKSHOP_DEPARTMENT_ID: [
{ required: true, message: "请选择工段部门", trigger: "change" }, { required: true, message: "请选择工段部门", trigger: "change" },
@ -246,28 +240,28 @@ const data = reactive({
const fnLeaderDepartmentChange = () => { const fnLeaderDepartmentChange = () => {
data.leaderUserList = []; data.leaderUserList = [];
form.value.LEADER_USER_ID = ""; form.value.LEADER_USER_ID = [];
}; };
const fnAuditDepartmentChange = () => { const fnAuditDepartmentChange = () => {
data.auditUserList = []; data.auditUserList = [];
form.value.AUDIT_USER_ID = ""; form.value.AUDIT_USER_ID = [];
}; };
const fnApproveDepartmentChange = () => { const fnApproveDepartmentChange = () => {
data.approveUserList = []; data.approveUserList = [];
form.value.APPROVE_USER_ID = ""; form.value.APPROVE_USER_ID = [];
}; };
const fnSafetyDepartmentChange = () => { const fnSafetyDepartmentChange = () => {
data.safetyUserList = []; data.safetyUserList = [];
form.value.SAFETY_USER_ID = ""; form.value.SAFETY_USER_ID = [];
}; };
const fnWorkshopDepartmentChange = () => { const fnWorkshopDepartmentChange = () => {
data.workshopUserList = []; data.workshopUserList = [];
form.value.WORKSHOP_USER_ID = ""; form.value.WORKSHOP_USER_ID = [];
}; };
const fnProjectDepartmentChange = () => { const fnProjectDepartmentChange = () => {
data.projectUserList = []; data.projectUserList = [];
form.value.PROJECT_MANAGER_USER_ID = ""; form.value.PROJECT_MANAGER_USER_ID = [];
}; };
const fnClose = () => { const fnClose = () => {
@ -280,11 +274,43 @@ const fnSubmit = debounce(
1000, 1000,
async () => { async () => {
const form = props.form; const form = props.form;
await useFormValidate(formRef);
const LEADER_USER_ID = form.LEADER_USER_ID
? form.LEADER_USER_ID.join(",")
: "";
const AUDIT_USER_ID = form.AUDIT_USER_ID
? form.AUDIT_USER_ID.join(",")
: "";
const APPROVE_USER_ID = form.APPROVE_USER_ID
? form.APPROVE_USER_ID.join(",")
: "";
const WORKSHOP_USER_ID = form.WORKSHOP_USER_ID
? form.WORKSHOP_USER_ID.join(",")
: "";
const SAFETY_USER_ID = form.SAFETY_USER_ID
? form.SAFETY_USER_ID.join(",")
: "";
const PROJECT_MANAGER_USER_ID = form.PROJECT_MANAGER_USER_ID
? form.PROJECT_MANAGER_USER_ID.join(",")
: "";
const params = {
...form,
LEADER_USER_ID,
AUDIT_USER_ID,
APPROVE_USER_ID,
WORKSHOP_USER_ID,
SAFETY_USER_ID,
PROJECT_MANAGER_USER_ID,
};
if (props.type === "add") { if (props.type === "add") {
await useFormValidate(formRef); const isCon = await fnHasLevel();
await setConfinedspaceConfigurationUserAdd(form); if (!isCon) {
await setConfinedspaceConfigurationUserAdd(params);
} else {
return false;
}
} else { } else {
await setConfinedspaceConfigurationUserEdit(form); await setConfinedspaceConfigurationUserEdit(params);
} }
ElMessage.success("提交成功"); ElMessage.success("提交成功");
fnClose(); fnClose();
@ -339,6 +365,7 @@ watchEffect(() => {
if (form.value.SAFETY_DEPARTMENT_ID) if (form.value.SAFETY_DEPARTMENT_ID)
fnGetSafetyUser(form.value.SAFETY_DEPARTMENT_ID); fnGetSafetyUser(form.value.SAFETY_DEPARTMENT_ID);
}); });
watchEffect(() => {});
</script> </script>
<style scoped lang="scss"></style> <style scoped lang="scss"></style>

View File

@ -179,15 +179,17 @@ const data = reactive({
APPLY_DEPARTMENT_ID: "", APPLY_DEPARTMENT_ID: "",
WORK_LEVEL: "", WORK_LEVEL: "",
LEADER_DEPARTMENT_ID: "", LEADER_DEPARTMENT_ID: "",
LEADER_USER_ID: "", LEADER_USER_ID: [],
AUDIT_DEPARTMENT_ID: "", AUDIT_DEPARTMENT_ID: "",
AUDIT_USER_ID: "", AUDIT_USER_ID: [],
APPROVE_DEPARTMENT_ID: "", APPROVE_DEPARTMENT_ID: "",
APPROVE_USER_ID: "", APPROVE_USER_ID: [],
MONITOR_DEPARTMENT_ID: "", WORKSHOP_DEPARTMENT_ID: "",
MONITOR_USER_ID: "", WORKSHOP_USER_ID: [],
SAFETY_DEPARTMENT_ID: "",
SAFETY_USER_ID: [],
PROJECT_MANAGER_DEPARTMENT_ID: "", PROJECT_MANAGER_DEPARTMENT_ID: "",
PROJECT_MANAGER_USER_ID: "", PROJECT_MANAGER_USER_ID: [],
}, },
}, },
}); });
@ -237,6 +239,14 @@ const fnGoEdit = async (id) => {
const resData = await getConfinedspaceConfigurationUserView({ const resData = await getConfinedspaceConfigurationUserView({
CONFIGURATION_ID: id, CONFIGURATION_ID: id,
}); });
resData.pd.LEADER_USER_ID = resData.pd.LEADER_USER_ID.toString().split(",");
resData.pd.AUDIT_USER_ID = resData.pd.AUDIT_USER_ID.toString().split(",");
resData.pd.APPROVE_USER_ID = resData.pd.APPROVE_USER_ID.toString().split(",");
resData.pd.WORKSHOP_USER_ID =
resData.pd.WORKSHOP_USER_ID.toString().split(",");
resData.pd.SAFETY_USER_ID = resData.pd.SAFETY_USER_ID.toString().split(",");
resData.pd.PROJECT_MANAGER_USER_ID =
resData.pd.PROJECT_MANAGER_USER_ID.toString().split(",");
data.editDialog.form = resData.pd; data.editDialog.form = resData.pd;
}; };

View File

@ -91,7 +91,7 @@ import { ref } from "vue";
import { debounce } from "throttle-debounce"; import { debounce } from "throttle-debounce";
import useFormValidate from "@/assets/js/useFormValidate.js"; import useFormValidate from "@/assets/js/useFormValidate.js";
import { layoutFnGetInventoryLevel } from "@/assets/js/data_dictionary.js"; import { layoutFnGetInventoryLevel } from "@/assets/js/data_dictionary.js";
import LayoutDepartment from "@/components/department/index.vue"; import LayoutDepartment from "./department.vue";
import { useUserStore } from "@/pinia/user.js"; import { useUserStore } from "@/pinia/user.js";
import { import {
setDepartmentAdd, setDepartmentAdd,

View File

@ -0,0 +1,95 @@
<template>
<el-tree-select
ref="treeSelectRef"
v-model="modelValue"
:data="departmentTree"
:disabled="disabled"
node-key="id"
:props="{
children: 'nodes',
label: 'name',
}"
:render-after-expand="false"
accordion
:check-strictly="checkStrictly"
:clearable="clearable"
:show-checkbox="showCheckbox"
:multiple="multiple"
:collapse-tags="collapseTags"
@check="fnCheck"
/>
</template>
<script setup>
import { layoutFnGetDepartmentzTree } from "@/assets/js/data_dictionary";
import { useVModel } from "@vueuse/core";
import { ref, watch } from "vue";
const treeSelectRef = ref(null);
defineOptions({
name: "LayoutDepartment",
});
const props = defineProps({
modelValue: {
type: [String, Array],
required: true,
default: "",
},
checkStrictly: {
type: Boolean,
default: true,
},
showCheckbox: {
type: Boolean,
default: false,
},
disabled: {
type: Boolean,
default: false,
},
multiple: {
type: Boolean,
default: false,
},
collapseTags: {
type: Boolean,
default: false,
},
clearable: {
type: Boolean,
default: true,
},
rootDisabled: {
type: String,
default: "N",
},
});
const emits = defineEmits(["update:modelValue"]);
const modelValue = useVModel(props, "modelValue", emits);
// if (props.multiple) {
// modelValue.value = [];
// }
const departmentTree = await layoutFnGetDepartmentzTree({
rootDisabled: props.rootDisabled,
});
// modelValue
watch(
() => modelValue.value,
(newVal) => {
if (treeSelectRef.value && newVal && Array.isArray(newVal)) {
//
treeSelectRef.value.setCheckedKeys(newVal);
}
},
{ immediate: true } //
);
const fnCheck = () => {
if (props.showCheckbox && !props.checkStrictly) {
modelValue.value = treeSelectRef.value.getCheckedKeys();
}
};
</script>
<style scoped></style>

View File

@ -0,0 +1,200 @@
<template>
<el-dialog v-model="visible" title="告警预览" width="50%" @close="fnClose">
<el-scrollbar style="height: 600px">
<div
v-if="list.length > 0"
style="display: flex; flex-wrap: wrap; gap: 20px; margin-top: 10px"
>
<div
v-for="item in list"
:id="'_dialog' + item.PLC_ID"
:key="item.PLC_ID"
style="width: calc(20% - 20px); height: 190px"
/>
</div>
<div
v-else
style="
display: flex;
align-items: center;
justify-content: center;
height: 600px;
"
>
暂无报警设备
</div>
</el-scrollbar>
</el-dialog>
</template>
<script setup>
import { useVModel } from "@vueuse/core";
import * as echarts from "echarts";
import { nextTick, onMounted, watch } from "vue";
const props = defineProps({
visible: {
type: Boolean,
required: true,
},
list: {
type: Array,
required: true,
},
});
const emits = defineEmits(["update:visible"]);
const visible = useVModel(props, "visible", emits);
let myChartMap = {};
const fnInitEcharts = (data) => {
return new Promise((resolve) => {
// const normalColor = "rgb(255,255,255)";
// const alarmColor = "rgb(0,255,0)";
// const alarmColors = "rgb(0,0,255)";
// const normalColors = "rgb(255, 255, 0)";
// const assistantColors = "rgb(255,0,0)";
const assistantColor = "rgb(0,191,255)";
let myChart;
if (!myChartMap[`_dialog${data.PLC_ID}`]) {
myChart = echarts.init(document.querySelector(`#_dialog${data.PLC_ID}`));
} else {
myChart = myChartMap[`_dialog${data.PLC_ID}`];
}
const option = {
title: {
text: data.TARGET_PLACE.replace(/(.{20})/g, "$1\n"),
textStyle: {
fontSize: 12,
fontWeight: 400,
color: assistantColor,
lineHeight: 16,
},
left: "center",
top: "0",
},
series: [
{
type: "gauge",
name: "外层辅助",
radius: "86%",
center: ["50%", "62%"],
startAngle: "225",
endAngle: "-45",
splitNumber: "120",
pointer: { show: false },
detail: { show: false },
data: [{ value: 1 }],
title: { show: false },
axisLine: {
show: true,
lineStyle: { color: [[1, assistantColor]], width: 3 },
},
axisTick: { show: false },
splitLine: { show: false },
axisLabel: { show: false },
},
{
name: "内层数据刻度",
type: "gauge",
radius: "75%",
center: ["50%", "62%"],
axisLine: {
lineStyle: {
width: 10,
color: [
[23 / 200, "#FFFFFF"],
[50 / 200, "#00FF00"],
[100 / 200, "#0000FF"],
[160 / 200, "#FFFF00"],
[1, "#FF0000"],
// [23/200, normalColor],
// [0.50, alarmColor],
// [1.0, alarmColors],
// [1.60, normalColors],
// [2.00, assistantColors],
],
},
},
max: 200,
splitLine: { show: false },
axisTick: { show: false },
axisLabel: { show: false },
detail: {
show: true,
offsetCenter: ["0", "80%"],
fontSize: 20,
color: getColorByValue(data.CURRENT_VALUE),
// color: data.CURRENT_VALUE >= 24 ? alarmColor : normalColor,
},
itemStyle: {
// color: data.CURRENT_VALUE >= 24 ? alarmColor : normalColor,
color: getColorByValue(data.CURRENT_VALUE),
},
pointer: { width: 3, length: "95%" },
data: [{ value: data.CURRENT_VALUE }],
silent: false,
},
{
name: "最内层线",
type: "gauge",
radius: "50%",
center: ["50%", "62%"],
startAngle: 360,
endAngle: 0,
axisLine: { show: false, lineStyle: { opacity: 0 } },
splitLine: { show: false, lineStyle: { opacity: 0 } },
axisLabel: { show: false },
axisTick: {
length: 2,
splitNumber: 3,
lineStyle: { color: assistantColor, width: 2, type: "dashed" },
},
detail: { show: false },
pointer: { show: false },
},
],
};
myChart.setOption(option);
if (!myChartMap[`_dialog${data.PLC_ID}`]) {
myChartMap[`_dialog${data.PLC_ID}`] = myChart;
}
resolve();
});
};
onMounted(() => {
watch(
() => [props.list, visible.value],
async (value) => {
if (value[1]) {
await nextTick();
fnDisposeEcharts();
for (const item of value[0]) {
await fnInitEcharts(item);
}
}
}
);
});
const fnDisposeEcharts = () => {
for (const myChartListKey in myChartMap) {
myChartMap[myChartListKey].dispose();
}
myChartMap = {};
};
const fnClose = () => {
fnDisposeEcharts();
visible.value = false;
};
const getColorByValue = (value) => {
return value < 24
? "rgb(255, 255, 255)" //
: value <= 50
? "rgb(0, 255, 0)" // 绿
: value <= 100
? "rgb(0, 0, 255)" //
: value <= 160
? "rgb(255, 255, 0)" //
: "rgb(255, 0, 0)"; //
};
</script>
<style scoped lang="scss"></style>

View File

@ -1,33 +1,81 @@
<template> <template>
<div class="container"> <div class="container">
<div style="width: 300px"> <div style="width: 300px">
<el-input <div>
v-model="searchTextWait" <el-button
class="mb-10" size="small"
placeholder="输入搜索内容" style="
> margin-right: 10px;
<template #append> background-color: transparent;
<el-button :icon="Search" @click="fnSetSearch" /> border: 0;
</template> color: white;
</el-input> border-radius: 4px;
<el-tree padding: 8px 12px;
ref="treeRef" height: 36px;
node-key="label" margin-bottom: 10px;
accordion "
:data="treeData" @click="goBack"
:filter-node-method="fnFilterNode" >
:default-expanded-keys="[treeData.length > 0 ? treeData[0].label : '']" <el-icon><arrow-left /></el-icon>
@node-click="fnNodeClick" 返回
/> </el-button>
</div>
<div style="display: flex; align-items: center; margin-bottom: 10px">
<span
style="
display: inline-block;
padding: 8px 12px;
margin-bottom: 10px;
color: white;
font-size: 14px;
"
>安装地点</span
>
<el-input
v-model="searchTextWait"
class="mb-10"
placeholder="输入搜索安装地点"
style="flex: 1"
>
<template #append>
<el-button :icon="Search" @click="fnSetSearch" />
</template>
</el-input>
</div>
<div>
<el-tree
ref="treeRef"
node-key="label"
accordion
:data="treeData"
:filter-node-method="fnFilterNode"
:default-expanded-keys="defaultExpandedKeys"
@node-click="fnNodeClick"
/>
</div>
</div> </div>
<div style="flex: 1; display: flex; flex-wrap: wrap; gap: 20px"> <div style="flex: 1">
<div <div style="margin-bottom: 20px; padding: 0 20px">
v-for="item in list" <el-breadcrumb separator="/" style="margin-top: 10px">
:id="'_' + item.PLC_ID" <!-- 动态面包屑项 -->
:key="item.PLC_ID" <el-breadcrumb-item
style="width: calc(20% - 20px); height: 190px" v-for="(item, index) in breadcrumbItems"
@click="fnViewInfo(item)" :key="index"
/> style="padding: 0"
>
{{ item }}
</el-breadcrumb-item>
</el-breadcrumb>
</div>
<div style="display: flex; flex-wrap: wrap; gap: 20px; margin-top: 10px">
<div
v-for="item in list"
:id="'_' + item.PLC_ID"
:key="item.PLC_ID"
style="width: calc(20% - 20px); height: 190px"
@click="fnViewInfo(item)"
/>
</div>
</div> </div>
</div> </div>
<view-info <view-info
@ -36,6 +84,7 @@
v-model:visible="item.visible" v-model:visible="item.visible"
:item="item" :item="item"
/> />
<waring v-model:visible="waringDialog" :list="waringList" />
</template> </template>
<script setup> <script setup>
@ -45,7 +94,10 @@ import ViewInfo from "./components/view_info.vue";
import { getEquipmentInfo, getEquipmentTree } from "@/request/gas_alarm.js"; import { getEquipmentInfo, getEquipmentTree } from "@/request/gas_alarm.js";
import { useUserStore } from "@/pinia/user.js"; import { useUserStore } from "@/pinia/user.js";
import { useIntervalFn } from "@vueuse/core"; import { useIntervalFn } from "@vueuse/core";
import { Search } from "@element-plus/icons-vue"; import { Search, ArrowLeft } from "@element-plus/icons-vue";
import Waring from "./components/waring.vue";
import { ElNotification, ElBreadcrumb, ElBreadcrumbItem } from "element-plus";
const { pause, resume } = useIntervalFn( const { pause, resume } = useIntervalFn(
() => { () => {
fnGetData(); fnGetData();
@ -58,6 +110,9 @@ const treeRef = ref(null);
const treeData = ref([]); const treeData = ref([]);
const searchText = ref(""); const searchText = ref("");
const searchTextWait = ref(""); const searchTextWait = ref("");
const breadcrumbItems = ref([]);
const defaultExpandedKeys = ref([]); //
let isFirstLoad = true; //
const fnFilterNode = (value, data) => { const fnFilterNode = (value, data) => {
if (!value) return true; if (!value) return true;
return data.label.includes(value); return data.label.includes(value);
@ -65,6 +120,24 @@ const fnFilterNode = (value, data) => {
const fnNodeClick = (_data, { data, parent }) => { const fnNodeClick = (_data, { data, parent }) => {
searchTextWait.value = ""; searchTextWait.value = "";
searchText.value = ""; searchText.value = "";
//
const path = [];
const current = data;
//
path.unshift(current.label);
//
if (parent && parent.data) {
if (!parent.data.length) {
path.unshift(parent.data.label);
}
}
//
breadcrumbItems.value = path;
if (parent.parent) { if (parent.parent) {
equipmentInfoParams = { equipmentInfoParams = {
ORG: parent.data.label, ORG: parent.data.label,
@ -79,9 +152,16 @@ const fnNodeClick = (_data, { data, parent }) => {
fnDisposeEcharts(); fnDisposeEcharts();
pause(); pause();
resume(); resume();
// false
if (isFirstLoad) {
isFirstLoad = false;
}
}; };
const list = ref([]); const list = ref([]);
const waringList = ref([]);
const waringDialog = ref(false);
const dialog = ref([]); const dialog = ref([]);
let equipmentInfoParams = {}; let equipmentInfoParams = {};
onMounted(() => { onMounted(() => {
@ -100,15 +180,71 @@ const fnConversionTree = (data) => {
}); });
}; };
const fnGetTreeData = async () => { const fnGetTreeData = async () => {
const { root } = await getEquipmentTree({ const { root, npd } = await getEquipmentTree({
DEVICE_TYPE: "gdsyyhtbjq01", DEVICE_TYPE: "gdsyyhtbjq01",
CORPINFO_ID: userStore.getUserInfo.CORPINFO_ID, CORPINFO_ID: userStore.getUserInfo.CORPINFO_ID,
}); });
treeData.value = fnConversionTree(root.children); treeData.value = fnConversionTree(root.children);
equipmentInfoParams = {
ORG: treeData.value[0].label, // npd.ALLDEPTNAME
DEPARTMENT: treeData.value[0].children[0].label, if (npd && npd.ALLDEPTNAME) {
}; //
defaultExpandedKeys.value = [];
//
treeData.value.forEach((node) => {
if (npd.ALLDEPTNAME.includes(node.label)) {
defaultExpandedKeys.value.push(node.label);
}
});
}
//
if (isFirstLoad && treeData.value.length > 0) {
// defaultExpandedKeys 使
if (defaultExpandedKeys.value.length > 0) {
//
const targetNode = treeData.value.find(
(node) => node.label === defaultExpandedKeys.value[0]
);
//
equipmentInfoParams = {
ORG: defaultExpandedKeys.value[0],
DEPARTMENT:
targetNode && targetNode.children && targetNode.children.length > 0
? targetNode.children[0].label
: "",
};
breadcrumbItems.value = [
defaultExpandedKeys.value[0],
targetNode.children[0].label,
];
} else {
defaultExpandedKeys.value = [treeData.value[0].label];
// 使
equipmentInfoParams = {
ORG: treeData.value[0].label,
DEPARTMENT: treeData.value[0].children[0].label,
};
breadcrumbItems.value = [
treeData.value[0].label,
treeData.value[0].children[0].label,
];
}
} else {
equipmentInfoParams = {
ORG: treeData.value[0].label,
DEPARTMENT: treeData.value[0].children[0].label,
};
breadcrumbItems.value = [
treeData.value[0].label,
treeData.value[0].children[0].label,
];
}
resume(); resume();
}; };
let isPending = false; let isPending = false;
@ -123,11 +259,24 @@ const fnGetData = async () => {
loading: false, loading: false,
}); });
list.value = varList; list.value = varList;
waringList.value = varList.filter((item) => item.CURRENT_VALUE >= 24);
if (waringList.value.length > 0) {
ElNotification({
title: "警告",
message: `<div style="color:#606266">当前有${waringList.value.length}个设备处于报警状态</div>`,
type: "warning",
dangerouslyUseHTMLString: true,
duration: 5000,
onClick: () => {
waringDialog.value = true;
},
});
}
isPending = false; isPending = false;
await nextTick(); await nextTick();
list.value.forEach(async (item) => { for (const item of list.value) {
await fnInitEcharts(item); await fnInitEcharts(item);
}); }
}; };
let myChartMap = {}; let myChartMap = {};
const fnInitEcharts = (data) => { const fnInitEcharts = (data) => {
@ -186,11 +335,11 @@ const fnInitEcharts = (data) => {
lineStyle: { lineStyle: {
width: 10, width: 10,
color: [ color: [
[23/200, '#FFFFFF'], [23 / 200, "#FFFFFF"],
[50/200, '#00FF00'], [50 / 200, "#00FF00"],
[100/200, '#0000FF'], [100 / 200, "#0000FF"],
[160/200, '#FFFF00'], [160 / 200, "#FFFF00"],
[1, '#FF0000'] [1, "#FF0000"],
// [23/200, normalColor], // [23/200, normalColor],
// [0.50, alarmColor], // [0.50, alarmColor],
// [1.0, alarmColors], // [1.0, alarmColors],
@ -207,12 +356,12 @@ const fnInitEcharts = (data) => {
show: true, show: true,
offsetCenter: ["0", "80%"], offsetCenter: ["0", "80%"],
fontSize: 20, fontSize: 20,
color: getColorByValue(data.CURRENT_VALUE) color: getColorByValue(data.CURRENT_VALUE),
// color: data.CURRENT_VALUE >= 24 ? alarmColor : normalColor, // color: data.CURRENT_VALUE >= 24 ? alarmColor : normalColor,
}, },
itemStyle: { itemStyle: {
// color: data.CURRENT_VALUE >= 24 ? alarmColor : normalColor, // color: data.CURRENT_VALUE >= 24 ? alarmColor : normalColor,
color: getColorByValue(data.CURRENT_VALUE) color: getColorByValue(data.CURRENT_VALUE),
}, },
pointer: { width: 3, length: "95%" }, pointer: { width: 3, length: "95%" },
data: [{ value: data.CURRENT_VALUE }], data: [{ value: data.CURRENT_VALUE }],
@ -267,12 +416,21 @@ const fnDisposeEcharts = () => {
myChartMap = {}; myChartMap = {};
}; };
const getColorByValue = (value) => { const getColorByValue = (value) => {
return value < 24 ? 'rgb(255, 255, 255)' : // return value < 24
value <= 50 ? 'rgb(0, 255, 0)' : // 绿 ? "rgb(255, 255, 255)" //
value <= 100 ? 'rgb(0, 0, 255)' : // : value <= 50
value <= 160 ? 'rgb(255, 255, 0)' : // ? "rgb(0, 255, 0)" // 绿
'rgb(255, 0, 0)'; // : value <= 100
? "rgb(0, 0, 255)" //
: value <= 160
? "rgb(255, 255, 0)" //
: "rgb(255, 0, 0)"; //
}; };
const goBack = () => {
window.history.back();
};
onBeforeUnmount(() => { onBeforeUnmount(() => {
fnDisposeEcharts(); fnDisposeEcharts();
}); });

View File

@ -201,8 +201,8 @@
<el-button <el-button
v-if=" v-if="
userStore.getUserInfo.ISMAIN === '1' && userStore.getUserInfo.ISMAIN === '1' &&
entrance === 'archive' && row.STEP_ID !== -1 &&
row.STEP_ID !== -1 row.STEP_ID !== 0
" "
type="danger" type="danger"
text text
@ -223,7 +223,7 @@
<check-list <check-list
v-if="data.checkListDialog.visible" v-if="data.checkListDialog.visible"
v-model:visible="data.checkListDialog.visible" v-model:visible="data.checkListDialog.visible"
v-model:foreign-key="data.checkListDialog.FOREIGN_KEY" v-model:foreignKey="data.checkListDialog.FOREIGN_KEY"
/> />
<layout-video <layout-video
v-model:visible="data.videoDialog.visible" v-model:visible="data.videoDialog.visible"
@ -248,7 +248,8 @@ import {
getGroundbreakingList, getGroundbreakingList,
getTaskSetps, getTaskSetps,
getGroundbreakingFlow, getGroundbreakingFlow,
setEightWorkInvalid, getApplyDept setEightWorkInvalid,
getApplyDept,
} from "@/request/eight_work.js"; } from "@/request/eight_work.js";
import CheckList from "@/components/safety_briefing_checklist/index.vue"; import CheckList from "@/components/safety_briefing_checklist/index.vue";
import ShowPoints from "@/views/map_settings/assignment_ticket_area_settings/components/show_points.vue"; import ShowPoints from "@/views/map_settings/assignment_ticket_area_settings/components/show_points.vue";

View File

@ -22,22 +22,6 @@
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="分厂部门" prop="AUDIT_DEPARTMENT_ID">
<layout-department
v-model="form.AUDIT_DEPARTMENT_ID"
@update:model-value="fnAuditDepartmentChange"
/>
</el-form-item>
<el-form-item label="分厂负责人" prop="AUDIT_USER_ID">
<el-select v-model="form.AUDIT_USER_ID" filterable>
<el-option
v-for="item in data.auditUserList"
:key="item.USER_ID"
:label="item.NAME"
:value="item.USER_ID"
/>
</el-select>
</el-form-item>
<el-form-item <el-form-item
v-if="form.WORK_LEVEL === '4' || !form.WORK_LEVEL" v-if="form.WORK_LEVEL === '4' || !form.WORK_LEVEL"
label="所在单位" label="所在单位"
@ -53,7 +37,7 @@
label="所在单位负责人" label="所在单位负责人"
prop="SAFETY_USER_ID" prop="SAFETY_USER_ID"
> >
<el-select v-model="form.SAFETY_USER_ID" filterable> <el-select v-model="form.SAFETY_USER_ID" filterable multiple>
<el-option <el-option
v-for="item in data.safetyUserList" v-for="item in data.safetyUserList"
:key="item.USER_ID" :key="item.USER_ID"
@ -62,6 +46,22 @@
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="分厂部门" prop="AUDIT_DEPARTMENT_ID">
<layout-department
v-model="form.AUDIT_DEPARTMENT_ID"
@update:model-value="fnAuditDepartmentChange"
/>
</el-form-item>
<el-form-item label="分厂负责人" prop="AUDIT_USER_ID">
<el-select v-model="form.AUDIT_USER_ID" filterable multiple>
<el-option
v-for="item in data.auditUserList"
:key="item.USER_ID"
:label="item.NAME"
:value="item.USER_ID"
/>
</el-select>
</el-form-item>
</el-form> </el-form>
<template #footer> <template #footer>
<el-button @click="fnClose"> </el-button> <el-button @click="fnClose"> </el-button>
@ -110,23 +110,18 @@ const props = defineProps({
const emits = defineEmits(["update:visible", "update:form", "get-data"]); const emits = defineEmits(["update:visible", "update:form", "get-data"]);
const { visible, form } = useVModels(props, emits); const { visible, form } = useVModels(props, emits);
const fnHasLevel = async (rule, value, callback) => { const fnHasLevel = async () => {
if (value) { const resData = await getBreakGroundVerifyConfigurationUser({
const resData = await getBreakGroundVerifyConfigurationUser({ APPLY_DEPARTMENT_ID: form.value.APPLY_DEPARTMENT_ID,
APPLY_DEPARTMENT_ID: form.value.APPLY_DEPARTMENT_ID, });
}); if (resData?.pd?.APPLY_DEPARTMENT_ID)
if (resData?.pd?.APPLY_DEPARTMENT_ID) return ElMessage.error("该申请单位已存在");
callback(new Error("该申请部门已存在"));
else callback();
} else {
callback();
}
}; };
const rules = { const rules = {
APPLY_DEPARTMENT_ID: [ APPLY_DEPARTMENT_ID: [
{ required: true, message: "请选择申请部门", trigger: "change" }, { required: true, message: "请选择申请部门", trigger: "change" },
{ validator: fnHasLevel, trigger: "blur" }, // { validator: fnHasLevel, trigger: "blur" },
], ],
AUDIT_DEPARTMENT_ID: [ AUDIT_DEPARTMENT_ID: [
@ -163,12 +158,12 @@ const data = reactive({
const fnAuditDepartmentChange = () => { const fnAuditDepartmentChange = () => {
data.auditUserList = []; data.auditUserList = [];
form.value.AUDIT_USER_ID = ""; form.value.AUDIT_USER_ID = [];
}; };
const fnSafetyDepartmentChange = () => { const fnSafetyDepartmentChange = () => {
data.safetyUserList = []; data.safetyUserList = [];
form.value.SAFETY_USER_ID = ""; form.value.SAFETY_USER_ID = [];
}; };
const fnClose = () => { const fnClose = () => {
@ -181,11 +176,28 @@ const fnSubmit = debounce(
1000, 1000,
async () => { async () => {
const form = props.form; const form = props.form;
await useFormValidate(formRef);
const AUDIT_USER_ID = form.AUDIT_USER_ID
? form.AUDIT_USER_ID.join(",")
: "";
const SAFETY_USER_ID = form.SAFETY_USER_ID
? form.SAFETY_USER_ID.join(",")
: "";
const params = {
...form,
AUDIT_USER_ID,
SAFETY_USER_ID,
};
if (props.type === "add") { if (props.type === "add") {
await useFormValidate(formRef); const isCon = await fnHasLevel();
await setBreakGroundConfigurationUserAdd(form); if (!isCon) {
await setBreakGroundConfigurationUserAdd(params);
} else {
return false;
}
} else { } else {
await setBreakGroundConfigurationUserEdit(form); await setBreakGroundConfigurationUserEdit(params);
} }
ElMessage.success("提交成功"); ElMessage.success("提交成功");
fnClose(); fnClose();
@ -215,8 +227,8 @@ watchEffect(() => {
fnGetAuditUser(form.value.AUDIT_DEPARTMENT_ID); fnGetAuditUser(form.value.AUDIT_DEPARTMENT_ID);
if (form.value.SAFETY_DEPARTMENT_ID) if (form.value.SAFETY_DEPARTMENT_ID)
fnGetSafetyUser(form.value.SAFETY_DEPARTMENT_ID); fnGetSafetyUser(form.value.SAFETY_DEPARTMENT_ID);
}); });
watchEffect(() => {});
</script> </script>
<style scoped lang="scss"></style> <style scoped lang="scss"></style>

View File

@ -48,16 +48,6 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="APPLY_DEPARTMENT_NAME" label="申请单位" /> <el-table-column prop="APPLY_DEPARTMENT_NAME" label="申请单位" />
<el-table-column
prop="AUDIT_DEPARTMENT_NAME"
label="分厂部门"
width="150"
/>
<el-table-column
prop="AUDIT_USER_NAME"
label="分厂部门负责人"
width="150"
/>
<el-table-column <el-table-column
prop="SAFETY_DEPARTMENT_NAME" prop="SAFETY_DEPARTMENT_NAME"
label="水、电、汽、工艺、设备、消防、 安全管理等动土所在单位" label="水、电、汽、工艺、设备、消防、 安全管理等动土所在单位"
@ -68,6 +58,16 @@
label="水、电、汽、工艺、设备、消防、 安全管理等动土所在单位负责人" label="水、电、汽、工艺、设备、消防、 安全管理等动土所在单位负责人"
width="390" width="390"
/> />
<el-table-column
prop="AUDIT_DEPARTMENT_NAME"
label="分厂部门"
width="150"
/>
<el-table-column
prop="AUDIT_USER_NAME"
label="分厂部门负责人"
width="150"
/>
<el-table-column label="操作" align="center" width="240"> <el-table-column label="操作" align="center" width="240">
<template #default="{ row }"> <template #default="{ row }">
@ -138,9 +138,9 @@ const data = reactive({
CONFIGURATION_ID: "", CONFIGURATION_ID: "",
APPLY_DEPARTMENT_ID: "", APPLY_DEPARTMENT_ID: "",
AUDIT_DEPARTMENT_ID: "", AUDIT_DEPARTMENT_ID: "",
AUDIT_USER_ID: "", AUDIT_USER_ID: [],
SAFETY_DEPARTMENT_ID: "", SAFETY_DEPARTMENT_ID: "",
SAFETY_USER_ID: "", SAFETY_USER_ID: [],
}, },
}, },
}); });
@ -192,6 +192,8 @@ const fnGoEdit = async (id) => {
const resData = await getBreakGroundConfigurationUserView({ const resData = await getBreakGroundConfigurationUserView({
CONFIGURATION_ID: id, CONFIGURATION_ID: id,
}); });
resData.pd.AUDIT_USER_ID = resData.pd.AUDIT_USER_ID.toString().split(",");
resData.pd.SAFETY_USER_ID = resData.pd.SAFETY_USER_ID.toString().split(",");
data.editDialog.form = resData.pd; data.editDialog.form = resData.pd;
}; };

View File

@ -112,6 +112,7 @@ const fnSubmit = debounce(
...params, ...params,
// 2 // 2
SOURCE: "2", SOURCE: "2",
HAVESCHEME: 0,
RISK_UNIT: props.info.RISKUNITNAME, RISK_UNIT: props.info.RISKUNITNAME,
IDENTIFICATION: props.info.PARTSNAME, IDENTIFICATION: props.info.PARTSNAME,
RISK_DESCR: props.info.RISK_DESCR, RISK_DESCR: props.info.RISK_DESCR,

View File

@ -98,6 +98,7 @@ const fnSubmit = debounce(
...form.value, ...form.value,
STATE: "16", STATE: "16",
HAVESCHEME: 0, HAVESCHEME: 0,
IS_REBUILD: 0,
HIDDENTYPE1: form.value.HIDDENTYPE[0], HIDDENTYPE1: form.value.HIDDENTYPE[0],
HIDDENTYPE2: form.value.HIDDENTYPE[1], HIDDENTYPE2: form.value.HIDDENTYPE[1],
HIDDENTYPE3: form.value.HIDDENTYPE[2], HIDDENTYPE3: form.value.HIDDENTYPE[2],

View File

@ -11,6 +11,9 @@
<el-divider /> <el-divider />
<el-checkbox-group v-model="checkOptions" @change="fnCheckedChange"> <el-checkbox-group v-model="checkOptions" @change="fnCheckedChange">
<el-row> <el-row>
<el-col v-for="(item, index) in defaultOptions" :key="index" :span="4">
<el-checkbox :label="item" :value="item" />
</el-col>
<el-col v-for="(item, index) in options" :key="index" :span="4"> <el-col v-for="(item, index) in options" :key="index" :span="4">
<el-checkbox :label="item" :value="item" /> <el-checkbox :label="item" :value="item" />
</el-col> </el-col>
@ -71,7 +74,6 @@ const options = [
"检查内容", "检查内容",
"隐患级别", "隐患级别",
"隐患状态", "隐患状态",
"隐患部位",
"隐患发现部门", "隐患发现部门",
"发现人", "发现人",
"隐患确认部门", "隐患确认部门",
@ -98,12 +100,13 @@ const options = [
"验收时间", "验收时间",
"验收图片", "验收图片",
]; ];
const checkAll = ref(true); const checkAll = ref(false);
const isIndeterminate = ref(false); const isIndeterminate = ref(false);
const checkOptions = ref(options); const checkOptions = ref(defaultOptions);
const havePicture = ref(false); const havePicture = ref(false);
const fnCheckAllChange = (val) => { const fnCheckAllChange = (val) => {
checkOptions.value = val ? options : []; // defaultOptions+optionscheckOptions
checkOptions.value = val ? [...defaultOptions, ...options] : [];
isIndeterminate.value = false; isIndeterminate.value = false;
}; };
const fnCheckedChange = (value) => { const fnCheckedChange = (value) => {
@ -113,16 +116,15 @@ const fnCheckedChange = (value) => {
}; };
const fnClose = () => { const fnClose = () => {
visible.value = false; visible.value = false;
checkOptions.value = options; checkOptions.value = defaultOptions;
isIndeterminate.value = false; isIndeterminate.value = false;
checkAll.value = true; checkAll.value = false;
havePicture.value = false; havePicture.value = false;
}; };
const fnSubmit = debounce( const fnSubmit = debounce(
1000, 1000,
() => { () => {
checkOptions.value = [...defaultOptions, ...checkOptions.value]; checkOptions.value = [...checkOptions.value];
console.log(checkOptions.value);
let data = { let data = {
havePicture: 1, havePicture: 1,
ids: props.ids.join(","), ids: props.ids.join(","),

View File

@ -7,6 +7,18 @@
@submit.prevent="fnResetPaginationTransfer" @submit.prevent="fnResetPaginationTransfer"
> >
<el-row> <el-row>
<el-col :span="6">
<el-form-item label="隐患区域" prop="checkedIds">
<layout-department
v-model="searchForm.checkedIds"
show-checkbox
multiple
collapse-tags
:check-strictly="false"
root-disabled="Y"
/>
</el-form-item>
</el-col>
<el-col :span="6"> <el-col :span="6">
<el-form-item label="隐患描述" prop="KEYWORDS"> <el-form-item label="隐患描述" prop="KEYWORDS">
<el-input v-model="searchForm.KEYWORDS" /> <el-input v-model="searchForm.KEYWORDS" />
@ -113,19 +125,15 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="6"> <el-col :span="24">
<el-form-item label-width="10px"> <el-form-item label-width="10px" class="end">
<el-button type="primary" native-type="submit">搜索</el-button> <el-button type="primary" native-type="submit">搜索</el-button>
<el-button native-type="reset" @click="fnResetPaginationTransfer"> <el-button native-type="reset" @click="fnResetPaginationTransfer">
重置 重置
</el-button> </el-button>
<!-- <el-button type="success" @click="fnReport"> </el-button>-->
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label-width="10px" class="end">
<el-button @click="fnPrint"></el-button> <el-button @click="fnPrint"></el-button>
<el-button @click="fnExport"></el-button> <el-button @click="fnExport"></el-button>
<!-- <el-button type="success" @click="fnReport"> </el-button>-->
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
@ -203,7 +211,9 @@
/> />
<el-table-column label="是否合格" width="100"> <el-table-column label="是否合格" width="100">
<template #default="{ row }"> <template #default="{ row }">
<span v-if="row.CHECK_STATUS === '1'"> </span> <span v-if="row.CHECK_STATUS === '1' || row.STATE === '4'">
</span>
<span v-else> </span> <span v-else> </span>
</template> </template>
</el-table-column> </el-table-column>
@ -355,6 +365,7 @@ const fnGetDataTransfer = () => {
ENDTIME: searchForm.value.dates?.[1], ENDTIME: searchForm.value.dates?.[1],
HIDDEN_RECTIFICATION_DEPT_IDS: HIDDEN_RECTIFICATION_DEPT_IDS:
searchForm.value.HIDDEN_RECTIFICATION_DEPT_IDS?.join(","), searchForm.value.HIDDEN_RECTIFICATION_DEPT_IDS?.join(","),
checkedIds: searchForm.value.checkedIds?.join(","),
HIDDEN_FIND_DEPT_IDS: searchForm.value.HIDDEN_FIND_DEPT_IDS?.join(","), HIDDEN_FIND_DEPT_IDS: searchForm.value.HIDDEN_FIND_DEPT_IDS?.join(","),
HIDDEN_CONFIRM_DEPT_IDS: HIDDEN_CONFIRM_DEPT_IDS:
searchForm.value.HIDDEN_CONFIRM_DEPT_IDS?.join(","), searchForm.value.HIDDEN_CONFIRM_DEPT_IDS?.join(","),
@ -366,6 +377,7 @@ const fnResetPaginationTransfer = () => {
ENDTIME: searchForm.value.dates?.[1], ENDTIME: searchForm.value.dates?.[1],
HIDDEN_RECTIFICATION_DEPT_IDS: HIDDEN_RECTIFICATION_DEPT_IDS:
searchForm.value.HIDDEN_RECTIFICATION_DEPT_IDS?.join(","), searchForm.value.HIDDEN_RECTIFICATION_DEPT_IDS?.join(","),
checkedIds: searchForm.value.checkedIds?.join(","),
HIDDEN_FIND_DEPT_IDS: searchForm.value.HIDDEN_FIND_DEPT_IDS?.join(","), HIDDEN_FIND_DEPT_IDS: searchForm.value.HIDDEN_FIND_DEPT_IDS?.join(","),
HIDDEN_CONFIRM_DEPT_IDS: HIDDEN_CONFIRM_DEPT_IDS:
searchForm.value.HIDDEN_CONFIRM_DEPT_IDS?.join(","), searchForm.value.HIDDEN_CONFIRM_DEPT_IDS?.join(","),

View File

@ -57,7 +57,7 @@
/> />
<el-table-column <el-table-column
prop="SAFETY_USER_NAME" prop="SAFETY_USER_NAME"
label="安全部负责人" label="生产部负责人"
show-overflow-tooltip show-overflow-tooltip
/> />
<el-table-column <el-table-column
@ -122,7 +122,7 @@
<check-list <check-list
v-if="data.checkListDialog.visible" v-if="data.checkListDialog.visible"
v-model:visible="data.checkListDialog.visible" v-model:visible="data.checkListDialog.visible"
v-model:foreign-key="data.checkListDialog.FOREIGN_KEY" v-model:foreignKey="data.checkListDialog.FOREIGN_KEY"
/> />
</div> </div>
</template> </template>

View File

@ -109,7 +109,7 @@
/> />
<el-table-column <el-table-column
prop="SAFETY_USER_NAME" prop="SAFETY_USER_NAME"
label="安全部负责人" label="生产部负责人"
show-overflow-tooltip show-overflow-tooltip
/> />
<el-table-column <el-table-column
@ -208,8 +208,8 @@
<el-button <el-button
v-if=" v-if="
userStore.getUserInfo.ISMAIN === '1' && userStore.getUserInfo.ISMAIN === '1' &&
entrance === 'archive' && row.STEP_ID !== -1 &&
row.STEP_ID !== -1 row.STEP_ID !== 0
" "
type="danger" type="danger"
text text
@ -230,7 +230,7 @@
<check-list <check-list
v-if="data.checkListDialog.visible" v-if="data.checkListDialog.visible"
v-model:visible="data.checkListDialog.visible" v-model:visible="data.checkListDialog.visible"
v-model:foreign-key="data.checkListDialog.FOREIGN_KEY" v-model:foreignKey="data.checkListDialog.FOREIGN_KEY"
/> />
<layout-video <layout-video
v-model:visible="data.videoDialog.visible" v-model:visible="data.videoDialog.visible"

View File

@ -12,7 +12,11 @@
</thead> </thead>
<tr> <tr>
<td class="title">作业申请单位</td> <td class="title">作业申请单位</td>
<td>{{ data.info.APPLY_DEPARTMENT_NAME }}-{{data.info.APPLY_WORKSHOP_DEPARTMENT_NAME}}</td> <td>
{{ data.info.APPLY_DEPARTMENT_NAME }}-{{
data.info.APPLY_WORKSHOP_DEPARTMENT_NAME
}}
</td>
<td class="title">申请人</td> <td class="title">申请人</td>
<td>{{ data.info.APPLY_USER_NAME }}</td> <td>{{ data.info.APPLY_USER_NAME }}</td>
</tr> </tr>
@ -287,7 +291,7 @@
</tr> </tr>
<tr v-if="data.signs.SAFETY"> <tr v-if="data.signs.SAFETY">
<td colspan="10"> <td colspan="10">
<div>安全部意见{{ data.signs.SAFETY?.[0].DESCR }}</div> <div>生产部意见{{ data.signs.SAFETY?.[0].DESCR }}</div>
<div <div
v-for="(item, index) in data.signs.SAFETY?.[0].SIGN_TIME" v-for="(item, index) in data.signs.SAFETY?.[0].SIGN_TIME"
:key="index" :key="index"

View File

@ -23,7 +23,12 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="高处作业级别" prop="WORK_LEVEL"> <el-form-item label="高处作业级别" prop="WORK_LEVEL">
<el-select v-model="form.WORK_LEVEL" placeholder="请选择高处作业级别" :disabled="props.type === 'edit'"> <el-select
v-model="form.WORK_LEVEL"
placeholder="请选择高处作业级别"
:disabled="props.type === 'edit'"
@change="fnWorkLevelChange"
>
<el-option <el-option
v-for="item in data.levelList" v-for="item in data.levelList"
:key="item.id" :key="item.id"
@ -39,7 +44,7 @@
/> />
</el-form-item> </el-form-item>
<el-form-item label="工段负责人" prop="WORKSHOP_USER_ID"> <el-form-item label="工段负责人" prop="WORKSHOP_USER_ID">
<el-select v-model="form.WORKSHOP_USER_ID" filterable> <el-select v-model="form.WORKSHOP_USER_ID" filterable multiple>
<el-option <el-option
v-for="item in data.workshopUserList" v-for="item in data.workshopUserList"
:key="item.USER_ID" :key="item.USER_ID"
@ -54,8 +59,13 @@
@update:model-value="fnLeaderDepartmentChange" @update:model-value="fnLeaderDepartmentChange"
/> />
</el-form-item> </el-form-item>
<el-form-item label="分厂贯标中心负责人" prop="LEADER_USER_ID" filterable> <el-form-item
<el-select v-model="form.LEADER_USER_ID"> label="分厂贯标中心负责人"
prop="LEADER_USER_ID"
filterable
multiple
>
<el-select v-model="form.LEADER_USER_ID" filterable multiple>
<el-option <el-option
v-for="item in data.leaderUserList" v-for="item in data.leaderUserList"
:key="item.USER_ID" :key="item.USER_ID"
@ -89,7 +99,7 @@
label="分厂负责人" label="分厂负责人"
prop="AUDIT_USER_ID" prop="AUDIT_USER_ID"
> >
<el-select v-model="form.AUDIT_USER_ID" filterable> <el-select v-model="form.AUDIT_USER_ID" filterable multiple>
<el-option <el-option
v-for="item in data.auditUserList" v-for="item in data.auditUserList"
:key="item.USER_ID" :key="item.USER_ID"
@ -118,7 +128,7 @@
label="安全处负责人" label="安全处负责人"
prop="APPROVE_USER_ID" prop="APPROVE_USER_ID"
> >
<el-select v-model="form.APPROVE_USER_ID" filterable> <el-select v-model="form.APPROVE_USER_ID" filterable multiple>
<el-option <el-option
v-for="item in data.approveUserList" v-for="item in data.approveUserList"
:key="item.USER_ID" :key="item.USER_ID"
@ -129,7 +139,7 @@
</el-form-item> </el-form-item>
<el-form-item <el-form-item
v-if="form.WORK_LEVEL === '4' || !form.WORK_LEVEL" v-if="form.WORK_LEVEL === '4' || !form.WORK_LEVEL"
label="安全部" label="生产部"
prop="SAFETY_DEPARTMENT_ID" prop="SAFETY_DEPARTMENT_ID"
> >
<layout-department <layout-department
@ -139,10 +149,10 @@
</el-form-item> </el-form-item>
<el-form-item <el-form-item
v-if="form.WORK_LEVEL === '4' || !form.WORK_LEVEL" v-if="form.WORK_LEVEL === '4' || !form.WORK_LEVEL"
label="安全部负责人" label="生产部负责人"
prop="SAFETY_USER_ID" prop="SAFETY_USER_ID"
> >
<el-select v-model="form.SAFETY_USER_ID" filterable> <el-select v-model="form.SAFETY_USER_ID" filterable multiple>
<el-option <el-option
v-for="item in data.safetyUserList" v-for="item in data.safetyUserList"
:key="item.USER_ID" :key="item.USER_ID"
@ -199,17 +209,15 @@ const props = defineProps({
const emits = defineEmits(["update:visible", "update:form", "get-data"]); const emits = defineEmits(["update:visible", "update:form", "get-data"]);
const { visible, form } = useVModels(props, emits); const { visible, form } = useVModels(props, emits);
const fnHasLevel = async (rule, value, callback) => { const fnHasLevel = async (value) => {
if (value) { if (value) {
const resData = await getHighVerifyConfigurationUser({ const resData = await getHighVerifyConfigurationUser({
WORK_LEVEL: value, WORK_LEVEL: value,
APPLY_DEPARTMENT_ID: form.value.APPLY_DEPARTMENT_ID, APPLY_DEPARTMENT_ID: form.value.APPLY_DEPARTMENT_ID,
}); });
if (resData?.pd?.APPLY_DEPARTMENT_ID) if (resData?.pd?.APPLY_DEPARTMENT_ID)
callback(new Error("该申请单位和高处作业等级已存在")); return ElMessage.error("该申请单位和高处作业等级已存在");
else callback(); // callback(new Error(""));
} else {
callback();
} }
}; };
@ -218,8 +226,8 @@ const rules = {
{ required: true, message: "请选择申请部门", trigger: "change" }, { required: true, message: "请选择申请部门", trigger: "change" },
], ],
WORK_LEVEL: [ WORK_LEVEL: [
{ required: true, message: "请选择动火等级", trigger: "blur" }, { required: true, message: "请选择高处作业等级", trigger: "blur" },
{ validator: fnHasLevel, trigger: "blur" }, // { validator: fnHasLevel, trigger: "blur" },
], ],
LEADER_DEPARTMENT_ID: [ LEADER_DEPARTMENT_ID: [
{ {
@ -248,10 +256,10 @@ const rules = {
{ required: true, message: "请选择安全处负责人", trigger: "change" }, { required: true, message: "请选择安全处负责人", trigger: "change" },
], ],
SAFETY_DEPARTMENT_ID: [ SAFETY_DEPARTMENT_ID: [
{ required: true, message: "请选择安全部", trigger: "change" }, { required: true, message: "请选择生产部", trigger: "change" },
], ],
SAFETY_USER_ID: [ SAFETY_USER_ID: [
{ required: true, message: "请选择安全部负责人", trigger: "change" }, { required: true, message: "请选择生产部负责人", trigger: "change" },
], ],
WORKSHOP_DEPARTMENT_ID: [ WORKSHOP_DEPARTMENT_ID: [
{ required: true, message: "请选择工段部门", trigger: "change" }, { required: true, message: "请选择工段部门", trigger: "change" },
@ -292,23 +300,23 @@ const data = reactive({
const fnLeaderDepartmentChange = () => { const fnLeaderDepartmentChange = () => {
data.leaderUserList = []; data.leaderUserList = [];
form.value.LEADER_USER_ID = ""; form.value.LEADER_USER_ID = [];
}; };
const fnAuditDepartmentChange = () => { const fnAuditDepartmentChange = () => {
data.auditUserList = []; data.auditUserList = [];
form.value.AUDIT_USER_ID = ""; form.value.AUDIT_USER_ID = [];
}; };
const fnApproveDepartmentChange = () => { const fnApproveDepartmentChange = () => {
data.approveUserList = []; data.approveUserList = [];
form.value.APPROVE_USER_ID = ""; form.value.APPROVE_USER_ID = [];
}; };
const fnSafetyDepartmentChange = () => { const fnSafetyDepartmentChange = () => {
data.safetyUserList = []; data.safetyUserList = [];
form.value.SAFETY_USER_ID = ""; form.value.SAFETY_USER_ID = [];
}; };
const fnWorkshopDepartmentChange = () => { const fnWorkshopDepartmentChange = () => {
data.workshopUserList = []; data.workshopUserList = [];
form.value.WORKSHOP_USER_ID = ""; form.value.WORKSHOP_USER_ID = [];
}; };
const fnClose = () => { const fnClose = () => {
@ -321,11 +329,32 @@ const fnSubmit = debounce(
1000, 1000,
async () => { async () => {
const form = props.form; const form = props.form;
// if (props.type === "add") {
// await fnHasLevel(form.WORK_LEVEL);
// }
await useFormValidate(formRef);
const LEADER_USER_ID = form.LEADER_USER_ID.join(",");
const AUDIT_USER_ID = form.AUDIT_USER_ID.join(",");
const APPROVE_USER_ID = form.APPROVE_USER_ID.join(",");
const SAFETY_USER_ID = form.SAFETY_USER_ID.join(",");
const WORKSHOP_USER_ID = form.WORKSHOP_USER_ID.join(",");
const params = {
...form,
LEADER_USER_ID,
AUDIT_USER_ID,
APPROVE_USER_ID,
SAFETY_USER_ID,
WORKSHOP_USER_ID,
};
if (props.type === "add") { if (props.type === "add") {
await useFormValidate(formRef); const isCon = await fnHasLevel(form.WORK_LEVEL);
await setHighConfigurationUserAdd(form); if (!isCon) {
await setHighConfigurationUserAdd(params);
} else {
return false;
}
} else { } else {
await setHighConfigurationUserEdit(form); await setHighConfigurationUserEdit(params);
} }
ElMessage.success("提交成功"); ElMessage.success("提交成功");
fnClose(); fnClose();
@ -374,6 +403,25 @@ watchEffect(() => {
if (form.value.WORKSHOP_DEPARTMENT_ID) if (form.value.WORKSHOP_DEPARTMENT_ID)
fnGetWorkshopUser(form.value.WORKSHOP_DEPARTMENT_ID); fnGetWorkshopUser(form.value.WORKSHOP_DEPARTMENT_ID);
}); });
const fnWorkLevelChange = () => {
data.leaderUserList = [];
form.value.LEADER_DEPARTMENT_ID = "";
form.value.LEADER_USER_ID = [];
data.auditUserList = [];
form.value.AUDIT_DEPARTMENT_ID = "";
form.value.AUDIT_USER_ID = [];
data.approveUserList = [];
form.value.APPROVE_DEPARTMENT_ID = "";
form.value.APPROVE_USER_ID = [];
data.safetyUserList = [];
form.value.SAFETY_DEPARTMENT_ID = "";
form.value.SAFETY_USER_ID = [];
data.workshopUserList = [];
form.value.WORKSHOP_DEPARTMENT_ID = "";
form.value.WORKSHOP_USER_ID = [];
};
watchEffect(() => {});
</script> </script>
<style scoped lang="scss"></style> <style scoped lang="scss"></style>

View File

@ -99,12 +99,12 @@
/> />
<el-table-column <el-table-column
prop="SAFETY_DEPARTMENT_NAME" prop="SAFETY_DEPARTMENT_NAME"
label="安全部" label="生产部"
width="100" width="100"
/> />
<el-table-column <el-table-column
prop="SAFETY_USER_NAME" prop="SAFETY_USER_NAME"
label="安全部负责人" label="生产部负责人"
width="100" width="100"
/> />
@ -178,15 +178,15 @@ const data = reactive({
APPLY_DEPARTMENT_ID: "", APPLY_DEPARTMENT_ID: "",
WORK_LEVEL: "", WORK_LEVEL: "",
LEADER_DEPARTMENT_ID: "", LEADER_DEPARTMENT_ID: "",
LEADER_USER_ID: "", LEADER_USER_ID: [],
AUDIT_DEPARTMENT_ID: "", AUDIT_DEPARTMENT_ID: "",
AUDIT_USER_ID: "", AUDIT_USER_ID: [],
APPROVE_DEPARTMENT_ID: "", APPROVE_DEPARTMENT_ID: "",
APPROVE_USER_ID: "", APPROVE_USER_ID: [],
SAFETY_DEPARTMENT_ID: "", SAFETY_DEPARTMENT_ID: "",
SAFETY_USER_ID: "", SAFETY_USER_ID: [],
WORKSHOP_DEPARTMENT_ID: "", WORKSHOP_DEPARTMENT_ID: "",
WORKSHOP_USER_ID: "", WORKSHOP_USER_ID: [],
}, },
}, },
}); });
@ -236,6 +236,12 @@ const fnGoEdit = async (id) => {
const resData = await getHighConfigurationUserView({ const resData = await getHighConfigurationUserView({
CONFIGURATION_ID: id, CONFIGURATION_ID: id,
}); });
resData.pd.WORKSHOP_USER_ID =
resData.pd.WORKSHOP_USER_ID.toString().split(",");
resData.pd.LEADER_USER_ID = resData.pd.LEADER_USER_ID.toString().split(",");
resData.pd.AUDIT_USER_ID = resData.pd.AUDIT_USER_ID.toString().split(",");
resData.pd.APPROVE_USER_ID = resData.pd.APPROVE_USER_ID.toString().split(",");
resData.pd.SAFETY_USER_ID = resData.pd.SAFETY_USER_ID.toString().split(",");
data.editDialog.form = resData.pd; data.editDialog.form = resData.pd;
}; };

View File

@ -60,7 +60,7 @@
/> />
<el-table-column <el-table-column
prop="SAFETY_USER_NAME" prop="SAFETY_USER_NAME"
label="安全部负责人" label="生产部负责人"
width="100" width="100"
/> />
<el-table-column prop="ACCEPT_USER_NAME" label="验收部门负责人" /> <el-table-column prop="ACCEPT_USER_NAME" label="验收部门负责人" />
@ -123,7 +123,7 @@
<check-list <check-list
v-if="data.checkListDialog.visible" v-if="data.checkListDialog.visible"
v-model:visible="data.checkListDialog.visible" v-model:visible="data.checkListDialog.visible"
v-model:foreign-key="data.checkListDialog.FOREIGN_KEY" v-model:foreignKey="data.checkListDialog.FOREIGN_KEY"
/> />
</div> </div>
</template> </template>

View File

@ -112,7 +112,7 @@
/> />
<el-table-column <el-table-column
prop="SAFETY_USER_NAME" prop="SAFETY_USER_NAME"
label="安全部负责人" label="生产部负责人"
width="100" width="100"
/> />
<el-table-column prop="ACCEPT_USER_NAME" label="验收部门负责人" /> <el-table-column prop="ACCEPT_USER_NAME" label="验收部门负责人" />
@ -207,8 +207,8 @@
<el-button <el-button
v-if=" v-if="
userStore.getUserInfo.ISMAIN === '1' && userStore.getUserInfo.ISMAIN === '1' &&
entrance === 'archive' && row.STEP_ID !== -1 &&
row.STEP_ID !== -1 row.STEP_ID !== 0
" "
type="danger" type="danger"
text text
@ -229,7 +229,7 @@
<check-list <check-list
v-if="data.checkListDialog.visible" v-if="data.checkListDialog.visible"
v-model:visible="data.checkListDialog.visible" v-model:visible="data.checkListDialog.visible"
v-model:foreign-key="data.checkListDialog.FOREIGN_KEY" v-model:foreignKey="data.checkListDialog.FOREIGN_KEY"
/> />
<layout-video <layout-video
v-model:visible="data.videoDialog.visible" v-model:visible="data.videoDialog.visible"
@ -254,7 +254,8 @@ import {
getHoistingList, getHoistingList,
getTaskSetps, getTaskSetps,
getHoistingFlow, getHoistingFlow,
setEightWorkInvalid, getApplyDept setEightWorkInvalid,
getApplyDept,
} from "@/request/eight_work.js"; } from "@/request/eight_work.js";
import CheckList from "@/components/safety_briefing_checklist/index.vue"; import CheckList from "@/components/safety_briefing_checklist/index.vue";
import ShowPoints from "@/views/map_settings/assignment_ticket_area_settings/components/show_points.vue"; import ShowPoints from "@/views/map_settings/assignment_ticket_area_settings/components/show_points.vue";

View File

@ -12,7 +12,11 @@
</thead> </thead>
<tr> <tr>
<td class="title">作业申请单位</td> <td class="title">作业申请单位</td>
<td>{{ data.info.APPLY_DEPARTMENT_NAME }}-{{data.info.APPLY_WORKSHOP_DEPARTMENT_NAME}}</td> <td>
{{ data.info.APPLY_DEPARTMENT_NAME }}-{{
data.info.APPLY_WORKSHOP_DEPARTMENT_NAME
}}
</td>
<td class="title">作业单位</td> <td class="title">作业单位</td>
<td>{{ data.info.LEADER_DEPARTMENT_NAME }}</td> <td>{{ data.info.LEADER_DEPARTMENT_NAME }}</td>
<td class="title">作业申请时间</td> <td class="title">作业申请时间</td>
@ -315,7 +319,7 @@
</tr> </tr>
<tr v-if="data.signs.SAFETY"> <tr v-if="data.signs.SAFETY">
<td colspan="10"> <td colspan="10">
<div>安全部意见{{ data.signs.SAFETY?.[0].DESCR }}</div> <div>生产部意见{{ data.signs.SAFETY?.[0].DESCR }}</div>
<div <div
v-for="(item, index) in data.signs.SAFETY?.[0].SIGN_TIME" v-for="(item, index) in data.signs.SAFETY?.[0].SIGN_TIME"
:key="index" :key="index"

View File

@ -23,7 +23,12 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="作业级别" prop="WORK_LEVEL"> <el-form-item label="作业级别" prop="WORK_LEVEL">
<el-select v-model="form.WORK_LEVEL" placeholder="请选择作业级别" :disabled="props.type === 'edit'"> <el-select
v-model="form.WORK_LEVEL"
placeholder="请选择作业级别"
:disabled="props.type === 'edit'"
@change="fnWorkLevelChange"
>
<el-option <el-option
v-for="item in data.levelList" v-for="item in data.levelList"
:key="item.id" :key="item.id"
@ -38,8 +43,13 @@
@update:model-value="fnWorkshopDepartmentChange" @update:model-value="fnWorkshopDepartmentChange"
/> />
</el-form-item> </el-form-item>
<el-form-item label="工段负责人" prop="WORKSHOP_USER_ID" filterable> <el-form-item
<el-select v-model="form.WORKSHOP_USER_ID"> label="工段负责人"
prop="WORKSHOP_USER_ID"
filterable
multiple
>
<el-select v-model="form.WORKSHOP_USER_ID" filterable multiple>
<el-option <el-option
v-for="item in data.workshopUserList" v-for="item in data.workshopUserList"
:key="item.USER_ID" :key="item.USER_ID"
@ -54,8 +64,13 @@
@update:model-value="fnLeaderDepartmentChange" @update:model-value="fnLeaderDepartmentChange"
/> />
</el-form-item> </el-form-item>
<el-form-item label="分厂贯标中心负责人" prop="LEADER_USER_ID" filterable> <el-form-item
<el-select v-model="form.LEADER_USER_ID"> label="分厂贯标中心负责人"
prop="LEADER_USER_ID"
filterable
multiple
>
<el-select v-model="form.LEADER_USER_ID" filterable multiple>
<el-option <el-option
v-for="item in data.leaderUserList" v-for="item in data.leaderUserList"
:key="item.USER_ID" :key="item.USER_ID"
@ -70,8 +85,8 @@
@update:model-value="fnAuditDepartmentChange" @update:model-value="fnAuditDepartmentChange"
/> />
</el-form-item> </el-form-item>
<el-form-item label="分厂负责人" prop="AUDIT_USER_ID" filterable> <el-form-item label="分厂负责人" prop="AUDIT_USER_ID">
<el-select v-model="form.AUDIT_USER_ID"> <el-select v-model="form.AUDIT_USER_ID" filterable multiple>
<el-option <el-option
v-for="item in data.auditUserList" v-for="item in data.auditUserList"
:key="item.USER_ID" :key="item.USER_ID"
@ -96,7 +111,7 @@
label="安全处负责人" label="安全处负责人"
prop="APPROVE_USER_ID" prop="APPROVE_USER_ID"
> >
<el-select v-model="form.APPROVE_USER_ID" filterable> <el-select v-model="form.APPROVE_USER_ID" filterable multiple>
<el-option <el-option
v-for="item in data.approveUserList" v-for="item in data.approveUserList"
:key="item.USER_ID" :key="item.USER_ID"
@ -107,7 +122,7 @@
</el-form-item> </el-form-item>
<el-form-item <el-form-item
v-if="form.WORK_LEVEL === '1' || !form.WORK_LEVEL" v-if="form.WORK_LEVEL === '1' || !form.WORK_LEVEL"
label="安全部" label="生产部"
prop="SAFETY_DEPARTMENT_ID" prop="SAFETY_DEPARTMENT_ID"
> >
<layout-department <layout-department
@ -117,10 +132,10 @@
</el-form-item> </el-form-item>
<el-form-item <el-form-item
v-if="form.WORK_LEVEL === '1' || !form.WORK_LEVEL" v-if="form.WORK_LEVEL === '1' || !form.WORK_LEVEL"
label="安全部负责人" label="生产部负责人"
prop="SAFETY_USER_ID" prop="SAFETY_USER_ID"
> >
<el-select v-model="form.SAFETY_USER_ID" filterable> <el-select v-model="form.SAFETY_USER_ID" filterable multiple>
<el-option <el-option
v-for="item in data.safetyUserList" v-for="item in data.safetyUserList"
:key="item.USER_ID" :key="item.USER_ID"
@ -177,17 +192,14 @@ const props = defineProps({
const emits = defineEmits(["update:visible", "update:form", "get-data"]); const emits = defineEmits(["update:visible", "update:form", "get-data"]);
const { visible, form } = useVModels(props, emits); const { visible, form } = useVModels(props, emits);
const fnHasLevel = async (rule, value, callback) => { const fnHasLevel = async (value) => {
if (value) { if (value) {
const resData = await getHoistingVerifyConfigurationUser({ const resData = await getHoistingVerifyConfigurationUser({
WORK_LEVEL: value, WORK_LEVEL: value,
APPLY_DEPARTMENT_ID: form.value.APPLY_DEPARTMENT_ID, APPLY_DEPARTMENT_ID: form.value.APPLY_DEPARTMENT_ID,
}); });
if (resData?.pd?.APPLY_DEPARTMENT_ID) if (resData?.pd?.APPLY_DEPARTMENT_ID)
callback(new Error("该申请单位和作业等级已存在")); return ElMessage.error("该申请单位和吊装作业等级已存在");
else callback();
} else {
callback();
} }
}; };
@ -197,7 +209,7 @@ const rules = {
], ],
WORK_LEVEL: [ WORK_LEVEL: [
{ required: true, message: "请选择作业等级", trigger: "blur" }, { required: true, message: "请选择作业等级", trigger: "blur" },
{ validator: fnHasLevel, trigger: "blur" }, // { validator: fnHasLevel, trigger: "blur" },
], ],
LEADER_DEPARTMENT_ID: [ LEADER_DEPARTMENT_ID: [
{ {
@ -226,10 +238,10 @@ const rules = {
{ required: true, message: "请选择安全处负责人", trigger: "change" }, { required: true, message: "请选择安全处负责人", trigger: "change" },
], ],
SAFETY_DEPARTMENT_ID: [ SAFETY_DEPARTMENT_ID: [
{ required: true, message: "请选择安全部", trigger: "change" }, { required: true, message: "请选择生产部", trigger: "change" },
], ],
SAFETY_USER_ID: [ SAFETY_USER_ID: [
{ required: true, message: "请选择安全部负责人", trigger: "change" }, { required: true, message: "请选择生产部负责人", trigger: "change" },
], ],
WORKSHOP_DEPARTMENT_ID: [ WORKSHOP_DEPARTMENT_ID: [
{ required: true, message: "请选择工段部门", trigger: "change" }, { required: true, message: "请选择工段部门", trigger: "change" },
@ -266,23 +278,41 @@ const data = reactive({
const fnLeaderDepartmentChange = () => { const fnLeaderDepartmentChange = () => {
data.leaderUserList = []; data.leaderUserList = [];
form.value.LEADER_USER_ID = ""; form.value.LEADER_USER_ID = [];
}; };
const fnAuditDepartmentChange = () => { const fnAuditDepartmentChange = () => {
data.auditUserList = []; data.auditUserList = [];
form.value.AUDIT_USER_ID = ""; form.value.AUDIT_USER_ID = [];
}; };
const fnApproveDepartmentChange = () => { const fnApproveDepartmentChange = () => {
data.approveUserList = []; data.approveUserList = [];
form.value.APPROVE_USER_ID = ""; form.value.APPROVE_USER_ID = [];
}; };
const fnSafetyDepartmentChange = () => { const fnSafetyDepartmentChange = () => {
data.safetyUserList = []; data.safetyUserList = [];
form.value.SAFETY_USER_ID = ""; form.value.SAFETY_USER_ID = [];
}; };
const fnWorkshopDepartmentChange = () => { const fnWorkshopDepartmentChange = () => {
data.workshopUserList = []; data.workshopUserList = [];
form.value.WORKSHOP_USER_ID = ""; form.value.WORKSHOP_USER_ID = [];
};
const fnWorkLevelChange = () => {
data.leaderUserList = [];
form.value.LEADER_DEPARTMENT_ID = "";
form.value.LEADER_USER_ID = [];
data.auditUserList = [];
form.value.AUDIT_DEPARTMENT_ID = "";
form.value.AUDIT_USER_ID = [];
data.approveUserList = [];
form.value.APPROVE_DEPARTMENT_ID = "";
form.value.APPROVE_USER_ID = [];
data.safetyUserList = [];
form.value.SAFETY_DEPARTMENT_ID = "";
form.value.SAFETY_USER_ID = [];
data.workshopUserList = [];
form.value.WORKSHOP_DEPARTMENT_ID = "";
form.value.WORKSHOP_USER_ID = [];
}; };
const fnClose = () => { const fnClose = () => {
@ -295,11 +325,29 @@ const fnSubmit = debounce(
1000, 1000,
async () => { async () => {
const form = props.form; const form = props.form;
await useFormValidate(formRef);
const LEADER_USER_ID = form.LEADER_USER_ID.join(",");
const AUDIT_USER_ID = form.AUDIT_USER_ID.join(",");
const APPROVE_USER_ID = form.APPROVE_USER_ID.join(",");
const SAFETY_USER_ID = form.SAFETY_USER_ID.join(",");
const WORKSHOP_USER_ID = form.WORKSHOP_USER_ID.join(",");
const params = {
...form,
LEADER_USER_ID,
AUDIT_USER_ID,
APPROVE_USER_ID,
SAFETY_USER_ID,
WORKSHOP_USER_ID,
};
if (props.type === "add") { if (props.type === "add") {
await useFormValidate(formRef); const isCon = await fnHasLevel(form.WORK_LEVEL);
await setHoistingConfigurationUserAdd(form); if (!isCon) {
await setHoistingConfigurationUserAdd(params);
} else {
return false;
}
} else { } else {
await setHoistingConfigurationUserEdit(form); await setHoistingConfigurationUserEdit(params);
} }
ElMessage.success("提交成功"); ElMessage.success("提交成功");
fnClose(); fnClose();

View File

@ -98,12 +98,12 @@
/> />
<el-table-column <el-table-column
prop="SAFETY_DEPARTMENT_NAME" prop="SAFETY_DEPARTMENT_NAME"
label="安全部" label="生产部"
width="100" width="100"
/> />
<el-table-column <el-table-column
prop="SAFETY_USER_NAME" prop="SAFETY_USER_NAME"
label="安全部负责人" label="生产部负责人"
width="100" width="100"
/> />
@ -162,7 +162,7 @@ import {
getHoistingConfigurationUserView, getHoistingConfigurationUserView,
setHoistingConfigurationUserDelete, setHoistingConfigurationUserDelete,
setHoistingConfigurationUserDeleteAll, setHoistingConfigurationUserDeleteAll,
setHoistingConfigurationUserList setHoistingConfigurationUserList,
} from "@/request/eight_work.js"; } from "@/request/eight_work.js";
const { list, pagination, searchForm, fnGetData, fnResetPagination, tableRef } = const { list, pagination, searchForm, fnGetData, fnResetPagination, tableRef } =
@ -177,15 +177,15 @@ const data = reactive({
APPLY_DEPARTMENT_ID: "", APPLY_DEPARTMENT_ID: "",
WORK_LEVEL: "", WORK_LEVEL: "",
LEADER_DEPARTMENT_ID: "", LEADER_DEPARTMENT_ID: "",
LEADER_USER_ID: "", LEADER_USER_ID: [],
AUDIT_DEPARTMENT_ID: "", AUDIT_DEPARTMENT_ID: "",
AUDIT_USER_ID: "", AUDIT_USER_ID: [],
APPROVE_DEPARTMENT_ID: "", APPROVE_DEPARTMENT_ID: "",
APPROVE_USER_ID: "", APPROVE_USER_ID: [],
SAFETY_DEPARTMENT_ID: "", SAFETY_DEPARTMENT_ID: "",
SAFETY_USER_ID: "", SAFETY_USER_ID: [],
WORKSHOP_DEPARTMENT_ID: "", WORKSHOP_DEPARTMENT_ID: "",
WORKSHOP_USER_ID: "", WORKSHOP_USER_ID: [],
}, },
}, },
}); });
@ -235,6 +235,12 @@ const fnGoEdit = async (id) => {
const resData = await getHoistingConfigurationUserView({ const resData = await getHoistingConfigurationUserView({
CONFIGURATION_ID: id, CONFIGURATION_ID: id,
}); });
resData.pd.WORKSHOP_USER_ID =
resData.pd.WORKSHOP_USER_ID.toString().split(",");
resData.pd.LEADER_USER_ID = resData.pd.LEADER_USER_ID.toString().split(",");
resData.pd.AUDIT_USER_ID = resData.pd.AUDIT_USER_ID.toString().split(",");
resData.pd.APPROVE_USER_ID = resData.pd.APPROVE_USER_ID.toString().split(",");
resData.pd.SAFETY_USER_ID = resData.pd.SAFETY_USER_ID.toString().split(",");
data.editDialog.form = resData.pd; data.editDialog.form = resData.pd;
}; };

View File

@ -217,8 +217,8 @@
<el-button <el-button
v-if=" v-if="
userStore.getUserInfo.ISMAIN === '1' && userStore.getUserInfo.ISMAIN === '1' &&
entrance === 'archive' && row.STEP_ID !== -1 &&
row.STEP_ID !== -1 row.STEP_ID !== 0
" "
type="danger" type="danger"
text text
@ -244,7 +244,7 @@
<check-list <check-list
v-if="data.checkListDialog.visible" v-if="data.checkListDialog.visible"
v-model:visible="data.checkListDialog.visible" v-model:visible="data.checkListDialog.visible"
v-model:foreign-key="data.checkListDialog.FOREIGN_KEY" v-model:foreignKey="data.checkListDialog.FOREIGN_KEY"
/> />
<show-points <show-points
:id="data.showPointsDialog.id" :id="data.showPointsDialog.id"

View File

@ -27,6 +27,7 @@
v-model="form.WORK_LEVEL" v-model="form.WORK_LEVEL"
placeholder="请选择动火等级" placeholder="请选择动火等级"
:disabled="props.type === 'edit'" :disabled="props.type === 'edit'"
@change="fnWorkLevelChange"
> >
<el-option <el-option
v-for="item in data.levelList" v-for="item in data.levelList"
@ -204,17 +205,18 @@ const props = defineProps({
const emits = defineEmits(["update:visible", "update:form", "get-data"]); const emits = defineEmits(["update:visible", "update:form", "get-data"]);
const { visible, form } = useVModels(props, emits); const { visible, form } = useVModels(props, emits);
const fnHasLevel = async (rule, value, callback) => { const fnHasLevel = async (value) => {
if (value) { if (value) {
const resData = await getHotVerifyConfigurationUser({ const resData = await getHotVerifyConfigurationUser({
WORK_LEVEL: value, WORK_LEVEL: value,
APPLY_DEPARTMENT_ID: form.value.APPLY_DEPARTMENT_ID, APPLY_DEPARTMENT_ID: form.value.APPLY_DEPARTMENT_ID,
}); });
if (resData?.pd?.APPLY_DEPARTMENT_ID) if (resData?.pd?.APPLY_DEPARTMENT_ID) {
callback(new Error("该申请单位和动火等级已存在")); ElMessage.error("该申请单位和动火等级已存在");
else callback(); return true;
} else { } else {
callback(); return false;
}
} }
}; };
@ -224,7 +226,7 @@ const rules = {
], ],
WORK_LEVEL: [ WORK_LEVEL: [
{ required: true, message: "请选择动火等级", trigger: "blur" }, { required: true, message: "请选择动火等级", trigger: "blur" },
{ validator: fnHasLevel, trigger: "blur" }, // { validator: fnHasLevel, trigger: "blur" },
], ],
LEADER_DEPARTMENT_ID: [ LEADER_DEPARTMENT_ID: [
{ {
@ -291,10 +293,29 @@ const data = reactive({
projectUserList: [], projectUserList: [],
}); });
const fnWorkLevelChange = () => {
data.leaderUserList = [];
form.value.LEADER_DEPARTMENT_ID = "";
form.value.LEADER_USER_ID = [];
data.auditUserList = [];
form.value.AUDIT_DEPARTMENT_ID = "";
form.value.AUDIT_USER_ID = [];
data.approveUserList = [];
form.value.APPROVE_DEPARTMENT_ID = "";
form.value.APPROVE_USER_ID = [];
data.monitorUserList = [];
form.value.MONITOR_DEPARTMENT_ID = "";
form.value.MONITOR_USER_ID = [];
data.projectUserList = [];
form.value.PROJECT_MANAGER_DEPARTMENT_ID = "";
form.value.PROJECT_MANAGER_USER_ID = [];
};
const fnLeaderDepartmentChange = () => { const fnLeaderDepartmentChange = () => {
data.leaderUserList = []; data.leaderUserList = [];
form.value.LEADER_USER_ID = []; form.value.LEADER_USER_ID = [];
}; };
const fnAuditDepartmentChange = () => { const fnAuditDepartmentChange = () => {
data.auditUserList = []; data.auditUserList = [];
form.value.AUDIT_USER_ID = []; form.value.AUDIT_USER_ID = [];
@ -322,17 +343,44 @@ const fnSubmit = debounce(
1000, 1000,
async () => { async () => {
const form = props.form; const form = props.form;
form.LEADER_USER_ID = form.LEADER_USER_ID.join(","); await useFormValidate(formRef);
form.AUDIT_USER_ID = form.AUDIT_USER_ID.join(","); // if (props.type === "add") {
form.APPROVE_USER_ID = form.APPROVE_USER_ID.join(","); // fnHasLevel(form.WORK_LEVEL);
form.MONITOR_USER_ID = form.MONITOR_USER_ID.join(","); // }
form.PROJECT_MANAGER_USER_ID = form.PROJECT_MANAGER_USER_ID.join(","); const LEADER_USER_ID = form.LEADER_USER_ID
? form.LEADER_USER_ID.join(",")
: "";
const AUDIT_USER_ID = form.AUDIT_USER_ID
? form.AUDIT_USER_ID.join(",")
: "";
const APPROVE_USER_ID = form.APPROVE_USER_ID
? form.APPROVE_USER_ID.join(",")
: "";
const MONITOR_USER_ID = form.MONITOR_USER_ID
? form.MONITOR_USER_ID.join(",")
: "";
const PROJECT_MANAGER_USER_ID = form.PROJECT_MANAGER_USER_ID
? form.PROJECT_MANAGER_USER_ID.join(",")
: "";
const params = {
...form,
LEADER_USER_ID,
AUDIT_USER_ID,
APPROVE_USER_ID,
MONITOR_USER_ID,
PROJECT_MANAGER_USER_ID,
};
if (props.type === "add") { if (props.type === "add") {
await useFormValidate(formRef); const isCon = await fnHasLevel(form.WORK_LEVEL);
await setHotConfigurationUserAdd(form); if (!isCon) {
await setHotConfigurationUserAdd(params);
} else {
return false;
}
} else { } else {
await setHotConfigurationUserEdit(form); await setHotConfigurationUserEdit(params);
} }
ElMessage.success("提交成功"); ElMessage.success("提交成功");
fnClose(); fnClose();
emits("get-data"); emits("get-data");
@ -380,6 +428,8 @@ watchEffect(() => {
if (form.value.PROJECT_MANAGER_DEPARTMENT_ID) if (form.value.PROJECT_MANAGER_DEPARTMENT_ID)
fnGetProjectUser(form.value.PROJECT_MANAGER_DEPARTMENT_ID); fnGetProjectUser(form.value.PROJECT_MANAGER_DEPARTMENT_ID);
}); });
watchEffect(() => {});
</script> </script>
<style scoped lang="scss"></style> <style scoped lang="scss"></style>

View File

@ -171,15 +171,15 @@ const data = reactive({
APPLY_DEPARTMENT_ID: "", APPLY_DEPARTMENT_ID: "",
WORK_LEVEL: "", WORK_LEVEL: "",
LEADER_DEPARTMENT_ID: "", LEADER_DEPARTMENT_ID: "",
LEADER_USER_ID: "", LEADER_USER_ID: [],
AUDIT_DEPARTMENT_ID: "", AUDIT_DEPARTMENT_ID: "",
AUDIT_USER_ID: "", AUDIT_USER_ID: [],
APPROVE_DEPARTMENT_ID: "", APPROVE_DEPARTMENT_ID: "",
APPROVE_USER_ID: "", APPROVE_USER_ID: [],
MONITOR_DEPARTMENT_ID: "", MONITOR_DEPARTMENT_ID: "",
MONITOR_USER_ID: "", MONITOR_USER_ID: [],
PROJECT_MANAGER_DEPARTMENT_ID: "", PROJECT_MANAGER_DEPARTMENT_ID: "",
PROJECT_MANAGER_USER_ID: "", PROJECT_MANAGER_USER_ID: [],
}, },
}, },
}); });

View File

@ -34,24 +34,28 @@
</el-col> </el-col>
<el-col :span="4"> <el-col :span="4">
<el-form-item label-width="10px"> <el-form-item label-width="10px">
<el-button type="primary" native-type="submit">搜索</el-button> <el-button type="primary" @click="fnGetDataTransfer"
<el-button native-type="reset" @click="fnGetDataTransfer"> >搜索</el-button
重置 >
</el-button> <el-button @click="reset"> </el-button>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
</el-form> </el-form>
</el-card> </el-card>
<layout-card> <layout-card>
<layout-table :data="list" :show-pagination="false"> <layout-table
:data="list"
:show-pagination="false"
show-summary
:summary-method="fnGetSummaries"
>
<el-table-column label="序号" width="70"> <el-table-column label="序号" width="70">
<template #default="{ $index }"> <template #default="{ $index }">
{{ serialNumber(pagination, $index) }} {{ serialNumber(pagination, $index) }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="NAME" label="部门" /> <el-table-column prop="NAME" label="部门" />
<el-table-column prop="LOGIN_RATE" label="登录率" /> <el-table-column prop="LOGIN_RATE" label="登录率" />
</layout-table> </layout-table>
</layout-card> </layout-card>
@ -62,10 +66,10 @@
import LayoutDepartment from "@/components/department/index.vue"; import LayoutDepartment from "@/components/department/index.vue";
import { serialNumber } from "@/assets/js/utils.js"; import { serialNumber } from "@/assets/js/utils.js";
import useListData from "@/assets/js/useListData.js"; import useListData from "@/assets/js/useListData.js";
import { import { getFhlogStatsList } from "@/request/statistical_analysis.js";
getFhlogStatsList, import { sumBy } from "lodash-es";
getDetectionSituationListTime, import dayjs from "dayjs";
} from "@/request/statistical_analysis.js"; import { onMounted } from "vue";
const handleExtraData = (dataList) => { const handleExtraData = (dataList) => {
dataList.forEach((item) => { dataList.forEach((item) => {
@ -81,6 +85,11 @@ const { list, searchForm, pagination, fnGetData } = useListData(
usePagination: false, usePagination: false,
} }
); );
onMounted(() => {
reset();
});
const fnGetDataTransfer = () => { const fnGetDataTransfer = () => {
fnGetData({ fnGetData({
START_TIME: searchForm.value.dates?.[0], START_TIME: searchForm.value.dates?.[0],
@ -88,13 +97,48 @@ const fnGetDataTransfer = () => {
DEPTIDS: searchForm.value.DEPTIDS?.join(","), DEPTIDS: searchForm.value.DEPTIDS?.join(","),
}); });
}; };
const fnInit = async () => {
const resData = await getDetectionSituationListTime(); const reset = () => {
searchForm.value.dates = [resData.pd.MINTIME, resData.pd.MAXTIME]; searchForm.value.dates = [
dayjs().startOf("year").format("YYYY-MM-DD"),
dayjs().format("YYYY-MM-DD"),
];
searchForm.value.DEPTIDS = [];
fnGetDataTransfer(); fnGetDataTransfer();
}; };
const fnGetSummaries = ({ columns, data }) => {
const sums = [];
columns.forEach((column, index) => {
if (index === 0) {
sums[index] = "合计";
return;
}
fnInit(); const property = column.property;
if (property === "NAME") {
sums[index] = "--"; //
} else {
//
const totalReal = sumBy(data, (item) => {
const val = item.LOGIN_COUNTS;
return isNaN(val) ? 0 : Number(val);
});
const totalNeed = sumBy(data, (item) => {
const val = item.WORKER_COUNTS;
return isNaN(val) ? 0 : Number(val);
});
if (totalNeed > 0) {
const rate = (totalReal / totalNeed) * 100;
sums[index] = `${rate.toFixed(2)}%`;
} else {
sums[index] = "0.00%";
}
}
});
return sums;
};
</script> </script>
<style scoped lang="scss"></style> <style scoped lang="scss"></style>

View File

@ -209,8 +209,8 @@
<el-button <el-button
v-if=" v-if="
userStore.getUserInfo.ISMAIN === '1' && userStore.getUserInfo.ISMAIN === '1' &&
entrance === 'archive' && row.STEP_ID !== -1 &&
row.STEP_ID !== -1 row.STEP_ID !== 0
" "
type="danger" type="danger"
text text
@ -231,7 +231,7 @@
<check-list <check-list
v-if="data.checkListDialog.visible" v-if="data.checkListDialog.visible"
v-model:visible="data.checkListDialog.visible" v-model:visible="data.checkListDialog.visible"
v-model:foreign-key="data.checkListDialog.FOREIGN_KEY" v-model:foreignKey="data.checkListDialog.FOREIGN_KEY"
/> />
<layout-video <layout-video
v-model:visible="data.videoDialog.visible" v-model:visible="data.videoDialog.visible"

View File

@ -35,7 +35,7 @@
label="断路所在单位消防、安全管理部门负责人" label="断路所在单位消防、安全管理部门负责人"
prop="LEADER_USER_ID" prop="LEADER_USER_ID"
> >
<el-select v-model="form.LEADER_USER_ID" filterable> <el-select v-model="form.LEADER_USER_ID" filterable multiple>
<el-option <el-option
v-for="item in data.safetyUserList" v-for="item in data.safetyUserList"
:key="item.USER_ID" :key="item.USER_ID"
@ -51,7 +51,7 @@
/> />
</el-form-item> </el-form-item>
<el-form-item label="分厂负责人" prop="AUDIT_USER_ID"> <el-form-item label="分厂负责人" prop="AUDIT_USER_ID">
<el-select v-model="form.AUDIT_USER_ID" filterable> <el-select v-model="form.AUDIT_USER_ID" filterable multiple>
<el-option <el-option
v-for="item in data.auditUserList" v-for="item in data.auditUserList"
:key="item.USER_ID" :key="item.USER_ID"
@ -108,23 +108,18 @@ const props = defineProps({
const emits = defineEmits(["update:visible", "update:form", "get-data"]); const emits = defineEmits(["update:visible", "update:form", "get-data"]);
const { visible, form } = useVModels(props, emits); const { visible, form } = useVModels(props, emits);
const fnHasLevel = async (rule, value, callback) => { const fnHasLevel = async () => {
if (value) { const resData = await getCutRoadVerifyConfigurationUser({
const resData = await getCutRoadVerifyConfigurationUser({ APPLY_DEPARTMENT_ID: form.value.APPLY_DEPARTMENT_ID,
APPLY_DEPARTMENT_ID: form.value.APPLY_DEPARTMENT_ID, });
}); if (resData?.pd?.APPLY_DEPARTMENT_ID)
if (resData?.pd?.APPLY_DEPARTMENT_ID) return ElMessage.error("该申请单位已存在");
callback(new Error("该申请部门已存在"));
else callback();
} else {
callback();
}
}; };
const rules = { const rules = {
APPLY_DEPARTMENT_ID: [ APPLY_DEPARTMENT_ID: [
{ required: true, message: "请选择申请部门", trigger: "change" }, { required: true, message: "请选择申请部门", trigger: "change" },
{ validator: fnHasLevel, trigger: "blur" }, // { validator: fnHasLevel, trigger: "blur" },
], ],
AUDIT_DEPARTMENT_ID: [ AUDIT_DEPARTMENT_ID: [
@ -160,12 +155,12 @@ const data = reactive({
const fnAuditDepartmentChange = () => { const fnAuditDepartmentChange = () => {
data.auditUserList = []; data.auditUserList = [];
form.value.AUDIT_USER_ID = ""; form.value.AUDIT_USER_ID = [];
}; };
const fnSafetyDepartmentChange = () => { const fnSafetyDepartmentChange = () => {
data.safetyUserList = []; data.safetyUserList = [];
form.value.LEADER_USER_ID = ""; form.value.LEADER_USER_ID = [];
}; };
const fnClose = () => { const fnClose = () => {
@ -178,11 +173,28 @@ const fnSubmit = debounce(
1000, 1000,
async () => { async () => {
const form = props.form; const form = props.form;
await useFormValidate(formRef);
const AUDIT_USER_ID = form.AUDIT_USER_ID
? form.AUDIT_USER_ID.join(",")
: "";
const LEADER_USER_ID = form.LEADER_USER_ID
? form.LEADER_USER_ID.join(",")
: "";
const params = {
...form,
AUDIT_USER_ID,
LEADER_USER_ID,
};
if (props.type === "add") { if (props.type === "add") {
await useFormValidate(formRef); const isCon = await fnHasLevel();
await setCutRoadConfigurationUserAdd(form); if (!isCon) {
await setCutRoadConfigurationUserAdd(params);
} else {
return false;
}
} else { } else {
await setCutRoadConfigurationUserEdit(form); await setCutRoadConfigurationUserEdit(params);
} }
ElMessage.success("提交成功"); ElMessage.success("提交成功");
fnClose(); fnClose();
@ -213,6 +225,7 @@ watchEffect(() => {
if (form.value.LEADER_DEPARTMENT_ID) if (form.value.LEADER_DEPARTMENT_ID)
fnGetSafetyUser(form.value.LEADER_DEPARTMENT_ID); fnGetSafetyUser(form.value.LEADER_DEPARTMENT_ID);
}); });
watchEffect(() => {});
</script> </script>
<style scoped lang="scss"></style> <style scoped lang="scss"></style>

View File

@ -123,7 +123,7 @@ import {
getCutRoadConfigurationUserView, getCutRoadConfigurationUserView,
setCutRoadConfigurationUserDelete, setCutRoadConfigurationUserDelete,
setCutRoadConfigurationUserDeleteAll, setCutRoadConfigurationUserDeleteAll,
setCutRoadConfigurationUserList setCutRoadConfigurationUserList,
} from "@/request/eight_work.js"; } from "@/request/eight_work.js";
const { list, pagination, searchForm, fnGetData, fnResetPagination, tableRef } = const { list, pagination, searchForm, fnGetData, fnResetPagination, tableRef } =
@ -137,15 +137,13 @@ const data = reactive({
CONFIGURATION_ID: "", CONFIGURATION_ID: "",
APPLY_DEPARTMENT_ID: "", APPLY_DEPARTMENT_ID: "",
AUDIT_DEPARTMENT_ID: "", AUDIT_DEPARTMENT_ID: "",
AUDIT_USER_ID: "", AUDIT_USER_ID: [],
LEADER_DEPARTMENT_ID: "", LEADER_DEPARTMENT_ID: "",
LEADER_USER_ID: "", LEADER_USER_ID: [],
}, },
}, },
}); });
const handleDelete = async (CONFIGURATION_ID) => { const handleDelete = async (CONFIGURATION_ID) => {
await ElMessageBox.confirm("确定要删除吗?", { await ElMessageBox.confirm("确定要删除吗?", {
type: "warning", type: "warning",
@ -192,6 +190,8 @@ const fnGoEdit = async (id) => {
const resData = await getCutRoadConfigurationUserView({ const resData = await getCutRoadConfigurationUserView({
CONFIGURATION_ID: id, CONFIGURATION_ID: id,
}); });
resData.pd.AUDIT_USER_ID = resData.pd.AUDIT_USER_ID.toString().split(",");
resData.pd.LEADER_USER_ID = resData.pd.LEADER_USER_ID.toString().split(",");
data.editDialog.form = resData.pd; data.editDialog.form = resData.pd;
}; };

View File

@ -66,7 +66,7 @@
value-format="YYYY-MM-DD" value-format="YYYY-MM-DD"
format="YYYY-MM-DD" format="YYYY-MM-DD"
type="date" type="date"
@change="judgeExamineTime()" @change="judgeExamineTime"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
@ -96,7 +96,7 @@
value-format="YYYY-MM-DD" value-format="YYYY-MM-DD"
format="YYYY-MM-DD" format="YYYY-MM-DD"
type="date" type="date"
@change="judgeExamineTime()" @change="judgeExamineTime"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
@ -172,6 +172,11 @@ const fnDisabledDate = (time) => {
}; };
const personnelManagementJobTypeList = const personnelManagementJobTypeList =
await layoutFnGetPersonnelManagementJobType(); await layoutFnGetPersonnelManagementJobType();
//
const originalReviewTime1 = ref("");
const originalReviewTime2 = ref("");
// //
// const fnHasCertificate = async (rule, value, callback) => { // const fnHasCertificate = async (rule, value, callback) => {
// if (value) { // if (value) {
@ -276,6 +281,9 @@ const fnGetData = async () => {
}); });
await fnGetAllUserList(resData.pd.DEPARTMENT_ID); await fnGetAllUserList(resData.pd.DEPARTMENT_ID);
form.value = resData.pd; form.value = resData.pd;
//
originalReviewTime1.value = resData.pd.REVIEWTIME1 || "";
originalReviewTime2.value = resData.pd.REVIEWTIME2 || "";
await fnGetUserDetail(); await fnGetUserDetail();
}; };
fnGetData(); fnGetData();
@ -289,6 +297,17 @@ const fnSubmit = debounce(
form.value.PTYPE === "公司员工" ? CORPINFO_ID : form.value.UNITS_ID, form.value.PTYPE === "公司员工" ? CORPINFO_ID : form.value.UNITS_ID,
VALID_ETIME: form.value.VALID_ETIME, VALID_ETIME: form.value.VALID_ETIME,
}; };
//
if (SPECIALOPERATIONS_ID) {
if (form.value.REVIEWTIME1 !== originalReviewTime1.value) {
params.REVIEWTIME1_CHANGED = "1";
}
if (form.value.REVIEWTIME2 !== originalReviewTime2.value) {
params.REVIEWTIME2_CHANGED = "1";
}
}
!SPECIALOPERATIONS_ID !SPECIALOPERATIONS_ID
? await setPersonnelManagementAdd(params) ? await setPersonnelManagementAdd(params)
: await setPersonnelManagementEdit(params); : await setPersonnelManagementEdit(params);

View File

@ -1,6 +1,27 @@
<template> <template>
<el-dialog v-model="visible" :title="title" :before-close="fnClose"> <el-dialog v-model="visible" :title="title" :before-close="fnClose">
<el-form label-width="110px"> <el-form label-width="110px">
<el-row>
<el-col :span="8">
<el-form-item label="总实际取证人数">
<el-input v-model="dataList.total.TOTAL" disabled />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="总应取证人数">
<el-input
v-model.number="dataList.total.fnumber"
placeholder="请输入总应取证人数"
@blur="handleBlurTotal(dataList.total)"
/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="总取证率">
<el-input :value="calculateRateTotal(dataList.total)" disabled />
</el-form-item>
</el-col>
</el-row>
<el-row v-for="(item, index) in dataList.varList" :key="index"> <el-row v-for="(item, index) in dataList.varList" :key="index">
<el-col :span="8"> <el-col :span="8">
<el-form-item label="证书类型"> <el-form-item label="证书类型">
@ -66,6 +87,14 @@ const calculateRate = (item) => {
return ((fnumber / numbers) * 100).toFixed(2) + "%"; return ((fnumber / numbers) * 100).toFixed(2) + "%";
}; };
const calculateRateTotal = (item) => {
const fnumber = Number(item.fnumber) || 0;
const numbers = Number(item.TOTAL) || 0;
if (fnumber === 0) return "0.00%";
return ((fnumber / numbers) * 100).toFixed(2) + "%";
};
const handleBlur = (item) => { const handleBlur = (item) => {
// //
const value = Number(item.fnumber) || 0; const value = Number(item.fnumber) || 0;
@ -78,6 +107,18 @@ const handleBlur = (item) => {
} }
}; };
const handleBlurTotal = (item) => {
//
const value = Number(item.fnumber) || 0;
const maxValue = Number(item.TOTAL) || 0;
if (value > maxValue) {
//
item.fnumber = maxValue;
ElMessage.warning(`输入值不能超过 ${maxValue}`);
}
};
const fnClose = () => { const fnClose = () => {
// dataList fnumber // dataList fnumber
if (dataList.value && dataList.value.varList) { if (dataList.value && dataList.value.varList) {

View File

@ -209,14 +209,15 @@ const fnExportTemplates = async () => {
}/specialoperations/excelAll`; }/specialoperations/excelAll`;
}; };
// 使 ref 使 // 使 ref 使
const dataList = ref({ varList: [] }); const dataList = ref({ varList: [], total: 0 });
getForeNsicStatisticsList().then((data) => { getForeNsicStatisticsList().then((data) => {
if (data && data.varList) { if (data && data.varList) {
data.varList.forEach((item) => { data.varList.forEach((item) => {
item.fnumber = 0; item.fnumber = 0;
}); });
dataList.value = data; dataList.value.varList = data.varList;
dataList.value.total = data.total;
} }
}); });
const fnSubmitImport = async (formData) => { const fnSubmitImport = async (formData) => {

View File

@ -34,17 +34,20 @@
</el-col> </el-col>
<el-col :span="4"> <el-col :span="4">
<el-form-item label-width="10px"> <el-form-item label-width="10px">
<el-button type="primary" native-type="submit">搜索</el-button> <el-button type="primary" @click="search"></el-button>
<el-button native-type="reset" @click="fnGetDataTransfer"> <el-button @click="fnGetDataTransfer"> </el-button>
重置
</el-button>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
</el-form> </el-form>
</el-card> </el-card>
<layout-card> <layout-card>
<layout-table :data="list" :show-pagination="false"> <layout-table
:data="list"
:show-pagination="false"
show-summary
:summary-method="fnGetSummaries"
>
<el-table-column label="序号" width="70"> <el-table-column label="序号" width="70">
<template #default="{ $index }"> <template #default="{ $index }">
{{ serialNumber(pagination, $index) }} {{ serialNumber(pagination, $index) }}
@ -52,9 +55,13 @@
</el-table-column> </el-table-column>
<el-table-column prop="DEPARTMENT_NAME" label="部门" /> <el-table-column prop="DEPARTMENT_NAME" label="部门" />
<el-table-column prop="TOTAL_COUNT" label="清单数量" /> <el-table-column prop="TOTAL_COUNT" label="清单数量" />
<el-table-column prop="TOTAL_CODE_num" label="待排查清单数量" /> <el-table-column prop="NEED_COUNT" label="应排查次数" />
<el-table-column prop="ALREADY_CHECK_COUNT" label="己排查清单数量" /> <el-table-column prop="REAL_COUNT" label="已排查次数" />
<el-table-column prop="CHECK_RATE" label="排查率" /> <el-table-column prop="CHECK_RATE" label="排查率">
<template #default="{ row }">
{{ row.CHECK_RATE + "%" }}
</template>
</el-table-column>
</layout-table> </layout-table>
</layout-card> </layout-card>
</div> </div>
@ -68,11 +75,19 @@ import {
getListmanagerDeptList, getListmanagerDeptList,
getDetectionSituationListTime, getDetectionSituationListTime,
} from "@/request/statistical_analysis.js"; } from "@/request/statistical_analysis.js";
import dayjs from "dayjs";
import { sumBy } from "lodash-es";
const handleExtraData = (dataList) => { const handleExtraData = (dataList) => {
dataList.forEach((item) => { dataList.forEach((item) => {
item.TOTAL_CODE_num = item.TOTAL_COUNT - item.ALREADY_CHECK_COUNT; if (item.NEED_COUNT && item.REAL_COUNT) {
item.CHECK_RATE = item.CHECK_RATE.toFixed(2) + "%"; item.CHECK_RATE = (
(Number(item.REAL_COUNT) / Number(item.NEED_COUNT)) *
100
).toFixed(2);
} else {
item.CHECK_RATE = "0.00";
}
}); });
}; };
@ -84,13 +99,78 @@ const { list, searchForm, pagination, fnGetData } = useListData(
usePagination: false, usePagination: false,
} }
); );
const fnGetDataTransfer = () => { const fnGetDataTransfer = () => {
searchForm.value.dates = [
dayjs().startOf("year").format("YYYY-MM-DD"),
dayjs().format("YYYY-MM-DD"),
];
searchForm.value.DEPTIDS = [];
fnGetData({ fnGetData({
START_TIME: searchForm.value.dates?.[0], START_TIME: searchForm.value.dates?.[0],
END_TIME: searchForm.value.dates?.[1], END_TIME: searchForm.value.dates?.[1],
DEPTIDS: searchForm.value.DEPTIDS?.join(","), DEPTIDS: searchForm.value.DEPTIDS?.join(","),
}); });
}; };
const fnGetSummaries = ({ columns, data }) => {
const sums = [];
columns.forEach((column, index) => {
if (index === 0) {
sums[index] = "合计";
return;
}
const property = column.property;
//
if (
property === "REAL_COUNT" ||
property === "NEED_COUNT" ||
property === "TOTAL_COUNT"
) {
const total = sumBy(data, (item) => {
const val = item[property];
return isNaN(val) ? 0 : Number(val);
});
// 0 -- NaN --
sums[index] = total === 0 ? "0" : total.toString();
}
//
else if (property === "DEPARTMENT_NAME") {
sums[index] = "--"; //
} else {
//
const totalReal = sumBy(data, (item) => {
const val = item.REAL_COUNT;
return isNaN(val) ? 0 : Number(val);
});
const totalNeed = sumBy(data, (item) => {
const val = item.NEED_COUNT;
return isNaN(val) ? 0 : Number(val);
});
if (totalNeed > 0) {
const rate = (totalReal / totalNeed) * 100;
sums[index] = `${rate.toFixed(2)}%`;
} else {
sums[index] = "0.00%";
}
}
});
return sums;
};
const search = () => {
fnGetData({
START_TIME: searchForm.value.dates?.[0],
END_TIME: searchForm.value.dates?.[1],
DEPTIDS: searchForm.value.DEPTIDS?.join(","),
});
};
const fnInit = async () => { const fnInit = async () => {
const resData = await getDetectionSituationListTime(); const resData = await getDetectionSituationListTime();
searchForm.value.dates = [resData.pd.MINTIME, resData.pd.MAXTIME]; searchForm.value.dates = [resData.pd.MINTIME, resData.pd.MAXTIME];

View File

@ -44,10 +44,10 @@
</el-col> </el-col>
<el-col :span="6"> <el-col :span="6">
<el-form-item label-width="10px"> <el-form-item label-width="10px">
<el-button type="primary" native-type="submit">搜索</el-button> <el-button type="primary" @click="fnGetDataTransfer"
<el-button native-type="reset" @click="findList = []"> >搜索</el-button
重置 >
</el-button> <el-button @click="reset"> </el-button>
<el-button <el-button
@click=" @click="
router.push({ router.push({
@ -121,7 +121,9 @@
>安全隐患 >安全隐患
</div> </div>
<div> <div>
截止{{ searchForm.dates[1] }}到期整改完成率<span class="text-red"> 截止{{ searchForm.dates[1] }}到期整改完成(验收合格)<span
class="text-red"
>
{{ {{
( (
(rectifyCountSummary.yzgCount / (rectifyCountSummary.yzgCount /
@ -263,35 +265,42 @@ const fnGetPercent = ({ columns, data }) => {
return; return;
} }
// 7 4 / 3 // 13
if (index === 7) { if (index === 13) {
const sum4 = sumBy(data, (item) => { // 4
const val = item[columns[4]?.property]; const totalHiddenCount = sumBy(data, (item) => {
return isNaN(val) ? 0 : Number(val);
});
const sum3 = sumBy(data, (item) => {
const val = item[columns[3]?.property]; const val = item[columns[3]?.property];
return isNaN(val) ? 0 : Number(val); return isNaN(val) ? 0 : Number(val);
}); });
if (sum3 === 0) { //
const totalYysCount = sumBy(data, (item) => {
const yys = item[columns[6]?.property]; //
return isNaN(yys) ? 0 : Number(yys);
});
if (totalHiddenCount === 0) {
sums[index] = "0%"; sums[index] = "0%";
} else { } else {
sums[index] = ((sum4 / sum3) * 100).toFixed(2) + "%"; const rate = (totalYysCount / totalHiddenCount) * 100;
sums[index] = `${rate.toFixed(2)}%`;
} }
return; return;
} }
// //
if (!data.every((value) => isNaN(value[column.property]))) { const allNaN = data.every((value) => isNaN(value[column.property]));
sums[index] = if (allNaN) {
sumBy(data, (item) => {
return item[column.property];
}) || "--";
} else {
sums[index] = "--"; sums[index] = "--";
return;
} }
const total = sumBy(data, (item) => {
const val = item[column.property];
return isNaN(val) ? 0 : Number(val);
});
sums[index] = total === 0 ? "0" : total.toString();
}); });
return sums; return sums;
@ -335,20 +344,44 @@ const resultListCorrect = ref([
dataName: "隐患数量", dataName: "隐患数量",
}, },
{ {
dataItem: "yzgCount", dataItem: "wzgCount",
dataName: "整改数量", dataName: "整改数量",
}, },
{ {
dataItem: "wzgCount", dataItem: "yzgCount",
dataName: "未完成整改隐患数量", dataName: "已整改数量",
},
{
dataItem: "yysCount",
dataName: "已验收数量",
},
{
dataItem: "ygqCount",
dataName: "已过期数量",
},
{
dataItem: "dqrCount",
dataName: "待确认数量",
},
{
dataItem: "qrdhCount",
dataName: "确认时打回数量",
},
{
dataItem: "zgdhCount",
dataName: "整改时打回数量",
}, },
{ {
dataItem: "yqCount", dataItem: "yqCount",
dataName: "已延期整改数量", dataName: "已延期整改数量",
}, },
{
dataItem: "wzczgCount",
dataName: "未完成整改情况数量",
},
{ {
dataItem: "rectificationRate", dataItem: "rectificationRate",
dataName: "整改率", dataName: "整改率(验收合格)",
}, },
]); ]);
const resultListAccept = ref([ const resultListAccept = ref([
@ -435,12 +468,27 @@ onMounted(() => {
fnGetDataTransfer(); fnGetDataTransfer();
}); });
const reset = () => {
const endDate = new Date();
const startDate = new Date();
startDate.setDate(endDate.getDate() - 7);
searchForm.value.dates = [
startDate.toISOString().split("T")[0],
endDate.toISOString().split("T")[0],
];
searchForm.value.HIDDEN_CLASSIFICATION = [];
searchForm.value.checkedIds = [];
//
fnGetDataTransfer();
};
const fnGetDataTransfer = () => { const fnGetDataTransfer = () => {
fnGetData({ fnGetData({
STARTTIME: searchForm.value.dates[0], STARTTIME: searchForm.value.dates[0],
ENDTIME: searchForm.value.dates[1], ENDTIME: searchForm.value.dates[1],
HIDDEN_CLASSIFICATION: searchForm.value.HIDDEN_CLASSIFICATION.join(","), HIDDEN_CLASSIFICATION: searchForm.value.HIDDEN_CLASSIFICATION?.join(","),
checkedIds: searchForm.value.checkedIds.join(","), checkedIds: searchForm.value.checkedIds?.join(","),
}); });
}; };

View File

@ -192,7 +192,11 @@
审批表详情 审批表详情
</el-button> </el-button>
<el-button <el-button
v-if="userStore.getUserInfo.ISMAIN === '1'" v-if="
userStore.getUserInfo.ISMAIN === '1' &&
row.STEP_ID !== -1 &&
row.STEP_ID !== 0
"
type="danger" type="danger"
text text
link link
@ -212,7 +216,7 @@
<check-list <check-list
v-if="data.checkListDialog.visible" v-if="data.checkListDialog.visible"
v-model:visible="data.checkListDialog.visible" v-model:visible="data.checkListDialog.visible"
v-model:foreign-key="data.checkListDialog.FOREIGN_KEY" v-model:foreignKey="data.checkListDialog.FOREIGN_KEY"
/> />
<layout-video <layout-video
v-model:visible="data.videoDialog.visible" v-model:visible="data.videoDialog.visible"
@ -236,7 +240,8 @@ import {
getTemporaryElectricityUsageFlow, getTemporaryElectricityUsageFlow,
getTaskSetps, getTaskSetps,
getTemporaryElectricityUsageList, getTemporaryElectricityUsageList,
setEightWorkInvalid, getApplyDept setEightWorkInvalid,
getApplyDept,
} from "@/request/eight_work.js"; } from "@/request/eight_work.js";
import LayoutVideo from "@/components/video/index.vue"; import LayoutVideo from "@/components/video/index.vue";
import CheckList from "@/components/safety_briefing_checklist/index.vue"; import CheckList from "@/components/safety_briefing_checklist/index.vue";

View File

@ -29,7 +29,7 @@
/> />
</el-form-item> </el-form-item>
<el-form-item label="用电单位负责人" prop="AUDIT_USER_ID"> <el-form-item label="用电单位负责人" prop="AUDIT_USER_ID">
<el-select v-model="form.AUDIT_USER_ID" filterable> <el-select v-model="form.AUDIT_USER_ID" filterable multiple>
<el-option <el-option
v-for="item in data.auditUserList" v-for="item in data.auditUserList"
:key="item.USER_ID" :key="item.USER_ID"
@ -45,7 +45,7 @@
/> />
</el-form-item> </el-form-item>
<el-form-item label="配送电单位负责人" prop="APPROVE_USER_ID"> <el-form-item label="配送电单位负责人" prop="APPROVE_USER_ID">
<el-select v-model="form.APPROVE_USER_ID" filterable> <el-select v-model="form.APPROVE_USER_ID" filterable multiple>
<el-option <el-option
v-for="item in data.safetyUserList" v-for="item in data.safetyUserList"
:key="item.USER_ID" :key="item.USER_ID"
@ -102,23 +102,18 @@ const props = defineProps({
const emits = defineEmits(["update:visible", "update:form", "get-data"]); const emits = defineEmits(["update:visible", "update:form", "get-data"]);
const { visible, form } = useVModels(props, emits); const { visible, form } = useVModels(props, emits);
const fnHasLevel = async (rule, value, callback) => { const fnHasLevel = async () => {
if (value) { const resData = await getElectricityVerifyConfigurationUser({
const resData = await getElectricityVerifyConfigurationUser({ APPLY_DEPARTMENT_ID: form.value.APPLY_DEPARTMENT_ID,
APPLY_DEPARTMENT_ID: form.value.APPLY_DEPARTMENT_ID, });
}); if (resData?.pd?.APPLY_DEPARTMENT_ID)
if (resData?.pd?.APPLY_DEPARTMENT_ID) return ElMessage.error("该申请部门已存在");
callback(new Error("该申请部门已存在"));
else callback();
} else {
callback();
}
}; };
const rules = { const rules = {
APPLY_DEPARTMENT_ID: [ APPLY_DEPARTMENT_ID: [
{ required: true, message: "请选择申请部门", trigger: "change" }, { required: true, message: "请选择申请部门", trigger: "change" },
{ validator: fnHasLevel, trigger: "blur" }, // { validator: fnHasLevel, trigger: "blur" },
], ],
AUDIT_DEPARTMENT_ID: [ AUDIT_DEPARTMENT_ID: [
@ -154,12 +149,12 @@ const data = reactive({
const fnAuditDepartmentChange = () => { const fnAuditDepartmentChange = () => {
data.auditUserList = []; data.auditUserList = [];
form.value.AUDIT_USER_ID = ""; form.value.AUDIT_USER_ID = [];
}; };
const fnSafetyDepartmentChange = () => { const fnSafetyDepartmentChange = () => {
data.safetyUserList = []; data.safetyUserList = [];
form.value.APPROVE_USER_ID = ""; form.value.APPROVE_USER_ID = [];
}; };
const fnClose = () => { const fnClose = () => {
@ -172,11 +167,27 @@ const fnSubmit = debounce(
1000, 1000,
async () => { async () => {
const form = props.form; const form = props.form;
await useFormValidate(formRef);
const AUDIT_USER_ID = form.AUDIT_USER_ID
? form.AUDIT_USER_ID.join(",")
: "";
const APPROVE_USER_ID = form.APPROVE_USER_ID
? form.APPROVE_USER_ID.join(",")
: "";
const params = {
...form,
AUDIT_USER_ID,
APPROVE_USER_ID,
};
if (props.type === "add") { if (props.type === "add") {
await useFormValidate(formRef); const isCon = await fnHasLevel();
await setElectricityConfigurationUserAdd(form); if (!isCon) {
await setElectricityConfigurationUserAdd(params);
} else {
return false;
}
} else { } else {
await setElectricityConfigurationUserEdit(form); await setElectricityConfigurationUserEdit(params);
} }
ElMessage.success("提交成功"); ElMessage.success("提交成功");
fnClose(); fnClose();
@ -207,6 +218,7 @@ watchEffect(() => {
if (form.value.APPROVE_DEPARTMENT_ID) if (form.value.APPROVE_DEPARTMENT_ID)
fnGetSafetyUser(form.value.APPROVE_DEPARTMENT_ID); fnGetSafetyUser(form.value.APPROVE_DEPARTMENT_ID);
}); });
watchEffect(() => {});
</script> </script>
<style scoped lang="scss"></style> <style scoped lang="scss"></style>

View File

@ -138,9 +138,9 @@ const data = reactive({
CONFIGURATION_ID: "", CONFIGURATION_ID: "",
APPLY_DEPARTMENT_ID: "", APPLY_DEPARTMENT_ID: "",
AUDIT_DEPARTMENT_ID: "", AUDIT_DEPARTMENT_ID: "",
AUDIT_USER_ID: "", AUDIT_USER_ID: [],
APPROVE_DEPARTMENT_ID: "", APPROVE_DEPARTMENT_ID: "",
APPROVE_USER_ID: "", APPROVE_USER_ID: [],
}, },
}, },
}); });
@ -190,6 +190,8 @@ const fnGoEdit = async (id) => {
const resData = await getElectricityConfigurationUserView({ const resData = await getElectricityConfigurationUserView({
CONFIGURATION_ID: id, CONFIGURATION_ID: id,
}); });
resData.pd.AUDIT_USER_ID = resData.pd.AUDIT_USER_ID.toString().split(",");
resData.pd.APPROVE_USER_ID = resData.pd.APPROVE_USER_ID.toString().split(",");
data.editDialog.form = resData.pd; data.editDialog.form = resData.pd;
}; };

View File

@ -209,6 +209,16 @@ const fnPreviewVideo = async (row) => {
} catch (error) { } catch (error) {
ElMessage.error("启动转码失败: " + (error.message || "未知错误")); ElMessage.error("启动转码失败: " + (error.message || "未知错误"));
} }
// try {
// // 使SDK
// data.transcodeVideoDialog.visible = true;
// // SDKURLrow.PLS_ID
// data.transcodeVideoDialog.src = `/api/video/start-preview?channel=${row.PLS_ID || 0}`;
// data.transcodeVideoDialog.id = row.PLS_ID;
// } catch (error) {
// ElMessage.error(": " + (error.message || ""));
// }
}; };
const fnDeleteVideo = async (row) => { const fnDeleteVideo = async (row) => {