From 13b8a6bd53f3aad43087a44c31a80121363e91aa Mon Sep 17 00:00:00 2001 From: xxm1995 Date: Wed, 15 Nov 2023 17:25:21 +0800 Subject: [PATCH 01/17] =?UTF-8?q?feat=20=E6=96=87=E4=BB=B6=E4=B8=8A?= =?UTF-8?q?=E4=BC=A0=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../modules/develop/file/FileUploadInfo.vue | 11 +++++++++++ .../modules/develop/file/FileUploadList.vue | 19 ++++++++++++++----- 2 files changed, 25 insertions(+), 5 deletions(-) create mode 100644 src/views/modules/develop/file/FileUploadInfo.vue diff --git a/src/views/modules/develop/file/FileUploadInfo.vue b/src/views/modules/develop/file/FileUploadInfo.vue new file mode 100644 index 0000000..5df35b2 --- /dev/null +++ b/src/views/modules/develop/file/FileUploadInfo.vue @@ -0,0 +1,11 @@ + + + + + diff --git a/src/views/modules/develop/file/FileUploadList.vue b/src/views/modules/develop/file/FileUploadList.vue index d5874fe..1f6e404 100644 --- a/src/views/modules/develop/file/FileUploadList.vue +++ b/src/views/modules/develop/file/FileUploadList.vue @@ -20,15 +20,17 @@ - - - + + + - + - + @@ -114,7 +107,7 @@ import { nextTick, onMounted } from 'vue' import { Client, findAll } from '/@/views/modules/system/client/Client.api' import XEUtils from 'xe-utils' - import { menuTree, Menu, del, findTreeByRole } from './Menu.api' + import { menuTree, Menu, del, menuAndPermCodeTree } from './Menu.api' import { FormEditType } from '/@/enums/formTypeEnum' import MenuEdit from './MenuEdit.vue' import { VxeTableInstance, VxeToolbarInstance } from 'vxe-table' @@ -157,7 +150,7 @@ async function queryPage() { loading = true if (showPermCode) { - const { data } = await findTreeByRole(clientCode) + const { data } = await menuAndPermCodeTree(clientCode) remoteTableData = data } else { const { data } = await menuTree(clientCode) diff --git a/src/views/modules/system/role/Role.api.ts b/src/views/modules/system/role/Role.api.ts index 21616a3..72c54c9 100644 --- a/src/views/modules/system/role/Role.api.ts +++ b/src/views/modules/system/role/Role.api.ts @@ -1,6 +1,8 @@ import { defHttp } from '/@/utils/http/axios' import { PageResult, Result } from '/#/axios' import { BaseEntity } from '/#/web' +import { MenuTree } from '/@/views/modules/system/menu/Menu.api' +import { PermPath } from '/@/views/modules/system/path/PermPath.api' /** * 分页 @@ -113,7 +115,7 @@ export const existsByNameNotId = (name: string, id) => { } /** - * 查询全部 + * 查询全部角色 */ export const findAll = () => { return defHttp.get>>({ @@ -122,7 +124,7 @@ export const findAll = () => { } /** - * 根据用户获取拥有的权限 + * 根据角色获取拥有的权限 */ export function findPermissionIdsByRole(roleId, clientCode) { return defHttp.get>({ @@ -132,11 +134,12 @@ export function findPermissionIdsByRole(roleId, clientCode) { } /** - * 根据用户id获取角色授权(请求权限列表) + * 获取当前用户角色下可见的菜单树(分配时用) */ -export function findPathsByUser() { - return defHttp.get>({ - url: `/role/path/findPathsByUser`, +export function findTreeByRole(roleId, clientCode) { + return defHttp.get>({ + url: '/perm/menu/findTreeByRole', + params: { roleId, clientCode }, }) } @@ -144,12 +147,22 @@ export function findPathsByUser() { * 根据角色id获取关联请求权限id */ export function findPathIdsByRole(roleId) { - return defHttp.get({ + return defHttp.get>({ url: `/role/path/findIdsByRole`, params: { roleId }, }) } +/** + * 获取当前用户角色下可见的请求权限列表(分配时用) + */ +export function findPathsByRole(roleId) { + return defHttp.get>({ + url: `/role/path/findPathsByRole`, + params: { roleId }, + }) +} + /** * 角色 */ diff --git a/src/views/modules/system/role/RoleList.vue b/src/views/modules/system/role/RoleList.vue index 6b7facd..f6f62ea 100644 --- a/src/views/modules/system/role/RoleList.vue +++ b/src/views/modules/system/role/RoleList.vue @@ -135,15 +135,21 @@ function show(record) { roleEdit.init(record.id, FormEditType.Show) } - // 菜单授权处理 + /** + * 菜单授权处理 + */ function handleRoleMenu(record) { roleMenuModal.init(record) } - // 请求授权处理 + /** + * 请求授权处理 + */ function handleRolePath(record) { - rolePathModal.init(record.id) + rolePathModal.init(record) } - // 删除 + /** + * 删除 + */ function remove(record) { createConfirm({ iconType: 'warning', diff --git a/src/views/modules/system/role/RoleMenuModal.vue b/src/views/modules/system/role/RoleMenuModal.vue index 486dc1e..3a36c68 100644 --- a/src/views/modules/system/role/RoleMenuModal.vue +++ b/src/views/modules/system/role/RoleMenuModal.vue @@ -53,10 +53,10 @@ import { $ref } from 'vue/macros' import { findAll as findClients, Client } from '/@/views/modules/system/client/Client.api' import { getAppEnvConfig } from '/@/utils/env' - import { del, findPermissionIdsByRole, RoleTree, saveRoleMenu } from '/@/views/modules/system/role/Role.api' + import { findPermissionIdsByRole, findTreeByRole, RoleTree, saveRoleMenu } from '/@/views/modules/system/role/Role.api' import { Tree, treeDataTranslate } from '/@/utils/dataUtil' import XEUtils from 'xe-utils' - import { findTreeByRole, MenuTree } from '/@/views/modules/system/menu/Menu.api' + import { MenuTree } from '/@/views/modules/system/menu/Menu.api' import { useMessage } from '/@/hooks/web/useMessage' const { VITE_GLOB_APP_CLIENT } = getAppEnvConfig() @@ -105,7 +105,7 @@ loading = true searchName = '' expandedKeys = [] - // 权限树 + // 当前角色的菜单和权限码树 await findTreeByRole(currentRole.id, clientCode).then((res) => { treeData = treeDataTranslate(res.data, 'id', 'title') generateTreeList(res.data) diff --git a/src/views/modules/system/role/RolePathModal.vue b/src/views/modules/system/role/RolePathModal.vue index bfc848b..ec91d62 100644 --- a/src/views/modules/system/role/RolePathModal.vue +++ b/src/views/modules/system/role/RolePathModal.vue @@ -29,25 +29,38 @@ import BasicDrawer from '/@/components/Drawer/src/BasicDrawer.vue' import { $ref } from 'vue/macros' import { VxeTableInstance } from 'vxe-table' - import { findPathIdsByRole, findPathsByUser, saveRoleMenu, saveRolePath } from "./Role.api"; + import { findPathIdsByRole, findPathsByRole, RoleTree, saveRolePath } from './Role.api' import XEUtils from 'xe-utils' + import { useMessage } from '/@/hooks/web/useMessage' + + const { createMessage, createConfirm } = useMessage() const xTable = $ref() let loading = $ref(false) let roleId = $ref('') + let currentRole = $ref({}) let visible = $ref(false) let checkedKeys = $ref([]) let tableData = $ref([]) - async function init(id) { + async function init(record: RoleTree) { visible = true loading = true - roleId = id - await findPathIdsByRole(roleId).then(({ data }) => { + currentRole = record + initAssign() + } + + /** + * 初始化分配信息 + */ + async function initAssign() { + // 已经勾选的 + await findPathIdsByRole(currentRole.id).then(({ data }) => { checkedKeys = data }) - await findPathsByUser().then(({ data }) => { + // 可以被分配的 + await findPathsByRole(currentRole.id).then(({ data }) => { const result = [] as any[] // 对数据进行分组 XEUtils.each(XEUtils.groupBy(data, 'groupName'), (children, key) => { @@ -62,22 +75,53 @@ }) } - // 保存 + /** + * 保存 + */ function handleSubmit() { + loading = true + // 是否级联更新子角色 + if (currentRole.children) { + createConfirm({ + iconType: 'warning', + title: '警告', + cancelText: '不应用', + okText: '应用', + content: '将新增的权限应用到下级子角色中,注意:删除权限时无论如何选择,都将会下级角色的权限被级联删除', + onOk: () => { + save(true) + }, + onCancel: () => { + save(false) + }, + }) + } else { + save(false) + } + } + + /** + * 保存 + */ + function save(updateChildren: boolean) { loading = true const checkedKeys = xTable - .getCheckboxRecords() + ?.getCheckboxRecords() .map((res) => res.id) .filter((id) => id.indexOf('row_') === -1) saveRolePath({ - roleId, + roleId: currentRole.id, + updateChildren, permissionIds: checkedKeys, }).then(() => { + createMessage.success('保存成功') handleCancel() }) } - // 取消 + /** + * 取消 + */ function handleCancel() { visible = false } -- Gitee From 83e7d9336b27b6af70ff9f4c45a96d3ceaa0528c Mon Sep 17 00:00:00 2001 From: nws <3239709711@qq.com> Date: Sat, 13 Jan 2024 23:56:51 +0800 Subject: [PATCH 14/17] =?UTF-8?q?style=20=E4=BF=AE=E6=94=B9BasicTitle?= =?UTF-8?q?=E9=BB=98=E8=AE=A4=E5=AD=97=E4=BD=93=E5=A4=A7=E5=B0=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/Basic/src/BasicTitle.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/Basic/src/BasicTitle.vue b/src/components/Basic/src/BasicTitle.vue index 41ec3d8..5cacee5 100644 --- a/src/components/Basic/src/BasicTitle.vue +++ b/src/components/Basic/src/BasicTitle.vue @@ -46,7 +46,7 @@ position: relative; display: flex; padding-left: 7px; - font-size: 16px; + font-size: 14px; font-weight: 500; line-height: 24px; color: @text-color-base; -- Gitee From b08484a1ce87594337a041ba88267e18ccd3e5c1 Mon Sep 17 00:00:00 2001 From: nws <3239709711@qq.com> Date: Sun, 14 Jan 2024 23:33:27 +0800 Subject: [PATCH 15/17] =?UTF-8?q?feat=20useTablePage=20Hooks=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E5=AD=97=E6=AE=B5=E6=8E=92=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/bootx/useTablePage.ts | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/hooks/bootx/useTablePage.ts b/src/hooks/bootx/useTablePage.ts index ea118cf..82c4223 100644 --- a/src/hooks/bootx/useTablePage.ts +++ b/src/hooks/bootx/useTablePage.ts @@ -22,7 +22,11 @@ export default function (queryPageCallback: CallableFunction) { const batchOperateFlag = ref(false) // 超级查询条件生效状态 const superQueryFlag = ref(false) - + // 排序条件 + const sortParam = reactive({ + sortField: null, + asc: false, + }) // 不可以被重新赋值, 否则会失去绑定 const { pages, pagination } = model /** @@ -43,6 +47,14 @@ export default function (queryPageCallback: CallableFunction) { pages.size = pageSize queryPageCallback() } + /** + * 排序条件变动 + */ + function sortChange({ order, property }) { + sortParam.sortField = order ? property : null + sortParam.asc = order === 'asc' + queryPageCallback() + } /** * 重置当前页数 */ @@ -87,7 +99,9 @@ export default function (queryPageCallback: CallableFunction) { pagination, batchOperateFlag, superQueryFlag, + sortParam, query, + sortChange, resetPage, pageQueryResHandel, handleTableChange, -- Gitee From fa25eac671a492a8941e1e4d5d0d7ad7c393c314 Mon Sep 17 00:00:00 2001 From: xxm1995 Date: Mon, 22 Jan 2024 11:06:00 +0800 Subject: [PATCH 16/17] =?UTF-8?q?fix=20=E6=9F=A5=E8=AF=A2=E6=9E=84?= =?UTF-8?q?=E9=80=A0=E5=99=A8=E9=BB=98=E8=AE=A4=E6=97=A5=E6=9C=9F=E6=A0=BC?= =?UTF-8?q?=E5=BC=8F=E5=8C=96=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/Bootx/Query/QueryItem.vue | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/Bootx/Query/QueryItem.vue b/src/components/Bootx/Query/QueryItem.vue index 943c0ab..e5e9a15 100644 --- a/src/components/Bootx/Query/QueryItem.vue +++ b/src/components/Bootx/Query/QueryItem.vue @@ -37,7 +37,7 @@ v-else-if="field.type === DATE" style="width: 100%" :placeholder="field.placeholder ? field.placeholder : '请选择日期'" - :valueFormat="field.format ? field.format : 'yyyy-MM-DD'" + :valueFormat="field.format ? field.format : 'YYYY-MM-DD'" v-model:value="queryParams[field.field]" /> @@ -56,7 +56,7 @@ v-else-if="field.type === DATE_TIME" style="width: 100%" :placeholder="field.placeholder ? field.placeholder : '请选择日期时间'" - :valueFormat="field.format ? field.format : 'yyyy-MM-DD HH:mm:ss'" + :valueFormat="field.format ? field.format : 'YYYY-MM-DD HH:mm:ss'" v-model:value="queryParams[field.field]" /> -- Gitee From e3cd0dafe73526ef578184e45fbeb4126f6f324c Mon Sep 17 00:00:00 2001 From: bootx Date: Sun, 28 Jan 2024 22:04:02 +0800 Subject: [PATCH 17/17] =?UTF-8?q?fix=20=E9=83=A8=E5=88=86=E5=88=A0?= =?UTF-8?q?=E9=99=A4=E8=A7=A6=E5=8F=91=E5=88=97=E8=A1=A8=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E6=97=B6=E6=9C=BA=E4=B8=8D=E5=AF=B9=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/modules/baseapi/quartz/QuartzJobLogList.vue | 2 +- src/views/modules/notice/site/sender/SiteMessageList.vue | 2 +- src/views/modules/system/client/ClientList.vue | 2 +- src/views/modules/system/dict/DictItemList.vue | 2 +- src/views/modules/system/dict/DictList.vue | 2 +- src/views/modules/system/loginType/LoginTypeList.vue | 2 +- src/views/modules/system/param/SystemParamList.vue | 2 +- src/views/modules/system/path/PermPathList.vue | 2 +- src/views/modules/system/scope/DataRoleList.vue | 2 +- src/views/modules/third/wechat/media/WechatMediaSelect.vue | 2 +- src/views/modules/third/wechat/template/WechatTemplateList.vue | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/views/modules/baseapi/quartz/QuartzJobLogList.vue b/src/views/modules/baseapi/quartz/QuartzJobLogList.vue index 6039485..4ef7a0b 100644 --- a/src/views/modules/baseapi/quartz/QuartzJobLogList.vue +++ b/src/views/modules/baseapi/quartz/QuartzJobLogList.vue @@ -99,8 +99,8 @@ function remove(record) { del(record.id).then(() => { createMessage.success('删除成功') + queryPage() }) - queryPage() } defineExpose({ init, diff --git a/src/views/modules/notice/site/sender/SiteMessageList.vue b/src/views/modules/notice/site/sender/SiteMessageList.vue index 6a404e9..3fe12e3 100644 --- a/src/views/modules/notice/site/sender/SiteMessageList.vue +++ b/src/views/modules/notice/site/sender/SiteMessageList.vue @@ -135,8 +135,8 @@ function remove(record) { del(record.id).then(() => { createMessage.success('删除成功') + queryPage() }) - queryPage() } //发送 diff --git a/src/views/modules/system/client/ClientList.vue b/src/views/modules/system/client/ClientList.vue index a6e8b67..0cc665e 100644 --- a/src/views/modules/system/client/ClientList.vue +++ b/src/views/modules/system/client/ClientList.vue @@ -120,8 +120,8 @@ function remove(record) { del(record.id).then(() => { notification.success({ message: '删除成功' }) + queryPage() }) - queryPage() } diff --git a/src/views/modules/system/dict/DictItemList.vue b/src/views/modules/system/dict/DictItemList.vue index 2a01192..5814c5d 100644 --- a/src/views/modules/system/dict/DictItemList.vue +++ b/src/views/modules/system/dict/DictItemList.vue @@ -112,8 +112,8 @@ function remove(record) { del(record.id).then(() => { createMessage.success('删除成功') + queryPage() }) - queryPage() } defineExpose({ init, diff --git a/src/views/modules/system/dict/DictList.vue b/src/views/modules/system/dict/DictList.vue index f7dfeae..7a3e448 100644 --- a/src/views/modules/system/dict/DictList.vue +++ b/src/views/modules/system/dict/DictList.vue @@ -131,8 +131,8 @@ function remove(record) { del(record.id).then(() => { createMessage.success('删除成功') + queryPage() }) - queryPage() } diff --git a/src/views/modules/system/loginType/LoginTypeList.vue b/src/views/modules/system/loginType/LoginTypeList.vue index 0eb3509..5c5cbfe 100644 --- a/src/views/modules/system/loginType/LoginTypeList.vue +++ b/src/views/modules/system/loginType/LoginTypeList.vue @@ -126,8 +126,8 @@ function remove(record) { del(record.id).then(() => { notification.success({ message: '删除成功' }) + queryPage() }) - queryPage() } diff --git a/src/views/modules/system/param/SystemParamList.vue b/src/views/modules/system/param/SystemParamList.vue index 59b5b8a..ddecc13 100644 --- a/src/views/modules/system/param/SystemParamList.vue +++ b/src/views/modules/system/param/SystemParamList.vue @@ -130,8 +130,8 @@ function remove(record) { del(record.id).then(() => { createMessage.success('删除成功') + queryPage() }) - queryPage() } diff --git a/src/views/modules/system/path/PermPathList.vue b/src/views/modules/system/path/PermPathList.vue index f84ed0e..f08baf7 100644 --- a/src/views/modules/system/path/PermPathList.vue +++ b/src/views/modules/system/path/PermPathList.vue @@ -152,8 +152,8 @@ function remove(record) { del(record.id).then(() => { notification.success({ message: '删除成功' }) + queryPage() }) - queryPage() } // 批量删除 function removeDataScopeBatch() { diff --git a/src/views/modules/system/scope/DataRoleList.vue b/src/views/modules/system/scope/DataRoleList.vue index fb0ec09..75c2200 100644 --- a/src/views/modules/system/scope/DataRoleList.vue +++ b/src/views/modules/system/scope/DataRoleList.vue @@ -147,8 +147,8 @@ function remove(record) { del(record.id).then(() => { createMessage.success('删除成功') + queryPage() }) - queryPage() } diff --git a/src/views/modules/third/wechat/media/WechatMediaSelect.vue b/src/views/modules/third/wechat/media/WechatMediaSelect.vue index 7bfb98f..2ef4d34 100644 --- a/src/views/modules/third/wechat/media/WechatMediaSelect.vue +++ b/src/views/modules/third/wechat/media/WechatMediaSelect.vue @@ -68,8 +68,8 @@ loading.value = true dictDropDown('WeChatMediaType').then((res) => { mediaTypes = res + queryPage() }) - queryPage() } function queryPage() { diff --git a/src/views/modules/third/wechat/template/WechatTemplateList.vue b/src/views/modules/third/wechat/template/WechatTemplateList.vue index 2eea708..eab3e24 100644 --- a/src/views/modules/third/wechat/template/WechatTemplateList.vue +++ b/src/views/modules/third/wechat/template/WechatTemplateList.vue @@ -104,8 +104,8 @@ function remove(record) { del(record.id).then(() => { createMessage.success('删除成功') + queryPage() }) - queryPage() } // 同步 function syncInfo() { -- Gitee