修改交互逻辑.

This commit is contained in:
lijiahang
2023-09-14 17:24:18 +08:00
parent f8b694c16a
commit a210fb93fd
15 changed files with 67 additions and 43 deletions

View File

@@ -18,9 +18,9 @@ export interface RoleUpdateRequest extends RoleCreateRequest {
} }
/** /**
* 角色 菜单绑定请求 * 角色 分配绑定请求
*/ */
export interface RoleMenuBindRequest extends RoleCreateRequest { export interface RoleGrantMenuRequest extends RoleCreateRequest {
roleId: number; roleId: number;
menuIdList: Array<number>; menuIdList: Array<number>;
} }
@@ -99,10 +99,10 @@ export function deleteRole(id: number) {
} }
/** /**
* 绑定角色菜单 * 分配角色菜单
*/ */
export function bindRoleMenu(request: RoleMenuBindRequest) { export function grantRoleMenu(request: RoleGrantMenuRequest) {
return axios.put('/infra/system-role/bind', request); return axios.put('/infra/system-role/grant-menu', request);
} }
/** /**

View File

@@ -81,8 +81,8 @@ export function updateUserStatus(request: UserUpdateRequest) {
/** /**
* 修改用户角色 * 修改用户角色
*/ */
export function updateUserRole(request: UserUpdateRequest) { export function grantUserRole(request: UserUpdateRequest) {
return axios.put('/infra/system-user/update-role', request); return axios.put('/infra/system-user/grant-role', request);
} }
/** /**

View File

@@ -93,7 +93,8 @@
const openUpdate = (record: any) => { const openUpdate = (record: any) => {
title.value = '修改主机'; title.value = '修改主机';
isAddHandle.value = false; isAddHandle.value = false;
renderForm({ ...defaultForm(), ...record }); const tags = record?.tags?.map((s: { id: any; }) => s.id);
renderForm({ ...defaultForm(), ...record, tags });
setVisible(true); setVisible(true);
}; };

View File

@@ -1,4 +1,10 @@
/** /**
* tag 颜色 * tag 颜色
*/ */
export const tagColor = ['#FF5E5E', '#0FC6C2', '#CE36FF', '#14C93E', '#168CFF']; export const tagColor = [
'#52C41A',
'#13C2C2',
'#1890FF',
'#9254de',
'#F759AB'
];

View File

@@ -31,8 +31,8 @@ const columns = [
}, { }, {
title: '操作', title: '操作',
slotName: 'handle', slotName: 'handle',
width: 130, width: 170,
align: 'center', align: 'right',
fixed: 'right', fixed: 'right',
}, },
] as TableColumnData[]; ] as TableColumnData[];

View File

