chore: 完成多系统功能迭代与优化
1. 通用优化: - 统一系统标题为"库房客户端"/"MES产线控制",移除北自所前缀 - 调整内置账号密码为统一123456,优化密码校验逻辑 - 新增数据库自动创建逻辑,简化部署流程 - 修复日志时间格式配置,优化日志输出 - 新增纯数字密码安全提示 2. MES系统优化: - 新增日排产管理功能,支持增删改查与自动算料生成备料单 - 重构BOM模块,改为按产品编码维护而非工单维度 - 新增工艺参数模板配置与手动报工页面 - 新增产品类型自动编码功能 - 优化菜单结构,调整工单管理、扫码报工等页面名称与路由 - 新增删除日排产接口与权限保护 - 修复物料清单查询逻辑,适配新BOM结构 - 新增refreshToken支持,优化登录会话管理 3. WMS系统优化: - 新增基础数据维护页面,支持区域与物料档案管理 - 新增工单列表下拉接口,对接MES获取未完成工单优先展示 - 优化入库管理提示文案,替换英文提示为中文 - 修复精密件入库校验逻辑,优化错误提示 - 优化Excel导入功能,新增备注字段支持 - 优化登录页面与菜单文案,统一备料台账名称 - 新增自动打开浏览器功能,优化客户端启动体验 - 修复备料出库页面查询提示文案 - 新增WMS与MES对接配置,完善内部API调用逻辑 4. 其他优化: - 删除冗余的旧版静态资源文件,更新资源引用路径 - 新增帮助文档,完善基础数据模块说明 - 修复多处文案不统一、英文残留问题
This commit is contained in:
@@ -3,7 +3,7 @@
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>北自所库房客户端</title>
|
||||
<title>库房客户端</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="app"></div>
|
||||
|
||||
@@ -134,6 +134,36 @@ export const helpLedger = {
|
||||
]
|
||||
}
|
||||
|
||||
export const helpBaseData = {
|
||||
title: '基础数据(区域 / 物料档案)',
|
||||
overview:
|
||||
'维护库房系统的基础字典,供入库/出库/库存等所有业务下拉框选择。\n· 区域:货品存放的库区(如待检、合格Z02、不合格…);入库时要指明放到哪个区。\n· 物料档案:定义每一种物料叫什么、什么规格、是【结构件(批次)】还是【精密件(SN)】,决定后续入库方式。\n\n这两个字典是库房的第一道地基:先建好区域和物料,入库、检验、出库才能正常跑到数据。',
|
||||
sections: [
|
||||
{
|
||||
title: 'Tab1 区域维护',
|
||||
overview: '新增库区字典,供入库/半成品等页面的"区域"下拉使用。',
|
||||
fields: [
|
||||
{ name: '区域编码', source: '手工填写,仓库自定义。', purpose: '库区唯一编号,入库/出库定位存放位置', fill: '如 Z02、Z05,建议字母+数字,唯一' },
|
||||
{ name: '区域名称', source: '手工填写。', purpose: '库区中文名,便于识别', fill: '如 合格区、待检区、不合格区' },
|
||||
{ name: '说明', source: '手工填写(可空)。', purpose: '补充描述', fill: '可空' }
|
||||
]
|
||||
},
|
||||
{
|
||||
title: 'Tab2 物料档案',
|
||||
overview: '定义物料字典。此处维护的物料会出现在入库/出库等页面的"物料"下拉中;此处选"结构件/精密件"直接决定入库走批次还是 SN。',
|
||||
fields: [
|
||||
{ name: '物料编码', source: '手工填写,仓库自定义(新增后不可改)。', purpose: '物料唯一编号', fill: '如 SCREW-M3;新增后不可改编码' },
|
||||
{ name: '名称', source: '手工填写。', purpose: '物料名称', fill: '如 螺丝 M3' },
|
||||
{ name: '简称', source: '手工填写(可空)。', purpose: '简写', fill: '可空' },
|
||||
{ name: '规格', source: '手工填写(可空)。', purpose: '规格型号', fill: '可空' },
|
||||
{ name: '单位', source: '手工填写。', purpose: '计量单位', fill: '如 个/套' },
|
||||
{ name: '类型', source: '选择。语义由库房定:结构件按批次管理,精密件按 SN 逐件管理。', purpose: '决定入库方式:结构件走批次、精密件走 SN', fill: '结构件(批次) / 精密件(SN)' },
|
||||
{ name: '物料类型', source: '选择(可空)。', purpose: '业务归类', fill: '标准件/电子件/包装件/半成品/成品' }
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
export const helpDisplay = {
|
||||
title: '库房总览显示',
|
||||
overview: '给库房显示器用的只读总览页,展示库存与出入库概况。\n数据实时读取库存统计,本页不可编辑。',
|
||||
|
||||
@@ -4,7 +4,7 @@ import { useRoute, useRouter } from 'vue-router'
|
||||
import { ElMessage } from 'element-plus'
|
||||
import {
|
||||
HomeFilled, Download, Upload, Search, CircleCheck, List,
|
||||
Box, Tickets, Monitor
|
||||
Box, Tickets, Monitor, EditPen
|
||||
} from '@element-plus/icons-vue'
|
||||
import { getUser, logout } from '../utils/auth'
|
||||
|
||||
@@ -23,7 +23,8 @@ const menus = [
|
||||
{ path: '/stocktake', title: '库存盘点', icon: List },
|
||||
{ path: '/semi', title: '半成品/成品', icon: Box },
|
||||
{ path: '/package', title: '包装绑定', icon: Box },
|
||||
{ path: '/ledger', title: '物料台账', icon: Tickets }
|
||||
{ path: '/ledger', title: '备料台账', icon: Tickets },
|
||||
{ path: '/base-data', title: '基础数据', icon: EditPen }
|
||||
]
|
||||
|
||||
function onLogout() {
|
||||
@@ -38,7 +39,7 @@ function onLogout() {
|
||||
<el-aside width="210px" class="aside">
|
||||
<div class="brand">
|
||||
<el-icon :size="22"><Box /></el-icon>
|
||||
<span>北自所库房客户端</span>
|
||||
<span>库房客户端</span>
|
||||
</div>
|
||||
<el-menu :default-active="route.path" class="menu" background-color="#001529"
|
||||
text-color="#c2cad8" active-text-color="#ffffff" router>
|
||||
|
||||
@@ -0,0 +1,203 @@
|
||||
<script setup>
|
||||
import { onMounted, reactive, ref } from 'vue'
|
||||
import { ElMessage } from 'element-plus'
|
||||
import request from '../utils/request'
|
||||
import PageHelp from '../components/PageHelp.vue'
|
||||
import { helpBaseData } from '../help'
|
||||
|
||||
/* ---------- Tab1 区域维护 ---------- */
|
||||
const zones = ref([])
|
||||
const zoneForm = reactive({ zoneCode: '', zoneName: '', description: '' })
|
||||
const zoneSaving = ref(false)
|
||||
|
||||
async function loadZones() {
|
||||
const data = await request.get('/zone/list')
|
||||
zones.value = Array.isArray(data) ? data : data?.list || []
|
||||
}
|
||||
|
||||
async function addZone() {
|
||||
if (!zoneForm.zoneCode || !zoneForm.zoneName) {
|
||||
ElMessage.warning('区域编码和区域名称必填')
|
||||
return
|
||||
}
|
||||
zoneSaving.value = true
|
||||
try {
|
||||
await request.post('/zone/create', { ...zoneForm })
|
||||
ElMessage.success('区域新增成功')
|
||||
zoneForm.zoneCode = ''
|
||||
zoneForm.zoneName = ''
|
||||
zoneForm.description = ''
|
||||
await loadZones()
|
||||
} finally {
|
||||
zoneSaving.value = false
|
||||
}
|
||||
}
|
||||
|
||||
/* ---------- Tab2 物料档案维护 ---------- */
|
||||
const materials = ref([])
|
||||
const materialTotal = ref(0)
|
||||
const materialLoading = ref(false)
|
||||
const mForm = reactive({
|
||||
code: '', name: '', shortName: '', spec: '', unit: '',
|
||||
manageMode: 1, materialType: '', templateCode: '', description: ''
|
||||
})
|
||||
const mSaving = ref(false)
|
||||
// 是否编辑模式
|
||||
const editingId = ref(0)
|
||||
|
||||
async function loadMaterials() {
|
||||
materialLoading.value = true
|
||||
try {
|
||||
const data = await request.get('/material/query', { params: { page: 1, pageSize: 200 } })
|
||||
materials.value = data?.list || []
|
||||
materialTotal.value = data?.total || 0
|
||||
} finally {
|
||||
materialLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
function resetMForm() {
|
||||
editingId.value = 0
|
||||
Object.assign(mForm, {
|
||||
code: '', name: '', shortName: '', spec: '', unit: '',
|
||||
manageMode: 1, materialType: '', templateCode: '', description: ''
|
||||
})
|
||||
}
|
||||
|
||||
function startEdit(row) {
|
||||
editingId.value = row.id
|
||||
Object.assign(mForm, {
|
||||
code: row.code, name: row.name, shortName: row.shortName || '',
|
||||
spec: row.spec || '', unit: row.unit || '', manageMode: row.manageMode,
|
||||
materialType: row.materialType || '', templateCode: row.templateCode || '',
|
||||
description: row.description || ''
|
||||
})
|
||||
}
|
||||
|
||||
async function saveMaterial() {
|
||||
if (!mForm.code || !mForm.name) {
|
||||
ElMessage.warning('物料编码和名称必填')
|
||||
return
|
||||
}
|
||||
mSaving.value = true
|
||||
try {
|
||||
if (editingId.value) {
|
||||
await request.post('/material/update', {
|
||||
id: editingId.value, name: mForm.name, shortName: mForm.shortName,
|
||||
spec: mForm.spec, unit: mForm.unit, description: mForm.description,
|
||||
manageMode: mForm.manageMode
|
||||
})
|
||||
ElMessage.success('物料更新成功')
|
||||
} else {
|
||||
await request.post('/material/create', { ...mForm })
|
||||
ElMessage.success('物料新增成功')
|
||||
}
|
||||
resetMForm()
|
||||
await loadMaterials()
|
||||
} finally {
|
||||
mSaving.value = false
|
||||
}
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
loadZones()
|
||||
loadMaterials()
|
||||
})
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<el-card shadow="never">
|
||||
<el-tabs>
|
||||
<el-tab-pane label="区域维护">
|
||||
<el-form inline style="margin-bottom:14px">
|
||||
<el-form-item label="区域编码">
|
||||
<el-input v-model="zoneForm.zoneCode" placeholder="如 Z02" clearable style="width:170px" />
|
||||
</el-form-item>
|
||||
<el-form-item label="区域名称">
|
||||
<el-input v-model="zoneForm.zoneName" placeholder="如 合格区" clearable style="width:170px" />
|
||||
</el-form-item>
|
||||
<el-form-item label="说明">
|
||||
<el-input v-model="zoneForm.description" placeholder="备注(可空)" clearable style="width:220px" />
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" :loading="zoneSaving" @click="addZone">新增区域</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<el-table :data="zones" border size="small" empty-text="暂无区域,请先在上方新增">
|
||||
<el-table-column prop="zoneCode" label="区域编码" min-width="140" />
|
||||
<el-table-column prop="zoneName" label="区域名称" min-width="160" />
|
||||
<el-table-column prop="description" label="说明" min-width="200">
|
||||
<template #default="{ row }">{{ row.description || '-' }}</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-tab-pane>
|
||||
|
||||
<el-tab-pane :label="`物料档案(${materialTotal})`">
|
||||
<el-form label-width="100px" inline style="margin-bottom:14px">
|
||||
<el-form-item label="物料编码">
|
||||
<el-input v-model="mForm.code" placeholder="如 SCREW-M3" clearable style="width:160px" :disabled="!!editingId" />
|
||||
</el-form-item>
|
||||
<el-form-item label="名称">
|
||||
<el-input v-model="mForm.name" placeholder="如 螺丝 M3" clearable style="width:160px" />
|
||||
</el-form-item>
|
||||
<el-form-item label="简称">
|
||||
<el-input v-model="mForm.shortName" placeholder="简称(可空)" clearable style="width:130px" />
|
||||
</el-form-item>
|
||||
<el-form-item label="规格">
|
||||
<el-input v-model="mForm.spec" placeholder="规格(可空)" clearable style="width:130px" />
|
||||
</el-form-item>
|
||||
<el-form-item label="单位">
|
||||
<el-input v-model="mForm.unit" placeholder="如 个/套" clearable style="width:100px" />
|
||||
</el-form-item>
|
||||
<el-form-item label="类型">
|
||||
<el-select v-model="mForm.manageMode" placeholder="请选择" style="width:150px">
|
||||
<el-option :value="1" label="结构件(批次管理)" />
|
||||
<el-option :value="2" label="精密件(SN 管理)" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="物料类型">
|
||||
<el-select v-model="mForm.materialType" placeholder="请选择" clearable style="width:130px">
|
||||
<el-option label="标准件" value="标准件" />
|
||||
<el-option label="电子件" value="电子件" />
|
||||
<el-option label="包装件" value="包装件" />
|
||||
<el-option label="半成品" value="半成品" />
|
||||
<el-option label="成品" value="成品" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" :loading="mSaving" @click="saveMaterial">
|
||||
{{ editingId ? '保存修改' : '新增物料' }}
|
||||
</el-button>
|
||||
<el-button v-if="editingId" @click="resetMForm">取消编辑</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<el-table :data="materials" border size="small" v-loading="materialLoading" empty-text="暂无物料,请先在上方新增">
|
||||
<el-table-column prop="code" label="物料编码" min-width="120" />
|
||||
<el-table-column prop="name" label="名称" min-width="120" />
|
||||
<el-table-column prop="spec" label="规格" min-width="90">
|
||||
<template #default="{ row }">{{ row.spec || '-' }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="unit" label="单位" width="70" align="center">
|
||||
<template #default="{ row }">{{ row.unit || '-' }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="类型" width="150" align="center">
|
||||
<template #default="{ row }">
|
||||
<el-tag :type="row.manageMode === 2 ? 'warning' : 'info'" size="small">
|
||||
{{ row.manageMode === 2 ? '精密件(SN)' : '结构件(批次)' }}
|
||||
</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="materialType" label="物料类型" width="90" align="center">
|
||||
<template #default="{ row }">{{ row.materialType || '-' }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="90" align="center">
|
||||
<template #default="{ row }">
|
||||
<el-button link type="primary" size="small" @click="startEdit(row)">编辑</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
</el-card>
|
||||
<PageHelp :data="helpBaseData" />
|
||||
</template>
|
||||
@@ -1,7 +1,7 @@
|
||||
<script setup>
|
||||
import { onMounted, ref } from 'vue'
|
||||
import { useRouter } from 'vue-router'
|
||||
import { CircleCheck, Download, List, Monitor, Search, Upload, Box, Tickets } from '@element-plus/icons-vue'
|
||||
import { CircleCheck, Download, List, Monitor, Search, Upload, Box, Tickets, EditPen } from '@element-plus/icons-vue'
|
||||
import request from '../utils/request'
|
||||
import { fmtNum } from '../utils/format'
|
||||
|
||||
@@ -35,7 +35,8 @@ const entries = [
|
||||
{ path: '/stocktake', title: '库存盘点', icon: List },
|
||||
{ path: '/semi', title: '半成品/成品', icon: Box },
|
||||
{ path: '/package', title: '包装绑定', icon: Tickets },
|
||||
{ path: '/ledger', title: '物料台账', icon: Tickets },
|
||||
{ path: '/ledger', title: '备料台账', icon: Tickets },
|
||||
{ path: '/base-data', title: '基础数据', icon: EditPen },
|
||||
{ path: '/display', title: '免登录大屏', icon: Monitor }
|
||||
]
|
||||
</script>
|
||||
|
||||
@@ -63,7 +63,7 @@ onBeforeUnmount(() => {
|
||||
<template>
|
||||
<div class="screen">
|
||||
<header class="head">
|
||||
<div class="side left">北自所 · 库房监控</div>
|
||||
<div class="side left">库房监控</div>
|
||||
<h1 class="title">库存动态大屏</h1>
|
||||
<div class="side right">
|
||||
<span class="date">{{ clock.date }}</span>
|
||||
|
||||
@@ -22,7 +22,7 @@ const submitting1 = ref(false)
|
||||
const lastInboundNo = ref('')
|
||||
const form1 = reactive({
|
||||
materialCode: '', batchNo: '', quantity: 1,
|
||||
zoneCode: '', productionDate: '', supplier: ''
|
||||
zoneCode: '', productionDate: '', supplier: '', remark: ''
|
||||
})
|
||||
const rules1 = {
|
||||
materialCode: [{ required: true, message: '请选择物料', trigger: 'change' }],
|
||||
@@ -45,6 +45,7 @@ async function submitBatch() {
|
||||
zoneCode: form1.zoneCode,
|
||||
productionDate: form1.productionDate,
|
||||
supplier: form1.supplier.trim(),
|
||||
remark: form1.remark.trim(),
|
||||
operator: getRealName()
|
||||
})
|
||||
lastInboundNo.value = data?.inboundNo || ''
|
||||
@@ -60,10 +61,13 @@ async function submitBatch() {
|
||||
const snInput = ref('')
|
||||
const submitting2 = ref(false)
|
||||
const snList = ref([])
|
||||
const form2 = reactive({ materialCode: '', zoneCode: '' })
|
||||
const form2 = reactive({ materialCode: '', zoneCode: '', remark: '' })
|
||||
|
||||
// 支持多种分隔符:中英文逗号、中英文句号、分号、顿号、空格、回车、制表符等
|
||||
const SN_SEP = /[,,.。;;、\s]+/
|
||||
|
||||
function addSnLines() {
|
||||
const lines = String(snInput.value).split(/\s+/)
|
||||
const lines = String(snInput.value).split(SN_SEP)
|
||||
for (let raw of lines) {
|
||||
const sn = raw.trim()
|
||||
if (!sn) continue
|
||||
@@ -93,6 +97,7 @@ async function submitSn() {
|
||||
materialCode: form2.materialCode,
|
||||
zoneCode: form2.zoneCode,
|
||||
snList: [...snList.value],
|
||||
remark: form2.remark.trim(),
|
||||
operator: getRealName()
|
||||
})
|
||||
ElMessage.success(`入库成功:入库单号 ${data?.inboundNo || ''},SN 共 ${snList.value.length} 条`)
|
||||
@@ -171,6 +176,9 @@ async function importExcel() {
|
||||
<el-form-item label="供应商">
|
||||
<el-input v-model="form1.supplier" placeholder="供应商名称" clearable />
|
||||
</el-form-item>
|
||||
<el-form-item label="备注">
|
||||
<el-input v-model="form1.remark" placeholder="备注(可空)" clearable />
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" :loading="submitting1" @click="submitBatch">提交入库</el-button>
|
||||
</el-form-item>
|
||||
@@ -194,9 +202,16 @@ async function importExcel() {
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="扫码录入">
|
||||
<el-input v-model="snInput" type="textarea" :rows="4" autofocus
|
||||
placeholder="扫入或粘贴 SN 后按回车追加一行(支持一次多条,空白分隔)"
|
||||
@keydown.enter.prevent="addSnLines" />
|
||||
<div style="width:100%">
|
||||
<el-input v-model="snInput" type="textarea" :rows="4"
|
||||
placeholder="扫入或粘贴 SN,可用 逗号/分号/顿号/空格/回车 分隔,一次可录入多条" />
|
||||
<el-button type="primary" plain style="margin-top:6px" :disabled="!snInput.trim()"
|
||||
@click="addSnLines">录入到列表</el-button>
|
||||
<span style="margin-left:8px;color:#909399;font-size:12px">点【录入到列表】加入下方清单,回车只是换行</span>
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="备注">
|
||||
<el-input v-model="form2.remark" type="textarea" :rows="2" placeholder="本批 SN 的统一备注(可空)" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
@@ -219,7 +234,7 @@ async function importExcel() {
|
||||
</el-tab-pane>
|
||||
|
||||
<el-tab-pane label="Excel 导入">
|
||||
<el-alert type="info" :closable="false" title="列头顺序(首行忽略):物料编码 | 批次号(可空自动生成) | 数量 | 生产日期 | 供应商 | 区域"
|
||||
<el-alert type="info" :closable="false" title="列头顺序(首行忽略):物料编码 | 批次号(可空自动生成) | 数量 | 生产日期 | 供应商 | 区域 | 备注"
|
||||
style="max-width:760px;margin-bottom:14px" />
|
||||
<el-upload ref="uploadRef" drag accept=".xlsx" :limit="1" :auto-upload="false"
|
||||
:on-change="onExcelChange" :on-exceed="onExceed">
|
||||
|
||||
@@ -55,7 +55,7 @@ function statusTag(s) {
|
||||
</el-card>
|
||||
|
||||
<el-card v-if="queried" shadow="never">
|
||||
<template #header>工单 {{ orderNo }} 物料台账(共 {{ total }} 条)</template>
|
||||
<template #header>工单 {{ orderNo }} 备料台账(共 {{ total }} 条)</template>
|
||||
<el-table :data="rows" border v-loading="loading" empty-text="暂无台账数据">
|
||||
<el-table-column prop="orderNo" label="工单号" min-width="140" />
|
||||
<el-table-column prop="materialCode" label="物料编码" min-width="150" />
|
||||
|
||||
@@ -37,7 +37,7 @@ async function onSubmit() {
|
||||
<div class="login-page">
|
||||
<el-card class="card">
|
||||
<div class="head">
|
||||
<h2>北自所库房客户端</h2>
|
||||
<h2>库房客户端</h2>
|
||||
<p>请使用 WMS 账号登录</p>
|
||||
</div>
|
||||
<el-form ref="formRef" :model="form" :rules="rules" label-position="top" @keyup.enter="onSubmit">
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<script setup>
|
||||
import { computed, reactive, ref } from 'vue'
|
||||
import { computed, onMounted, reactive, ref } from 'vue'
|
||||
import { ElMessage, ElMessageBox } from 'element-plus'
|
||||
import request from '../utils/request'
|
||||
import { getRealName } from '../utils/auth'
|
||||
@@ -13,6 +13,17 @@ const loading = ref(false)
|
||||
const queried = ref(false)
|
||||
const rows = ref([])
|
||||
|
||||
// 工单下拉:来自 MES(经 WMS 后端 /api/orders),未完成排在前面
|
||||
const orders = ref([])
|
||||
onMounted(async () => {
|
||||
try {
|
||||
const data = await request.get('/orders', { params: { page: 1, pageSize: 200 } })
|
||||
orders.value = Array.isArray(data) ? data : data?.list || []
|
||||
} catch (e) {
|
||||
orders.value = []
|
||||
}
|
||||
})
|
||||
|
||||
const pendingRows = computed(() => rows.value.filter(r => r.status !== '领料完结'))
|
||||
|
||||
function gapOf(row) {
|
||||
@@ -109,7 +120,7 @@ async function query() {
|
||||
<el-input v-model="targetDock" placeholder="可选,如 DOCK-A" clearable style="width:180px" />
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" :loading="loading" @click="query">查询台账</el-button>
|
||||
<el-button type="primary" :loading="loading" @click="query">查询备料台账</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</el-card>
|
||||
@@ -146,7 +157,7 @@ async function query() {
|
||||
</el-table>
|
||||
</el-card>
|
||||
|
||||
<el-empty v-else description="请先按工单号查询物料台账" />
|
||||
<el-empty v-else description="请先按工单号查询备料台账" />
|
||||
</div>
|
||||
<PageHelp :data="helpOutbound" />
|
||||
</template>
|
||||
|
||||
@@ -17,7 +17,8 @@ const routes = [
|
||||
{ path: 'stocktake', name: 'Stocktake', component: () => import('../pages/Stocktake.vue'), meta: { title: '库存盘点' } },
|
||||
{ path: 'semi', name: 'Semi', component: () => import('../pages/Semi.vue'), meta: { title: '半成品/成品' } },
|
||||
{ path: 'package', name: 'Package', component: () => import('../pages/Package.vue'), meta: { title: '包装绑定' } },
|
||||
{ path: 'ledger', name: 'Ledger', component: () => import('../pages/Ledger.vue'), meta: { title: '物料台账' } }
|
||||
{ path: 'ledger', name: 'Ledger', component: () => import('../pages/Ledger.vue'), meta: { title: '备料台账' } },
|
||||
{ path: 'base-data', name: 'BaseData', component: () => import('../pages/BaseData.vue'), meta: { title: '基础数据' } }
|
||||
]
|
||||
},
|
||||
{ path: '/:pathMatch(.*)*', redirect: '/' }
|
||||
@@ -38,7 +39,7 @@ router.beforeEach((to) => {
|
||||
})
|
||||
|
||||
router.afterEach((to) => {
|
||||
document.title = to.meta?.title ? `${to.meta.title} - 北自所库房客户端` : '北自所库房客户端'
|
||||
document.title = to.meta?.title ? `${to.meta.title} - 库房客户端` : '库房客户端'
|
||||
})
|
||||
|
||||
export default router
|
||||
Reference in New Issue
Block a user