refactor(frontend): 优化基础数据页与文档,自动加载列表
1. 拆分基础数据帮助文档为区域维护和物料档案独立版本 2. 将onMounted加载列表改为watch immediate监听模式适配路由复用 3. 为盘点页添加页面自动加载历史盘点单 4. 为半成品页添加页面自动加载列表 5. 更新打包资源引用路径
This commit is contained in:
@@ -140,33 +140,29 @@ export const helpLedger = {
|
||||
]
|
||||
}
|
||||
|
||||
export const helpBaseData = {
|
||||
title: '区域维护 / 物料档案',
|
||||
export const helpZone = {
|
||||
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: '物料主数据不再登记生命周期阶段(原“物料类型”字段已移除)。原料→半成品→成品的流转由库存实体各自承载:组件统一入 inventory 表(manage_mode:1=结构件批次 / 2=精密件SN),半成品入 semifinished 固定业务表(首页“半成品在库”即统计此表)。', purpose: '避免主数据预判物料命运,消除与 semifinished 业务的歧义', fill: '无需填写;半成品/成品状态以实际库存与 semifinished 表为准' }
|
||||
]
|
||||
}
|
||||
'维护库区字典,供入库/半成品/出库等所有页面的"区域"下拉框选择。\n区域是货品存放的物理库区(如待检、合格 Z02、不合格…);入库时必须指明放到哪个区,质量检验合格后再转移到合格区。\n\n区域字典是库房的第一道地基:先建好区域,入库、检验、出库才能选到正确的存放位置。',
|
||||
fields: [
|
||||
{ name: '区域编码', source: '手工填写,仓库自定义(新增后不可改)。', purpose: '库区唯一编号,入库/出库据此定位存放位置', fill: '如 Z02、Z05,建议字母+数字,唯一;新增后不可改' },
|
||||
{ name: '区域名称', source: '手工填写。', purpose: '库区中文名,便于识别', fill: '如 合格区、待检区、不合格区' },
|
||||
{ name: '说明', source: '手工填写(可空)。', purpose: '补充描述', fill: '可空' }
|
||||
]
|
||||
}
|
||||
|
||||
export const helpMaterial = {
|
||||
title: '物料档案',
|
||||
overview:
|
||||
'定义每一种物料的字典:叫什么、什么规格、是【结构件(批次)】还是【精密件(SN)】。\n此处维护的物料会作为下拉选项出现在入库/出库/装箱等页面;其中"类型"直接决定后续入库方式——结构件走批次(一批多件)、精密件走 SN 逐件扫码(单件追溯)。\n\n物料档案是库房的另一道地基:先建好物料,入库时才能选到;类型选错会导致入库方式与追溯粒度不符。',
|
||||
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: '选择:1=结构件(批次管理) / 2=精密件(SN 管理)。语义由库房定:结构件按批次管理,精密件按 SN 逐件管理。', purpose: '决定入库方式:结构件走批次、精密件走 SN 逐件扫码', fill: '结构件(批次) / 精密件(SN)' },
|
||||
{ name: '说明', source: '手工填写(可空)。', purpose: '补充描述', fill: '可空' }
|
||||
]
|
||||
}
|
||||
|
||||
|
||||
@@ -1,15 +1,18 @@
|
||||
<script setup>
|
||||
import { onMounted, reactive, ref } from 'vue'
|
||||
import { computed, reactive, ref, watch } from 'vue'
|
||||
import { ElMessage } from 'element-plus'
|
||||
import request from '../utils/request'
|
||||
import PageHelp from '../components/PageHelp.vue'
|
||||
import { helpBaseData } from '../help'
|
||||
import { helpZone, helpMaterial } from '../help'
|
||||
|
||||
// mode: 'zone' = 区域维护;'material' = 物料档案(同一组件拆成两个独立菜单)
|
||||
const props = defineProps({
|
||||
mode: { type: String, default: 'zone' }
|
||||
})
|
||||
|
||||
// 帮助文档按菜单各自独立:区域维护 / 物料档案 分开展示
|
||||
const helpData = computed(() => (props.mode === 'material' ? helpMaterial : helpZone))
|
||||
|
||||
/* ---------- 区域维护 ---------- */
|
||||
const zones = ref([])
|
||||
const zoneTotal = ref(0)
|
||||
@@ -161,10 +164,13 @@ async function saveMaterial() {
|
||||
}
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
if (props.mode === 'material') loadMaterials()
|
||||
else loadZones()
|
||||
})
|
||||
// 区域维护 / 物料档案 共用同一组件:切换菜单时组件实例被复用,
|
||||
// onMounted 不会再次触发,故用 watch(mode, immediate) 保证进入即加载对应列表
|
||||
watch(
|
||||
() => props.mode,
|
||||
(m) => { if (m === 'material') loadMaterials(); else loadZones() },
|
||||
{ immediate: true }
|
||||
)
|
||||
</script>
|
||||
|
||||
<template>
|
||||
@@ -303,7 +309,7 @@ onMounted(() => {
|
||||
</el-dialog>
|
||||
</template>
|
||||
</el-card>
|
||||
<PageHelp :data="helpBaseData" />
|
||||
<PageHelp :data="helpData" />
|
||||
</template>
|
||||
|
||||
<style scoped>
|
||||
|
||||
@@ -15,6 +15,7 @@ onMounted(async () => {
|
||||
const ms = await request.get('/material/list')
|
||||
materials.value = Array.isArray(ms) ? ms : ms?.list || []
|
||||
} catch { /* 字典加载失败不阻塞入库 */ }
|
||||
loadList()
|
||||
})
|
||||
|
||||
const operator = getRealName()
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<script setup>
|
||||
import { nextTick, reactive, ref } from 'vue'
|
||||
import { nextTick, onMounted, reactive, ref } from 'vue'
|
||||
import { ElMessage } from 'element-plus'
|
||||
import request from '../utils/request'
|
||||
import { fmtTime } from '../utils/format'
|
||||
@@ -113,6 +113,9 @@ async function loadHistory() {
|
||||
historyLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
// 进入页面即加载历史盘点单,无需手动点击查询
|
||||
onMounted(() => { loadHistory() })
|
||||
</script>
|
||||
|
||||
<template>
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<title>库房客户端</title>
|
||||
<!-- 系统图标:库房箱体(内联 SVG,避免依赖外部文件) -->
|
||||
<link rel="icon" type="image/svg+xml" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'><rect width='32' height='32' rx='6' fill='%231668dc'/><path d='M16 7l9 4.5v9L16 25l-9-4.5v-9L16 7z' fill='none' stroke='%23fff' stroke-width='2' stroke-linejoin='round'/><path d='M7 11.5L16 16l9-4.5M16 16v9' fill='none' stroke='%23fff' stroke-width='2' stroke-linejoin='round'/></svg>">
|
||||
<script type="module" crossorigin src="/assets/index-B3vta_Fe.js"></script>
|
||||
<script type="module" crossorigin src="/assets/index-DIFB8zKz.js"></script>
|
||||
<link rel="stylesheet" crossorigin href="/assets/index-B-hDjIvo.css">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
Reference in New Issue
Block a user