From 85a98042a8d9d0da78f3d584ff7f023e8f144632 Mon Sep 17 00:00:00 2001 From: "zangch@mesnac.com" Date: Tue, 23 Dec 2025 14:18:43 +0800 Subject: [PATCH] =?UTF-8?q?feat(board):=20=E6=B7=BB=E5=8A=A0=E5=AE=89?= =?UTF-8?q?=E7=81=AF=E7=9C=8B=E6=9D=BF=E5=8A=9F=E8=83=BD=E5=B9=B6=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E7=9C=8B=E6=9D=BF=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增安灯看板页面,支持实时显示安灯事件统计和列表 - 添加安灯看板配置页面,支持展示字段配置和操作说明 - 修复看板页面定时器清理逻辑,防止内存泄漏 - 更新路由配置,添加安灯看板访问路径 - 修改白名单配置,允许安灯看板免登录访问 - 创建安灯看板API接口,提供数据查询服务 - 优化配置页面字典数据处理,移除冗余字典依赖 - 添加展示字段配置功能,支持自定义列显示和格式化 --- src/api/production/andonBoard.js | 10 + src/layout/boardIndex.vue | 5 +- src/permission.js | 2 +- src/router/index.js | 6 + src/views/board/andonBoard/index.vue | 683 ++++++++++++++++++ .../production/andonBoardConfig/index.vue | 90 ++- 6 files changed, 781 insertions(+), 15 deletions(-) create mode 100644 src/api/production/andonBoard.js create mode 100644 src/views/board/andonBoard/index.vue diff --git a/src/api/production/andonBoard.js b/src/api/production/andonBoard.js new file mode 100644 index 0000000..4d711d1 --- /dev/null +++ b/src/api/production/andonBoard.js @@ -0,0 +1,10 @@ +import request from '@/utils/request' + +export function viewAndonBoard(boardCode) { + return request({ + url: '/production/andonBoard/view', + method: 'get', + params: { boardCode }, + headers: { isToken: false } + }) +} diff --git a/src/layout/boardIndex.vue b/src/layout/boardIndex.vue index c2caf12..6a14e81 100644 --- a/src/layout/boardIndex.vue +++ b/src/layout/boardIndex.vue @@ -34,7 +34,10 @@ export default { getDateIntervalFun = setInterval(getDate, 1000) }, beforeDestroy() { - getDateIntervalFun = null + if (getDateIntervalFun) { + clearInterval(getDateIntervalFun) + getDateIntervalFun = null + } } } diff --git a/src/permission.js b/src/permission.js index 2a904ee..49bec4c 100644 --- a/src/permission.js +++ b/src/permission.js @@ -8,7 +8,7 @@ import { isRelogin } from '@/utils/request' NProgress.configure({ showSpinner: false }) -const whiteList = ['/login', '/board1', '/board2', '/board3', '/board5', '/board6', '/register', '/liner', '/caseShell2', '/foaming', '/foaming2', '/pourInto', '/finalAssembly', '/scanDown', '/week', '/week2', '/model'] +const whiteList = ['/login', '/board1', '/board2', '/board3', '/board5', '/board6', '/register', '/liner', '/caseShell2', '/foaming', '/foaming2', '/pourInto', '/finalAssembly', '/scanDown', '/week', '/week2', '/model', '/andonBoard'] router.beforeEach((to, from, next) => { NProgress.start() diff --git a/src/router/index.js b/src/router/index.js index 69243d9..431d346 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -199,6 +199,12 @@ export const constantRoutes = [ component: () => import('@/views/board/week2/index'), meta: {title: '综合看板', icon: 'dashboard',} }, + { + path: 'andonBoard', + name: 'AndonBoard', + component: () => import('@/views/board/andonBoard/index'), + meta: {title: '安灯看板', icon: 'dashboard',} + }, ] }, { diff --git a/src/views/board/andonBoard/index.vue b/src/views/board/andonBoard/index.vue new file mode 100644 index 0000000..0703187 --- /dev/null +++ b/src/views/board/andonBoard/index.vue @@ -0,0 +1,683 @@ + + + + + diff --git a/src/views/production/andonBoardConfig/index.vue b/src/views/production/andonBoardConfig/index.vue index f94e24e..88b0235 100644 --- a/src/views/production/andonBoardConfig/index.vue +++ b/src/views/production/andonBoardConfig/index.vue @@ -47,12 +47,8 @@ - + + --> @@ -118,7 +114,7 @@ @@ -179,16 +175,19 @@ /> + + +
+ 操作说明 +
+
- {{dict.label}} + 有效 + 无效 @@ -200,6 +199,37 @@ 取 消 + + + +
+

作用:控制大屏进行中/已关闭列表显示哪些列、顺序与标题,可单独设置列宽与对齐。

+

写法示例:

+
    +
  1. 逗号分隔字符串(两张表共用同列)
    callCode,stationCode,eventStatus,priority,createTime
  2. +
  3. JSON 数组(可带 label/width/align)
    [
    +  "callCode",
    +  { "field": "eventStatus", "label": "状态", "align": "center" }
    +]
  4. +
  5. JSON 对象区分进行中/已关闭
    {
    +  "activeFields": ["callCode","priority"],
    +  "closedFields": ["callCode","responseEndTime","resolution"]
    +}
  6. +
+

可用字段:

+
+
    +
  • + {{ f.field }} - {{ f.label }} +
  • +
+
+

未填写或格式错误时会回退默认列,label/width/align 未设置则自动使用字段默认标题。

+
+ + 知道了 + +
@@ -210,7 +240,7 @@ import { listProcessStation } from "@/api/base/processStation"; export default { name: "AndonBoardConfig", - dicts: ['is_flag'], + dicts: [], data() { return { // 遮罩层 @@ -235,6 +265,8 @@ export default { title: "", // 是否显示弹出层 open: false, + // 操作说明弹层 + helpVisible: false, // 查询参数 queryParams: { pageNum: 1, @@ -276,6 +308,37 @@ export default { { key: 11, label: `更新人`, visible: true }, { key: 12, label: `更新时间`, visible: true }, ] + , + // 可用字段列表(与大屏展示字段映射一致) + availableFields: [ + { field: "index", label: "序号(前端行号)" }, + { field: "eventId", label: "事件ID" }, + { field: "callCode", label: "呼叫单号" }, + { field: "callTypeCode", label: "呼叫类型" }, + { field: "sourceType", label: "触发源类型(工位/设备/报警/手动)" }, + { field: "sourceRefId", label: "触发源编码" }, + { field: "productLineCode", label: "产线编码" }, + { field: "stationCode", label: "工位/工序编码" }, + { field: "teamCode", label: "班组编码" }, + { field: "orderCode", label: "工单号" }, + { field: "materialCode", label: "物料编码" }, + { field: "deviceCode", label: "设备编码" }, + { field: "priority", label: "优先级" }, + { field: "eventStatus", label: "状态(待处理/处理中/已解决/已取消)" }, + { field: "description", label: "呼叫描述" }, + { field: "ackBy", label: "确认人" }, + { field: "ackTime", label: "确认时间" }, + { field: "responseStartTime", label: "开始处理时间" }, + { field: "responseEndTime", label: "完成时间" }, + { field: "resolution", label: "解决措施" }, + { field: "cancelReason", label: "取消原因" }, + { field: "escalateLevel", label: "升级级别" }, + { field: "escalateTime", label: "升级时间" }, + { field: "ackDeadline", label: "确认截止时间" }, + { field: "resolveDeadline", label: "解决截止时间" }, + { field: "createTime", label: "创建时间" }, + { field: "updateTime", label: "更新时间" } + ] }; }, created() { @@ -337,6 +400,7 @@ export default { /** 新增按钮操作 */ handleAdd() { this.reset(); + this.form.isFlag = '1'; // 默认有效 this.open = true; this.title = "添加安灯看板配置"; },