feat: 完成产线MES系统全流程功能迭代与优化
本提交完成了多个核心模块的功能完善与业务对齐: 1. 工位终端:固定工位配置、移除自选工位逻辑、适配配置化工位号 2. MES核心:重构工位组合逻辑、新增工单/流程状态管理、补全报工/追溯逻辑 3. WMS客户端:新增修改密码功能、优化帮助弹窗逻辑 4. 文档与权限:补充完整操作手册、统一菜单名称与权限描述 5. 修复多业务校验:排产数量校验、工单状态校验、工位绑定规则
This commit is contained in:
@@ -2,19 +2,18 @@
|
||||
<el-card>
|
||||
<el-form inline>
|
||||
<el-form-item label="工位">
|
||||
<el-select v-model="form.stationNo" placeholder="请选择工位" style="width:110px">
|
||||
<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-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="工件SN"><el-input v-model="form.sn" style="width:170px" @change="loadSteps" /></el-form-item>
|
||||
<el-form-item label="工序号"><el-input-number v-model="form.processCode" :min="1" :max="12" @change="loadSteps" /></el-form-item>
|
||||
<el-form-item><el-button type="primary" @click="loadSteps">载入参数模板</el-button></el-form-item>
|
||||
<el-form-item label="工件SN"><el-input v-model="form.sn" placeholder="扫码或手输" style="width:190px" @change="loadSteps" /></el-form-item>
|
||||
<el-form-item><el-button type="primary" @click="loadSteps">载入工序步骤</el-button></el-form-item>
|
||||
</el-form>
|
||||
|
||||
<!-- 参数采集区:按已维护的步骤模板动态渲染 -->
|
||||
<!-- 参数采集区:按该工位启用工艺流程的工序步骤动态渲染 -->
|
||||
<el-card v-if="steps.length" shadow="never" style="margin-bottom:12px">
|
||||
<div slot="header" style="display:flex;justify-content:space-between;align-items:center">
|
||||
<b>工位 {{ form.stationNo }} / 工序 {{ form.processCode }} 参数采集</b>
|
||||
<b>工位 {{ form.stationNo }} 参数采集{{ flowName ? '(' + flowName + ')' : '' }}</b>
|
||||
<el-button v-if="can('produce.scan')" type="primary" size="small" :loading="saving" @click="submit">提交报工</el-button>
|
||||
</div>
|
||||
<el-table :data="steps" border size="small">
|
||||
@@ -45,7 +44,7 @@
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-card>
|
||||
<el-alert v-else type="info" :closable="false" title="请选择工位、SN 与工序号后点【载入参数模板】" />
|
||||
<el-alert v-else type="info" :closable="false" title="请选择工位、输入SN后点【载入工序步骤】;若提示未配置工序步骤,请到「工艺流程」为该工位启用流程并维护工序步骤" />
|
||||
|
||||
<el-divider content-position="left">报工记录</el-divider>
|
||||
<el-form inline>
|
||||
@@ -58,7 +57,7 @@
|
||||
<el-table-column prop="orderNo" label="工单号" min-width="130" />
|
||||
<el-table-column prop="station" label="工位" width="80" />
|
||||
<el-table-column prop="type" label="类型" width="110" />
|
||||
<el-table-column prop="processCode" label="工序号" width="80" />
|
||||
<el-table-column prop="processCode" label="工位号" width="80" />
|
||||
<el-table-column prop="operator" label="操作人" width="90" />
|
||||
<el-table-column prop="time" label="时间" min-width="170" />
|
||||
</el-table>
|
||||
@@ -74,8 +73,9 @@ import { can } from '../utils/perm'
|
||||
import PageHelp from '../components/PageHelp.vue'
|
||||
import { helpScan } from '../help'
|
||||
|
||||
const form = reactive({ stationNo: 1, sn: '', processCode: 1 })
|
||||
const form = reactive({ stationNo: 1, sn: '' })
|
||||
const steps = ref([])
|
||||
const flowName = ref('')
|
||||
const saving = ref(false)
|
||||
const query = reactive({ sn: '', orderNo: '' })
|
||||
const list = ref([])
|
||||
@@ -92,19 +92,22 @@ function critText(c) {
|
||||
}
|
||||
}
|
||||
|
||||
// 从后端步骤模板构造报工所需字段(value 挂在 row 上,提交时收集)
|
||||
// 从后端加载该工位启用工艺流程的工序步骤(value 挂在 row 上,提交时收集)
|
||||
async function loadSteps() {
|
||||
if (!form.sn) return ElMessage.warning('请先输入工件SN')
|
||||
if (!form.processCode) return ElMessage.warning('请选择工序号')
|
||||
try {
|
||||
const data = await request.get('/process-steps', { params: { processCode: form.processCode } }) || []
|
||||
const data = await request.get('/process-steps', { params: { stationNo: form.stationNo } }) || []
|
||||
steps.value = data.map(s => ({ ...s, value: '', text: '' }))
|
||||
flowName.value = ''
|
||||
if (!steps.value.length) {
|
||||
ElMessage.warning(`工位${form.stationNo} 未配置启用的工艺流程,请到「工艺流程」维护`)
|
||||
}
|
||||
} catch { steps.value = [] }
|
||||
}
|
||||
|
||||
async function submit() {
|
||||
if (!form.sn) return ElMessage.warning('请输入SN')
|
||||
if (!form.processCode) return ElMessage.warning('请选择工序号')
|
||||
if (!steps.value.length) return ElMessage.warning('该工位未配置工序步骤,无法报工')
|
||||
const stepReq = steps.value
|
||||
.filter(s => s.collectType !== 'NONE' && (s.text !== '' || s.value !== ''))
|
||||
.map(s => ({
|
||||
@@ -113,10 +116,10 @@ async function submit() {
|
||||
value: Number(s.value) || 0,
|
||||
text: s.text || String(s.value || '')
|
||||
}))
|
||||
// 手动报工走工序实绩 + 步骤考核
|
||||
// 手动报工:processCode = 工位号(工位 1~12 固定)
|
||||
await request.post('/workpiece/process/report', {
|
||||
sn: form.sn,
|
||||
processCode: form.processCode,
|
||||
processCode: form.stationNo,
|
||||
stationNo: form.stationNo,
|
||||
steps: stepReq
|
||||
})
|
||||
@@ -130,4 +133,4 @@ async function load() {
|
||||
list.value = (await request.get('/scan/records', { params: query })) || []
|
||||
}
|
||||
onMounted(load)
|
||||
</script>
|
||||
</script>
|
||||
|
||||
Reference in New Issue
Block a user