Files
bj_power/bj_power_mes/frontend/src/pages/Rbac.vue
T
SunYF ebf901ad16 chore: 完成多系统功能迭代与优化
1. 通用优化:
   - 统一系统标题为"库房客户端"/"MES产线控制",移除北自所前缀
   - 调整内置账号密码为统一123456,优化密码校验逻辑
   - 新增数据库自动创建逻辑,简化部署流程
   - 修复日志时间格式配置,优化日志输出
   - 新增纯数字密码安全提示

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

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

4. 其他优化:
   - 删除冗余的旧版静态资源文件,更新资源引用路径
   - 新增帮助文档,完善基础数据模块说明
   - 修复多处文案不统一、英文残留问题
2026-08-29 15:30:25 +08:00

122 lines
5.7 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<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>