feat&refactor: 完成多模块功能迭代与配置优化
本次提交覆盖多个业务模块的功能完善与体验优化:
1. **鉴权与配置调整**:
- 统一JWT滑动续签逻辑,简化Token存储,移除RefreshToken相关冗余代码
- 调整多项目配置文件中JWT过期时间为3600秒,统一会话闲置窗口
- 工位配置放开1~12限制,改为仅校验大于0
2. **术语统一替换**:全链路将"精密件"替换为"电气件",修正物料管理描述
3. **功能新增**:
- 新增工位类型、工艺路线与产线点位台账模块
- 添加工艺PDF预览面板、工位终端代理转发接口
- 新增操作日志按操作人列表筛选、工位登出日志记录
- 新增PLC移料指令与产线点位状态管理
4. **业务流程优化**:
- 调整BOM物料删除校验逻辑,优化工单备料计算
- 补充物料图号、检测单号等追溯字段
- 完善工艺流程图与工位绑定关系说明
- 优化前端页面文案与交互细节
5. **代码规范与维护**:
- 新增通用工具函数与前端静态资源
- 整理路由权限与中间件逻辑
- 修复部分接口与配置的不兼容问题
This commit is contained in:
@@ -5,7 +5,7 @@
|
||||
<el-form inline>
|
||||
<el-form-item label="工位">
|
||||
<el-select v-model="form.stationNo" placeholder="请选择工位" style="width:120px" @change="loadSteps">
|
||||
<el-option v-for="i in 12" :key="i" :value="i" :label="`工位${i}`" />
|
||||
<el-option v-for="i in stationNos" :key="i" :value="i" :label="`工位${i}`" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="工件SN"><el-input v-model="form.sn" placeholder="扫码或手输" style="width:190px" @change="loadSteps" /></el-form-item>
|
||||
@@ -47,22 +47,22 @@
|
||||
</el-table>
|
||||
</el-card>
|
||||
|
||||
<!-- 装机绑定区:该工件在本工序应装什么料(BOM 装配工序配置)→ 扫码/手录绑定,齐套后才允许报工 -->
|
||||
<!-- 装机绑定区:该工件在本工序应装什么料(物料清单的装配工位配置)→ 扫码/手录绑定,齐套后才允许报工 -->
|
||||
<el-card v-if="bindPanel" shadow="never" style="margin-bottom:12px;border-color:var(--el-color-primary)">
|
||||
<div slot="header" style="display:flex;justify-content:space-between;align-items:center">
|
||||
<b>工序 {{ form.stationNo }} 装机绑定(装配物料)</b>
|
||||
<b>装配工位 {{ form.stationNo }} 装机绑定(装配物料)</b>
|
||||
<el-alert v-if="bindPanel.enabled && !bindPanel.complete" type="warning" :closable="false" show-icon style="flex:1;margin-left:16px"
|
||||
:title="'尚未绑齐:' + bindPanel.missing" />
|
||||
<el-alert v-else-if="bindPanel.enabled && bindPanel.complete" type="success" :closable="false" show-icon style="flex:1;margin-left:16px"
|
||||
title="装配物料已绑齐,可提交报工" />
|
||||
<el-alert v-else type="info" :closable="false" style="flex:1;margin-left:16px"
|
||||
title="该产品未在本工序配置需绑定物料(BOM「装配工序」为空),不校验" />
|
||||
title="该产品未在当前装配工位配置需绑定物料(物料清单「装配工位」为空),不校验" />
|
||||
</div>
|
||||
<el-table v-if="bindPanel.required && bindPanel.required.length" :data="bindPanel.required" border size="small">
|
||||
<el-table-column prop="materialCode" label="物料编码" min-width="110" />
|
||||
<el-table-column prop="materialName" label="物料名称" min-width="120" />
|
||||
<el-table-column prop="manageMode" label="管理方式" width="120">
|
||||
<template #default="{row}">{{ row.manageMode === '2' ? '精密件(SN)' : '结构件(批次)' }}</template>
|
||||
<template #default="{row}">{{ row.manageMode === '2' ? '电气件(SN)' : '结构件(批次)' }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="已绑/需绑" width="100" align="center">
|
||||
<template #default="{row}">
|
||||
@@ -85,7 +85,7 @@
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-card>
|
||||
<el-alert v-if="!steps.length && !bindPanel" type="info" :closable="false" title="请选择工位、输入SN后点【载入工序步骤】;若提示未配置工序步骤,请到「工艺流程」为该工位启用流程并维护工序步骤" />
|
||||
<el-alert v-if="!steps.length && !bindPanel" type="info" :closable="false" title="请选择工位、输入SN后点【载入工艺步骤】;若提示未配置工序步骤,请到「工艺流程」为该工位启用流程并维护工艺步骤" />
|
||||
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="报工记录" name="records" lazy>
|
||||
@@ -118,6 +118,7 @@ import request from '../utils/request'
|
||||
import { can } from '../utils/perm'
|
||||
import PageHelp from '../components/PageHelp.vue'
|
||||
import { helpScan } from '../help'
|
||||
import { loadStationNos } from '../utils/stations'
|
||||
|
||||
const tab = ref('entry')
|
||||
const recordsPage = ref(1)
|
||||
@@ -131,6 +132,7 @@ const bindPanel = ref(null)
|
||||
const binding = ref(false)
|
||||
const query = reactive({ sn: '', orderNo: '' })
|
||||
const list = ref([])
|
||||
const stationNos = ref([])
|
||||
|
||||
function critText(c) {
|
||||
switch (c.logic) {
|
||||
@@ -176,7 +178,7 @@ async function loadBindPanel() {
|
||||
// 扫/录单个物料 → 立即绑定落库并刷新齐套状态(防错即时反馈)
|
||||
async function bindOne(row) {
|
||||
const v = (row._input || '').trim()
|
||||
if (!v) return ElMessage.warning('请先输入绑定值(精密件扫码SN / 结构件批次号)')
|
||||
if (!v) return ElMessage.warning('请先输入绑定值(电气件扫码SN / 结构件批次号)')
|
||||
binding.value = true
|
||||
try {
|
||||
await request.post('/binds', {
|
||||
@@ -194,7 +196,7 @@ async function bindOne(row) {
|
||||
|
||||
async function submit() {
|
||||
if (!form.sn) return ElMessage.warning('请输入SN')
|
||||
if (!steps.value.length) return ElMessage.warning('该工位未配置工序步骤,无法报工')
|
||||
if (!steps.value.length) return ElMessage.warning('该工位未配置工艺步骤,无法报工')
|
||||
// 报工前强校验:本工序装配物料需绑齐(后端 validateStationBinds)
|
||||
if (bindPanel.value?.enabled && !bindPanel.value?.complete) {
|
||||
return ElMessage.warning('装配物料未绑齐,请先完成装机绑定:' + (bindPanel.value.missing || ''))
|
||||
@@ -227,5 +229,5 @@ async function load() {
|
||||
recordsTotal.value = data?.total || 0
|
||||
}
|
||||
function onTab(name) { if (name === 'records' && !list.value.length) load() }
|
||||
onMounted(() => { if (form.stationNo) loadSteps() })
|
||||
onMounted(async () => { stationNos.value = await loadStationNos(); if (form.stationNo) loadSteps() })
|
||||
</script>
|
||||
|
||||
Reference in New Issue
Block a user