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
v-for="item in data.personList"
:key="item.id"
:label="item.name"
:label="item.u_name"
:value="item.id"
/>
</el-select>

View File

@ -218,8 +218,8 @@
<el-button
v-if="
userStore.getUserInfo.ISMAIN === '1' &&
entrance === 'archive' &&
row.STEP_ID !== -1
row.STEP_ID !== -1 &&
row.STEP_ID !== 0
"
type="danger"
text
@ -240,7 +240,7 @@
<check-list
v-if="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
v-model:visible="data.videoDialog.visible"

View File

@ -29,7 +29,7 @@
/>
</el-form-item>
<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
v-for="item in data.workshopUserList"
:key="item.USER_ID"
@ -45,7 +45,7 @@
/>
</el-form-item>
<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
v-for="item in data.leaderUserList"
:key="item.USER_ID"
@ -61,7 +61,7 @@
/>
</el-form-item>
<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
v-for="item in data.auditUserList"
:key="item.USER_ID"
@ -78,7 +78,7 @@
/>
</el-form-item>
<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
v-for="item in data.approveUserList"
:key="item.USER_ID"
@ -94,7 +94,7 @@
/>
</el-form-item>
<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
v-for="item in data.projectUserList"
:key="item.USER_ID"
@ -151,23 +151,18 @@ const props = defineProps({
const emits = defineEmits(["update:visible", "update:form", "get-data"]);
const { visible, form } = useVModels(props, emits);
const fnHasLevel = async (rule, value, callback) => {
if (value) {
const resData = await getBlindBoardVerifyConfigurationUser({
APPLY_DEPARTMENT_ID: form.value.APPLY_DEPARTMENT_ID,
});
if (resData?.pd?.APPLY_DEPARTMENT_ID)
callback(new Error("该申请部门已存在"));
else callback();
} else {
callback();
}
const fnHasLevel = async () => {
const resData = await getBlindBoardVerifyConfigurationUser({
APPLY_DEPARTMENT_ID: form.value.APPLY_DEPARTMENT_ID,
});
if (resData?.pd?.APPLY_DEPARTMENT_ID)
return ElMessage.error("该申请单位已存在");
};
const rules = {
APPLY_DEPARTMENT_ID: [
{ required: true, message: "请选择申请部门", trigger: "change" },
{ validator: fnHasLevel, trigger: "blur" },
// { validator: fnHasLevel, trigger: "blur" },
],
LEADER_DEPARTMENT_ID: [
{
@ -222,24 +217,24 @@ const data = reactive({
const fnLeaderDepartmentChange = () => {
data.leaderUserList = [];
form.value.LEADER_USER_ID = "";
form.value.LEADER_USER_ID = [];
};
const fnAuditDepartmentChange = () => {
data.auditUserList = [];
form.value.AUDIT_USER_ID = "";
form.value.AUDIT_USER_ID = [];
};
const fnApproveDepartmentChange = () => {
data.approveUserList = [];
form.value.APPROVE_USER_ID = "";
form.value.APPROVE_USER_ID = [];
};
const fnWorkshopDepartmentChange = () => {
data.workshopUserList = [];
form.value.WORKSHOP_USER_ID = "";
form.value.WORKSHOP_USER_ID = [];
};
const fnProjectDepartmentChange = () => {
data.projectUserList = [];
form.value.PROJECT_MANAGER_USER_ID = "";
form.value.PROJECT_MANAGER_USER_ID = [];
};
const fnClose = () => {
@ -252,11 +247,39 @@ const fnSubmit = debounce(
1000,
async () => {
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") {
await useFormValidate(formRef);
await setBlindBoardConfigurationUserAdd(form);
const isCon = await fnHasLevel();
if (!isCon) {
await setBlindBoardConfigurationUserAdd(params);
} else {
return false;
}
} else {
await setBlindBoardConfigurationUserEdit(form);
await setBlindBoardConfigurationUserEdit(params);
}
ElMessage.success("提交成功");
fnClose();
@ -305,6 +328,7 @@ watchEffect(() => {
if (form.value.PROJECT_MANAGER_DEPARTMENT_ID)
fnGetProjectUser(form.value.PROJECT_MANAGER_DEPARTMENT_ID);
});
watchEffect(() => {});
</script>
<style scoped lang="scss"></style>

View File

@ -169,16 +169,16 @@ const data = reactive({
CONFIGURATION_ID: "",
APPLY_DEPARTMENT_ID: "",
WORK_LEVEL: "",
WORKSHOP_DEPARTMENT_ID: "",
WORKSHOP_USER_ID: [],
LEADER_DEPARTMENT_ID: "",
LEADER_USER_ID: "",
LEADER_USER_ID: [],
AUDIT_DEPARTMENT_ID: "",
AUDIT_USER_ID: "",
AUDIT_USER_ID: [],
APPROVE_DEPARTMENT_ID: "",
APPROVE_USER_ID: "",
MONITOR_DEPARTMENT_ID: "",
MONITOR_USER_ID: "",
APPROVE_USER_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({
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;
};

View File

@ -224,8 +224,8 @@
<el-button
v-if="
userStore.getUserInfo.ISMAIN === '1' &&
entrance === 'archive' &&
row.STEP_ID !== -1
row.STEP_ID !== -1 &&
row.STEP_ID !== 0
"
type="danger"
text
@ -246,7 +246,7 @@
<check-list
v-if="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
v-model:visible="data.videoDialog.visible"

View File

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

View File

@ -179,15 +179,17 @@ const data = reactive({
APPLY_DEPARTMENT_ID: "",
WORK_LEVEL: "",
LEADER_DEPARTMENT_ID: "",
LEADER_USER_ID: "",
LEADER_USER_ID: [],
AUDIT_DEPARTMENT_ID: "",
AUDIT_USER_ID: "",
AUDIT_USER_ID: [],
APPROVE_DEPARTMENT_ID: "",
APPROVE_USER_ID: "",
MONITOR_DEPARTMENT_ID: "",
MONITOR_USER_ID: "",
APPROVE_USER_ID: [],
WORKSHOP_DEPARTMENT_ID: "",
WORKSHOP_USER_ID: [],
SAFETY_DEPARTMENT_ID: "",
SAFETY_USER_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({
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;
};

View File

@ -91,7 +91,7 @@ import { ref } from "vue";
import { debounce } from "throttle-debounce";
import useFormValidate from "@/assets/js/useFormValidate.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 {
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>
<div class="container">
<div style="width: 300px">
<el-input
v-model="searchTextWait"
class="mb-10"
placeholder="输入搜索内容"
>
<template #append>
<el-button :icon="Search" @click="fnSetSearch" />
</template>
</el-input>
<el-tree
ref="treeRef"
node-key="label"
accordion
:data="treeData"
:filter-node-method="fnFilterNode"
:default-expanded-keys="[treeData.length > 0 ? treeData[0].label : '']"
@node-click="fnNodeClick"
/>
<div>
<el-button
size="small"
style="
margin-right: 10px;
background-color: transparent;
border: 0;
color: white;
border-radius: 4px;
padding: 8px 12px;
height: 36px;
margin-bottom: 10px;
"
@click="goBack"
>
<el-icon><arrow-left /></el-icon>
返回
</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 style="flex: 1; display: flex; flex-wrap: wrap; gap: 20px">
<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 style="flex: 1">
<div style="margin-bottom: 20px; padding: 0 20px">
<el-breadcrumb separator="/" style="margin-top: 10px">
<!-- 动态面包屑项 -->
<el-breadcrumb-item
v-for="(item, index) in breadcrumbItems"
: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>
<view-info
@ -36,6 +84,7 @@
v-model:visible="item.visible"
:item="item"
/>
<waring v-model:visible="waringDialog" :list="waringList" />
</template>
<script setup>
@ -45,7 +94,10 @@ import ViewInfo from "./components/view_info.vue";
import { getEquipmentInfo, getEquipmentTree } from "@/request/gas_alarm.js";
import { useUserStore } from "@/pinia/user.js";
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(
() => {
fnGetData();
@ -58,6 +110,9 @@ const treeRef = ref(null);
const treeData = ref([]);
const searchText = ref("");
const searchTextWait = ref("");
const breadcrumbItems = ref([]);
const defaultExpandedKeys = ref([]); //
let isFirstLoad = true; //
const fnFilterNode = (value, data) => {
if (!value) return true;
return data.label.includes(value);
@ -65,6 +120,24 @@ const fnFilterNode = (value, data) => {
const fnNodeClick = (_data, { data, parent }) => {
searchTextWait.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) {
equipmentInfoParams = {
ORG: parent.data.label,
@ -79,9 +152,16 @@ const fnNodeClick = (_data, { data, parent }) => {
fnDisposeEcharts();
pause();
resume();
// false
if (isFirstLoad) {
isFirstLoad = false;
}
};
const list = ref([]);
const waringList = ref([]);
const waringDialog = ref(false);
const dialog = ref([]);
let equipmentInfoParams = {};
onMounted(() => {
@ -100,15 +180,71 @@ const fnConversionTree = (data) => {
});
};
const fnGetTreeData = async () => {
const { root } = await getEquipmentTree({
const { root, npd } = await getEquipmentTree({
DEVICE_TYPE: "gdsyyhtbjq01",
CORPINFO_ID: userStore.getUserInfo.CORPINFO_ID,
});
treeData.value = fnConversionTree(root.children);
equipmentInfoParams = {
ORG: treeData.value[0].label,
DEPARTMENT: treeData.value[0].children[0].label,
};
// npd.ALLDEPTNAME
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();
};
let isPending = false;
@ -123,11 +259,24 @@ const fnGetData = async () => {
loading: false,
});
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;
await nextTick();
list.value.forEach(async (item) => {
for (const item of list.value) {
await fnInitEcharts(item);
});
}
};
let myChartMap = {};
const fnInitEcharts = (data) => {
@ -186,11 +335,11 @@ const fnInitEcharts = (data) => {
lineStyle: {
width: 10,
color: [
[23/200, '#FFFFFF'],
[50/200, '#00FF00'],
[100/200, '#0000FF'],
[160/200, '#FFFF00'],
[1, '#FF0000']
[23 / 200, "#FFFFFF"],
[50 / 200, "#00FF00"],
[100 / 200, "#0000FF"],
[160 / 200, "#FFFF00"],
[1, "#FF0000"],
// [23/200, normalColor],
// [0.50, alarmColor],
// [1.0, alarmColors],
@ -207,12 +356,12 @@ const fnInitEcharts = (data) => {
show: true,
offsetCenter: ["0", "80%"],
fontSize: 20,
color: getColorByValue(data.CURRENT_VALUE)
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)
color: getColorByValue(data.CURRENT_VALUE),
},
pointer: { width: 3, length: "95%" },
data: [{ value: data.CURRENT_VALUE }],
@ -267,12 +416,21 @@ const fnDisposeEcharts = () => {
myChartMap = {};
};
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)'; //
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)"; //
};
const goBack = () => {
window.history.back();
};
onBeforeUnmount(() => {
fnDisposeEcharts();
});

View File

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

View File

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

View File

@ -48,16 +48,6 @@
</template>
</el-table-column>
<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
prop="SAFETY_DEPARTMENT_NAME"
label="水、电、汽、工艺、设备、消防、 安全管理等动土所在单位"
@ -68,6 +58,16 @@
label="水、电、汽、工艺、设备、消防、 安全管理等动土所在单位负责人"
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">
<template #default="{ row }">
@ -138,9 +138,9 @@ const data = reactive({
CONFIGURATION_ID: "",
APPLY_DEPARTMENT_ID: "",
AUDIT_DEPARTMENT_ID: "",
AUDIT_USER_ID: "",
AUDIT_USER_ID: [],
SAFETY_DEPARTMENT_ID: "",
SAFETY_USER_ID: "",
SAFETY_USER_ID: [],
},
},
});
@ -192,6 +192,8 @@ const fnGoEdit = async (id) => {
const resData = await getBreakGroundConfigurationUserView({
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;
};

View File

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

View File

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

View File

@ -11,6 +11,9 @@
<el-divider />
<el-checkbox-group v-model="checkOptions" @change="fnCheckedChange">
<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-checkbox :label="item" :value="item" />
</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 checkOptions = ref(options);
const checkOptions = ref(defaultOptions);
const havePicture = ref(false);
const fnCheckAllChange = (val) => {
checkOptions.value = val ? options : [];
// defaultOptions+optionscheckOptions
checkOptions.value = val ? [...defaultOptions, ...options] : [];
isIndeterminate.value = false;
};
const fnCheckedChange = (value) => {
@ -113,16 +116,15 @@ const fnCheckedChange = (value) => {
};
const fnClose = () => {
visible.value = false;
checkOptions.value = options;
checkOptions.value = defaultOptions;
isIndeterminate.value = false;
checkAll.value = true;
checkAll.value = false;
havePicture.value = false;
};
const fnSubmit = debounce(
1000,
() => {
checkOptions.value = [...defaultOptions, ...checkOptions.value];
console.log(checkOptions.value);
checkOptions.value = [...checkOptions.value];
let data = {
havePicture: 1,
ids: props.ids.join(","),

View File

@ -7,6 +7,18 @@
@submit.prevent="fnResetPaginationTransfer"
>
<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-form-item label="隐患描述" prop="KEYWORDS">
<el-input v-model="searchForm.KEYWORDS" />
@ -113,19 +125,15 @@
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label-width="10px">
<el-col :span="24">
<el-form-item label-width="10px" class="end">
<el-button type="primary" native-type="submit">搜索</el-button>
<el-button native-type="reset" @click="fnResetPaginationTransfer">
重置
</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="fnExport"></el-button>
<!-- <el-button type="success" @click="fnReport"> </el-button>-->
</el-form-item>
</el-col>
</el-row>
@ -203,7 +211,9 @@
/>
<el-table-column label="是否合格" width="100">
<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>
</template>
</el-table-column>
@ -355,6 +365,7 @@ const fnGetDataTransfer = () => {
ENDTIME: searchForm.value.dates?.[1],
HIDDEN_RECTIFICATION_DEPT_IDS:
searchForm.value.HIDDEN_RECTIFICATION_DEPT_IDS?.join(","),
checkedIds: searchForm.value.checkedIds?.join(","),
HIDDEN_FIND_DEPT_IDS: searchForm.value.HIDDEN_FIND_DEPT_IDS?.join(","),
HIDDEN_CONFIRM_DEPT_IDS:
searchForm.value.HIDDEN_CONFIRM_DEPT_IDS?.join(","),
@ -366,6 +377,7 @@ const fnResetPaginationTransfer = () => {
ENDTIME: searchForm.value.dates?.[1],
HIDDEN_RECTIFICATION_DEPT_IDS:
searchForm.value.HIDDEN_RECTIFICATION_DEPT_IDS?.join(","),
checkedIds: searchForm.value.checkedIds?.join(","),
HIDDEN_FIND_DEPT_IDS: searchForm.value.HIDDEN_FIND_DEPT_IDS?.join(","),
HIDDEN_CONFIRM_DEPT_IDS:
searchForm.value.HIDDEN_CONFIRM_DEPT_IDS?.join(","),

View File

@ -57,7 +57,7 @@
/>
<el-table-column
prop="SAFETY_USER_NAME"
label="安全部负责人"
label="生产部负责人"
show-overflow-tooltip
/>
<el-table-column
@ -122,7 +122,7 @@
<check-list
v-if="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>
</template>

View File

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

View File

@ -12,7 +12,11 @@
</thead>
<tr>
<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>{{ data.info.APPLY_USER_NAME }}</td>
</tr>
@ -287,7 +291,7 @@
</tr>
<tr v-if="data.signs.SAFETY">
<td colspan="10">
<div>安全部意见{{ data.signs.SAFETY?.[0].DESCR }}</div>
<div>生产部意见{{ data.signs.SAFETY?.[0].DESCR }}</div>
<div
v-for="(item, index) in data.signs.SAFETY?.[0].SIGN_TIME"
:key="index"

View File

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

View File

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

View File

@ -60,7 +60,7 @@
/>
<el-table-column
prop="SAFETY_USER_NAME"
label="安全部负责人"
label="生产部负责人"
width="100"
/>
<el-table-column prop="ACCEPT_USER_NAME" label="验收部门负责人" />
@ -123,7 +123,7 @@
<check-list
v-if="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>
</template>

View File

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

View File

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

View File

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

View File

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

View File

@ -217,8 +217,8 @@
<el-button
v-if="
userStore.getUserInfo.ISMAIN === '1' &&
entrance === 'archive' &&
row.STEP_ID !== -1
row.STEP_ID !== -1 &&
row.STEP_ID !== 0
"
type="danger"
text
@ -244,7 +244,7 @@
<check-list
v-if="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
:id="data.showPointsDialog.id"

View File

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

View File

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

View File

@ -34,24 +34,28 @@
</el-col>
<el-col :span="4">
<el-form-item label-width="10px">
<el-button type="primary" native-type="submit">搜索</el-button>
<el-button native-type="reset" @click="fnGetDataTransfer">
重置
</el-button>
<el-button type="primary" @click="fnGetDataTransfer"
>搜索</el-button
>
<el-button @click="reset"> </el-button>
</el-form-item>
</el-col>
</el-row>
</el-form>
</el-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">
<template #default="{ $index }">
{{ serialNumber(pagination, $index) }}
</template>
</el-table-column>
<el-table-column prop="NAME" label="部门" />
<el-table-column prop="LOGIN_RATE" label="登录率" />
</layout-table>
</layout-card>
@ -62,10 +66,10 @@
import LayoutDepartment from "@/components/department/index.vue";
import { serialNumber } from "@/assets/js/utils.js";
import useListData from "@/assets/js/useListData.js";
import {
getFhlogStatsList,
getDetectionSituationListTime,
} from "@/request/statistical_analysis.js";
import { getFhlogStatsList } from "@/request/statistical_analysis.js";
import { sumBy } from "lodash-es";
import dayjs from "dayjs";
import { onMounted } from "vue";
const handleExtraData = (dataList) => {
dataList.forEach((item) => {
@ -81,6 +85,11 @@ const { list, searchForm, pagination, fnGetData } = useListData(
usePagination: false,
}
);
onMounted(() => {
reset();
});
const fnGetDataTransfer = () => {
fnGetData({
START_TIME: searchForm.value.dates?.[0],
@ -88,13 +97,48 @@ const fnGetDataTransfer = () => {
DEPTIDS: searchForm.value.DEPTIDS?.join(","),
});
};
const fnInit = async () => {
const resData = await getDetectionSituationListTime();
searchForm.value.dates = [resData.pd.MINTIME, resData.pd.MAXTIME];
const reset = () => {
searchForm.value.dates = [
dayjs().startOf("year").format("YYYY-MM-DD"),
dayjs().format("YYYY-MM-DD"),
];
searchForm.value.DEPTIDS = [];
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>
<style scoped lang="scss"></style>

View File

@ -209,8 +209,8 @@
<el-button
v-if="
userStore.getUserInfo.ISMAIN === '1' &&
entrance === 'archive' &&
row.STEP_ID !== -1
row.STEP_ID !== -1 &&
row.STEP_ID !== 0
"
type="danger"
text
@ -231,7 +231,7 @@
<check-list
v-if="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
v-model:visible="data.videoDialog.visible"

View File

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

View File

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

View File

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

View File

@ -1,6 +1,27 @@
<template>
<el-dialog v-model="visible" :title="title" :before-close="fnClose">
<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-col :span="8">
<el-form-item label="证书类型">
@ -66,6 +87,14 @@ const calculateRate = (item) => {
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 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 = () => {
// dataList fnumber
if (dataList.value && dataList.value.varList) {

View File

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

View File

@ -34,17 +34,20 @@
</el-col>
<el-col :span="4">
<el-form-item label-width="10px">
<el-button type="primary" native-type="submit">搜索</el-button>
<el-button native-type="reset" @click="fnGetDataTransfer">
重置
</el-button>
<el-button type="primary" @click="search"></el-button>
<el-button @click="fnGetDataTransfer"> </el-button>
</el-form-item>
</el-col>
</el-row>
</el-form>
</el-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">
<template #default="{ $index }">
{{ serialNumber(pagination, $index) }}
@ -52,9 +55,13 @@
</el-table-column>
<el-table-column prop="DEPARTMENT_NAME" label="部门" />
<el-table-column prop="TOTAL_COUNT" label="清单数量" />
<el-table-column prop="TOTAL_CODE_num" label="待排查清单数量" />
<el-table-column prop="ALREADY_CHECK_COUNT" label="己排查清单数量" />
<el-table-column prop="CHECK_RATE" label="排查率" />
<el-table-column prop="NEED_COUNT" label="应排查次数" />
<el-table-column prop="REAL_COUNT" label="已排查次数" />
<el-table-column prop="CHECK_RATE" label="排查率">
<template #default="{ row }">
{{ row.CHECK_RATE + "%" }}
</template>
</el-table-column>
</layout-table>
</layout-card>
</div>
@ -68,11 +75,19 @@ import {
getListmanagerDeptList,
getDetectionSituationListTime,
} from "@/request/statistical_analysis.js";
import dayjs from "dayjs";
import { sumBy } from "lodash-es";
const handleExtraData = (dataList) => {
dataList.forEach((item) => {
item.TOTAL_CODE_num = item.TOTAL_COUNT - item.ALREADY_CHECK_COUNT;
item.CHECK_RATE = item.CHECK_RATE.toFixed(2) + "%";
if (item.NEED_COUNT && item.REAL_COUNT) {
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,
}
);
const fnGetDataTransfer = () => {
searchForm.value.dates = [
dayjs().startOf("year").format("YYYY-MM-DD"),
dayjs().format("YYYY-MM-DD"),
];
searchForm.value.DEPTIDS = [];
fnGetData({
START_TIME: searchForm.value.dates?.[0],
END_TIME: searchForm.value.dates?.[1],
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 resData = await getDetectionSituationListTime();
searchForm.value.dates = [resData.pd.MINTIME, resData.pd.MAXTIME];

View File

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

View File

@ -192,7 +192,11 @@
审批表详情
</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"
text
link
@ -212,7 +216,7 @@
<check-list
v-if="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
v-model:visible="data.videoDialog.visible"
@ -236,7 +240,8 @@ import {
getTemporaryElectricityUsageFlow,
getTaskSetps,
getTemporaryElectricityUsageList,
setEightWorkInvalid, getApplyDept
setEightWorkInvalid,
getApplyDept,
} from "@/request/eight_work.js";
import LayoutVideo from "@/components/video/index.vue";
import CheckList from "@/components/safety_briefing_checklist/index.vue";

View File

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

View File

@ -138,9 +138,9 @@ const data = reactive({
CONFIGURATION_ID: "",
APPLY_DEPARTMENT_ID: "",
AUDIT_DEPARTMENT_ID: "",
AUDIT_USER_ID: "",
AUDIT_USER_ID: [],
APPROVE_DEPARTMENT_ID: "",
APPROVE_USER_ID: "",
APPROVE_USER_ID: [],
},
},
});
@ -190,6 +190,8 @@ const fnGoEdit = async (id) => {
const resData = await getElectricityConfigurationUserView({
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;
};

View File

@ -209,6 +209,16 @@ const fnPreviewVideo = async (row) => {
} catch (error) {
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) => {