chore: 完成多系统功能迭代与优化

1. 通用优化:
   - 统一系统标题为"库房客户端"/"MES产线控制",移除北自所前缀
   - 调整内置账号密码为统一123456,优化密码校验逻辑
   - 新增数据库自动创建逻辑,简化部署流程
   - 修复日志时间格式配置,优化日志输出
   - 新增纯数字密码安全提示

2. MES系统优化:
   - 新增日排产管理功能,支持增删改查与自动算料生成备料单
   - 重构BOM模块,改为按产品编码维护而非工单维度
   - 新增工艺参数模板配置与手动报工页面
   - 新增产品类型自动编码功能
   - 优化菜单结构,调整工单管理、扫码报工等页面名称与路由
   - 新增删除日排产接口与权限保护
   - 修复物料清单查询逻辑,适配新BOM结构
   - 新增refreshToken支持,优化登录会话管理

3. WMS系统优化:
   - 新增基础数据维护页面,支持区域与物料档案管理
   - 新增工单列表下拉接口,对接MES获取未完成工单优先展示
   - 优化入库管理提示文案,替换英文提示为中文
   - 修复精密件入库校验逻辑,优化错误提示
   - 优化Excel导入功能,新增备注字段支持
   - 优化登录页面与菜单文案,统一备料台账名称
   - 新增自动打开浏览器功能,优化客户端启动体验
   - 修复备料出库页面查询提示文案
   - 新增WMS与MES对接配置,完善内部API调用逻辑

4. 其他优化:
   - 删除冗余的旧版静态资源文件,更新资源引用路径
   - 新增帮助文档,完善基础数据模块说明
   - 修复多处文案不统一、英文残留问题
