From 407f8ac125a6f91d3fd658c6ccfe4733aea35c47 Mon Sep 17 00:00:00 2001 From: wangxiang <1827945911@qq.com> Date: Thu, 21 Apr 2022 05:57:41 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=8E=9F=20=E6=9E=84=E5=BB=BA=E5=B9=B3?= =?UTF-8?q?=E5=8F=B0=E4=B8=9A=E5=8A=A1=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cloud/kicc/system/api/entity/Menu.java | 4 +- .../system/controller/MenuController.java | 1 + .../system/service/impl/MenuServiceImpl.java | 1 + kicc-ui/src/store/modules/user.ts | 1 + kicc-ui/src/utils/dateUtil.ts | 10 + kicc-ui/src/utils/helper/treeHelper.ts | 10 +- kicc-ui/src/views/system/menu/MenuModal.vue | 91 ++++---- kicc-ui/src/views/system/menu/index.vue | 117 +++++----- kicc-ui/src/views/system/menu/menu.data.ts | 209 ++++++++++-------- kicc-ui/types/index.d.ts | 10 + 10 files changed, 247 insertions(+), 207 deletions(-) diff --git a/kicc-platform/kicc-platform-api/kicc-system-api/src/main/java/com/cloud/kicc/system/api/entity/Menu.java b/kicc-platform/kicc-platform-api/kicc-system-api/src/main/java/com/cloud/kicc/system/api/entity/Menu.java index 3b63ddfa..fbd83285 100644 --- a/kicc-platform/kicc-platform-api/kicc-system-api/src/main/java/com/cloud/kicc/system/api/entity/Menu.java +++ b/kicc-platform/kicc-platform-api/kicc-system-api/src/main/java/com/cloud/kicc/system/api/entity/Menu.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.cloud.kicc.common.data.entity.CommonEntity; +import com.fasterxml.jackson.annotation.JsonInclude; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; @@ -87,6 +88,7 @@ public class Menu extends CommonEntity { * 子菜单 */ @TableField(exist = false) - private List children = new ArrayList(); + @JsonInclude(JsonInclude.Include.NON_EMPTY) + private List children = new ArrayList(); } diff --git a/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/controller/MenuController.java b/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/controller/MenuController.java index 1b05e734..39dbdad5 100644 --- a/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/controller/MenuController.java +++ b/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/controller/MenuController.java @@ -41,6 +41,7 @@ public class MenuController { return new LambdaQueryWrapper() .like(StrUtil.isNotBlank(menu.getName()), Menu::getName, menu.getName()) .eq(StrUtil.isNotBlank(menu.getHideMenu()), Menu::getHideMenu, menu.getHideMenu()) + .between(StrUtil.isNotBlank(menu.getBeginTime()) && StrUtil.isNotBlank(menu.getEndTime()), Menu::getCreateTime, menu.getBeginTime(), menu.getEndTime()) .orderByAsc(Menu::getSort); } diff --git a/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/service/impl/MenuServiceImpl.java b/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/service/impl/MenuServiceImpl.java index 6dfd7eb7..9d791f70 100644 --- a/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/service/impl/MenuServiceImpl.java +++ b/kicc-platform/kicc-platform-biz/kicc-system-biz/src/main/java/com/cloud/kicc/system/service/impl/MenuServiceImpl.java @@ -46,6 +46,7 @@ public class MenuServiceImpl extends ServiceImpl implements Me menuVo.setComponent(menu.getComponent()); // 检测是否是根节点,0:代表根节点 if (MenuEnum.MENU_0.getValue().equals(menu.getParentId()) && !ReUtil.isMatch(RegexConstants.MATCHER_URL, menu.getPath())) { + menuVo.setComponent("Layout"); menuVo.setPath("/" + menu.getPath()); } else { menuVo.setPath(menu.getPath()); diff --git a/kicc-ui/src/store/modules/user.ts b/kicc-ui/src/store/modules/user.ts index d080e413..e19ff99a 100644 --- a/kicc-ui/src/store/modules/user.ts +++ b/kicc-ui/src/store/modules/user.ts @@ -71,6 +71,7 @@ export const useUserStore = defineStore({ }, setPermissions(permissions: string[]) { this.permissions = permissions; + setAuthCache(PERMISSIONS_KEY, permissions); }, setAccessToken(accessToken: string) { this.access_token = accessToken; diff --git a/kicc-ui/src/utils/dateUtil.ts b/kicc-ui/src/utils/dateUtil.ts index 70ab2786..3ce5a1c5 100644 --- a/kicc-ui/src/utils/dateUtil.ts +++ b/kicc-ui/src/utils/dateUtil.ts @@ -21,4 +21,14 @@ export function formatToDate(date: moment.MomentInput = undefined, format = DATE return moment(date).format(format); } +/** 添加日期范围 */ +export function convertDateRange(params: Recordable, dateRangeField: string): Recordable { + const search = params, dateRange = search[dateRangeField]; + if (null != dateRange && dateRange?.length > 0) { + search.beginTime = dateRange[0]; + search.endTime = dateRange[1]; + } + return search; +} + export const dateUtil = moment; diff --git a/kicc-ui/src/utils/helper/treeHelper.ts b/kicc-ui/src/utils/helper/treeHelper.ts index 514fc670..62b20692 100644 --- a/kicc-ui/src/utils/helper/treeHelper.ts +++ b/kicc-ui/src/utils/helper/treeHelper.ts @@ -24,20 +24,16 @@ export function listToTree(list: any[], config: Partial(tree: any, config: Partial = {}): T { +export function treeToList(tree: any[], config: Partial = {}): T { config = getConfig(config); const { children } = config; const result: any = [...tree]; diff --git a/kicc-ui/src/views/system/menu/MenuModal.vue b/kicc-ui/src/views/system/menu/MenuModal.vue index f253ba84..187597b4 100644 --- a/kicc-ui/src/views/system/menu/MenuModal.vue +++ b/kicc-ui/src/views/system/menu/MenuModal.vue @@ -1,72 +1,75 @@ diff --git a/kicc-ui/src/views/system/menu/menu.data.ts b/kicc-ui/src/views/system/menu/menu.data.ts index 4cd7e348..4b7ba89c 100644 --- a/kicc-ui/src/views/system/menu/menu.data.ts +++ b/kicc-ui/src/views/system/menu/menu.data.ts @@ -1,3 +1,10 @@ +/** + * @program: kicc-ui + * @description: 菜单动态生成配置 + * @author: entfrm开发团队-王翔 + * @create: 2022/4/21 + */ + import { BasicColumn } from '/@/components/Table'; import { FormSchema } from '/@/components/Table'; import { h } from 'vue'; @@ -8,52 +15,58 @@ export const columns: BasicColumn[] = [ { title: '菜单名称', dataIndex: 'name', - width: 200, - align: 'left', + align: 'left' }, { title: '图标', dataIndex: 'icon', - width: 50, + width: 80, customRender: ({ record }) => { return h(Icon, { icon: record.icon }); - }, + } + }, + { + title: '排序', + dataIndex: 'sort', + width: 80 }, { title: '权限标识', dataIndex: 'permission', - width: 180, + customRender: ({record}) => { + return record.permission || h(Tag, { color: 'red' }, () => '暂无数据'); + } }, { title: '组件', dataIndex: 'component', + customRender: ({record}) => { + return record.component || h(Tag, { color: 'red' }, () => '暂无数据'); + } }, { - title: '排序', - dataIndex: 'sort', - width: 50, - }, - { - title: '状态', - dataIndex: 'status', + title: '是否隐藏', + dataIndex: 'hideMenu', width: 80, customRender: ({ record }) => { - const status = record.status; - const enable = ~~status === 0; + const hideMenu = record.hideMenu; + // 采用二进制~~取反,只要为null或者0等等一些其他的空元素都会转为0 + // 第一次取反会运算为-1,在后一次取反会运算为0 + const enable = ~~hideMenu === 0; const color = enable ? 'green' : 'red'; - const text = enable ? '启用' : '停用'; + const text = enable ? '显示' : '隐藏'; return h(Tag, { color: color }, () => text); - }, + } }, { title: '创建时间', - dataIndex: 'createTime', - width: 180, - }, + dataIndex: 'createTime' + } ]; -const isDir = (type: string) => type === 'M'; +/** 菜单类型 */ const isMenu = (type: string) => type === 'C'; +/** 按钮类型 */ const isButton = (type: string) => type === 'F'; export const searchFormSchema: FormSchema[] = [ @@ -62,22 +75,33 @@ export const searchFormSchema: FormSchema[] = [ label: '菜单名', component: 'Input', componentProps: { - placeholder: '请输入名称', + placeholder: '请输入菜单名称' }, - colProps: { span: 8 }, + colProps: { span: 8 } }, { - field: 'beginTime', - label: '起始时间', - component: 'DatePicker', - colProps: { span: 8 }, + field: 'hideMenu', + label: '是否隐藏', + component: 'Select', + componentProps: { + options: [ + { label: '显示', value: '0' }, + { label: '隐藏', value: '1' } + ] + }, + colProps: { span: 7 } }, { - field: 'endTime', - label: '截止时间', - component: 'DatePicker', - colProps: { span: 8 }, - }, + field: 'dateRange', + label: '创建时间', + component: 'RangePicker', + componentProps: { + style: { width:'100%' }, + format: 'yyyy-MM-dd', + placeholder: ['开始日期','结束日期'] + }, + colProps: { span: 8 } + } ]; export const formSchema: FormSchema[] = [ @@ -85,29 +109,8 @@ export const formSchema: FormSchema[] = [ field: 'id', label: 'ID', component: 'Input', - show: false, - }, - { - field: 'type', - label: '菜单类型', - component: 'RadioButtonGroup', - defaultValue: 'M', - componentProps: { - options: [ - { label: '目录', value: 'M' }, - { label: '菜单', value: 'C' }, - { label: '按钮', value: 'F' }, - ], - }, - colProps: { lg: 24, md: 24 }, - }, - { - field: 'name', - label: '菜单名称', - component: 'Input', - required: true, + show: false }, - { field: 'parentId', label: '上级菜单', @@ -116,71 +119,80 @@ export const formSchema: FormSchema[] = [ replaceFields: { title: 'name', key: 'id', - value: 'id', + value: 'id' }, - getPopupContainer: () => document.body, - }, + getPopupContainer: () => document.body + } }, - { - field: 'sort', - label: '排序', - component: 'InputNumber', - required: true, + field: 'type', + label: '菜单类型', + component: 'RadioButtonGroup', + defaultValue: 'M', + componentProps: { + options: [ + { label: '目录', value: 'M' }, + { label: '菜单', value: 'C' }, + { label: '按钮', value: 'F' } + ] + } }, { field: 'icon', - label: '图标', + label: '菜单图标', component: 'IconPicker', required: true, ifShow: ({ values }) => !isButton(values.type), }, - + { + field: 'name', + label: '菜单名称', + component: 'Input', + required: true, + colProps: { + span: 12 + } + }, { field: 'path', label: '路由地址', component: 'Input', required: true, - ifShow: ({ values }) => !isButton(values.type), + colProps: { + span: 12 + }, + ifShow: ({ values }) => !isButton(values.type) }, { field: 'component', label: '组件路径', component: 'Input', - ifShow: ({ values }) => !isButton(values.type), + colProps: { + span: 12 + }, + ifShow: ({ values }) => isMenu(values.type) }, { field: 'permission', label: '权限标识', component: 'Input', - ifShow: ({ values }) => isButton(values.type), - }, - { - field: 'status', - label: '状态', - component: 'RadioButtonGroup', - defaultValue: '0', - componentProps: { - options: [ - { label: '启用', value: '0' }, - { label: '禁用', value: '1' }, - ], + colProps: { + span: 12 }, + ifShow: ({ values }) => isButton(values.type) }, { - field: 'target', - label: '是否外链', - component: 'RadioButtonGroup', - defaultValue: '0', + field: 'sort', + label: '显示排序', + component: 'InputNumber', componentProps: { - options: [ - { label: '否', value: '0' }, - { label: '是', value: '1' }, - ], + style: { width:'100%' } }, - ifShow: ({ values }) => !isButton(values.type), + required: true, + colProps: { + span: 12 + } }, - { field: 'keepalive', label: '是否缓存', @@ -192,20 +204,25 @@ export const formSchema: FormSchema[] = [ { label: '是', value: '1' }, ], }, - ifShow: ({ values }) => isMenu(values.type), + colProps: { + span: 12 + }, + ifShow: ({ values }) => isMenu(values.type) }, - { - field: 'show', - label: '是否显示', + field: 'hideMenu', + label: '是否隐藏', component: 'RadioButtonGroup', defaultValue: '0', componentProps: { options: [ - { label: '是', value: '0' }, - { label: '否', value: '1' }, - ], + { label: '否', value: '0' }, + { label: '是', value: '1' }, + ] }, - ifShow: ({ values }) => !isButton(values.type), - }, + colProps: { + span: 12 + }, + ifShow: ({ values }) => !isButton(values.type) + } ]; diff --git a/kicc-ui/types/index.d.ts b/kicc-ui/types/index.d.ts index 938ecece..a7cf7956 100644 --- a/kicc-ui/types/index.d.ts +++ b/kicc-ui/types/index.d.ts @@ -32,3 +32,13 @@ declare interface ComponentElRef { declare type ComponentRef = ComponentElRef | null; declare type ElRef = Nullable; + +/** 模态框传递数据通用类型定义 */ +declare type ModalInnerData = { + // 模态框标签类型 + _tag: string; + // 表格记录行数 + record: Recordable; + [key: string]: any; +}; +