1. 通用优化: - 统一系统标题为"库房客户端"/"MES产线控制",移除北自所前缀 - 调整内置账号密码为统一123456,优化密码校验逻辑 - 新增数据库自动创建逻辑,简化部署流程 - 修复日志时间格式配置,优化日志输出 - 新增纯数字密码安全提示 2. MES系统优化: - 新增日排产管理功能,支持增删改查与自动算料生成备料单 - 重构BOM模块,改为按产品编码维护而非工单维度 - 新增工艺参数模板配置与手动报工页面 - 新增产品类型自动编码功能 - 优化菜单结构,调整工单管理、扫码报工等页面名称与路由 - 新增删除日排产接口与权限保护 - 修复物料清单查询逻辑,适配新BOM结构 - 新增refreshToken支持,优化登录会话管理 3. WMS系统优化: - 新增基础数据维护页面,支持区域与物料档案管理 - 新增工单列表下拉接口,对接MES获取未完成工单优先展示 - 优化入库管理提示文案,替换英文提示为中文 - 修复精密件入库校验逻辑,优化错误提示 - 优化Excel导入功能,新增备注字段支持 - 优化登录页面与菜单文案,统一备料台账名称 - 新增自动打开浏览器功能,优化客户端启动体验 - 修复备料出库页面查询提示文案 - 新增WMS与MES对接配置,完善内部API调用逻辑 4. 其他优化: - 删除冗余的旧版静态资源文件,更新资源引用路径 - 新增帮助文档,完善基础数据模块说明 - 修复多处文案不统一、英文残留问题
122 lines
5.7 KiB
Vue
122 lines
5.7 KiB
Vue
<template>
|
||
<el-card>
|
||
<el-tabs v-model="tab">
|
||
<!-- 用户 -->
|
||
<el-tab-pane label="用户" name="users">
|
||
<div style="margin-bottom:10px">
|
||
<el-button type="primary" @click="openUser()">新增用户</el-button>
|
||
</div>
|
||
<el-table :data="users" border size="small">
|
||
<el-table-column prop="id" label="ID" width="60" />
|
||
<el-table-column prop="username" label="用户名" min-width="120" />
|
||
<el-table-column prop="name" label="姓名" min-width="110" />
|
||
<el-table-column prop="roleId" label="角色ID" width="80" />
|
||
<el-table-column prop="status" label="状态" width="90" />
|
||
<el-table-column label="操作" width="140">
|
||
<template #default="{row}">
|
||
<el-button size="small" @click="openUser(row)">编辑</el-button>
|
||
<el-button size="small" type="danger" @click="delUser(row)">删除</el-button>
|
||
</template>
|
||
</el-table-column>
|
||
</el-table>
|
||
</el-tab-pane>
|
||
|
||
<!-- 角色(只读,不允许新增/编辑/删除) -->
|
||
<el-tab-pane label="角色" name="roles">
|
||
<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 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">
|
||
<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" />
|
||
<el-table-column prop="name" label="名称" min-width="120" />
|
||
<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>
|
||
</el-tab-pane>
|
||
</el-tabs>
|
||
|
||
<!-- 用户编辑 -->
|
||
<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" :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="rl in roles" :key="rl.id" :label="rl.name" :value="rl.id" />
|
||
</el-select>
|
||
</el-form-item>
|
||
<el-form-item label="状态">
|
||
<el-select v-model="u.status" style="width:100%">
|
||
<el-option label="启用" value="ENABLED" /><el-option label="禁用" value="DISABLED" />
|
||
</el-select>
|
||
</el-form-item>
|
||
</el-form>
|
||
<template #footer><el-button @click="u.show=false">取消</el-button><el-button type="primary" @click="saveUser">保存</el-button></template>
|
||
</el-dialog>
|
||
</el-card>
|
||
<PageHelp :data="helpRbac" />
|
||
</template>
|
||
|
||
<script setup>
|
||
import { ref, reactive, onMounted } from 'vue'
|
||
import { ElMessage, ElMessageBox } from 'element-plus'
|
||
import request from '../utils/request'
|
||
import PageHelp from '../components/PageHelp.vue'
|
||
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' })
|
||
|
||
async function loadAll() {
|
||
users.value = (await request.get('/users')) || []
|
||
roles.value = (await request.get('/roles')) || []
|
||
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()
|
||
}
|
||
onMounted(loadAll)
|
||
</script>
|
||
|
||
<style scoped>
|
||
.tip { color: #909399; font-size: 13px; margin: 0 0 10px; }
|
||
</style> |