fix: role code auto-gen; fix permission tree API response parsing; fix buildPermTree parent_id=0

This commit is contained in:
li
2026-03-14 18:05:58 +08:00
parent b590fc88a4
commit 12a1be5571
92 changed files with 21 additions and 162 deletions
+20 -14
View File
@@ -29,11 +29,11 @@ const form = reactive({
})
const formRules = {
name: [{ required: true, message: '请输入角色名称', trigger: 'blur' }],
code: [
{ required: true, message: '请输入角色标识', trigger: 'blur' },
{ pattern: /^[a-zA-Z][a-zA-Z0-9_:]*$/, message: '只允许字母、数字、下划线,以字母开头', trigger: 'blur' }
]
name: [{ required: true, message: '请输入角色名称', trigger: 'blur' }]
}
function genCode() {
return 'role_' + Date.now().toString(36)
}
// ─── Permission assignment ────────────────────────────────────────────────────
@@ -68,17 +68,23 @@ async function fetchList() {
async function fetchPermTree() {
try {
const res = await permissionApi.getList({ per_page: 500 })
const flat = res.data?.list || res.data?.data || []
permTree.value = buildPermTree(flat)
const res = await permissionApi.getList({ page_size: 500 })
// API returns already-tree-structured array in res.data
const data = res.data
if (Array.isArray(data)) {
permTree.value = data
} else {
const flat = data?.list || data?.data || []
permTree.value = buildPermTree(flat)
}
} catch {
//
}
}
function buildPermTree(nodes, parentId = null) {
function buildPermTree(nodes, parentId = 0) {
return nodes
.filter(n => (n.parent_id ?? null) === parentId)
.filter(n => (n.parent_id ?? 0) === parentId)
.map(n => ({ ...n, children: buildPermTree(nodes, n.id) }))
}
@@ -97,7 +103,7 @@ function handleReset() {
function handleAdd() {
isEdit.value = false
dialogTitle.value = '新增角色'
Object.assign(form, { id: null, name: '', code: '', description: '', status: 1 })
Object.assign(form, { id: null, name: '', code: genCode(), description: '', status: 1 })
dialogVisible.value = true
}
@@ -274,9 +280,9 @@ onMounted(() => {
<el-form-item label="角色名称" prop="name">
<el-input v-model="form.name" placeholder="请输入角色名称" />
</el-form-item>
<el-form-item label="角色标识" prop="code">
<el-input v-model="form.code" placeholder="如: admin, nurse_manager" :disabled="isEdit" />
<div class="form-tip">标识用于程序内部权限判断,创建后不可修改</div>
<el-form-item v-if="isEdit" label="角色标识">
<el-input v-model="form.code" disabled />
<div class="form-tip">角色标识由系统自动生成,不可修改</div>
</el-form-item>
<el-form-item label="描述" prop="description">
<el-input