|
@@ -1,203 +1,115 @@
|
|
|
<template>
|
|
|
- <div class="h-full overflow-hidden">
|
|
|
- <n-card title="用户管理" :bordered="false" class="rounded-16px shadow-sm">
|
|
|
- <n-space class="pb-12px" justify="space-between">
|
|
|
- <n-space>
|
|
|
- <n-button type="primary" @click="handleAddTable">
|
|
|
- <icon-ic-round-plus class="mr-4px text-20px" />
|
|
|
- 新增
|
|
|
- </n-button>
|
|
|
- <n-button type="error">
|
|
|
- <icon-ic-round-delete class="mr-4px text-20px" />
|
|
|
- 删除
|
|
|
- </n-button>
|
|
|
- <n-button type="success">
|
|
|
- <icon-uil:export class="mr-4px text-20px" />
|
|
|
- 导出Excel
|
|
|
- </n-button>
|
|
|
- </n-space>
|
|
|
- <n-space align="center" :size="18">
|
|
|
- <n-button size="small" type="primary" @click="getTableData">
|
|
|
- <icon-mdi-refresh class="mr-4px text-16px" :class="{ 'animate-spin': loading }" />
|
|
|
- 刷新表格
|
|
|
- </n-button>
|
|
|
- <column-setting v-model:columns="columns" />
|
|
|
- </n-space>
|
|
|
- </n-space>
|
|
|
- <n-data-table :columns="columns" :data="tableData" :loading="loading" :pagination="pagination" />
|
|
|
- <table-action-modal v-model:visible="visible" :type="modalType" :edit-data="editData" />
|
|
|
- </n-card>
|
|
|
- </div>
|
|
|
+ <div class="h-full overflow-hidden">
|
|
|
+ <n-card title="权限管理" :bordered="false" class="rounded-16px shadow-sm">
|
|
|
+ <n-data-table :columns="columns" :data="tableData" :pagination="pagination" />
|
|
|
+ </n-card>
|
|
|
+ </div>
|
|
|
</template>
|
|
|
|
|
|
-<script setup lang="tsx">
|
|
|
-import { reactive, ref } from 'vue';
|
|
|
+<script setup lang="ts">
|
|
|
+import { ref } from 'vue';
|
|
|
import type { Ref } from 'vue';
|
|
|
-import { NButton, NPopconfirm, NSpace, NTag } from 'naive-ui';
|
|
|
-import type { DataTableColumns, PaginationProps } from 'naive-ui';
|
|
|
-import { genderLabels, userStatusLabels } from '@/constants';
|
|
|
-import { fetchUserList } from '@/service';
|
|
|
-import { useBoolean, useLoading } from '@/hooks';
|
|
|
-import TableActionModal from './components/table-action-modal.vue';
|
|
|
-import type { ModalType } from './components/table-action-modal.vue';
|
|
|
-import ColumnSetting from './components/column-setting.vue';
|
|
|
-
|
|
|
-const { loading, startLoading, endLoading } = useLoading(false);
|
|
|
-const { bool: visible, setTrue: openModal } = useBoolean();
|
|
|
-
|
|
|
-const tableData = ref<UserManagement.User[]>([]);
|
|
|
-function setTableData(data: UserManagement.User[]) {
|
|
|
- tableData.value = data;
|
|
|
-}
|
|
|
-
|
|
|
-async function getTableData() {
|
|
|
- startLoading();
|
|
|
- const { data } = await fetchUserList();
|
|
|
- if (data) {
|
|
|
- setTimeout(() => {
|
|
|
- setTableData(data);
|
|
|
- endLoading();
|
|
|
- }, 1000);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-const columns: Ref<DataTableColumns<UserManagement.User>> = ref([
|
|
|
- {
|
|
|
- type: 'selection',
|
|
|
- align: 'center'
|
|
|
- },
|
|
|
- {
|
|
|
- key: 'index',
|
|
|
- title: '序号',
|
|
|
- align: 'center'
|
|
|
- },
|
|
|
- {
|
|
|
- key: 'userName',
|
|
|
- title: '用户名',
|
|
|
- align: 'center'
|
|
|
- },
|
|
|
- {
|
|
|
- key: 'age',
|
|
|
- title: '用户年龄',
|
|
|
- align: 'center'
|
|
|
- },
|
|
|
- {
|
|
|
- key: 'gender',
|
|
|
- title: '性别',
|
|
|
- align: 'center',
|
|
|
- render: row => {
|
|
|
- if (row.gender) {
|
|
|
- const tagTypes: Record<UserManagement.GenderKey, NaiveUI.ThemeColor> = {
|
|
|
- '0': 'success',
|
|
|
- '1': 'warning'
|
|
|
- };
|
|
|
-
|
|
|
- return <NTag type={tagTypes[row.gender]}>{genderLabels[row.gender]}</NTag>;
|
|
|
- }
|
|
|
-
|
|
|
- return <span></span>;
|
|
|
- }
|
|
|
- },
|
|
|
- {
|
|
|
- key: 'phone',
|
|
|
- title: '手机号码',
|
|
|
- align: 'center'
|
|
|
- },
|
|
|
- {
|
|
|
- key: 'email',
|
|
|
- title: '邮箱',
|
|
|
- align: 'center'
|
|
|
- },
|
|
|
- {
|
|
|
- key: 'userStatus',
|
|
|
- title: '状态',
|
|
|
- align: 'center',
|
|
|
- render: row => {
|
|
|
- if (row.userStatus) {
|
|
|
- const tagTypes: Record<UserManagement.UserStatusKey, NaiveUI.ThemeColor> = {
|
|
|
- '1': 'success',
|
|
|
- '2': 'error',
|
|
|
- '3': 'warning',
|
|
|
- '4': 'default'
|
|
|
- };
|
|
|
|
|
|
- return <NTag type={tagTypes[row.userStatus]}>{userStatusLabels[row.userStatus]}</NTag>;
|
|
|
- }
|
|
|
- return <span></span>;
|
|
|
- }
|
|
|
- },
|
|
|
- {
|
|
|
- key: 'actions',
|
|
|
- title: '操作',
|
|
|
- align: 'center',
|
|
|
- render: row => {
|
|
|
- return (
|
|
|
- <NSpace justify={'center'}>
|
|
|
- <NButton size={'small'} onClick={() => handleEditTable(row.id)}>
|
|
|
- 编辑
|
|
|
- </NButton>
|
|
|
- <NPopconfirm onPositiveClick={() => handleDeleteTable(row.id)}>
|
|
|
- {{
|
|
|
- default: () => '确认删除',
|
|
|
- trigger: () => <NButton size={'small'}>删除</NButton>
|
|
|
- }}
|
|
|
- </NPopconfirm>
|
|
|
- </NSpace>
|
|
|
- );
|
|
|
- }
|
|
|
- }
|
|
|
-]) as Ref<DataTableColumns<UserManagement.User>>;
|
|
|
-
|
|
|
-const modalType = ref<ModalType>('add');
|
|
|
-
|
|
|
-function setModalType(type: ModalType) {
|
|
|
- modalType.value = type;
|
|
|
-}
|
|
|
-
|
|
|
-const editData = ref<UserManagement.User | null>(null);
|
|
|
+import type { DataTableColumns, PaginationProps } from 'naive-ui';
|
|
|
|
|
|
-function setEditData(data: UserManagement.User | null) {
|
|
|
- editData.value = data;
|
|
|
-}
|
|
|
+import { query_1 } from '~/src/service/api/user';
|
|
|
+import type { Query_1Params } from '~/src/service/api/user';
|
|
|
|
|
|
-function handleAddTable() {
|
|
|
- openModal();
|
|
|
- setModalType('add');
|
|
|
-}
|
|
|
+const tableData = ref<Query_1Params[]>([]);
|
|
|
|
|
|
-function handleEditTable(rowId: string) {
|
|
|
- const findItem = tableData.value.find(item => item.id === rowId);
|
|
|
- if (findItem) {
|
|
|
- setEditData(findItem);
|
|
|
- }
|
|
|
- setModalType('edit');
|
|
|
- openModal();
|
|
|
-}
|
|
|
|
|
|
-function handleDeleteTable(rowId: string) {
|
|
|
- window.$message?.info(`点击了删除,rowId为${rowId}`);
|
|
|
+async function getTableData() {
|
|
|
+ const pageNum = pagination.page as number;
|
|
|
+ const pageSize = pagination.pageSize as number;
|
|
|
+
|
|
|
+ const params: Query_1Params = {
|
|
|
+ depname: '',
|
|
|
+ address: '',
|
|
|
+ phone: '',
|
|
|
+ email: '',
|
|
|
+ manager: '',
|
|
|
+ createTime: "",
|
|
|
+ modifyTime: "" ,
|
|
|
+ createUid: 0,
|
|
|
+ disabled: '',
|
|
|
+ };
|
|
|
+
|
|
|
+ query_1(pageNum, pageSize, params).then((res) => {
|
|
|
+ console.log(res);
|
|
|
+ tableData.value = res.data as[]
|
|
|
+ })
|
|
|
}
|
|
|
|
|
|
-const pagination: PaginationProps = reactive({
|
|
|
- page: 1,
|
|
|
- pageSize: 10,
|
|
|
- showSizePicker: true,
|
|
|
- pageSizes: [10, 15, 20, 25, 30],
|
|
|
- onChange: (page: number) => {
|
|
|
- pagination.page = page;
|
|
|
- },
|
|
|
- onUpdatePageSize: (pageSize: number) => {
|
|
|
- pagination.pageSize = pageSize;
|
|
|
- pagination.page = 1;
|
|
|
- }
|
|
|
-});
|
|
|
+const columns: Ref<DataTableColumns<Query_1Params>> = ref([
|
|
|
+ {
|
|
|
+ type: 'selection',
|
|
|
+ align: 'center'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ key: 'depname',
|
|
|
+ title: '部门名称',
|
|
|
+ align: 'center'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ key: 'address',
|
|
|
+ title: '部门地址',
|
|
|
+ align: 'center'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ key: 'phone',
|
|
|
+ title: '部门电话',
|
|
|
+ align: 'center'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ key: 'email',
|
|
|
+ title: '部门电子邮箱',
|
|
|
+ align: 'center',
|
|
|
+ },
|
|
|
+ {
|
|
|
+ key: 'manager',
|
|
|
+ title: '部门负责人',
|
|
|
+ align: 'center'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ key: 'createTime',
|
|
|
+ title: '创建时间',
|
|
|
+ align: 'center'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ key: 'modifyTime',
|
|
|
+ title: '修改时间',
|
|
|
+ align: 'center'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ key: 'createUid',
|
|
|
+ title: '创建用户ID',
|
|
|
+ align: 'center'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ key: 'disabled',
|
|
|
+ title: '状态',
|
|
|
+ align: 'center'
|
|
|
+ },
|
|
|
+
|
|
|
+]) as Ref<DataTableColumns<Query_1Params>>;
|
|
|
+
|
|
|
+const pagination: PaginationProps = ref({
|
|
|
+ page: 1,
|
|
|
+ pageSize: 10,
|
|
|
+ showSizePicker: true,
|
|
|
+ pageSizes: [10, 20, 50],
|
|
|
+ onChange: (page: number) => {
|
|
|
+ // 处理页码变化
|
|
|
+ },
|
|
|
+ onUpdatePageSize: (pageSize: number) => {
|
|
|
+ // 处理每页显示数量变化
|
|
|
+ }
|
|
|
+}).value;
|
|
|
|
|
|
function init() {
|
|
|
- getTableData();
|
|
|
+ getTableData();
|
|
|
}
|
|
|
|
|
|
// 初始化
|
|
|
init();
|
|
|
</script>
|
|
|
-
|
|
|
-<style scoped></style>
|