This commit is contained in:
SunYF
2026-08-29 15:30:25 +08:00
parent e82b744bbd
commit ebf901ad16
124 changed files with 1815 additions and 480 deletions
+30 -73
View File
@@ -21,30 +21,23 @@
</el-table>
</el-tab-pane>
<!-- 角色 -->
<!-- 角色只读不允许新增/编辑/删除 -->
<el-tab-pane label="角色" name="roles">
<div style="margin-bottom:10px">
<el-button type="primary" @click="openRole()">新增角色</el-button>
</div>
<p class="tip">角色为系统预置只读查看</p>
<el-table :data="roles" border size="small">
<el-table-column prop="id" label="ID" width="60" />
<el-table-column prop="name" label="名称" min-width="120" />
<el-table-column prop="code" label="编码" min-width="130" />
<el-table-column prop="remark" label="备注" min-width="150" />
<el-table-column label="操作" width="140">
<template #default="{row}">
<el-button size="small" @click="openRole(row)">编辑</el-button>
<el-button size="small" type="danger" @click="delRole(row)">删除</el-button>
</template>
<el-table-column prop="permissionCodes" label="权限" min-width="200">
<template #default="{row}">{{ (row.permissionCodes||[]).join(', ') || '-' }}</template>
</el-table-column>
</el-table>
</el-tab-pane>
<!-- 权限 -->
<!-- 权限菜单只读不允许新增/编辑/删除 -->
<el-tab-pane label="权限菜单" name="perms">
<div style="margin-bottom:10px">
<el-button type="primary" @click="openPerm()">新增权限</el-button>
</div>
<p class="tip">权限菜单为系统预置只读查看</p>
<el-table :data="perms" border size="small">
<el-table-column prop="id" label="ID" width="60" />
<el-table-column prop="code" label="编码" min-width="150" />
@@ -52,12 +45,6 @@
<el-table-column prop="type" label="类型" width="80" />
<el-table-column prop="path" label="路径" min-width="120" />
<el-table-column prop="sort" label="排序" width="70" />
<el-table-column label="操作" width="140">
<template #default="{row}">
<el-button size="small" @click="openPerm(row)">编辑</el-button>
<el-button size="small" type="danger" @click="delPerm(row)">删除</el-button>
</template>
</el-table-column>
</el-table>
</el-tab-pane>
</el-tabs>
@@ -65,12 +52,13 @@
<!-- 用户编辑 -->
<el-dialog v-model="u.show" :title="u.id?'编辑用户':'新增用户'" width="420px">
<el-form :model="u" label-width="80px">
<el-form-item label="用户名"><el-input v-model="u.username" /></el-form-item>
<el-form-item label="密码"><el-input v-model="u.password" type="password" show-password /></el-form-item>
<el-form-item label="用户名"><el-input v-model="u.username" :disabled="u.id===1" /></el-form-item>
<el-form-item v-if="!u.id" label="密码"><el-input v-model="u.password" type="password" show-password placeholder="至少6位,不能纯数字" /></el-form-item>
<el-form-item v-else label="重置密码"><el-input v-model="u.password" type="password" show-password placeholder="留空则不修改;至少6位,不能纯数字" /></el-form-item>
<el-form-item label="姓名"><el-input v-model="u.name" /></el-form-item>
<el-form-item label="角色">
<el-select v-model="u.roleId" style="width:100%">
<el-option v-for="r in roles" :key="r.id" :label="r.name" :value="r.id" />
<el-option v-for="rl in roles" :key="rl.id" :label="rl.name" :value="rl.id" />
</el-select>
</el-form-item>
<el-form-item label="状态">
@@ -81,34 +69,6 @@
</el-form>
<template #footer><el-button @click="u.show=false">取消</el-button><el-button type="primary" @click="saveUser">保存</el-button></template>
</el-dialog>
<!-- 角色编辑 -->
<el-dialog v-model="r.show" :title="r.id?'编辑角色':'新增角色'" width="560px">
<el-form :model="r" label-width="80px">
<el-form-item label="名称"><el-input v-model="r.name" /></el-form-item>
<el-form-item label="编码"><el-input v-model="r.code" /></el-form-item>
<el-form-item label="备注"><el-input v-model="r.remark" /></el-form-item>
<el-form-item label="权限">
<el-select v-model="r.permissionCodes" multiple filterable placeholder="请选择权限" style="width:100%">
<el-option v-for="p in perms" :key="p.code" :label="p.name" :value="p.code" />
</el-select>
</el-form-item>
</el-form>
<template #footer><el-button @click="r.show=false">取消</el-button><el-button type="primary" @click="saveRole">保存</el-button></template>
</el-dialog>
<!-- 权限编辑 -->
<el-dialog v-model="p.show" :title="p.id?'编辑权限':'新增权限'" width="460px">
<el-form :model="p" label-width="80px">
<el-form-item label="编码"><el-input v-model="p.code" /></el-form-item>
<el-form-item label="名称"><el-input v-model="p.name" /></el-form-item>
<el-form-item label="类型"><el-input v-model="p.type" /></el-form-item>
<el-form-item label="路径"><el-input v-model="p.path" /></el-form-item>
<el-form-item label="排序"><el-input-number v-model="p.sort" /></el-form-item>
<el-form-item label="备注"><el-input v-model="p.remark" /></el-form-item>
</el-form>
<template #footer><el-button @click="p.show=false">取消</el-button><el-button type="primary" @click="savePerm">保存</el-button></template>
</el-dialog>
</el-card>
<PageHelp :data="helpRbac" />
</template>
@@ -123,8 +83,6 @@ import { helpRbac } from '../help'
const tab = ref('users')
const users = ref([]), roles = ref([]), perms = ref([])
const u = reactive({ show: false, id: 0, username: '', password: '', name: '', roleId: 0, status: 'ENABLED' })
const r = reactive({ show: false, id: 0, name: '', code: '', remark: '', permissionCodes: [] })
const p = reactive({ show: false, id: 0, code: '', name: '', type: 'MENU', path: '', sort: 0, remark: '' })
async function loadAll() {
users.value = (await request.get('/users')) || []
@@ -132,34 +90,33 @@ async function loadAll() {
perms.value = (await request.get('/permissions')) || []
}
function openUser(row) { Object.assign(u, row ? { ...row, show: true, password: '' } : { show: true, id: 0, username: '', password: '', name: '', roleId: roles.value[0]?.id || 0, status: 'ENABLED' }) }
// 前端密码规则校验(与后端一致):>=6位 且不能纯数字
function pwdOk(pwd) {
if (pwd.length < 6) return '密码长度至少 6 位'
if (/^\d+$/.test(pwd)) return '密码不能是纯数字'
return ''
}
async function saveUser() {
// 新增必须设置密码
if (!u.id) {
const err = pwdOk(u.password || '')
if (err) return ElMessage.error(err)
} else if (u.password) {
const err = pwdOk(u.password)
if (err) return ElMessage.error(err)
}
if (u.id) await request.put('/users', { ...u })
else await request.post('/users', { ...u })
ElMessage.success('保存成功'); u.show = false; loadAll()
}
async function delUser(row) {
if (row.id === 1) return ElMessage.warning('系统管理员不可删除')
await ElMessageBox.confirm('确认删除该用户?', '提示', { type: 'warning' })
await request.delete(`/users/${row.id}`); loadAll()
}
function openRole(row) { Object.assign(r, row ? { ...row, show: true } : { show: true, id: 0, name: '', code: '', remark: '', permissionCodes: [] }) }
async function saveRole() {
if (r.id) await request.put('/roles', { ...r })
else await request.post('/roles', { ...r })
ElMessage.success('保存成功'); r.show = false; loadAll()
}
async function delRole(row) {
await ElMessageBox.confirm('确认删除该角色?', '提示', { type: 'warning' })
await request.delete(`/roles/${row.id}`); loadAll()
}
function openPerm(row) { Object.assign(p, row ? { ...row, show: true } : { show: true, id: 0, code: '', name: '', type: 'MENU', path: '', sort: 0, remark: '' }) }
async function savePerm() {
if (p.id) await request.put('/permissions', { ...p })
else await request.post('/permissions', { ...p })
ElMessage.success('保存成功'); p.show = false; loadAll()
}
async function delPerm(row) {
await ElMessageBox.confirm('确认删除该权限?', '提示', { type: 'warning' })
await request.delete(`/permissions/${row.id}`); loadAll()
}
onMounted(loadAll)
</script>
</script>
<style scoped>
.tip { color: #909399; font-size: 13px; margin: 0 0 10px; }
</style>