|
|
|
|
@ -11,23 +11,22 @@
|
|
|
|
|
<div @click="created(0)">创建角色</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="w-full">
|
|
|
|
|
<crud vertical :keys="role_keys" :data="role" @update="update(0,
|
|
|
|
|
$event)">
|
|
|
|
|
<template #k_created="{ value }">{{ util.datetostr(value) }}</template>
|
|
|
|
|
<crud vertical :keys="role_keys" :data="role" @update="update($event, role, api.app.RolePatch, app.id)">
|
|
|
|
|
<template #k_created_at="{ value }">{{ util.datetostr(value) }}</template>
|
|
|
|
|
<template #k__="{ row }">
|
|
|
|
|
<div color="primary" size="sm" @click="show_dialog(0,
|
|
|
|
|
row.id)">权限</div>
|
|
|
|
|
<div color="secondary" size="sm" @click="show_dialog(1,
|
|
|
|
|
row.id)">用户</div>
|
|
|
|
|
<div color="negative" size="sm" @click="del(0, row.id)">删除</div>
|
|
|
|
|
<template v-if="row.id === app.role_id">
|
|
|
|
|
<template v-if="row.id === app.init_role_id">
|
|
|
|
|
<div color="positive" disable size="sm">初始角色</div>
|
|
|
|
|
</template>
|
|
|
|
|
<template v-else>
|
|
|
|
|
<div size="sm" @click="api.app.update(app.id, {
|
|
|
|
|
role_id:
|
|
|
|
|
<div size="sm" @click="api.app.Patch(app.id, {
|
|
|
|
|
init_role_id:
|
|
|
|
|
row.id
|
|
|
|
|
}).then(_ => app.role_id = row.id)">设置为初始角色</div>
|
|
|
|
|
}).then(_ => app.init_role_id = row.id)">设置为初始角色</div>
|
|
|
|
|
</template>
|
|
|
|
|
</template>
|
|
|
|
|
</crud>
|
|
|
|
|
@ -38,52 +37,49 @@
|
|
|
|
|
<div @click="created(1)">创建资源</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="w-full">
|
|
|
|
|
<crud vertical :keys="resource_keys" :data="resource" @update="update(1,
|
|
|
|
|
$event)">
|
|
|
|
|
<template #k_created="{ value }">{{ util.datetostr(value) }}</template>
|
|
|
|
|
<crud vertical :keys="resource_keys" :data="resource"
|
|
|
|
|
@update="update($event, resource, api.app.ResourcePatch, app.id)">
|
|
|
|
|
<template #k_created_at="{ value }">{{ util.datetostr(value) }}</template>
|
|
|
|
|
<template #k__="{ row }">
|
|
|
|
|
<div color="negative" size="sm" @click="del(1, row.name)">删除</div>
|
|
|
|
|
</template>
|
|
|
|
|
</crud>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<q-dialog v-model="dialog">
|
|
|
|
|
<q-card v-if="dialog_obj" class="mx-4 mt-4" style="width: 1000px;max-width: 90vw;">
|
|
|
|
|
<q-card-section class="row items-center q-pb-none">
|
|
|
|
|
<div class="text-h6">{{ dialog_obj.name }}
|
|
|
|
|
<UModal v-model="dialog" :ui="{ 'width': '' }">
|
|
|
|
|
<UCard v-if="dialog_obj" style="width: 1000px;max-width: 90vw;">
|
|
|
|
|
<template #header>
|
|
|
|
|
<div class="items-center flex">
|
|
|
|
|
<div class="text-2xl">{{ dialog_obj.name }}
|
|
|
|
|
</div>
|
|
|
|
|
<div class="flex-grow"></div>
|
|
|
|
|
<div v-if="dialog_mode">
|
|
|
|
|
<vinput :model-value="''" type="select" :options="['1', '2']" select-none="添加用户"></vinput>
|
|
|
|
|
<!-- <USelect filled :model-value="''" @update:model-value="roleuser.add" use-input hide-selected fill-input -->
|
|
|
|
|
<!-- input-debounce="0" label="添加用户" :options="users_cache" @filter="filterFn" style="width: 20rem"> -->
|
|
|
|
|
<!-- </USelect> -->
|
|
|
|
|
</div>
|
|
|
|
|
<div v-else @click="created(2, { role_id: dialog_obj.id })">添加权限</div>
|
|
|
|
|
</div>
|
|
|
|
|
<q-space />
|
|
|
|
|
<div v-if="dialog_mode">
|
|
|
|
|
<q-select filled :model-value="''" @update:model-value="roleuser.add" use-input hide-selected fill-input
|
|
|
|
|
input-debounce="0" label="添加用户" :options="users_cache" @filter="filterFn" style="width: 20rem">
|
|
|
|
|
<template v-slot:no-option>
|
|
|
|
|
<q-item>
|
|
|
|
|
<q-item-section class="text-grey">
|
|
|
|
|
无结果
|
|
|
|
|
</q-item-section>
|
|
|
|
|
</q-item>
|
|
|
|
|
</template>
|
|
|
|
|
</q-select>
|
|
|
|
|
</div>
|
|
|
|
|
<div v-else @click="created(2, { role_id: dialog_obj.id })">添加权限</div>
|
|
|
|
|
</q-card-section>
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
<q-card-section v-if="dialog_mode">
|
|
|
|
|
<div v-if="dialog_mode">
|
|
|
|
|
<crud vertical :keys="users_keys" :data="users">
|
|
|
|
|
<template #k__="{ row }">
|
|
|
|
|
<div color="negative" size="sm" @click="roleuser.drop(row)">删除</div>
|
|
|
|
|
</template>
|
|
|
|
|
</crud>
|
|
|
|
|
</q-card-section>
|
|
|
|
|
<q-card-section v-else>
|
|
|
|
|
<crud vertical :keys="access_keys" :data="access" @update="update(2, $event)">
|
|
|
|
|
</div>
|
|
|
|
|
<div v-else>
|
|
|
|
|
<crud vertical :keys="access_keys" :data="access" @update="update($event, access, api.access.Patch)">
|
|
|
|
|
<template #k__="{ row }">
|
|
|
|
|
<div color="negative" size="sm" @click="del(2, row.id)">删除</div>
|
|
|
|
|
</template>
|
|
|
|
|
</crud>
|
|
|
|
|
</q-card-section>
|
|
|
|
|
</q-card>
|
|
|
|
|
</q-dialog>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
</UCard>
|
|
|
|
|
</UModal>
|
|
|
|
|
</div>
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
@ -101,7 +97,7 @@ const role_keys = ref<any>([
|
|
|
|
|
},
|
|
|
|
|
{ name: 'name', label: '标识符' },
|
|
|
|
|
{ name: 'des', label: '描述', editable: true },
|
|
|
|
|
{ name: 'created', label: '创建时间' },
|
|
|
|
|
{ name: 'created_at', label: '创建时间' },
|
|
|
|
|
{ name: 'user_count', label: '绑定用户数' },
|
|
|
|
|
{
|
|
|
|
|
name: '_', label: '操作', style: { 'justify-content': 'start' },
|
|
|
|
|
@ -111,7 +107,7 @@ const role_keys = ref<any>([
|
|
|
|
|
const resource_keys = ref<any>([
|
|
|
|
|
{ name: 'name', label: '标识符' },
|
|
|
|
|
{ name: 'des', label: '描述', editable: true },
|
|
|
|
|
{ name: 'created', label: '创建时间' },
|
|
|
|
|
{ name: 'created_at', label: '创建时间' },
|
|
|
|
|
{
|
|
|
|
|
name: '_', label: '操作', style: { 'justify-content': 'start' },
|
|
|
|
|
width: 40
|
|
|
|
|
@ -141,11 +137,12 @@ const users_keys = ref<any>([
|
|
|
|
|
])
|
|
|
|
|
|
|
|
|
|
let access = ref<models.Access[]>([])
|
|
|
|
|
let users = ref<models.User[]>([])
|
|
|
|
|
let users = ref<models.UserRole[]>([])
|
|
|
|
|
let users_cache = ref<any[]>([])
|
|
|
|
|
const resource = ref<any[]>([])
|
|
|
|
|
const role = ref<any[]>([])
|
|
|
|
|
const app = inject('app') as Ref<models.App>
|
|
|
|
|
|
|
|
|
|
watch(computed(() => app.value.id), (v) => {
|
|
|
|
|
sync(v)
|
|
|
|
|
|
|
|
|
|
@ -155,13 +152,10 @@ const sync = (id: any) => {
|
|
|
|
|
if (!id) {
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
api.role.List(id).then(e => {
|
|
|
|
|
api.app.RoleList(id, {}).then(e => {
|
|
|
|
|
role.value = e
|
|
|
|
|
})
|
|
|
|
|
api.role(id).list().then(e => {
|
|
|
|
|
role.value = e
|
|
|
|
|
})
|
|
|
|
|
api.resource(id).list().then(e => {
|
|
|
|
|
api.app.ResourceList(id).then(e => {
|
|
|
|
|
resource.value = e
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
@ -171,11 +165,12 @@ const show_dialog = (mode: number, idx: string) => {
|
|
|
|
|
dialog.value = true
|
|
|
|
|
dialog_mode.value = mode
|
|
|
|
|
if (mode) {
|
|
|
|
|
api.user.list({ role_id: idx }).then(e => {
|
|
|
|
|
api.user.UserRoleList('-', { role_id: idx }).then(e => {
|
|
|
|
|
console.log(e)
|
|
|
|
|
users.value = e
|
|
|
|
|
})
|
|
|
|
|
} else {
|
|
|
|
|
api.access(app.value.id).list({ role_id: idx }).then(e => {
|
|
|
|
|
api.access.List({ app_id: app.value.id, role_id: idx }).then(e => {
|
|
|
|
|
access.value = e
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
@ -184,7 +179,7 @@ const show_dialog = (mode: number, idx: string) => {
|
|
|
|
|
// 0: role 1: resource 2: access 3: users
|
|
|
|
|
const crud_option = (mode: number) => {
|
|
|
|
|
let res = {
|
|
|
|
|
api: api.role(app.value.id),
|
|
|
|
|
api: api.app.RolePatch(app.value.id),
|
|
|
|
|
lable: '角色',
|
|
|
|
|
obj: role,
|
|
|
|
|
}
|
|
|
|
|
@ -220,32 +215,36 @@ const created = (k: number, props?: any) => {
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
$q.dialog({
|
|
|
|
|
title: '创建' + opt.lable,
|
|
|
|
|
message: '请输入标识码',
|
|
|
|
|
prompt: prompt as any,
|
|
|
|
|
options: options as any,
|
|
|
|
|
cancel: true,
|
|
|
|
|
persistent: true
|
|
|
|
|
}).onOk(data => {
|
|
|
|
|
opt.api.create(data, props).then(e => {
|
|
|
|
|
msg.Info('创建成功')
|
|
|
|
|
opt.obj.value.push(e)
|
|
|
|
|
}).catch(e => {
|
|
|
|
|
msg.Warn('创建失败: ' + e)
|
|
|
|
|
})
|
|
|
|
|
})
|
|
|
|
|
// $q.dialog({
|
|
|
|
|
// title: '创建' + opt.lable,
|
|
|
|
|
// message: '请输入标识码',
|
|
|
|
|
// prompt: prompt as any,
|
|
|
|
|
// options: options as any,
|
|
|
|
|
// cancel: true,
|
|
|
|
|
// persistent: true
|
|
|
|
|
// }).onOk(data => {
|
|
|
|
|
// opt.api.create(data, props).then(e => {
|
|
|
|
|
// msg.Info('创建成功')
|
|
|
|
|
// opt.obj.value.push(e)
|
|
|
|
|
// }).catch(e => {
|
|
|
|
|
// msg.Warn('创建失败: ' + e)
|
|
|
|
|
// })
|
|
|
|
|
// })
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const update = (k: number, props: any[]) => {
|
|
|
|
|
let opt = crud_option(k)
|
|
|
|
|
console.log(props)
|
|
|
|
|
const update = (props: any[], objs: any, cb: any, topid?: string) => {
|
|
|
|
|
// let opt = crud_option(k)
|
|
|
|
|
let patch = cb
|
|
|
|
|
if (topid) {
|
|
|
|
|
patch = (id: string, props: any) => {
|
|
|
|
|
return cb(topid, id, props)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
for (let i in props) {
|
|
|
|
|
let id = opt.obj.value[i][k === 1 ? 'name' : 'id']
|
|
|
|
|
console.log(id)
|
|
|
|
|
opt.api.update(id, props[i]).then(() => {
|
|
|
|
|
Object.assign(opt.obj.value[i], props[i])
|
|
|
|
|
}).catch(e => {
|
|
|
|
|
let id = objs[i].id
|
|
|
|
|
patch(id, props[i]).then(() => {
|
|
|
|
|
Object.assign(objs[i], props[i])
|
|
|
|
|
}).catch((e: any) => {
|
|
|
|
|
msg.Warn('更新失败: ' + e)
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
@ -294,7 +293,7 @@ const filterFn = (val: string, cb: any) => {
|
|
|
|
|
cb(() => {
|
|
|
|
|
users_cache.value = e.map(i => {
|
|
|
|
|
return Object.assign({
|
|
|
|
|
label: i.username,
|
|
|
|
|
name: i.username,
|
|
|
|
|
value: i.id,
|
|
|
|
|
}, i)
|
|
|
|
|
})
|
|
|
|
|
|