Browse Source

🎟 构建平台业务模块

master
wangxiang 3 years ago
parent
commit
a1969a1bb4
  1. 15
      kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/controller/MenuController.java
  2. 6
      kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/controller/RoleController.java
  3. 7
      kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/service/MenuService.java
  4. 5
      kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/service/impl/MenuServiceImpl.java
  5. 5
      kicc-ui/src/api/model/index.ts
  6. 11
      kicc-ui/src/api/system/menu.ts
  7. 2
      kicc-ui/src/api/system/model/clientModel.ts
  8. 2
      kicc-ui/src/api/system/model/departModel.ts
  9. 2
      kicc-ui/src/api/system/model/dictModel.ts
  10. 2
      kicc-ui/src/api/system/model/logModel.ts
  11. 2
      kicc-ui/src/api/system/model/menuModel.ts
  12. 2
      kicc-ui/src/api/system/model/roleModel.ts
  13. 2
      kicc-ui/src/api/system/model/userModel.ts
  14. 4
      kicc-ui/src/api/system/role.ts
  15. 4
      kicc-ui/src/views/system/client/ClientDrawer.vue
  16. 4
      kicc-ui/src/views/system/dict/DictDrawer.vue
  17. 4
      kicc-ui/src/views/system/log/LogDrawer.vue
  18. 12
      kicc-ui/src/views/system/role/RoleDrawer.vue
  19. 61
      kicc-ui/src/views/system/role/index.vue
  20. 12
      kicc-ui/src/views/system/role/role.data.ts

15
kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/controller/MenuController.java

@ -2,14 +2,15 @@ package com.cloud.kicc.system.controller; @@ -2,14 +2,15 @@ package com.cloud.kicc.system.controller;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.cloud.kicc.system.api.entity.Menu;
import com.cloud.kicc.system.api.entity.RoleMenu;
import com.cloud.kicc.system.service.MenuService;
import com.cloud.kicc.system.service.RoleMenuService;
import com.cloud.kicc.common.core.api.R;
import com.cloud.kicc.common.core.constant.AppConstants;
import com.cloud.kicc.common.log.annotation.SysLog;
import com.cloud.kicc.common.security.util.SecurityUtils;
import com.cloud.kicc.system.api.entity.Menu;
import com.cloud.kicc.system.api.entity.RoleMenu;
import com.cloud.kicc.system.api.vo.ResultVo;
import com.cloud.kicc.system.service.MenuService;
import com.cloud.kicc.system.service.RoleMenuService;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import org.springframework.security.access.prepost.PreAuthorize;
@ -101,4 +102,10 @@ public class MenuController { @@ -101,4 +102,10 @@ public class MenuController {
return R.ok();
}
@GetMapping("/roleMenuTree/{roleId}")
public R roleMenuTree(@PathVariable String roleId) {
List<Menu> menuList = menuService.list(new LambdaQueryWrapper<Menu>().eq(Menu::getHideMenu, "0").orderByAsc(Menu::getSort));
return R.ok(new ResultVo().setResult(menuList).setExtend(menuService.selectMenusByRoleId(roleId)));
}
}

6
kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/controller/RoleController.java

