From d5fb5e4d7a35532990b76f42133cd66adc9c0dd7 Mon Sep 17 00:00:00 2001 From: bestlee Date: Fri, 14 Aug 2026 12:04:27 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=98=E6=9B=B4=E5=9F=B9=E8=AE=AD=E5=86=85?= =?UTF-8?q?=E5=AE=B9=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/changeLedger/myChanges/index.vue | 1 - .../changeLedger/workshopChanges/index.vue | 1 - src/views/home/initiateChange/index.vue | 228 +++++++++++++++++- src/views/home/modules/Ed.vue | 18 ++ src/views/home/myDraft/index.vue | 1 - src/views/home/pending/index.vue | 1 - src/views/home/process/detail.vue | 1 - src/views/home/process/index.vue | 1 - src/views/home/processDetail/index.vue | 1 - 9 files changed, 243 insertions(+), 10 deletions(-) create mode 100644 src/views/home/modules/Ed.vue diff --git a/src/views/changeLedger/myChanges/index.vue b/src/views/changeLedger/myChanges/index.vue index 8e3886c..c7736ce 100644 --- a/src/views/changeLedger/myChanges/index.vue +++ b/src/views/changeLedger/myChanges/index.vue @@ -684,6 +684,5 @@ const revokeSave = () => { .scroll { height: calc(100vh - 326px); overflow-y: auto; - @include scrollbar(); } diff --git a/src/views/changeLedger/workshopChanges/index.vue b/src/views/changeLedger/workshopChanges/index.vue index 6b2888c..c002bfe 100644 --- a/src/views/changeLedger/workshopChanges/index.vue +++ b/src/views/changeLedger/workshopChanges/index.vue @@ -684,6 +684,5 @@ const revokeSave = () => { .scroll { height: calc(100vh - 326px); overflow-y: auto; - @include scrollbar(); } diff --git a/src/views/home/initiateChange/index.vue b/src/views/home/initiateChange/index.vue index 0128e24..0b731d3 100644 --- a/src/views/home/initiateChange/index.vue +++ b/src/views/home/initiateChange/index.vue @@ -8,6 +8,8 @@ import { } from "@/typings/model"; import { getColorWithOpacity } from "@/utils/common"; import HighlightText from "@/views/home/modules/HighlightText.vue"; +import Ed from "@/views/home/modules/Ed.vue"; + const themeStore = useThemeStore(); @@ -29,7 +31,7 @@ const form = ref({ name: "", dept: "", mainChanges: [""], related: "", purposes: [], effect: "", type: "", level: "", duration: "", urgent: false, date: null, restoreDate: null, }); -const tab = ref("form"); +const tab = ref("train"); const TABS = [ { id: "pre", name: "变更预识别", icon: 'lucide:sparkles' }, { id: "form", name: "变更申请表", icon: 'akar-icons:file' }, @@ -390,8 +392,94 @@ const finishApprover = () => { sheet.value = null; window.$message?.success('审批流程已更新(底部固定行摘要同步刷新)'); } +// 风险识别分析记录表 +const TOOL_CARDS = [ + { key: "HAZOP" as const, name: "HAZOP 分析", desc: "节点-偏离结构化分析:原因 / 后果 / LS 风险矩阵 / 安全措施" }, + { key: "JSA" as const, name: "JSA 分析", desc: "作业步骤分解:危害因素识别与 LS 风险分级管控" }, + { key: "检查表法" as const, name: "设备 SCL", desc: "设备 / 管理检查项目对照标准逐项核查" }, + { key: "通用检查表" as const, name: "风险检查表", desc: "变更通用检查项:是 / 否 / 不涉及逐项判定,输出风险描述与管控措施" }, +]; +const pluginDone = ref>({}); +const riskRecords = ref([]); +const updRec = (i: number, patch: Partial) => { + riskRecords.value = riskRecords.value.map((x, j) => (j === i ? { ...x, ...patch } : x)); +}; +const addRiskRecords = (items: any[], mode: "manual" | "ai") => { + riskRecords.value = [...riskRecords.value, ...items]; + if (mode === "ai") { + plugin.value = null; + window.$message?.success(`AI 已自动整理形成风险分析记录表(新增 ${items.length} 项),支持手动修改`); + } else { + window.$message?.success(`已选入 ${items.length} 条风险记录,可继续挑选或返回查看记录表`); + } +}; +const lvlNext = (v: string) => (v === "高" ? "中" : v === "中" ? "低" : "高"); +const pssrGroups = ref<{ g: string; items: any[] }[]>([ + { g: "一、风险分析行动项落实", items: [ + { c: "联锁跳车电流设定值校核并留存记录", p: "投用前" }, + { c: "电缆与开关容量校核升级完成", p: "投用前" }, + { c: "操作人员培训完成并考核合格", p: "投用前" }, + ] }, + { g: "二、现场设备安装检查确认", items: [ + { c: "电机安装就位,联轴器对中合格", p: "投用前" }, + { c: "地脚螺栓紧固,减振垫安装到位", p: "投用前" }, + { c: "电缆接线、防爆格兰头密封良好", p: "投用前" }, + ] }, + { g: "三、保护措施确认", items: [ + { c: "联锁跳车设定值与新电机额定电流匹配", p: "投用前" }, + { c: "电机外壳接地、防护罩完好", p: "投用前" }, + { c: "紧急停机按钮功能试验正常", p: "投用前" }, + ] }, + { g: "四、资料归档确认", items: [ + { c: "P&ID(图号 PID-R201-03)已更新并受控", p: "关闭前" }, + { c: "设备台账、备件清单已更新", p: "关闭前" }, + { c: "培训签到表、考核记录已归档", p: "关闭前" }, + ] }, +]); +const toPssr = (i: number) => { + const rec = riskRecords.value[i]; + if (!rec || rec.pssr) return; + pssrGroups.value = pssrGroups.value.map((g:any, gi:any) => gi === 0 + ? { ...g, items: [...g.items, { c: `${rec.suggest}(来源:风险分析记录表 · ${rec.item})`, p: "投用前" }] } + : g); + updRec(i, { pssr: true }); + window.$message?.success("建议措施已转为 PSSR 行动项(见「PSSR 检查内容」· 一、风险分析行动项落实)"); +}; +const toPssrAll = () => { + const rest = riskRecords.value.map((x:any, i:any) => (x.pssr ? -1 : i)).filter((i:any) => i >= 0); + if (!rest.length) { window.$message?.info("所有建议措施均已转为 PSSR 行动项"); return; } + const items = rest.map((i:any) => ({ c: `${riskRecords.value[i].suggest}(来源:风险分析记录表 · ${riskRecords.value[i].item})`, p: "投用前" })); + pssrGroups.value = pssrGroups.value.map((g:any, gi:any) => gi === 0 ? { ...g, items: [...g.items, ...items] } : g); + riskRecords.value = riskRecords.value.map((x:any) => ({ ...x, pssr: true })); + window.$message?.success(`已将 ${rest.length} 条建议措施全部转为 PSSR 行动项(见「PSSR 检查内容」)`); +}; +const aiOrganize = () => { + const gen: any[] = [ + { item: "超温溜温冲料", scene: "反应温度提升至 90℃ 后更接近溶剂回流温度,温控失效或冷却水中断时反应溜温,釜压骤升可能导致冲料与物料喷溅", inherent: "高", existing: "DCS 温度高报 95℃、高高报及联锁 100℃(随变更上调并重新整定);紧急冷却系统有效", suggest: "1. 投用前完成联锁传动测试并留存记录;2. 投用首周每班复核温度趋势,纳入交接班巡检", residual: "中", source: "AI 整理" }, + { item: "未知杂质累积影响", scene: "未知杂质含量由 0.05% 升至 0.12%,热稳定性尚未定性,长期累积加速釜壁结垢与搅拌负荷异常", inherent: "中", existing: "小试热稳定性筛查;安全阀泄放能力不受本次调整影响", suggest: "1. 将杂质含量纳入日常分析计划(每周 1 次,连续 8 周);2. 跟踪结垢趋势,安排周期清洗", residual: "低", source: "AI 整理" }, + { item: "联锁 / 报警设定失效", scene: "报警 / 联锁值上调后(高报 85→95℃、联锁 90→100℃),原有报警裕度改变,存在误报、漏报风险", inherent: "中", existing: "参数修改执行申请-复核双人确认", suggest: "1. 联锁逻辑图与台账同步更新并归档;2. 联锁测试纳入 PSSR 必查项", residual: "低", source: "AI 整理" }, + ]; + riskRecords.value = [...riskRecords.value, ...gen]; + window.$message?.success("AI 已根据变更内容自动整理形成风险分析记录表(3 项),支持手动修改"); +}; +// ---------- 变更培训 ---------- +const trainText = ref( +`培训对象:R-201 岗位操作人员(4 人)、维修班(2 人) +培训方式:现场讲解 + 操作演示 +一、变更内容 +M-201A 搅拌电机由 55kW 更换为 75kW 防爆电机(ExdⅡBT4 → ExdⅡCT4),额定电流 102A → 138A;电缆与开关容量同步升级,联锁跳车电流设定值同步校核调整。 +二、变化的操作方式 +1. 搅拌器启动:变更前直接启动、观察电流 ≤102A;变更后启动后核对电流 ≤138A,确认变频器参数已更新(注意:首次启动空载试运行 30 分钟) +2. 高粘度工况操作:变更前粘度 >3000cP 需降速运行;变更后粘度 ≤6000cP 可全速运行(注意:严禁超过 6000cP 上限) +3. 过载跳闸处置:变更前复位后直接重启;变更后先查明原因并记录,联锁复位需班长确认(注意:跳闸电流设定值已调整) + +三、潜在风险与应对措施 +1. 风险:电机 / 电缆过热 → 应对:投用首周每班测温并记录,红外点检复核 +2. 风险:联锁设定错误导致拒动 / 误动 → 应对:投用前完成跳车试验并留存记录 +3. 风险:防爆接合面或格兰头密封失效 → 应对:检查防爆接合面与格兰头,严禁带电开盖` +); @@ -757,6 +845,142 @@ const finishApprover = () => { + + + + @@ -978,11 +1202,9 @@ const finishApprover = () => { .scroll { height: calc(100vh - 326px); overflow-y: auto; - @include scrollbar(); } .scroll2 { height: calc(100vh - 409px); overflow-y: auto; - @include scrollbar(); } diff --git a/src/views/home/modules/Ed.vue b/src/views/home/modules/Ed.vue new file mode 100644 index 0000000..0a46784 --- /dev/null +++ b/src/views/home/modules/Ed.vue @@ -0,0 +1,18 @@ + + diff --git a/src/views/home/myDraft/index.vue b/src/views/home/myDraft/index.vue index 85c0c24..ea1d65f 100644 --- a/src/views/home/myDraft/index.vue +++ b/src/views/home/myDraft/index.vue @@ -97,6 +97,5 @@ const progressPct = (p: string) => { .scroll { height: calc(100vh - 190px); overflow-y: auto; - @include scrollbar(); } diff --git a/src/views/home/pending/index.vue b/src/views/home/pending/index.vue index 0db8fa1..3016e72 100644 --- a/src/views/home/pending/index.vue +++ b/src/views/home/pending/index.vue @@ -662,6 +662,5 @@ const revokeSave = () => { .scroll { height: calc(100vh - 260px); overflow-y: auto; - @include scrollbar(); } diff --git a/src/views/home/process/detail.vue b/src/views/home/process/detail.vue index 012aade..9f35f9c 100644 --- a/src/views/home/process/detail.vue +++ b/src/views/home/process/detail.vue @@ -180,6 +180,5 @@ onMounted(() => { .scroll { height: calc(100vh - 185px); overflow-y: auto; - @include scrollbar(); } diff --git a/src/views/home/process/index.vue b/src/views/home/process/index.vue index 5f29c5d..10446a8 100644 --- a/src/views/home/process/index.vue +++ b/src/views/home/process/index.vue @@ -214,6 +214,5 @@ function open(item:any) { .scroll { height: calc(100vh - 185px); overflow-y: auto; - @include scrollbar(); } diff --git a/src/views/home/processDetail/index.vue b/src/views/home/processDetail/index.vue index 012aade..9f35f9c 100644 --- a/src/views/home/processDetail/index.vue +++ b/src/views/home/processDetail/index.vue @@ -180,6 +180,5 @@ onMounted(() => { .scroll { height: calc(100vh - 185px); overflow-y: auto; - @include scrollbar(); }