diff --git a/src/api/v1/user.ts b/src/api/v1/user.ts index 08ea2cf..8072c6e 100644 --- a/src/api/v1/user.ts +++ b/src/api/v1/user.ts @@ -79,3 +79,11 @@ export const fetchUpdateUserPasswordByAdmin = (data: any) => { export const fetchUploadAvatarByAdmin = (data: any) => { return http.request>('put', 'user/uploadAvatarByAdmin', { data }, { headers: { 'Content-Type': 'multipart/form-data' } }); }; + +/** + * 强制用户下线 + * @param data + */ +export const fetchForcedOffline = (data: any) => { + return http.request>('put', 'user/forcedOffline', { data }); +}; diff --git a/src/assets/svg/airplane.svg b/src/assets/svg/airplane.svg new file mode 100644 index 0000000..cacd439 --- /dev/null +++ b/src/assets/svg/airplane.svg @@ -0,0 +1,5 @@ + diff --git a/src/assets/svg/expand.svg b/src/assets/svg/expand.svg new file mode 100644 index 0000000..bb41c35 --- /dev/null +++ b/src/assets/svg/expand.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/svg/unexpand.svg b/src/assets/svg/unexpand.svg new file mode 100644 index 0000000..04b3e9d --- /dev/null +++ b/src/assets/svg/unexpand.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/views/system/adminUser/index.vue b/src/views/system/adminUser/index.vue index b739186..fb8fea4 100644 --- a/src/views/system/adminUser/index.vue +++ b/src/views/system/adminUser/index.vue @@ -4,7 +4,7 @@ import { columns } from '@/views/system/adminUser/utils/columns'; import PureTableBar from '@/components/TableBar/src/bar'; import AddFill from '@iconify-icons/ri/add-circle-line'; import PureTable from '@pureadmin/table'; -import { onAdd, onAssignRolesToUser, onDelete, onResetPassword, onSearch, onUpdate, onUploadAvatar, updateUserStatus } from '@/views/system/adminUser/utils/hooks'; +import { onAdd, onAssignRolesToUser, onDelete, onForcedOffline, onResetPassword, onSearch, onUpdate, onUploadAvatar, updateUserStatus } from '@/views/system/adminUser/utils/hooks'; import Delete from '@iconify-icons/ep/delete'; import EditPen from '@iconify-icons/ep/edit-pen'; import Refresh from '@iconify-icons/ep/refresh'; @@ -18,6 +18,9 @@ import Password from '@iconify-icons/ri/lock-password-line'; import More from '@iconify-icons/ep/more-filled'; import { useAdminUserStore } from '@/store/system/adminUser'; import { sexConstant, userStatus } from '@/enums/baseConstant'; +import { deviceDetection } from '@pureadmin/utils'; +import Tree from '@/views/system/adminUser/tree.vue'; +import Airplane from '@/assets/svg/airplane.svg'; const tableRef = ref(); const formRef = ref(); @@ -57,146 +60,152 @@ onMounted(() => { + + diff --git a/src/views/system/adminUser/tree.vue b/src/views/system/adminUser/tree.vue new file mode 100644 index 0000000..43edf83 --- /dev/null +++ b/src/views/system/adminUser/tree.vue @@ -0,0 +1,155 @@ + + + + + diff --git a/src/views/system/adminUser/utils/hooks.tsx b/src/views/system/adminUser/utils/hooks.tsx index 1cb701c..930908c 100644 --- a/src/views/system/adminUser/utils/hooks.tsx +++ b/src/views/system/adminUser/utils/hooks.tsx @@ -12,7 +12,7 @@ import { deviceDetection } from '@pureadmin/utils'; import CropperPreview from '@/components/CropperPreview'; import AssignUserToRole from '@/views/system/adminUser/assign-user-to-role.vue'; import userAvatar from '@/assets/user.jpg'; -import { fetchUploadAvatarByAdmin } from '@/api/v1/user'; +import { fetchForcedOffline, fetchUploadAvatarByAdmin } from '@/api/v1/user'; export const formRef = ref(); const cropRef = ref(); @@ -240,3 +240,22 @@ export const onAssignRolesToUser = (row: any) => { }, }); }; + +/** + * * 强制下线 + * @param row + */ +export const onForcedOffline = async (row: any) => { + const id = row.id; + const confirm = await messageBox({ + title: $t('confirm_forcedOffline'), + showMessage: false, + confirmMessage: undefined, + cancelMessage: $t('cancel'), + }); + if (!confirm) return; + + const result = await fetchForcedOffline(id); + if (result.code !== 200) return; + message(result.message, { type: 'success' }); +}; diff --git a/src/views/system/dept/dept-dialog.vue b/src/views/system/dept/dept-dialog.vue index e965e95..cf3016b 100644 --- a/src/views/system/dept/dept-dialog.vue +++ b/src/views/system/dept/dept-dialog.vue @@ -15,8 +15,6 @@ const props = withDefaults(defineProps(), { deptName: undefined, // 部门简介 summary: undefined, - // 备注信息 - remarks: undefined, }), }); @@ -40,8 +38,5 @@ defineExpose({ formRef }); - - - diff --git a/src/views/system/dept/index.vue b/src/views/system/dept/index.vue index ebc3629..bc37994 100644 --- a/src/views/system/dept/index.vue +++ b/src/views/system/dept/index.vue @@ -4,7 +4,7 @@ import { columns } from '@/views/system/dept/utils/columns'; import PureTableBar from '@/components/TableBar/src/bar'; import AddFill from '@iconify-icons/ri/add-circle-line'; import PureTable from '@pureadmin/table'; -import { onAdd, onDelete, onSearch, onUpdate } from '@/views/system/dept/utils/hooks'; +import { deleteIds, onAdd, onDelete, onDeleteBatch, onSearch, onUpdate } from '@/views/system/dept/utils/hooks'; import Delete from '@iconify-icons/ep/delete'; import EditPen from '@iconify-icons/ep/edit-pen'; import Refresh from '@iconify-icons/ep/refresh'; @@ -34,6 +34,14 @@ const onPageSizeChange = async (value: number) => { await onSearch(); }; +/** + * * 选择多行 + * @param rows + */ +const onSelectionChange = (rows: Array) => { + deleteIds.value = rows.map((row: any) => row.id); +}; + /** * 重置表单 * @param formEl @@ -61,9 +69,6 @@ onMounted(() => { - - - {{ $t('search') }} {{ $t('buttons.reset') }} @@ -73,6 +78,11 @@ onMounted(() => {