@ -13,6 +13,8 @@ import com.cloud.kicc.common.core.constant.AppConstants; @@ -13,6 +13,8 @@ import com.cloud.kicc.common.core.constant.AppConstants;
import com.cloud.kicc.common.core.util.PinyinUtil;
import com.cloud.kicc.common.log.annotation.SysLog;
import com.cloud.kicc.system.api.entity.Role;
import com.cloud.kicc.system.api.entity.RoleMenu;
import com.cloud.kicc.system.service.RoleMenuService;
import com.cloud.kicc.system.service.RoleService;
import lombok.AllArgsConstructor;
import org.springframework.security.access.prepost.PreAuthorize;
@ -34,11 +36,12 @@ import java.util.Arrays; @@ -34,11 +36,12 @@ import java.util.Arrays;
public class RoleController {
private final RoleService roleService;
private final RoleMenuService roleMenuService;
private LambdaQueryWrapper<Role> getQueryWrapper(Role role) {
return new LambdaQueryWrapper<Role>()
.like(StrUtil.isNotBlank(role.getName()), Role::getName, role.getName())
.eq(StrUtil.isNotBlank(role.getCode()), Role::getCode, role.getCode());
.eq(StrUtil.isNotBlank(role.getStatus()), Role::getStatus, role.getStatus());
}
@GetMapping("/list")
@ -90,6 +93,7 @@ public class RoleController { @@ -90,6 +93,7 @@ public class RoleController {
if(ArrayUtil.contains(id, "1510536230140129280")){
return R.error("不允许删除管理员角色");
}
roleMenuService.remove(new LambdaQueryWrapper<RoleMenu>().in(RoleMenu::getRoleId, Arrays.asList(id)));
roleService.removeByIds(Arrays.asList(id));
return R.ok();
}

7
kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/service/MenuService.java

@ -30,6 +30,13 @@ public interface MenuService extends IService<Menu> { @@ -30,6 +30,13 @@ public interface MenuService extends IService<Menu> {
*/
List<String> selectPermsByRoleId(String roleId);
/**
* 通过角色编号查询菜单编号
*
* @param roleId 角色ID
* @return 菜单编号
*/
List<String> selectMenusByRoleId(String roleId);
/**
* 构建树

5
kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/service/impl/MenuServiceImpl.java

@ -38,6 +38,11 @@ public class MenuServiceImpl extends ServiceImpl<MenuMapper, Menu> implements Me @@ -38,6 +38,11 @@ public class MenuServiceImpl extends ServiceImpl<MenuMapper, Menu> implements Me
return baseMapper.selectPermsByRoleId(roleId);
}
@Override
public List<String> selectMenusByRoleId(String roleId) {
return baseMapper.selectMenusByRoleId(roleId);
}
@Override
public List<MenuVo> buildMenuRoute(List<Menu> menus) {
List<MenuVo> menuVoList = menus.stream().map(menu -> {

5
kicc-ui/src/api/model/baseModel.ts → kicc-ui/src/api/model/index.ts

@ -50,3 +50,8 @@ export interface TreeEntity<T extends any> { @@ -50,3 +50,8 @@ export interface TreeEntity<T extends any> {
children: T[]
}
/** 结果集模型 */
export interface ResultVo<T extends any> {
result: T;
extend: T;
}

11
kicc-ui/src/api/system/menu.ts

@ -1,4 +1,5 @@ @@ -1,4 +1,5 @@
import { MenuDto, Menu, MenuVo } from './model/menuModel';
import { ResultVo } from '../model';
import { defHttp } from '/@/utils/http/axios';
enum Api {
@ -6,7 +7,8 @@ enum Api { @@ -6,7 +7,8 @@ enum Api {
add = 'system_proxy/system/menu/save',
get = 'system_proxy/system/menu',
edit = 'system_proxy/system/menu/update',
del = 'system_proxy/system/menu/remove'
del = 'system_proxy/system/menu/remove',
roleMenuIds = 'system_proxy/system/menu/roleMenuTree'
}
// 查询菜单列表
@ -19,7 +21,10 @@ export const addMenu = (params: Partial<Menu>) => defHttp.post({ url: Api.add, d @@ -19,7 +21,10 @@ export const addMenu = (params: Partial<Menu>) => defHttp.post({ url: Api.add, d
export const editMenu = (params: Partial<Menu>) => defHttp.put({ url: Api.edit, data: params });
// 查询菜单详细
export const getMenu = (params: { id: String }) => defHttp.get<Menu>({ url: `${Api.get}/${params.id}` });
export const getMenu = (id: string) => defHttp.get<Menu>({ url: `${Api.get}/${id}` });
// 删除菜单
export const delMenu = (params: { id: String }) => defHttp.delete({ url: `${Api.del}/${params.id}` });
export const delMenu = (id: string) => defHttp.delete({ url: `${Api.del}/${id}` });
// 通过角色编号查询菜单编号
export const getRoleMenuIds = (roleId : string) => defHttp.get<ResultVo>({ url: `${Api.roleMenuIds}/${roleId}`});

2
kicc-ui/src/api/system/model/clientModel.ts

@ -1,5 +1,5 @@ @@ -1,5 +1,5 @@
// 引入基础包
import { Page, R } from '/@/api/model/baseModel';
import { Page, R } from '/@/api/model';
// 定义查询参数
export type ClientParams = Page & {

2
kicc-ui/src/api/system/model/departModel.ts

@ -1,5 +1,5 @@ @@ -1,5 +1,5 @@
// 引入基础包
import { Page, R } from '/@/api/model/baseModel';
import { Page, R } from '/@/api/model';
// 定义查询参数
export type DepartVO = Page & {

2
kicc-ui/src/api/system/model/dictModel.ts

@ -1,5 +1,5 @@ @@ -1,5 +1,5 @@
// 引入基础包
import { Page, R } from '/@/api/model/baseModel';
import { Page, R } from '/@/api/model';
// 定义查询参数
export type DictVO = Page & {

2
kicc-ui/src/api/system/model/logModel.ts

@ -1,5 +1,5 @@ @@ -1,5 +1,5 @@
// 引入基础包
import { Page, R } from '/@/api/model/baseModel';
import { Page, R } from '/@/api/model';
// 定义查询参数
export type LogParams = Page & {

2
kicc-ui/src/api/system/model/menuModel.ts

@ -1,5 +1,5 @@ @@ -1,5 +1,5 @@
// 引入基础包
import { Page, R, CommonEntity } from '/@/api/model/baseModel';
import { Page, R, CommonEntity } from '/@/api/model';
// 查询参数
export type MenuDto = Page & Menu;

2
kicc-ui/src/api/system/model/roleModel.ts

@ -1,5 +1,5 @@ @@ -1,5 +1,5 @@
// 引入基础包
import { CommonEntity, Page, R } from '/@/api/model/baseModel';
import { CommonEntity, Page, R } from '/@/api/model';
// 查询参数
export type RoleDto = Page & Role;

2
kicc-ui/src/api/system/model/userModel.ts

@ -1,5 +1,5 @@ @@ -1,5 +1,5 @@
// 引入基础包
import { Page, R } from '/@/api/model/baseModel';
import { Page, R } from '/@/api/model';
// 定义查询参数
export type UserVO = Page & {

4
kicc-ui/src/api/system/role.ts

@ -20,10 +20,10 @@ export const addRole = (params: Partial<Role>) => defHttp.post({ url: Api.add, d @@ -20,10 +20,10 @@ export const addRole = (params: Partial<Role>) => defHttp.post({ url: Api.add, d
export const editRole = (params: Partial<Role>) => defHttp.put({ url: Api.edit, data: params });
// 查询角色详细
export const getRole = (params: { id: String }) => defHttp.get<Role>({ url: `${Api.get}/${params.id}` });
export const getRole = (id: string) => defHttp.get<Role>({ url: `${Api.get}/${id}` });
// 删除角色
export const delRole = (params: { id: String }) => defHttp.delete({ url: `${Api.del}/${params.id}` });
export const delRole = (id: string) => defHttp.delete({ url: `${Api.del}/${id}` });
// 修改角色状态
export const changeStatus = (id: string, status: string) => defHttp.put({ url: Api.changeStatus, data: { id: id, status: status } });

4
kicc-ui/src/views/system/client/ClientDrawer.vue

@ -16,7 +16,7 @@ @@ -16,7 +16,7 @@
import { formSchema } from './client.data';
import { BasicDrawer, useDrawerInner } from '/@/components/Drawer';
import { TreeItem } from '/@/components/Tree';
import { getMenuList } from '/@/api/system/role';
//import { getMenuList } from '/@/api/system/role';
import { set } from '/@/api/system/client';
const emit = defineEmits(['success', 'register']);
@ -35,7 +35,7 @@ @@ -35,7 +35,7 @@
setDrawerProps({ confirmLoading: false });
// setFieldsValuetreeDataTreekey not exist
if (unref(treeData).length === 0) {
treeData.value = (await getMenuList()) as any as TreeItem[];
//treeData.value = (await getMenuList()) as any as TreeItem[];
}
isUpdate.value = !!data?.isUpdate;

4
kicc-ui/src/views/system/dict/DictDrawer.vue

@ -16,7 +16,7 @@ @@ -16,7 +16,7 @@
import { formSchema } from './dict.data';
import { BasicDrawer, useDrawerInner } from '/@/components/Drawer';
import { TreeItem } from '/@/components/Tree';
import { getMenuList } from '/@/api/system/role';
//import { getMenuList } from '/@/api/system/role';
import { set } from '/@/api/system/dict';
const emit = defineEmits(['success', 'register']);
@ -34,7 +34,7 @@ @@ -34,7 +34,7 @@
setDrawerProps({ confirmLoading: false });
// setFieldsValuetreeDataTreekey not exist
if (unref(treeData).length === 0) {
treeData.value = (await getMenuList()) as any as TreeItem[];
//treeData.value = (await getMenuList()) as any as TreeItem[];
}
isUpdate.value = !!data?.isUpdate;

4
kicc-ui/src/views/system/log/LogDrawer.vue

@ -27,7 +27,7 @@ @@ -27,7 +27,7 @@
import { formSchema } from './log.data';
import { BasicDrawer, useDrawerInner } from '/@/components/Drawer';
import { BasicTree, TreeItem } from '/@/components/Tree';
import { getMenuList } from '/@/api/system/role';
//import { getMenuList } from '/@/api/system/role';
const emit = defineEmits(['success', 'register']);
const isUpdate = ref(true);
@ -44,7 +44,7 @@ @@ -44,7 +44,7 @@
setDrawerProps({ confirmLoading: false });
// setFieldsValuetreeDataTreekey not exist
if (unref(treeData).length === 0) {
treeData.value = (await getMenuList()) as any as TreeItem[];
//treeData.value = (await getMenuList()) as any as TreeItem[];
}
isUpdate.value = !!data?.isUpdate;

12
kicc-ui/src/views/system/role/RoleDrawer.vue

@ -23,12 +23,12 @@ @@ -23,12 +23,12 @@
* Copyright © 2020-2022 <a href="http://www.entfrm.com/">entfrm</a> All rights reserved.
* author entfrm开发团队-王翔
*/
import { unref, reactive } from 'vue';
import { reactive } from 'vue';
import { BasicForm, useForm } from '/@/components/Form/index';
import { formSchema } from './role.data';
import { BasicDrawer, DrawerProps, useDrawerInner } from '/@/components/Drawer';
import { BasicTree, TreeItem } from '/@/components/Tree';
import { listMenu } from '/@/api/system/menu';
import { listMenu, getRoleMenuIds } from '/@/api/system/menu';
import { addRole, editRole, getRole } from '/@/api/system/role';
import { listToTree } from "/@/utils/helper/treeHelper";
@ -56,13 +56,15 @@ @@ -56,13 +56,15 @@
state.tag = data._tag;
const roleId = data.record?.id;
const props: Partial<DrawerProps> = { confirmLoading: false };
switch (unref(state.tag)) {
switch (state.tag) {
case 'add':
props.title = '新增角色';
break;
case 'edit':
props.title = '编辑角色';
await setFieldsValue(await getRole({ id: roleId }) || {});
const result = await getRoleMenuIds(roleId);
const role = await getRole(roleId) || {};
await setFieldsValue(Object.assign(role, { menuIds: result.extend }));
break;
}
setDrawerProps(props);
@ -72,7 +74,7 @@ @@ -72,7 +74,7 @@
try {
const formData = await validate();
setDrawerProps({ confirmLoading: true });
switch (unref(state.tag)) {
switch (state.tag) {
case 'add':
await addRole(formData);
break;

61
kicc-ui/src/views/system/role/index.vue

@ -1,20 +1,23 @@ @@ -1,20 +1,23 @@
<template>
<div>
<BasicTable @register="registerTable" @selection-change="handleSelectionChange">
<BasicTable @register="registerTable"
@fetch-success="handleSelectionChange"
@selection-change="handleSelectionChange"
>
<template #toolbar>
<a-button v-auth="['role_add']"
type="primary"
@click="handleAdd()"
>新增角色</a-button>
<a-button v-auth="['role_add']"
<a-button v-auth="['role_edit']"
type="primary"
:disabled="state.single"
@click="handleAdd()"
@click="handleEdit()"
>修改角色</a-button>
<a-button v-auth="['role_add']"
<a-button v-auth="['role_del']"
type="primary"
:disabled="state.multiple"
@click="handleAdd()"
@click="handleDel()"
>删除角色</a-button>
</template>
<template #action="{ record }">
@ -22,18 +25,15 @@ @@ -22,18 +25,15 @@
{
label: '编辑',
icon: 'fa6-regular:pen-to-square',
auth: ['menu_edit'],
auth: ['role_edit'],
onClick: handleEdit.bind(null, record)
},
{
label: '删除',
icon: 'ant-design:delete-outlined',
auth: ['menu_del'],
auth: ['role_del'],
color: 'error',
popConfirm: {
title: '是否确认删除',
confirm: handleDel.bind(null, record),
},
onClick: handleDel.bind(null, record)
}]"
/>
</template>
@ -52,7 +52,10 @@ @@ -52,7 +52,10 @@
import RoleDrawer from './RoleDrawer.vue';
import { columns, searchFormSchema } from './role.data';
import { useMessage } from '/@/hooks/web/useMessage';
import { reactive } from 'vue';
import { reactive, toRaw } from 'vue';
const { createConfirm } = useMessage();
const { createMessage } = useMessage();
const state = reactive({
//
@ -62,7 +65,7 @@ @@ -62,7 +65,7 @@
//
multiple: true
});
const { createMessage } = useMessage();
const [registerDrawer, { openDrawer }] = useDrawer();
const [registerTable, { reload }] = useTable({
title: '角色列表',
@ -88,27 +91,37 @@ @@ -88,27 +91,37 @@
});
/** 处理多选框选中数据 */
function handleSelectionChange(selection) {
state.ids = selection.map(item => item.id);
state.single = selection.length != 1;
state.multiple = !selection.length;
function handleSelectionChange(selection?: Recordable) {
const rawRows = toRaw(selection?.rows) || [];
state.ids = rawRows.map(item => item.id);
state.single = rawRows.length != 1;
state.multiple = !rawRows.length;
}
/** 新增按钮操作,行内新增与工具栏局域新增通用 */
function handleAdd(record?: Recordable) {
openDrawer(true,{ _tag: 'add', record });
function handleAdd() {
openDrawer(true,{ _tag: 'add' });
}
/** 编辑按钮操作,行内编辑 */
function handleEdit(record: Recordable) {
function handleEdit(record?: Recordable) {
record = record || { id: toRaw(state.ids) };
openDrawer(true, { _tag: 'edit', record });
}
/** 删除按钮操作,行内删除 */
async function handleDel(record: Recordable) {
await delRole({ id: record.id });
createMessage.success('删除成功!');
handleSuccess();
async function handleDel(record?: Recordable) {
const ids = record?.id || toRaw(state.ids);
createConfirm({
iconType: 'warning',
title: '警告',
content: `是否确认删除角色编号为${ids}角色吗?`,
onOk: async () => {
await delRole(ids);
createMessage.success('删除成功!');
handleSuccess();
}
});
}
/** 处理表单提交成功 */

12
kicc-ui/src/views/system/role/role.data.ts

@ -17,12 +17,12 @@ export const columns: BasicColumn[] = [ @@ -17,12 +17,12 @@ export const columns: BasicColumn[] = [
{
title: '角色名称',
dataIndex: 'name',
width: 200,
width: 200
},
{
title: '显示顺序',
dataIndex: 'sort',
width: 200,
width: 200
},
{
title: '状态',
@ -70,7 +70,7 @@ export const columns: BasicColumn[] = [ @@ -70,7 +70,7 @@ export const columns: BasicColumn[] = [
{
title: '创建时间',
dataIndex: 'createTime'
},
}
];
export const searchFormSchema: FormSchema[] = [
@ -81,7 +81,7 @@ export const searchFormSchema: FormSchema[] = [ @@ -81,7 +81,7 @@ export const searchFormSchema: FormSchema[] = [
componentProps: {
placeholder: '请输入角色名称',
},
colProps: { span: 8 },
colProps: { span: 8 }
},
{
field: 'status',
@ -141,8 +141,8 @@ export const formSchema: FormSchema[] = [ @@ -141,8 +141,8 @@ export const formSchema: FormSchema[] = [
component: 'InputTextArea',
},
{
label: ' ',
field: 'menu',
label: '',
field: 'menuIds',
slot: 'menu',
component: 'Input',
}

Loading…
Cancel
Save