feat: new feat
This commit is contained in:
@@ -69,7 +69,7 @@ return [
|
|||||||
|
|
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
'timezone' => 'UTC',
|
'timezone' => 'Asia/Shanghai',
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
|
@@ -6,16 +6,21 @@ namespace Modules\Permissions\Http\Controllers;
|
|||||||
|
|
||||||
use Catch\Base\CatchController as Controller;
|
use Catch\Base\CatchController as Controller;
|
||||||
use Catch\Exceptions\FailedException;
|
use Catch\Exceptions\FailedException;
|
||||||
|
use Modules\Permissions\Enums\DataRange;
|
||||||
use Modules\Permissions\Models\Roles;
|
use Modules\Permissions\Models\Roles;
|
||||||
use Modules\Permissions\Http\Requests\RoleRequest;
|
use Modules\Permissions\Http\Requests\RoleRequest;
|
||||||
|
|
||||||
class RolesController extends Controller
|
class RolesController extends Controller
|
||||||
{
|
{
|
||||||
|
/**
|
||||||
|
* @param Roles $model
|
||||||
|
*/
|
||||||
public function __construct(
|
public function __construct(
|
||||||
protected readonly Roles $model
|
protected readonly Roles $model
|
||||||
) {
|
) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return mixed
|
* @return mixed
|
||||||
*/
|
*/
|
||||||
@@ -28,31 +33,59 @@ class RolesController extends Controller
|
|||||||
})->getList();
|
})->getList();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param RoleRequest $request
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
public function store(RoleRequest $request)
|
public function store(RoleRequest $request)
|
||||||
{
|
{
|
||||||
|
if (! DataRange::Personal_Choose->assert($request->get('data_range'))) {
|
||||||
|
$request['departments'] = [];
|
||||||
|
}
|
||||||
|
|
||||||
return $this->model->storeBy($request->all());
|
return $this->model->storeBy($request->all());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param $id
|
||||||
|
* @return \Illuminate\Database\Eloquent\Model|null
|
||||||
|
*/
|
||||||
public function show($id)
|
public function show($id)
|
||||||
{
|
{
|
||||||
$role = $this->model->firstBy($id);
|
$role = $this->model->firstBy($id);
|
||||||
|
|
||||||
$role->setAttribute('permissions', $role->permissions()->get()->toTree());
|
$role->setAttribute('permissions', $role->permissions()->get()->toTree());
|
||||||
|
|
||||||
$role->setAttribute('departments', $role->departments()->get()->toTree());
|
$role->setAttribute('departments', $role->departments()->pluck('id'));
|
||||||
|
|
||||||
return $role;
|
return $role;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param $id
|
||||||
|
* @param RoleRequest $request
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
public function update($id, RoleRequest $request)
|
public function update($id, RoleRequest $request)
|
||||||
{
|
{
|
||||||
|
if (! DataRange::Personal_Choose->assert($request->get('data_range'))) {
|
||||||
|
$request['departments'] = [];
|
||||||
|
}
|
||||||
|
|
||||||
return $this->model->updateBy($id, $request->all());
|
return $this->model->updateBy($id, $request->all());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param $id
|
||||||
|
* @return bool|null
|
||||||
|
*/
|
||||||
public function destroy($id)
|
public function destroy($id)
|
||||||
{
|
{
|
||||||
if ($this->model->where($this->model->getParentIdColumn(), $id)->first()) {
|
if ($this->model->where($this->model->getParentIdColumn(), $id)->first()) {
|
||||||
throw new FailedException('请先删除子级');
|
throw new FailedException('请先删除子角色');
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->model->deleteBy($id);
|
return $this->model->deleteBy($id);
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<el-form :model="formData" label-width="120px" ref="form" v-loading="loading" class="pr-6">
|
<el-form :model="formData" label-width="120px" ref="form" v-loading="loading" class="pr-6">
|
||||||
<el-form-item label="上级角色" prop="parent_id">
|
<el-form-item label="上级角色" prop="parent_id" v-if="!primary">
|
||||||
<el-cascader
|
<el-cascader
|
||||||
:options="roles"
|
:options="roles"
|
||||||
name="parent_id"
|
name="parent_id"
|
||||||
@@ -43,17 +43,27 @@
|
|||||||
<el-form-item label="数据权限" prop="data_range">
|
<el-form-item label="数据权限" prop="data_range">
|
||||||
<Select v-model="formData.data_range" name="data_range" clearable api="dataRange" class="w-full" />
|
<Select v-model="formData.data_range" name="data_range" clearable api="dataRange" class="w-full" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="自定义权限" prop="department_ids" v-if="showDepartments">
|
<el-form-item
|
||||||
<!--
|
label="自定义权限"
|
||||||
<el-cascader
|
prop="departments"
|
||||||
:options="departments"
|
v-if="showDepartments"
|
||||||
v-model="formData.departmetn_ids"
|
:rules="[
|
||||||
:show-all-levels="false"
|
{
|
||||||
clearable
|
required: true,
|
||||||
:props="{ value: 'id', label: 'department_name', emitPath: false, multiple: true }"
|
message: '自定义权限必须选择',
|
||||||
|
},
|
||||||
|
]"
|
||||||
|
>
|
||||||
|
<el-tree-select
|
||||||
|
v-model="formData.departments"
|
||||||
|
value-key="id"
|
||||||
class="w-full"
|
class="w-full"
|
||||||
/>-->
|
:data="departments"
|
||||||
<el-tree-select v-model="formData.departmetn_ids" value-key="id" :data="departments" :render-after-expand="false" show-checkbox multiple :props="{ value: 'id', label: 'department_name' }" />
|
:render-after-expand="false"
|
||||||
|
show-checkbox
|
||||||
|
multiple
|
||||||
|
:props="{ value: 'id', label: 'department_name' }"
|
||||||
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="角色权限" prop="permissions">
|
<el-form-item label="角色权限" prop="permissions">
|
||||||
<el-tree
|
<el-tree
|
||||||
|
@@ -51,6 +51,10 @@ trait UserRelations
|
|||||||
*/
|
*/
|
||||||
public function withPermissions(): self
|
public function withPermissions(): self
|
||||||
{
|
{
|
||||||
|
if (! $this->isPermissionModuleEnabled) {
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
/* @var Permissions $permissionsModel */
|
/* @var Permissions $permissionsModel */
|
||||||
$permissionsModel = app($this->getPermissionsModel());
|
$permissionsModel = app($this->getPermissionsModel());
|
||||||
|
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="flex flex-col sm:flex-row w-full justify-between">
|
<div class="flex flex-col sm:flex-row w-full justify-between">
|
||||||
<Department v-model="query.department_id" @searchDepartmentUsers="search" v-if="false" />
|
<Department v-model="query.department_id" @searchDepartmentUsers="search" v-if="hasRoles" />
|
||||||
<div class="w-full ml-5">
|
<div :class="hasRoles ? 'w-full ml-5' : 'w-full'">
|
||||||
<Search :search="search" :reset="reset">
|
<Search :search="search" :reset="reset">
|
||||||
<template v-slot:body>
|
<template v-slot:body>
|
||||||
<el-form-item label="用户名">
|
<el-form-item label="用户名">
|
||||||
@@ -39,7 +39,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<Dialog v-model="visible" :title="title" destroy-on-close>
|
<Dialog v-model="visible" :title="title" destroy-on-close>
|
||||||
<Create @close="close(reset)" :primary="id" :api="api" />
|
<Create @close="close(reset)" :primary="id" :api="api" :has-roles="hasRoles" />
|
||||||
</Dialog>
|
</Dialog>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -52,6 +52,10 @@ import { useGetList } from '/admin/composables/curd/useGetList'
|
|||||||
import { useDestroy } from '/admin/composables/curd/useDestroy'
|
import { useDestroy } from '/admin/composables/curd/useDestroy'
|
||||||
import { useOpen } from '/admin/composables/curd/useOpen'
|
import { useOpen } from '/admin/composables/curd/useOpen'
|
||||||
import Department from './components/department.vue'
|
import Department from './components/department.vue'
|
||||||
|
import { useUserStore } from '/admin/stores/modules/user'
|
||||||
|
import { isUndefined } from '/admin/support/helper'
|
||||||
|
|
||||||
|
const userStore = useUserStore()
|
||||||
|
|
||||||
const api = 'users'
|
const api = 'users'
|
||||||
|
|
||||||
@@ -62,9 +66,13 @@ const { open, close, title, visible, id } = useOpen()
|
|||||||
const tableData = computed(() => data.value?.data)
|
const tableData = computed(() => data.value?.data)
|
||||||
|
|
||||||
const roles = ref<Array<Object>>()
|
const roles = ref<Array<Object>>()
|
||||||
|
const hasRoles = ref<boolean>(false)
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
search()
|
search()
|
||||||
|
|
||||||
deleted(reset)
|
deleted(reset)
|
||||||
|
|
||||||
|
hasRoles.value = !isUndefined(userStore.getRoles)
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
Reference in New Issue
Block a user