From f1a515b70cc1d2a033c12a6181404e6449d25fcf Mon Sep 17 00:00:00 2001 From: bestlee Date: Mon, 7 Sep 2026 17:27:28 +0800 Subject: [PATCH] =?UTF-8?q?hazop=E6=8F=92=E4=BB=B6=E9=83=A8=E5=88=86?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/service/api/plugin.ts | 98 ++ src/views/my/initiateChange/index.vue | 2 + src/views/my/initiateChange/modules/hazop.vue | 872 ++++++++++++++---- .../initiateChange/modules/riskAnalysis.vue | 37 +- 4 files changed, 793 insertions(+), 216 deletions(-) create mode 100644 src/service/api/plugin.ts diff --git a/src/service/api/plugin.ts b/src/service/api/plugin.ts new file mode 100644 index 0000000..57d6eb1 --- /dev/null +++ b/src/service/api/plugin.ts @@ -0,0 +1,98 @@ +import { request } from '../request'; + +/** 获取HAZOP节点列表 + * + */ +export function hazopNodesApi(id: number) { + return request({ + url: `/api/changes/${id}/hazop/nodes`, + method: 'get', + }); +} + +// 新增HAZOP节点 +export function hazopNodeAddApi(id: number, data: { node_name: string }) { + return request({ + url: `/api/changes/${id}/hazop/nodes`, + method: 'post', + data, + }); +} +// 编辑HAZOP节点 +export function hazopNodeEditApi(node_id: number, data: { node_name: string }) { + return request({ + url: `/api/hazop/nodes/${node_id}`, + method: 'put', + data, + }); +} +// 删除HAZOP节点 +export function hazopNodeDelApi(node_id: number) { + return request({ + url: `/api/hazop/nodes/${node_id}`, + method: 'delete', + }); +} +// 新增分析对象 +export function hazopObjAddApi(node_id: number, data: { obj_name: string }) { + return request({ + url: `/api/hazop/nodes/${node_id}/objects`, + method: 'post', + data, + }); +} +// 编辑分析对象 +export function hazopObjEditApi(obj_id: number, data: { obj_name: string }) { + return request({ + url: `/api/hazop/objects/${obj_id}`, + method: 'put', + data, + }); +} +// 删除分析对象 +export function hazopObjDelApi(obj_id: number) { + return request({ + url: `/api/hazop/objects/${obj_id}`, + method: 'delete', + }); +} +// 新增偏离 +export function hazopDevAddApi(obj_id: number, data: { deviation: string }) { + return request({ + url: `/api/hazop/objects/${obj_id}/deviations`, + method: 'post', + data, + }); +} +// 编辑偏离 +export function hazopDevEditApi(dev_id: number, data: { deviation: string }) { + return request({ + url: `/api/hazop/deviations/${dev_id}`, + method: 'put', + data, + }); +} +// 删除偏离 +export function hazopDevDelApi(dev_id: number) { + return request({ + url: `/api/hazop/deviations/${dev_id}`, + method: 'delete', + }); +} + +// 新增偏离分析行 +export function hazopRowAddApi(dev_id: number, data: { + cause: string, + consequence: string, + l_value: number, + s_value: number, + risk_value:string, + safeguards:string, + suggestions:string +}) { + return request({ + url: `/api/hazop/deviations/${dev_id}/rows`, + method: 'post', + data, + }); +} diff --git a/src/views/my/initiateChange/index.vue b/src/views/my/initiateChange/index.vue index 6dc7ca0..36cbedf 100644 --- a/src/views/my/initiateChange/index.vue +++ b/src/views/my/initiateChange/index.vue @@ -145,6 +145,7 @@ const getOrgList = async () => { } } + // 获取所有表单数据 const getAllFormData = () => { let changePreForm = changePreRef.value?.form; @@ -316,6 +317,7 @@ onMounted(() => { :isAiOpen="aiEnabled" :title="title" :currentId="currentId" + :formInfo="changeApplyForm" @save="saveDraft" @submit="submitConfirm" @confirmTab="confirmTab" diff --git a/src/views/my/initiateChange/modules/hazop.vue b/src/views/my/initiateChange/modules/hazop.vue index 3230db8..b92b62d 100644 --- a/src/views/my/initiateChange/modules/hazop.vue +++ b/src/views/my/initiateChange/modules/hazop.vue @@ -1,41 +1,106 @@ + + diff --git a/src/views/my/initiateChange/modules/riskAnalysis.vue b/src/views/my/initiateChange/modules/riskAnalysis.vue index 5b53c1f..f0382f5 100644 --- a/src/views/my/initiateChange/modules/riskAnalysis.vue +++ b/src/views/my/initiateChange/modules/riskAnalysis.vue @@ -12,7 +12,7 @@ import Footer from './footer.vue' const themeStore = useThemeStore(); -const props = defineProps(['type','isAiOpen','title','currentId']) +const props = defineProps(['type','isAiOpen','title','currentId','formInfo']) const emit = defineEmits(['save','submit','confirmTab']); const form = ref<{ content: string }>({ @@ -105,9 +105,7 @@ const toPssr = (i: number) => { const updRec = (i: number, patch: Partial) => { riskRecords.value = riskRecords.value.map((x, j) => (j === i ? { ...x, ...patch } : x)); }; -const onBack = () => { - pluginDrawer.value = false; -} + const exportAll = (items: any[], mode: "manual" | "ai") => { riskRecords.value = [...riskRecords.value, ...items]; if (mode === "ai") { @@ -119,6 +117,16 @@ const exportAll = (items: any[], mode: "manual" | "ai") => { } } +// 使用插件弹框 +const usePlugin = (key: string) => { + currentPlugin.value = key; + pluginDrawer.value = true; +} +// 关闭插件弹框 +const closePlugin = () => { + pluginDrawer.value = false; +} + // 保存草稿 const saveDraft = () => { emit('save'); @@ -144,12 +152,12 @@ defineExpose({form}) 风险识别工具(按变更等级匹配) - + {{ formInfo?.change_level === 2 ? '规则:HAZOP 必做,同时开展 JSA 与检查表法(SCL)' : '规则:JSA + 检查表法(SCL),涉及工艺安全边界的应升级 HAZOP' }} +
- + 使用
@@ -190,7 +197,7 @@ defineExpose({form}) 全部转 PSSR 行动项 - + AI 自动整理 @@ -266,16 +273,16 @@ defineExpose({form})