fix: role code auto-gen; fix permission tree API response parsing; fix buildPermTree parent_id=0
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user