docs(test): 更新电表箱装配业务回归测试文档
- 将文档从代码审计任务转换为端到端业务回归测试链路 - 重新组织文档结构为链路总览、示例数据基线和详细步骤 - 添加完整的业务场景清单涵盖WMS/MES/工位终端三大系统 - 定义统一的测试数据包括产品型号、物料清单、工位派工等 - 提供详细的步骤断言和数量等式验证方法 - 建立贯穿全链路的数据流向和状态变更追踪体系
This commit is contained in:
@@ -237,6 +237,21 @@ export const helpStation = {
|
||||
]
|
||||
}
|
||||
|
||||
export const helpDock = {
|
||||
title: '接驳台维护(只读主数据)',
|
||||
overview:
|
||||
'接驳台是产线与库房之间供 AGV 取送货的物理停靠位,真源在 MES(2026-09-21 自 WMS 迁入)。共 21 个固定编码:DOCK01~DOCK20(产线,DOCKn↔工位n)+ DOCK21(库房收货)。\n\n接驳台为系统预置只读主数据,由种子初始化,本页不提供新增/修改/删除,仅供查看;工位维护、排产推荐、AGV 通讯均以本表为真源查询接驳台。\n\n「占用状态/托盘关联」反映该接驳台当前是否有托盘及托盘对应的出库/备料单,供现场调度参考。',
|
||||
fields: [
|
||||
{ name: '接驳台编码', source: '系统预置(种子)。', purpose: '接驳台唯一标识 DOCK01..21', fill: '只读' },
|
||||
{ name: '接驳台名称', source: '系统预置。', purpose: '接驳台显示名称', fill: '只读' },
|
||||
{ name: '类型', source: '系统预置。line=产线 / store=库房 / other=其他。', purpose: '区分接驳台所在位置', fill: '只读' },
|
||||
{ name: '绑定工位', source: '系统预置(产线接驳台与工位 1:1)。', purpose: '该接驳台服务的产线工位号', fill: '只读;库房/其他接驳台不绑工位' },
|
||||
{ name: '占用状态', source: 'PLC 托盘传感器 / AGV 到位卸货自动维护。', purpose: '当前是否有托盘', fill: '只读' },
|
||||
{ name: '托盘关联', source: '有托盘时记录对应出库单号/备料单号。', purpose: '查这个托盘是哪批料、要送到哪', fill: '只读' },
|
||||
{ name: '启用状态', source: '系统预置 ENABLED/DISABLED。', purpose: '停用后不在下拉出现', fill: '只读' }
|
||||
]
|
||||
}
|
||||
|
||||
export const helpTrace = {
|
||||
title: '工件追溯',
|
||||
overview:
|
||||
|
||||
@@ -70,7 +70,7 @@ import { useRouter } from 'vue-router'
|
||||
import {
|
||||
Document, Calendar, Box, Goods, ShoppingCart, Monitor, Tools,
|
||||
Operation, Link, DataLine, EditPen, Search, CircleCheck, Clock, User,
|
||||
Key, Fold, Expand, Warning, Paperclip, Tickets, Bell
|
||||
Key, Fold, Expand, Warning, Paperclip, Tickets, Bell, Aim
|
||||
} from '@element-plus/icons-vue'
|
||||
import { ElNotification } from 'element-plus'
|
||||
import { getUser, logout } from '../utils/auth'
|
||||
@@ -152,6 +152,7 @@ const menuGroups = [
|
||||
title: '基础配置', icon: Box, children: [
|
||||
{ code: 'produce.processflow', name: '工艺流程', path: '/process-flow', icon: Operation },
|
||||
{ code: 'produce.station', name: '关联工位', path: '/station', icon: Link },
|
||||
{ code: 'produce.dock', name: '接驳台维护', path: '/dock', icon: Aim },
|
||||
{ code: 'produce.product', name: '物料档案', path: '/product-type', icon: Box }
|
||||
]
|
||||
},
|
||||
|
||||
@@ -0,0 +1,126 @@
|
||||
<template>
|
||||
<div class="dock-page">
|
||||
<el-card shadow="never">
|
||||
<el-alert type="info" :closable="false" show-icon style="margin-bottom:12px"
|
||||
title="接驳台是产线与库房之间供 AGV 取送货的物理停靠位,为系统预置的只读主数据(真源在 MES),本页仅供查看。" />
|
||||
|
||||
<!-- 列表页禁止关键字混搜:编码精确、名称模糊、类型/状态各自独立下拉 -->
|
||||
<el-form inline :model="filter">
|
||||
<el-form-item label="接驳台编码">
|
||||
<el-input v-model="filter.dockCode" clearable style="width:160px" placeholder="精确匹配,如 DOCK01" @keyup.enter="search" />
|
||||
</el-form-item>
|
||||
<el-form-item label="接驳台名称">
|
||||
<el-input v-model="filter.name" clearable style="width:180px" placeholder="名称模糊匹配" @keyup.enter="search" />
|
||||
</el-form-item>
|
||||
<el-form-item label="类型">
|
||||
<el-select v-model="filter.dockType" clearable style="width:120px" placeholder="全部">
|
||||
<el-option label="产线" value="line" />
|
||||
<el-option label="库房" value="store" />
|
||||
<el-option label="其他" value="other" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="状态">
|
||||
<el-select v-model="filter.status" style="width:110px" placeholder="全部">
|
||||
<el-option label="全部" value="" />
|
||||
<el-option label="启用" value="ENABLED" />
|
||||
<el-option label="停用" value="DISABLED" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" @click="search">查询</el-button>
|
||||
<el-button @click="reset">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<el-table :data="list" border size="small" v-loading="loading">
|
||||
<el-table-column prop="dockCode" label="接驳台编码" width="140" />
|
||||
<el-table-column prop="name" label="接驳台名称" min-width="200" show-overflow-tooltip />
|
||||
<el-table-column label="类型" width="100" align="center">
|
||||
<template #default="{ row }">
|
||||
<el-tag size="small" :type="tagType(row.dockType)">{{ typeLabel(row.dockType) }}</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="绑定工位" width="110" align="center">
|
||||
<template #default="{ row }">{{ row.stationNo > 0 ? '工位' + row.stationNo : '—' }}</template>
|
||||
</el-table-column>
|
||||
<!-- 占用状态:现场调度参考(空闲 / 有托盘) -->
|
||||
<el-table-column label="占用状态" width="110" align="center">
|
||||
<template #default="{ row }">
|
||||
<el-tag size="small" :type="row.hasPallet ? 'warning' : 'info'">{{ row.hasPallet ? '有托盘' : '空闲' }}</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="palletRef" label="托盘关联" min-width="160" show-overflow-tooltip>
|
||||
<template #default="{ row }">{{ row.palletRef || '—' }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="启用状态" width="90" align="center">
|
||||
<template #default="{ row }">
|
||||
<el-tag size="small" :type="row.status === 'ENABLED' ? 'success' : 'info'">
|
||||
{{ row.status === 'ENABLED' ? '启用' : '停用' }}
|
||||
</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="创建时间" width="170">
|
||||
<template #default="{ row }">{{ fmtTime(row.createdAt) }}</template>
|
||||
</el-table-column>
|
||||
<template #empty>
|
||||
<el-empty description="暂无接驳台数据" />
|
||||
</template>
|
||||
</el-table>
|
||||
|
||||
<el-pagination v-model:current-page="page.current" v-model:page-size="page.size" :page-sizes="[20, 50, 100]"
|
||||
:total="total" background layout="total, sizes, prev, pager, next, jumper" style="margin-top:12px"
|
||||
@size-change="search" @current-change="load" />
|
||||
</el-card>
|
||||
</div>
|
||||
<PageHelp :data="helpDock" page="Dock" />
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
defineOptions({ name: 'Dock' })
|
||||
import { reactive, ref, onMounted } from 'vue'
|
||||
import request from '../utils/request'
|
||||
import { fmtTime } from '../utils/format'
|
||||
import PageHelp from '../components/PageHelp.vue'
|
||||
import { helpDock } from '../help'
|
||||
|
||||
const list = ref([])
|
||||
const total = ref(0)
|
||||
const loading = ref(false)
|
||||
const page = reactive({ current: 1, size: 20 })
|
||||
// 默认只看启用;停用需主动选择
|
||||
const filter = reactive({ dockCode: '', name: '', dockType: '', status: 'ENABLED' })
|
||||
|
||||
const TYPE_LABEL = { line: '产线', store: '库房', other: '其他' }
|
||||
function typeLabel(t) { return TYPE_LABEL[t] || '其他' }
|
||||
function tagType(t) { return t === 'line' ? 'success' : (t === 'store' ? 'warning' : 'info') }
|
||||
|
||||
async function load() {
|
||||
loading.value = true
|
||||
try {
|
||||
const params = { page: page.current, pageSize: page.size }
|
||||
if (filter.dockCode.trim()) params.dockCode = filter.dockCode.trim()
|
||||
if (filter.name.trim()) params.name = filter.name.trim()
|
||||
if (filter.dockType) params.dockType = filter.dockType
|
||||
if (filter.status) params.status = filter.status
|
||||
const data = await request.get('/docks/maint', { params })
|
||||
list.value = data?.list || []
|
||||
total.value = data?.total || 0
|
||||
} finally {
|
||||
loading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
function search() {
|
||||
page.current = 1
|
||||
load()
|
||||
}
|
||||
function reset() {
|
||||
filter.dockCode = ''
|
||||
filter.name = ''
|
||||
filter.dockType = ''
|
||||
filter.status = 'ENABLED'
|
||||
search()
|
||||
}
|
||||
|
||||
onMounted(load)
|
||||
</script>
|
||||
@@ -17,6 +17,7 @@ const routes = [
|
||||
{ path: 'torque', name: 'Torque', component: () => import('../pages/Torque.vue'), meta: { title: '拧紧查询' } },
|
||||
{ path: 'process-flow', name: 'ProcessFlow', component: () => import('../pages/ProcessFlow.vue'), meta: { title: '工艺流程' } },
|
||||
{ path: 'station', name: 'Station', component: () => import('../pages/Station.vue'), meta: { title: '关联工位' } },
|
||||
{ path: 'dock', name: 'Dock', component: () => import('../pages/Dock.vue'), meta: { title: '接驳台维护' } },
|
||||
{ path: 'performance', name: 'Performance', component: () => import('../pages/Performance.vue'), meta: { title: '绩效报表' } },
|
||||
{ path: 'inspect', name: 'Inspect', component: () => import('../pages/Inspect.vue'), meta: { title: '巡检终端' } },
|
||||
{ path: 'quality', name: 'QualityInspection', component: () => import('../pages/QualityInspection.vue'), meta: { title: '质量检验' } },
|
||||
|
||||
Reference in New Issue
Block a user