diff --git a/klp-ui/src/api/hrm/index.js b/klp-ui/src/api/hrm/index.js new file mode 100644 index 00000000..3b8a7089 --- /dev/null +++ b/klp-ui/src/api/hrm/index.js @@ -0,0 +1,341 @@ +import request from '@/utils/request' + +// 组织 +export function listOrg(query) { + return request({ + url: '/hrm/org/list', + method: 'get', + params: query + }) +} +export function allOrg(query) { + return request({ + url: '/hrm/org/all', + method: 'get', + params: query + }) +} +export function addOrg(data) { + return request({ + url: '/hrm/org', + method: 'post', + data + }) +} +export function updateOrg(data) { + return request({ + url: '/hrm/org', + method: 'put', + data + }) +} +export function delOrg(orgIds) { + return request({ + url: `/hrm/org/${orgIds}`, + method: 'delete' + }) +} +export function getOrg(orgId) { + return request({ + url: `/hrm/org/${orgId}`, + method: 'get' + }) +} + +// 员工 +export function listEmployee(query) { + return request({ + url: '/hrm/employee/list', + method: 'get', + params: query + }) +} +export function allEmployee(query) { + return request({ + url: '/hrm/employee/all', + method: 'get', + params: query + }) +} +export function addEmployee(data) { + return request({ + url: '/hrm/employee', + method: 'post', + data + }) +} +export function updateEmployee(data) { + return request({ + url: '/hrm/employee', + method: 'put', + data + }) +} +export function delEmployee(empIds) { + return request({ + url: `/hrm/employee/${empIds}`, + method: 'delete' + }) +} +export function getEmployee(empId) { + return request({ + url: `/hrm/employee/${empId}`, + method: 'get' + }) +} + +// 证书与合同 +export function listCertificate(query) { + return request({ + url: '/hrm/certificate/list', + method: 'get', + params: query + }) +} +export function listContract(query) { + return request({ + url: '/hrm/contract/list', + method: 'get', + params: query + }) +} + +// 员工组织岗位关系 +export function listEmpOrgPosition(query) { + return request({ + url: '/hrm/empOrg/list', + method: 'get', + params: query + }) +} + +// 职级/岗位 +export function listGrade(query) { + return request({ + url: '/hrm/grade/list', + method: 'get', + params: query + }) +} +export function listPosition(query) { + return request({ + url: '/hrm/position/list', + method: 'get', + params: query + }) +} + +// 班次/排班/打卡/考勤 +export function listShift(query) { + return request({ + url: '/hrm/shift/list', + method: 'get', + params: query + }) +} +export function listSchedule(query) { + return request({ + url: '/hrm/schedule/list', + method: 'get', + params: query + }) +} +export function listPunch(query) { + return request({ + url: '/hrm/punch/list', + method: 'get', + params: query + }) +} +export function listAttendCalc(query) { + return request({ + url: '/hrm/attend/list', + method: 'get', + params: query + }) +} +export function listLeaveBalance(query) { + return request({ + url: '/hrm/leave/balance/list', + method: 'get', + params: query + }) +} + +// 申请单 +export function listLeaveReq(query) { + return request({ + url: '/hrm/leave/req/list', + method: 'get', + params: query + }) +} +export function listOvertimeReq(query) { + return request({ + url: '/hrm/overtime/req/list', + method: 'get', + params: query + }) +} +export function listTravelReq(query) { + return request({ + url: '/hrm/travel/req/list', + method: 'get', + params: query + }) +} +export function listSealReq(query) { + return request({ + url: '/hrm/seal/list', + method: 'get', + params: query + }) +} +export function getSealReq(bizId) { + return request({ + url: `/hrm/seal/${bizId}`, + method: 'get' + }) +} +export function addSealReq(data) { + return request({ + url: '/hrm/seal', + method: 'post', + data + }) +} +export function updateSealReq(data) { + return request({ + url: '/hrm/seal', + method: 'put', + data + }) +} +export function delSealReq(bizIds) { + return request({ + url: `/hrm/seal/${bizIds}`, + method: 'delete' + }) +} +export function approveSealReq(bizId) { + return request({ + url: `/hrm/seal/${bizId}/approve`, + method: 'post' + }) +} +export function rejectSealReq(bizId) { + return request({ + url: `/hrm/seal/${bizId}/reject`, + method: 'post' + }) +} +export function cancelSealReq(bizId) { + return request({ + url: `/hrm/seal/${bizId}/cancel`, + method: 'post' + }) +} +export function stampSealJava(bizId, data) { + return request({ + url: `/hrm/seal/${bizId}/stamp/java`, + method: 'post', + data + }) +} +export function stampSealPython(bizId, data) { + return request({ + url: `/hrm/seal/${bizId}/stamp/python`, + method: 'post', + data + }) +} + +// 流程任务 +export function listFlowTask(query) { + return request({ + url: '/hrm/flow/task/list', + method: 'get', + params: query + }) +} +export function listTodoFlowTask(assigneeUserId) { + return request({ + url: '/hrm/flow/task/todo', + method: 'get', + params: { assigneeUserId } + }) +} +export function approveFlowTask(taskId, data) { + return request({ + url: `/hrm/flow/task/${taskId}/approve`, + method: 'post', + data + }) +} +export function rejectFlowTask(taskId, data) { + return request({ + url: `/hrm/flow/task/${taskId}/reject`, + method: 'post', + data + }) +} +export function withdrawFlowTask(taskId, data) { + return request({ + url: `/hrm/flow/task/${taskId}/withdraw`, + method: 'post', + data + }) +} + +export function listFlowAction(query) { + return request({ + url: '/hrm/flow/action/list', + method: 'get', + params: query + }) +} +export function listFlowForm(query) { + return request({ + url: '/hrm/flow/form/list', + method: 'get', + params: query + }) +} +export function getFlowForm(formId) { + return request({ + url: `/hrm/flow/form/${formId}`, + method: 'get' + }) +} + +// 薪酬 +export function listPayPlan(query) { + return request({ + url: '/hrm/pay/plan/list', + method: 'get', + params: query + }) +} +export function listPayRun(query) { + return request({ + url: '/hrm/pay/run/list', + method: 'get', + params: query + }) +} +export function listPayslip(query) { + return request({ + url: '/hrm/payslip/list', + method: 'get', + params: query + }) +} + +// 指标快照 +export function listStatSnapshot(query) { + return request({ + url: '/hrm/stat/snapshot/list', + method: 'get', + params: query + }) +} diff --git a/klp-ui/src/api/l2/pdo.js b/klp-ui/src/api/l2/pdo.js index f621540d..823b4a09 100644 --- a/klp-ui/src/api/l2/pdo.js +++ b/klp-ui/src/api/l2/pdo.js @@ -2,7 +2,7 @@ import axios from 'axios' export default function createFetch(url) { const l2Request = axios.create({ - baseURL: url, + baseURL: 'http://' + url, headers: { 'Content-Type': 'application/json' }, diff --git a/klp-ui/src/api/l2/plan.js b/klp-ui/src/api/l2/plan.js index e1fef910..0db59892 100644 --- a/klp-ui/src/api/l2/plan.js +++ b/klp-ui/src/api/l2/plan.js @@ -44,7 +44,7 @@ function formatDateFields(data) { export default function createFetch(url) { const l2Request = axios.create({ - baseURL: url, + baseURL: 'http://' + url, headers: { 'Content-Type': 'application/json' }, diff --git a/klp-ui/src/api/l2/report.js b/klp-ui/src/api/l2/report.js index c425a27a..cdbea23d 100644 --- a/klp-ui/src/api/l2/report.js +++ b/klp-ui/src/api/l2/report.js @@ -2,7 +2,7 @@ import axios from 'axios' export default function createFetch(url) { const l2Request = axios.create({ - baseURL: url, + baseURL: 'http://' + url, headers: { 'Content-Type': 'application/json' }, diff --git a/klp-ui/src/api/l2/roller.js b/klp-ui/src/api/l2/roller.js index c672f2b8..f356b56d 100644 --- a/klp-ui/src/api/l2/roller.js +++ b/klp-ui/src/api/l2/roller.js @@ -2,7 +2,7 @@ import axios from 'axios' export default function createFetch(url) { const l2Request = axios.create({ - baseURL: url, + baseURL: 'http://' + url, headers: { 'Content-Type': 'application/json' }, diff --git a/klp-ui/src/api/l2/steelGrade.js b/klp-ui/src/api/l2/steelGrade.js index 08169fcf..68de1c8c 100644 --- a/klp-ui/src/api/l2/steelGrade.js +++ b/klp-ui/src/api/l2/steelGrade.js @@ -2,7 +2,7 @@ import axios from 'axios' export default function createFetch(url) { const l2Request = axios.create({ - baseURL: url, + baseURL: 'http://' + url, headers: { 'Content-Type': 'application/json' }, diff --git a/klp-ui/src/api/l2/stop.js b/klp-ui/src/api/l2/stop.js index 43e430cc..fac87984 100644 --- a/klp-ui/src/api/l2/stop.js +++ b/klp-ui/src/api/l2/stop.js @@ -2,7 +2,7 @@ import axios from 'axios' export default function createFetch(url) { const l2Request = axios.create({ - baseURL: url, + baseURL: 'http://' + url, headers: { 'Content-Type': 'application/json' }, diff --git a/klp-ui/src/api/l2/track.js b/klp-ui/src/api/l2/track.js index 856e87dc..d1bd59d3 100644 --- a/klp-ui/src/api/l2/track.js +++ b/klp-ui/src/api/l2/track.js @@ -2,7 +2,7 @@ import axios from 'axios' export default function createFetch(url) { const l2Request = axios.create({ - baseURL: url, + baseURL: 'http://' + url, headers: { 'Content-Type': 'application/json' }, diff --git a/klp-ui/src/utils/websocketManager.js b/klp-ui/src/utils/websocketManager.js new file mode 100644 index 00000000..5352f380 --- /dev/null +++ b/klp-ui/src/utils/websocketManager.js @@ -0,0 +1,137 @@ +/** + * WebSocket 管理器 + * 用于管理多个 WebSocket 连接 + */ + +class WebSocketManager { + constructor(url) { + this.connections = new Map() + this.baseUrl = url + } + + /** + * 创建 WebSocket 连接 + * @param {String} type - WebSocket 类型 (track_measure, track_position, track_signal, track_matmap, calc_setup_result) + * @param {Function} onMessage - 接收消息的回调函数 + * @param {Function} onOpen - 连接打开的回调函数 + * @param {Function} onError - 错误回调函数 + * @param {Function} onClose - 关闭回调函数 + */ + connect(type, { onMessage, onOpen, onError, onClose } = {}) { + // 如果已存在连接,先断开 + if (this.connections.has(type)) { + this.disconnect(type) + } + + const url = `${this.baseUrl}?type=${type}` + console.log(`[WebSocket] 正在连接: ${type}`) + + try { + const socket = new WebSocket(url) + + socket.onopen = (event) => { + console.log(`[WebSocket] 连接成功: ${type}`) + if (onOpen) onOpen(event) + } + + socket.onmessage = (event) => { + try { + const data = JSON.parse(event.data) + if (onMessage) onMessage(data) + } catch (error) { + console.error(`[WebSocket] 数据解析失败 (${type}):`, error) + // 如果不是 JSON,直接传递原始数据 + if (onMessage) onMessage(event.data) + } + } + + socket.onerror = (error) => { + console.error(`[WebSocket] 连接错误 (${type}):`, error) + if (onError) onError(error) + } + + socket.onclose = (event) => { + console.log(`[WebSocket] 连接关闭 (${type}):`, event.code, event.reason) + this.connections.delete(type) + + if (onClose) { + onClose(event) + } else if (event.code !== 1000) { + // 非正常关闭,3秒后自动重连 + console.log(`[WebSocket] 3秒后尝试重连: ${type}`) + setTimeout(() => { + this.connect(type, { onMessage, onOpen, onError, onClose }) + }, 3000) + } + } + + this.connections.set(type, socket) + return socket + } catch (error) { + console.error(`[WebSocket] 创建连接失败 (${type}):`, error) + // 失败后3秒重试 + setTimeout(() => { + this.connect(type, { onMessage, onOpen, onError, onClose }) + }, 3000) + } + } + + /** + * 断开指定类型的连接 + */ + disconnect(type) { + const socket = this.connections.get(type) + if (socket) { + console.log(`[WebSocket] 主动断开: ${type}`) + socket.close(1000, '主动关闭') + this.connections.delete(type) + } + } + + /** + * 断开所有连接 + */ + disconnectAll() { + console.log('[WebSocket] 断开所有连接') + this.connections.forEach((socket, type) => { + this.disconnect(type) + }) + } + + /** + * 获取指定类型的连接状态 + */ + isConnected(type) { + const socket = this.connections.get(type) + return socket && socket.readyState === WebSocket.OPEN + } + + /** + * 获取所有连接状态 + */ + getAllStatus() { + const status = {} + this.connections.forEach((socket, type) => { + status[type] = socket.readyState === WebSocket.OPEN + }) + return status + } + + /** + * 发送消息(如果需要) + */ + send(type, message) { + const socket = this.connections.get(type) + if (socket && socket.readyState === WebSocket.OPEN) { + const data = typeof message === 'string' ? message : JSON.stringify(message) + socket.send(data) + return true + } + console.warn(`[WebSocket] 无法发送消息,连接未打开: ${type}`) + return false + } +} + +// 导出单例 +export default WebSocketManager + diff --git a/klp-ui/src/views/hrm/attendance/index.vue b/klp-ui/src/views/hrm/attendance/index.vue new file mode 100644 index 00000000..bdcd2eed --- /dev/null +++ b/klp-ui/src/views/hrm/attendance/index.vue @@ -0,0 +1,226 @@ + + + + + + 班次 + 刷新 + + + + + {{ scope.row.startTime }} - {{ scope.row.endTime }} + + + + + {{ scope.row.nightShift ? '是' : '否' }} + + + + + + + + + + 排班 + + + 查询 + + + + + + + + + + + + + 打卡与考勤结果 + + + + + + + 打卡记录 + + + {{ formatDate(scope.row.punchTime) }} + + + + + + + 考勤结果 + + + + + + + + + {{ scope.row.exceptionMsg || '正常' }} + + + + + + + + + + + + + + diff --git a/klp-ui/src/views/hrm/index.vue b/klp-ui/src/views/hrm/index.vue new file mode 100644 index 00000000..66dbbb58 --- /dev/null +++ b/klp-ui/src/views/hrm/index.vue @@ -0,0 +1,396 @@ + + + + + HRM 工作台 + 汇总视图 · 快速进入各子模块 + + + 组织与员工 + + + 考勤与排班 + + + 申请与审批 + + + 薪酬与指标 + + + + + + {{ card.label }} + {{ card.value }} + {{ card.desc }} + + + + + + + + 我的待办 + 刷新 + + + + + {{ scope.row.taskId }} + 实例: {{ scope.row.instId }} + + + + + + {{ scope.row.status || '-' }} + + + + {{ formatDate(scope.row.expireTime) }} + + + + + + + + 流程历史 + + + 查询 + + + + + + {{ scope.row.action }} + + + + + + {{ formatDate(scope.row.createTime) }} + + + + + + + + + 组织与员工概览 + 进入 + + + 组织数量{{ summary.orgCount }} + 员工数量{{ summary.empCount }} + 在职员工{{ summary.activeEmp }} + + + + + + 考勤与排班概览 + 进入 + + + 班次{{ summary.shiftCount }} + 排班记录{{ summary.scheduleCount }} + 异常考勤{{ summary.attendException }} + + + + + + 申请与审批概览 + 进入 + + + 请假单{{ summary.leaveCount }} + 加班单{{ summary.otCount }} + 待审批{{ summary.pendingReq }} + + + + + + 薪酬与指标概览 + 进入 + + + 薪酬方案{{ summary.planCount }} + 批次{{ summary.runCount }} + 工资条{{ summary.payslipCount }} + + + + + + + + + diff --git a/klp-ui/src/views/hrm/org/index.vue b/klp-ui/src/views/hrm/org/index.vue new file mode 100644 index 00000000..76b720c5 --- /dev/null +++ b/klp-ui/src/views/hrm/org/index.vue @@ -0,0 +1,190 @@ + + + + + + 组织树 + 刷新 + + + + {{ data.orgName }} + {{ data.orgType || '组织' }} + + + + + + + 员工档案 + + + + + + + 查询 + + + + + + + + + + + {{ scope.row.status || '-' }} + + + + {{ formatDate(scope.row.hireDate) }} + + + + + + + + + + + diff --git a/klp-ui/src/views/hrm/payroll/index.vue b/klp-ui/src/views/hrm/payroll/index.vue new file mode 100644 index 00000000..5342d943 --- /dev/null +++ b/klp-ui/src/views/hrm/payroll/index.vue @@ -0,0 +1,213 @@ + + + + + + 薪酬方案 + 刷新 + + + + + + + {{ scope.row.status || '-' }} + + + + + + + + + 薪酬批次 + 刷新 + + + + + + + {{ scope.row.status || '-' }} + + + + + + + + + 工资条 & 指标 + + + 查询 + + + + + 工资条 + + + + ¥{{ formatNumber(scope.row.amountGross) }} + + + ¥{{ formatNumber(scope.row.amountNet) }} + + + + {{ scope.row.status || '-' }} + + + + + + 指标快照 + + + + + + + + + + + + + + + + diff --git a/klp-ui/src/views/hrm/requests/index.vue b/klp-ui/src/views/hrm/requests/index.vue new file mode 100644 index 00000000..c47a9c79 --- /dev/null +++ b/klp-ui/src/views/hrm/requests/index.vue @@ -0,0 +1,407 @@ + + + + + + {{ item.title }} + + + + + + + + 刷新 + + + + + + + {{ formatDate(scope.row.startTime) }} + + + {{ formatDate(scope.row.endTime) }} + + + + {{ scope.row.status || '-' }} + + + + + + 通过 + 驳回 + 撤销 + 盖章 + + + + + + + + + + + + + + + + + + + + + + + + X: {{ stampForm.xPx || '-' }} px + Y: {{ stampForm.yPx || '-' }} px + + + 宽: {{ stampForm.widthPx || stampImageNatural.width || '-' }} px + 高: {{ stampForm.heightPx || stampImageNatural.height || '-' }} px + + 点击右侧预览即可定位,尺寸默认取章图原始大小 + + + + + + 图形化定位(点击预览设置坐标) + + + + + 请先填写待盖章文件URL(建议提供图片预览) + + + + + + + + + + + diff --git a/klp-ui/src/views/hrm/workbench/index.vue b/klp-ui/src/views/hrm/workbench/index.vue new file mode 100644 index 00000000..3c778f02 --- /dev/null +++ b/klp-ui/src/views/hrm/workbench/index.vue @@ -0,0 +1,11 @@ + + + + + diff --git a/klp-ui/src/views/lines/index.vue b/klp-ui/src/views/lines/index.vue index fcd16480..42a521dc 100644 --- a/klp-ui/src/views/lines/index.vue +++ b/klp-ui/src/views/lines/index.vue @@ -1,14 +1,13 @@ - + - + --> diff --git a/klp-ui/src/views/lines/panels/track/index.vue b/klp-ui/src/views/lines/panels/track/index.vue index 8cf4d5b5..3d374ea2 100644 --- a/klp-ui/src/views/lines/panels/track/index.vue +++ b/klp-ui/src/views/lines/panels/track/index.vue @@ -1,147 +1,406 @@ - - + + + - - - - - - - - - - - - - - - - - - 确认调整 + + + + 加载中... - - - - - 位置名称: - {{ selectedCard.positionNameCn || '-' }} - - - 位置代号: - {{ selectedCard.positionNameEn || '-' }} - - - 钢卷号: - {{ selectedCard.matId || '-' }} - - - 计划ID: - {{ selectedCard.planId || '-' }} - - - 计划号: - {{ selectedCard.planNo || '-' }} - - - 开卷机编号: - {{ selectedCard.porIdx || '-' }} - - - 卷取机编号: - {{ selectedCard.trIdx || '-' }} - - - - - 加载回退信息中... + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - {{ returnError }} + + + + + 入口段 + 速度: {{ positionData.entrySpeed.toFixed(1) }} m/min + + + + {{ item.label }}: + {{ item.value }} - - - - - 回退钢卷号: - {{ returnInfo.entryMatId || '-' }} - - - 回退计划ID: - {{ returnInfo.planId || '-' }} - - - 回退计划号: - {{ returnInfo.planNo || '-' }} - - - 回退类型: - {{ returnInfo.returnType || '-' }} - - - 回退重量: - - {{ returnInfo.returnWeight || '-' }} - {{ returnInfo.returnWeight ? 'kg' : '' }} + + + + {{ device.positionNameCn }} + {{ device.positionNameEn }} + + + {{ getDeviceStatus(device.positionNameEn) }} + + - - 无回退信息 - - - - 请选择钢卷卡片查看详情 - - - - - - - - - - - - 钢卷上线 - - - 手动卸卷 - - - 整卷回退 - - - 半卷回退 - - - 卸卷并封闭 - - - + + + + 熔炉段 + 速度: {{ positionData.technologySpeed.toFixed(1) }} m/min + + + + {{ item.label }}: + {{ item.value }} + + + + + {{ device.positionNameCn }} + {{ device.positionNameEn }} + + + {{ getDeviceStatus(device.positionNameEn) }} + - + - - 请选择钢卷卡片进行操作 - + + + 涂层段 + + + {{ item.label }}: + {{ item.value }} + + + + + {{ device.positionNameCn }} + {{ device.positionNameEn }} + + + {{ getDeviceStatus(device.positionNameEn) }} + + + + + + + + + + 出口段 + 速度: {{ positionData.exitSpeed.toFixed(1) }} m/min + + + + {{ item.label }}: + {{ item.value }} + + + + + {{ device.positionNameCn }} + {{ device.positionNameEn }} + + + {{ getDeviceStatus(device.positionNameEn) }} + + + + + + + + + 其他段 + + + {{ device.positionNameCn }} + {{ device.positionNameEn }} + + + {{ getDeviceStatus(device.positionNameEn) }} + + + + + + + + + + + + + 生产计划 + + + + + + {{ index + 1 }} + + 计划ID:{{ plan.planid || '-' }} + 钢卷号:{{ plan.coilid || '-' }} + + {{ getPlanStatusText(plan.status) }} + + + 钢种:{{ plan.steelGrade || '-' }} + 顺序:{{ plan.seqid || '-' }} + + + + + + + + + 生产计划详情 + + + + + + + + + + 当前位置 + {{ selectedPlanPosition.positionNameCn }} + {{ selectedPlanPosition.positionNameEn }} + + + + + {{ selectedPlan.planid || '-' }} + {{ selectedPlan.coilid || '-' }} + {{ selectedPlan.seqid || '-' }} + + + {{ getPlanStatusText(selectedPlan.status) }} + + + {{ selectedPlan.steelGrade || '-' }} + + {{ selectedPlan.entryThick ? selectedPlan.entryThick + ' mm' : '-' }} + + + {{ selectedPlan.entryWidth ? selectedPlan.entryWidth + ' mm' : '-' }} + + + {{ selectedPlan.entryWeight ? selectedPlan.entryWeight + ' t' : '-' }} + + + {{ selectedPlan.entryLength ? selectedPlan.entryLength + ' mm' : '-' }} + + {{ selectedPlan.orderNo || '-' }} + {{ selectedPlan.unitCode || '-' }} + {{ selectedPlan.planType || '-' }} + + + + + 时间信息 + + + {{ formatDateTime(selectedPlan.onlineDate) }} + + + {{ formatDateTime(selectedPlan.startDate) }} + + + {{ formatDateTime(selectedPlan.endDate) }} + + + + + + + + + + 最近操作 + + {{ getOperationConfig(signalData.operation).icon }} {{ getOperationText(signalData.operation) }} + + + + + {{ signalData.autoFlag === 1 ? '手动操作' : '自动操作' }} + + + 操作类型: + + {{ getOperationText(signalData.operation) }} + + + 钢卷号: {{ producingCoilId || signalData.entryMatId || '-' }} + 计划ID: {{ signalData.planId || '-' }} + + 开卷机: {{ signalData.porIdx }} + + + 卷取机: {{ signalData.trIdx }} + + + 虚拟卷 + + + + + + + 操作 + + 钢卷上线 + 手动卸卷 + 整卷回退 + 半卷回退 + 卸卷并封闭 + + + + + 基本信息 + + + 位置名称 + {{ selectedCard.positionNameCn || '-' }} + + + 位置代号 + {{ selectedCard.positionNameEn || '-' }} + + + 钢卷号 + {{ selectedCard.matId || '-' }} + + + 计划ID + {{ selectedCard.planId || '-' }} + + + 计划号 + {{ selectedCard.planNo || '-' }} + + + + + + + + + + + + + + + + + + + + + + 确认调整 + + + + + + + + + {{ calcSetupResult.flag ? '计算成功' : '计算失败' }} + + Key: {{ calcSetupResult.key }} + + + + + + + + + + + + 无计算结果数据 + + @@ -199,15 +458,100 @@ - diff --git a/klp-ui/src/views/wms/warehouse/components/WarehouseInterlaced.vue b/klp-ui/src/views/wms/warehouse/components/WarehouseInterlaced.vue index df77d480..ec15bc78 100644 --- a/klp-ui/src/views/wms/warehouse/components/WarehouseInterlaced.vue +++ b/klp-ui/src/views/wms/warehouse/components/WarehouseInterlaced.vue @@ -162,9 +162,18 @@ export default { }, rulerMaxRow() { // 取所有列中level为3的第一层的最大行数 - const maxRows = Object.values(this.columns) - .filter(col => col.layer1?.[0]?.parsedInfo?.level === 3) + // 如果不存在level为3的列,则不执行filter操作,直接去最大值 + // 如果存在level为3的列,则取layer1且level为3的最大行数 + const columns = Object.values(this.columns) + const columnsOnlyLevel3 = columns.filter(col => col.layer1?.[0]?.parsedInfo?.level === 3); + let maxRows = [] + if (columnsOnlyLevel3.length > 0) { + maxRows = columnsOnlyLevel3 .map(col => col.layer1?.length || 0); + } else { + maxRows = columns + .map(col => col.layer1?.length || 0); + } return maxRows.length > 0 ? Math.max(...maxRows) : 0; } }, diff --git a/klp-ui/src/views/wms/warehouse/index.vue b/klp-ui/src/views/wms/warehouse/index.vue index 41076f09..8c3c1d18 100644 --- a/klp-ui/src/views/wms/warehouse/index.vue +++ b/klp-ui/src/views/wms/warehouse/index.vue @@ -17,16 +17,6 @@ @keyup.enter.native="handleQuery" /> - @@ -34,7 +24,7 @@ - 搜索 + 搜索 重置 @@ -49,70 +39,55 @@ @click="handleAdd" >新增 - - 展开/折叠 - - - - - - - - - - {{ scope.row.isEnabled == 1 ? '启用' : '禁用' }} - - - - - - 修改 - 新增 - 删除 - - - + + + + + + + + + 库位信息: + {{ item.warehouseName }}#{{ item.warehouseCode }} + + + + 备注: + + {{ item.remark || '无' }} + + + + + 修改 + 删除 + + + + + - + - - + + @@ -120,16 +95,6 @@ - @@ -153,40 +118,31 @@ + + \ No newline at end of file
汇总视图 · 快速进入各子模块