feat: new feat

This commit is contained in:
JaguarJack
2023-01-08 20:30:37 +08:00
parent 596932427d
commit aad083bda7
5 changed files with 72 additions and 17 deletions

View File

@@ -69,7 +69,7 @@ return [
| |
*/ */
'timezone' => 'UTC', 'timezone' => 'Asia/Shanghai',
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------

View File

@@ -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);

View File

@@ -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

View File

@@ -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());

View File

@@ -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>