@@ -107,7 +107,7 @@
&:hover { &:hover {
.icon { .icon {
color: rgb(var(--arcoblue-6)); color: rgb(var(--arcoblue-6));
background-color: #e8f3ff; background-color: #E8F3FF;
} }
.text { .text {

View File

@@ -111,6 +111,7 @@
import useLoading from '@/hooks/loading'; import useLoading from '@/hooks/loading';
import useVisible from '@/hooks/visible'; import useVisible from '@/hooks/visible';
import formRules from '../types/form.rules'; import formRules from '../types/form.rules';
import { sortStep } from '../types/const';
import { MenuTypeEnum, MenuVisibleEnum, MenuCacheEnum } from '../types/enum.types'; import { MenuTypeEnum, MenuVisibleEnum, MenuCacheEnum } from '../types/enum.types';
import { toOptions } from '@/utils/enum'; import { toOptions } from '@/utils/enum';
import IconPicker from '@sanqi377/arco-vue-icon-picker'; import IconPicker from '@sanqi377/arco-vue-icon-picker';
@@ -131,7 +132,7 @@
name: undefined, name: undefined,
type: MenuTypeEnum.PARENT_MENU.value, type: MenuTypeEnum.PARENT_MENU.value,
permission: undefined, permission: undefined,
sort: 10, sort: undefined,
visible: MenuVisibleEnum.SHOW.value, visible: MenuVisibleEnum.SHOW.value,
cache: MenuCacheEnum.SHOW.value, cache: MenuCacheEnum.SHOW.value,
icon: undefined, icon: undefined,
@@ -156,7 +157,7 @@
const openAdd = (record: any) => { const openAdd = (record: any) => {
title.value = '添加菜单'; title.value = '添加菜单';
isAddHandle.value = true; isAddHandle.value = true;
renderForm({ ...defaultForm(), parentId: record.parentId }); renderForm({ ...defaultForm(), parentId: record.parentId, sort: (record.sort || 0) + sortStep });
// 如果是父菜单默认选中子菜单 如果是子菜单默认选中功能 // 如果是父菜单默认选中子菜单 如果是子菜单默认选中功能
if (record.type === 1 || record.type === 2) { if (record.type === 1 || record.type === 2) {
formModel.type = record.type + 1; formModel.type = record.type + 1;

View File

@@ -34,7 +34,7 @@
<a-space> <a-space>
<!-- 新增 --> <!-- 新增 -->
<a-button type="primary" <a-button type="primary"
@click="emits('openAdd',{ parentId: 0 })" @click="emits('openAdd',{ parentId: 0, sort: getMaxSort(tableRenderData) })"
v-permission="['infra:system-menu:create']"> v-permission="['infra:system-menu:create']">
新增 新增
<template #icon> <template #icon>
@@ -136,7 +136,7 @@
size="mini" size="mini"
v-if="record.type !== MenuTypeEnum.FUNCTION.value" v-if="record.type !== MenuTypeEnum.FUNCTION.value"
v-permission="['infra:system-menu:create']" v-permission="['infra:system-menu:create']"
@click="emits('openAdd', { parentId: record.id, type: record.type })"> @click="emits('openAdd', { parentId: record.id, type: record.type, sort: getMaxSort(record.children) })">
新增 新增
</a-button> </a-button>
<!-- 修改 --> <!-- 修改 -->
@@ -301,6 +301,15 @@
await loadMenuData(); await loadMenuData();
}; };
// 获取最大排序
const getMaxSort = (array: MenuQueryResponse[]) => {
if (array?.length) {
return array[array.length - 1].sort;
} else {
return 0;
}
};
</script> </script>
<style lang="less" scoped> <style lang="less" scoped>

View File

@@ -0,0 +1 @@
export const sortStep = 10;

View File

@@ -2,7 +2,7 @@
<a-modal v-model:visible="visible" <a-modal v-model:visible="visible"
body-class="modal-form" body-class="modal-form"
title-align="start" title-align="start"
title="绑定菜单" title="分配菜单"
:top="80" :top="80"
:width="480" :width="480"
:body-style="{padding: '16px 16px 0 16px'}" :body-style="{padding: '16px 16px 0 16px'}"
@@ -38,7 +38,7 @@
<script lang="ts"> <script lang="ts">
export default { export default {
name: 'role-menu-bind-modal' name: 'role-menu-grant-modal'
}; };
</script> </script>
@@ -48,7 +48,7 @@
import { reactive, ref } from 'vue'; import { reactive, ref } from 'vue';
import useLoading from '@/hooks/loading'; import useLoading from '@/hooks/loading';
import useVisible from '@/hooks/visible'; import useVisible from '@/hooks/visible';
import { getRoleMenuId, bindRoleMenu, RoleMenuBindRequest } from '@/api/user/role'; import { getRoleMenuId, grantRoleMenu, RoleGrantMenuRequest } from '@/api/user/role';
import { Message } from '@arco-design/web-vue'; import { Message } from '@arco-design/web-vue';
import { useCacheStore } from '@/store'; import { useCacheStore } from '@/store';
import { getMenuList } from '@/api/system/menu'; import { getMenuList } from '@/api/system/menu';
@@ -98,11 +98,11 @@
setLoading(true); setLoading(true);
try { try {
// //
await bindRoleMenu({ await grantRoleMenu({
roleId: roleRecord.id, roleId: roleRecord.id,
menuIdList: [...tree.value.getValue()] menuIdList: [...tree.value.getValue()]
} as RoleMenuBindRequest); } as RoleGrantMenuRequest);
Message.success('绑定成功'); Message.success('分配成功');
// //
handlerClear(); handlerClear();
} catch (e) { } catch (e) {

View File

@@ -82,13 +82,13 @@
{{ toggleEnumValue(record.status, RoleStatusEnum, 'label') }} {{ toggleEnumValue(record.status, RoleStatusEnum, 'label') }}
</a-button> </a-button>
</a-popconfirm> </a-popconfirm>
<!-- 绑定菜单 --> <!-- 分配菜单 -->
<a-button v-permission="['infra:system-role:bind-menu']" <a-button v-permission="['infra:system-role:grant-menu']"
:disabled="record.code === 'admin'" :disabled="record.code === 'admin'"
type="text" type="text"
size="mini" size="mini"
@click="emits('openBind', record)"> @click="emits('openGrant', record)">
绑定菜单 分配菜单
</a-button> </a-button>
<!-- 修改 --> <!-- 修改 -->
<a-button v-permission="['infra:system-role:update']" <a-button v-permission="['infra:system-role:update']"
@@ -134,7 +134,7 @@
const tableRenderData = ref<RoleQueryResponse[]>(); const tableRenderData = ref<RoleQueryResponse[]>();
const { loading, setLoading } = useLoading(); const { loading, setLoading } = useLoading();
const emits = defineEmits(['openAdd', 'openUpdate', 'openBind']); const emits = defineEmits(['openAdd', 'openUpdate', 'openGrant']);
const pagination = reactive(defaultPagination()); const pagination = reactive(defaultPagination());

View File

@@ -4,13 +4,13 @@
<role-table ref="table" <role-table ref="table"
@openAdd="() => modal.openAdd()" @openAdd="() => modal.openAdd()"
@openUpdate="(e) => modal.openUpdate(e)" @openUpdate="(e) => modal.openUpdate(e)"
@openBind="(e) => bindModal.open(e)" /> @openGrant="(e) => grantModal.open(e)" />
<!-- 添加修改模态框 --> <!-- 添加修改模态框 -->
<role-form-modal ref="modal" <role-form-modal ref="modal"
@added="() => table.addedCallback()" @added="() => table.addedCallback()"
@updated="() => table.updatedCallback()" /> @updated="() => table.updatedCallback()" />
<!-- 角色菜单绑定模态框 --> <!-- 分配角色菜单模态框 -->
<role-menu-bind-modal ref="bindModal" /> <role-menu-grant-modal ref="grantModal" />
</div> </div>
</template> </template>
@@ -23,13 +23,13 @@
<script lang="ts" setup> <script lang="ts" setup>
import RoleTable from './components/role-table.vue'; import RoleTable from './components/role-table.vue';
import RoleFormModal from './components/role-form-modal.vue'; import RoleFormModal from './components/role-form-modal.vue';
import RoleMenuBindModal from '@/views/user/role/components/role-menu-bind-modal.vue'; import RoleMenuGrantModal from '@/views/user/role/components/role-menu-grant-modal.vue';
import { onUnmounted, ref } from 'vue'; import { onUnmounted, ref } from 'vue';
import { useCacheStore } from '@/store'; import { useCacheStore } from '@/store';
const table = ref(); const table = ref();
const modal = ref(); const modal = ref();
const bindModal = ref(); const grantModal = ref();
// 卸载时清除 menu cache // 卸载时清除 menu cache
onUnmounted(() => { onUnmounted(() => {

View File

@@ -40,7 +40,7 @@
<script lang="ts"> <script lang="ts">
export default { export default {
name: 'user-user-update-roles-form-modal' name: 'user-user-grant-roles-form-modal'
}; };
</script> </script>
@@ -52,7 +52,7 @@
import UserRoleSelector from '@/components/user/role/user-role-selector.vue'; import UserRoleSelector from '@/components/user/role/user-role-selector.vue';
import { getRoleList } from '@/api/user/role'; import { getRoleList } from '@/api/user/role';
import { useCacheStore } from '@/store'; import { useCacheStore } from '@/store';
import { getUserRoleIdList, updateUserRole } from '@/api/user/user'; import { getUserRoleIdList, grantUserRole } from '@/api/user/user';
const { visible, setVisible } = useVisible(); const { visible, setVisible } = useVisible();
const { loading: saveLoading, setLoading: setSaveLoading } = useLoading(); const { loading: saveLoading, setLoading: setSaveLoading } = useLoading();
@@ -108,7 +108,7 @@
const handlerOk = async () => { const handlerOk = async () => {
setSaveLoading(true); setSaveLoading(true);
try { try {
await updateUserRole({ await grantUserRole({
id: formModel.id, id: formModel.id,
roleIdList: formModel.roleIdList roleIdList: formModel.roleIdList
}); });

View File

@@ -70,6 +70,10 @@
@page-change="(page) => fetchTableData(page, pagination.pageSize)" @page-change="(page) => fetchTableData(page, pagination.pageSize)"
@page-size-change="(size) => fetchTableData(pagination.current, size)" @page-size-change="(size) => fetchTableData(pagination.current, size)"
:bordered="false"> :bordered="false">
<!-- 用户名 -->
<template #username="{ record }">
<span class="username-text">{{ record.username }}</span>
</template>
<!-- 状态 --> <!-- 状态 -->
<template #status="{ record }"> <template #status="{ record }">
<a-tag :color="getEnumValue(record.status, UserStatusEnum,'color')"> <a-tag :color="getEnumValue(record.status, UserStatusEnum,'color')">
@@ -115,8 +119,8 @@
<!-- 分配角色 --> <!-- 分配角色 -->
<a-button type="text" <a-button type="text"
size="mini" size="mini"
v-permission="['infra:system-user:update-role']" v-permission="['infra:system-user:grant-role']"
@click="emits('openUpdateRole', record)"> @click="emits('openGrantRole', record)">
分配角色 分配角色
</a-button> </a-button>
<!-- 删除 --> <!-- 删除 -->
@@ -156,7 +160,7 @@
const tableRenderData = ref<UserQueryResponse[]>(); const tableRenderData = ref<UserQueryResponse[]>();
const { loading, setLoading } = useLoading(); const { loading, setLoading } = useLoading();
const emits = defineEmits(['openAdd', 'openUpdate', 'openResetPassword', 'openUpdateRole']); const emits = defineEmits(['openAdd', 'openUpdate', 'openResetPassword', 'openGrantRole']);
const pagination = reactive(defaultPagination()); const pagination = reactive(defaultPagination());
@@ -244,5 +248,7 @@
</script> </script>
<style lang="less" scoped> <style lang="less" scoped>
.username-text {
color: rgb(var(--arcoblue-6));
}
</style> </style>

View File

@@ -5,7 +5,7 @@
@openAdd="() => modal.openAdd()" @openAdd="() => modal.openAdd()"
@openUpdate="(e) => modal.openUpdate(e)" @openUpdate="(e) => modal.openUpdate(e)"
@openResetPassword="(e) => resetModal.open(e)" @openResetPassword="(e) => resetModal.open(e)"
@openUpdateRole="(e) => updateRoleModal.open(e)" /> @openGrantRole="(e) => grantRoleModal.open(e)" />
<!-- 添加修改模态框 --> <!-- 添加修改模态框 -->
<user-form-modal ref="modal" <user-form-modal ref="modal"
@added="() => table.addedCallback()" @added="() => table.addedCallback()"
@@ -13,7 +13,7 @@
<!-- 重置密码模态框 --> <!-- 重置密码模态框 -->
<user-reset-password-form-modal ref="resetModal" /> <user-reset-password-form-modal ref="resetModal" />
<!-- 分配角色模态框 --> <!-- 分配角色模态框 -->
<user-update-roles-form-modal ref="updateRoleModal" /> <user-grant-roles-form-modal ref="grantRoleModal" />
</div> </div>
</template> </template>
@@ -27,14 +27,14 @@
import UserTable from './components/user-table.vue'; import UserTable from './components/user-table.vue';
import UserFormModal from './components/user-form-modal.vue'; import UserFormModal from './components/user-form-modal.vue';
import UserResetPasswordFormModal from './components/user-reset-password-form-modal.vue'; import UserResetPasswordFormModal from './components/user-reset-password-form-modal.vue';
import UserUpdateRolesFormModal from './components/user-update-roles-form-modal.vue'; import UserGrantRolesFormModal from './components/user-grant-roles-form-modal.vue';
import { ref, onUnmounted } from 'vue'; import { ref, onUnmounted } from 'vue';
import { useCacheStore } from '@/store'; import { useCacheStore } from '@/store';
const table = ref(); const table = ref();
const modal = ref(); const modal = ref();
const resetModal = ref(); const resetModal = ref();
const updateRoleModal = ref(); const grantRoleModal = ref();
// 卸载时清除 role cache // 卸载时清除 role cache
onUnmounted(() => { onUnmounted(() => {