!62 style: 格式化系统配置与字典模块代码

Merge pull request !62 from Mickeywaugh/master
This commit is contained in:
Ray
2026-06-05 07:30:04 +00:00
committed by Gitee
13 changed files with 278 additions and 217 deletions

View File

@@ -8,7 +8,6 @@ import type {
DictItemForm,
DictItemOption,
} from "./types";
import type { OptionItem } from "@/api/common";
const DICT_BASE_URL = "/api/v1/dicts";

View File

@@ -61,6 +61,8 @@ export interface DictItem {
status: number;
/** 排序 */
sort?: number;
/** 标签类型(后端返回的原始码) */
tagType?: unknown;
}
/** 字典项表单对象 */

41
src/types/api/index.ts Normal file
View File

@@ -0,0 +1,41 @@
export interface PageQueryParams {
pageNum: number;
pageSize: number;
[key: string]: any;
}
export interface OptionItem {
label: string;
value: string | number;
meta?: any;
children?: OptionItem[];
}
export interface ExcelResult {
/** 状态码 */
code: number;
/** 无效数据条数 */
invalidCount: number;
/** 有效数据条数 */
validCount: number;
/** 错误信息 */
messageList: Array<string>;
}
export interface PageResult<T> {
total: number;
list: T[];
params: PageQueryParams;
}
export interface ApiResponse<T = any> {
code: number | string;
msg: string;
data: T;
}
export interface BaseEntity {
id: number;
createTime: string;
updateTime: string;
}

View File

@@ -34,7 +34,7 @@ http.interceptors.request.use(
// 响应拦截器
http.interceptors.response.use(
(response: AxiosResponse<ApiResponse>) => {
(response: AxiosResponse<ApiResponse>): any => {
const { responseType } = response.config;
// 二进制数据直接返回
@@ -64,8 +64,8 @@ http.interceptors.response.use(
// Token 过期:尝试刷新 token 后自动重试一次
if (code === ApiCodeEnum.ACCESS_TOKEN_INVALID) {
// 重试,直接跳登录
if (retriedConfigs.has(config)) {
// config 不存在时无法重试,直接跳登录
if (!config || retriedConfigs.has(config)) {
await redirectToLogin("登录已过期,请重新登录");
return Promise.reject(new Error("Token Invalid"));
}

View File

@@ -1,10 +1,10 @@
<template>
<div class="page-container">
<el-card class="page-search" shadow="never">
<el-form ref="queryFormRef" :model="queryParams" :inline="true">
<el-form ref="queryFormRef" :model="tableData.params" :inline="true">
<el-form-item label="关键字" prop="keywords">
<el-input
v-model="queryParams.keywords"
v-model="tableData.params.keywords"
placeholder="请输入配置键\配置名称"
clearable
@keyup.enter="handleQuery"
@@ -43,7 +43,7 @@
<el-table
ref="dataTableRef"
v-loading="loading"
:data="pageData"
:data="tableData.list"
highlight-current-row
border
@selection-change="handleSelectionChange"
@@ -80,10 +80,10 @@
</el-table>
<pagination
v-if="total > 0"
v-model:total="total"
v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize"
v-if="tableData.total > 0"
v-model:total="tableData.total"
v-model:page="tableData.params.pageNum"
v-model:limit="tableData.params.pageSize"
@pagination="fetchData"
/>
</el-card>
@@ -138,7 +138,7 @@ defineOptions({
});
import ConfigAPI from "@/api/system/config";
import type { ConfigItem, ConfigForm, ConfigQueryParams } from "@/api/system/config";
import type { ConfigItem, ConfigForm } from "@/api/system/config";
import { ElMessage, ElMessageBox, type FormInstance, type FormRules } from "element-plus";
import { useDebounceFn } from "@vueuse/core";
@@ -146,19 +146,21 @@ import { useDebounceFn } from "@vueuse/core";
const queryFormRef = ref<FormInstance>();
const dataFormRef = ref<FormInstance>();
// 查询参数
const queryParams = reactive<ConfigQueryParams>({
pageNum: 1,
pageSize: 10,
keywords: "",
});
// 列表数据
const pageData = ref<ConfigItem[]>([]);
const total = ref(0);
const loading = ref(false);
const selectIds = ref<string[]>([]);
const tableData = reactive<PageResult<ConfigItem>>({
list: [],
total: 0,
params: {
//查询参数
pageNum: 1,
pageSize: 10,
keywords: "",
},
});
// 弹窗状态
const dialogState = reactive({
title: "",
@@ -186,10 +188,10 @@ const rules: FormRules = {
*/
function fetchData(): void {
loading.value = true;
ConfigAPI.getPage(queryParams)
ConfigAPI.getPage(tableData.params)
.then((data) => {
pageData.value = data.list;
total.value = data.total ?? 0;
tableData.list = data.list ?? [];
tableData.total = data.total ?? 0;
})
.finally(() => {
loading.value = false;
@@ -200,7 +202,7 @@ function fetchData(): void {
* 查询按钮点击事件
*/
function handleQuery(): void {
queryParams.pageNum = 1;
tableData.params.pageNum = 1;
fetchData();
}
@@ -209,7 +211,7 @@ function handleQuery(): void {
*/
function handleResetQuery(): void {
queryFormRef.value?.resetFields();
queryParams.pageNum = 1;
tableData.params.pageNum = 1;
fetchData();
}

View File

@@ -1,10 +1,10 @@
<template>
<div class="page-container">
<el-card class="page-search" shadow="never">
<el-form ref="queryFormRef" :model="queryParams" :inline="true">
<el-form ref="queryFormRef" :model="tableData.params" :inline="true">
<el-form-item label="关键字" prop="keywords">
<el-input
v-model="queryParams.keywords"
v-model="tableData.params.keywords"
placeholder="字典标签/字典值"
clearable
@keyup.enter="handleQuery"
@@ -36,7 +36,7 @@
<el-table
v-loading="loading"
highlight-current-row
:data="tableData"
:data="tableData.list"
border
@selection-change="handleSelectionChange"
>
@@ -77,10 +77,10 @@
</el-table>
<pagination
v-if="total > 0"
v-model:total="total"
v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize"
v-if="tableData.total > 0"
v-model:total="tableData.total"
v-model:page="tableData.params.pageNum"
v-model:limit="tableData.params.pageSize"
@pagination="fetchData"
/>
</el-card>
@@ -153,7 +153,7 @@
<script setup lang="ts">
import DictAPI from "@/api/system/dict";
import type { DictItemQueryParams, DictItem, DictItemForm } from "@/api/system/dict";
import type { DictItem, DictItemForm } from "@/api/system/dict";
import type { FormInstance, FormRules } from "element-plus";
const route = useRoute();
@@ -165,18 +165,22 @@ const dictCode = ref(route.query.dictCode as string);
const queryFormRef = ref<FormInstance>();
const dataFormRef = ref<FormInstance>();
// 查询参数
const queryParams = reactive<DictItemQueryParams>({
pageNum: 1,
pageSize: 10,
});
// 列表数据
const tableData = ref<DictItem[]>();
const total = ref(0);
const loading = ref(false);
const ids = ref<string[]>([]);
const tableData = reactive<PageResult<DictItem>>({
list: [],
total: 0,
params: {
//查询参数
pageNum: 1,
pageSize: 10,
dictCode: undefined,
keywords: undefined,
},
});
// 弹窗状态
const dialogState = reactive({
title: "",
@@ -204,10 +208,10 @@ const rules: FormRules = {
*/
function fetchData(): void {
loading.value = true;
DictAPI.getDictItemPage(dictCode.value, queryParams)
.then((data) => {
tableData.value = data.list;
total.value = data.total ?? 0;
DictAPI.getDictItemPage(dictCode.value, tableData.params)
.then((data: any) => {
tableData.list = data.list;
tableData.total = data.total ?? 0;
})
.finally(() => {
loading.value = false;
@@ -218,7 +222,7 @@ function fetchData(): void {
* 查询按钮点击事件
*/
function handleQuery(): void {
queryParams.pageNum = 1;
tableData.params.pageNum = 1;
fetchData();
}
@@ -227,7 +231,7 @@ function handleQuery(): void {
*/
function handleResetQuery(): void {
queryFormRef.value?.resetFields();
queryParams.pageNum = 1;
tableData.params.pageNum = 1;
fetchData();
}

View File

@@ -1,10 +1,10 @@
<template>
<div class="page-container">
<el-card class="page-search" shadow="never">
<el-form ref="queryFormRef" :model="queryParams" :inline="true">
<el-form ref="queryFormRef" :model="tableData.params" :inline="true">
<el-form-item label="关键字" prop="keywords">
<el-input
v-model="queryParams.keywords"
v-model="tableData.params.keywords"
placeholder="字典名称/编码"
clearable
@keyup.enter="handleQuery"
@@ -36,7 +36,7 @@
<el-table
v-loading="loading"
highlight-current-row
:data="tableData"
:data="tableData.list"
border
@selection-change="handleSelectionChange"
>
@@ -82,10 +82,10 @@
</el-table>
<pagination
v-if="total > 0"
v-model:total="total"
v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize"
v-if="tableData.total > 0"
v-model:total="tableData.total"
v-model:page="tableData.params.pageNum"
v-model:limit="tableData.params.pageSize"
@pagination="fetchData"
/>
</el-card>
@@ -134,7 +134,7 @@ defineOptions({
});
import DictAPI from "@/api/system/dict";
import type { DictTypeQueryParams, DictTypeItem, DictTypeForm } from "@/api/system/dict";
import type { DictTypeItem, DictTypeForm } from "@/api/system/dict";
import type { FormInstance, FormRules } from "element-plus";
import router from "@/router";
@@ -142,17 +142,18 @@ import router from "@/router";
const queryFormRef = ref<FormInstance>();
const dataFormRef = ref<FormInstance>();
// 查询参数
const queryParams = reactive<DictTypeQueryParams>({
pageNum: 1,
pageSize: 10,
});
// 列表数据
const tableData = ref<DictTypeItem[]>();
const total = ref(0);
const loading = ref(false);
const ids = ref<string[]>([]);
const tableData = reactive<PageResult<DictTypeItem>>({
list: [],
total: 0,
params: {
//查询参数
pageNum: 1,
pageSize: 10,
},
});
// 弹窗状态
const dialogState = reactive({
@@ -176,10 +177,10 @@ const rules: FormRules = {
*/
function fetchData(): void {
loading.value = true;
DictAPI.getPage(queryParams)
DictAPI.getPage(tableData.params)
.then((data) => {
tableData.value = data.list;
total.value = data.total ?? 0;
tableData.list = data.list ?? [];
tableData.total = data.total ?? 0;
})
.finally(() => {
loading.value = false;
@@ -190,7 +191,7 @@ function fetchData(): void {
* 查询按钮点击事件
*/
function handleQuery(): void {
queryParams.pageNum = 1;
tableData.params.pageNum = 1;
fetchData();
}
@@ -199,7 +200,7 @@ function handleQuery(): void {
*/
function handleResetQuery(): void {
queryFormRef.value?.resetFields();
queryParams.pageNum = 1;
tableData.params.pageNum = 1;
fetchData();
}

View File

@@ -1,10 +1,10 @@
<template>
<div class="page-container">
<el-card class="page-search" shadow="never">
<el-form ref="queryFormRef" :model="queryParams" :inline="true" label-width="auto">
<el-form ref="queryFormRef" :model="tableData.params" :inline="true" label-width="auto">
<el-form-item prop="keywords" label="关键字">
<el-input
v-model="queryParams.keywords"
v-model="tableData.params.keywords"
placeholder="IP/操作人"
clearable
@keyup.enter="handleQuery"
@@ -13,7 +13,7 @@
<el-form-item prop="createTime" label="操作时间">
<el-date-picker
v-model="queryParams.createTime"
v-model="tableData.params.createTime"
:editable="false"
type="daterange"
range-separator="~"
@@ -32,7 +32,7 @@
</el-card>
<el-card class="page-content" shadow="never">
<el-table v-loading="loading" :data="pageData" highlight-current-row border>
<el-table v-loading="loading" :data="tableData.list" highlight-current-row border>
<el-table-column label="操作标题" prop="title" min-width="180" show-overflow-tooltip />
<el-table-column label="状态" prop="status" width="80" align="center">
<template #default="{ row }">
@@ -61,10 +61,10 @@
</el-table>
<pagination
v-if="total > 0"
v-model:total="total"
v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize"
v-if="tableData.total > 0"
v-model:total="tableData.total"
v-model:page="tableData.params.pageNum"
v-model:limit="tableData.params.pageSize"
@pagination="fetchData"
/>
</el-card>
@@ -111,7 +111,7 @@ defineOptions({
});
import LogAPI from "@/api/system/log";
import type { LogItem, LogQueryParams } from "@/api/system/log";
import type { LogItem } from "@/api/system/log";
import type { FormInstance, TagProps } from "element-plus";
function getMethodTagType(method: string): TagProps["type"] {
@@ -128,29 +128,29 @@ function getMethodTagType(method: string): TagProps["type"] {
// 表单引用
const queryFormRef = ref<FormInstance>();
// 查询参数
const queryParams = reactive<LogQueryParams>({
pageNum: 1,
pageSize: 10,
keywords: "",
createTime: undefined as [string, string] | undefined,
});
// 列表数据
const pageData = ref<LogItem[]>();
const total = ref(0);
const loading = ref(false);
const tableData = reactive<PageResult<LogItem>>({
list: [],
total: 0,
params: {
//查询参数
pageNum: 1,
pageSize: 10,
keywords: "",
createTime: undefined as [string, string] | undefined,
},
});
// 详情弹窗
const detailVisible = ref(false);
const detailData = ref<Partial<LogItem>>({});
function fetchData(): void {
loading.value = true;
LogAPI.getPage(queryParams)
LogAPI.getPage(tableData.params)
.then((data) => {
pageData.value = data.list;
total.value = data.total ?? 0;
tableData.list = data.list ?? [];
tableData.total = data.total ?? 0;
})
.finally(() => {
loading.value = false;
@@ -158,14 +158,14 @@ function fetchData(): void {
}
function handleQuery(): void {
queryParams.pageNum = 1;
tableData.params.pageNum = 1;
fetchData();
}
function handleResetQuery(): void {
queryFormRef.value?.resetFields();
queryParams.pageNum = 1;
queryParams.createTime = undefined;
tableData.params.pageNum = 1;
tableData.params.createTime = undefined;
fetchData();
}

View File

@@ -1,10 +1,10 @@
<template>
<div class="page-container">
<el-card class="page-search" shadow="never">
<el-form ref="queryFormRef" :model="queryParams" :inline="true" label-suffix=":">
<el-form ref="queryFormRef" :model="tableData.params" :inline="true" label-suffix=":">
<el-form-item label="标题" prop="title">
<el-input
v-model="queryParams.title"
v-model="tableData.params.title"
placeholder="标题"
clearable
@keyup.enter="handleQuery()"
@@ -13,7 +13,7 @@
<el-form-item label="发布状态" prop="publishStatus">
<el-select
v-model="queryParams.publishStatus"
v-model="tableData.params.publishStatus"
clearable
placeholder="全部"
style="width: 100px"
@@ -57,7 +57,7 @@
<el-table
ref="dataTableRef"
v-loading="loading"
:data="pageData"
:data="tableData.list"
highlight-current-row
@selection-change="handleSelectionChange"
>
@@ -155,10 +155,10 @@
</el-table>
<pagination
v-if="total > 0"
v-model:total="total"
v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize"
v-if="tableData.total > 0"
v-model:total="tableData.total"
v-model:page="tableData.params.pageNum"
v-model:limit="tableData.params.pageSize"
@pagination="fetchData()"
/>
</el-card>
@@ -277,7 +277,7 @@ defineOptions({
});
import NoticeAPI from "@/api/system/notice";
import type { NoticeItem, NoticeForm, NoticeQueryParams, NoticeDetail } from "@/api/system/notice";
import type { NoticeItem, NoticeForm, NoticeDetail } from "@/api/system/notice";
import UserAPI from "@/api/system/user";
import type { FormInstance, FormRules } from "element-plus";
@@ -285,19 +285,23 @@ import type { FormInstance, FormRules } from "element-plus";
const queryFormRef = ref<FormInstance>();
const dataFormRef = ref<FormInstance>();
// 查询参数
const queryParams = reactive<NoticeQueryParams>({
pageNum: 1,
pageSize: 10,
});
// 列表数据
const pageData = ref<NoticeItem[]>([]);
const userOptions = ref<OptionItem[]>([]);
const total = ref(0);
const loading = ref(false);
const selectIds = ref<number[]>([]);
const tableData = reactive<PageResult<NoticeItem>>({
list: [],
total: 0,
params: {
//查询参数
pageNum: 1,
pageSize: 10,
title: "",
publishStatus: undefined,
},
});
// 弹窗状态
const dialogState = reactive({
title: "",
@@ -341,7 +345,7 @@ const currentNotice = ref<NoticeDetail>({});
* 查询按钮点击事件
*/
function handleQuery(): void {
queryParams.pageNum = 1;
tableData.params.pageNum = 1;
fetchData();
}
@@ -350,10 +354,10 @@ function handleQuery(): void {
*/
function fetchData(): void {
loading.value = true;
NoticeAPI.getPage(queryParams)
NoticeAPI.getPage(tableData.params)
.then((data) => {
pageData.value = data.list;
total.value = data.total ?? 0;
tableData.list = data.list ?? [];
tableData.total = data.total ?? 0;
})
.finally(() => {
loading.value = false;
@@ -365,7 +369,7 @@ function fetchData(): void {
*/
function handleResetQuery(): void {
queryFormRef.value?.resetFields();
queryParams.pageNum = 1;
tableData.params.pageNum = 1;
fetchData();
}

View File

@@ -2,10 +2,10 @@
<div class="page-container">
<!-- 搜索区域 -->
<el-card class="page-search" shadow="never">
<el-form ref="queryFormRef" :model="queryParams" :inline="true">
<el-form ref="queryFormRef" :model="tableData.params" :inline="true">
<el-form-item prop="keywords" label="关键字">
<el-input
v-model="queryParams.keywords"
v-model="tableData.params.keywords"
placeholder="角色名称"
clearable
@keyup.enter="handleQuery"
@@ -37,7 +37,7 @@
<el-table
ref="dataTableRef"
v-loading="loading"
:data="roleList"
:data="tableData.list"
highlight-current-row
border
@selection-change="handleSelectionChange"
@@ -92,10 +92,10 @@
</el-table>
<pagination
v-if="total > 0"
v-model:total="total"
v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize"
v-if="tableData.total > 0"
v-model:total="tableData.total"
v-model:page="tableData.params.pageNum"
v-model:limit="tableData.params.pageSize"
@pagination="fetchList"
/>
</el-card>
@@ -233,7 +233,7 @@ import { useAppStore } from "@/stores/app";
import { DeviceEnum } from "@/enums/settings";
import RoleAPI from "@/api/system/role";
import type { RoleItem, RoleForm, RoleQueryParams } from "@/api/system/role";
import type { RoleItem, RoleForm } from "@/api/system/role";
import MenuAPI from "@/api/system/menu";
import DeptAPI from "@/api/system/dept";
@@ -250,15 +250,17 @@ const permTreeRef = ref();
const loading = ref(false);
const ids = ref<number[]>([]);
const total = ref(0);
const queryParams = reactive<RoleQueryParams>({
pageNum: 1,
pageSize: 10,
const tableData = reactive<PageResult<RoleItem>>({
list: [],
total: 0,
params: {
pageNum: 1,
pageSize: 10,
keywords: "",
},
});
// 角色表格数据
const roleList = ref<RoleItem[]>();
// 菜单权限下拉
const menuPermOptions = ref<OptionItem[]>([]);
// 部门下拉选项
@@ -305,9 +307,9 @@ const parentChildLinked = ref(true);
async function fetchList(): Promise<void> {
loading.value = true;
try {
const data = await RoleAPI.getPage(queryParams);
roleList.value = data.list;
total.value = data.total ?? 0;
const data = await RoleAPI.getPage(tableData.params);
tableData.list = data.list ?? [];
tableData.total = data.total ?? 0;
} finally {
loading.value = false;
}
@@ -315,7 +317,7 @@ async function fetchList(): Promise<void> {
// 查询(重置页码后获取数据)
function handleQuery(): void {
queryParams.pageNum = 1;
tableData.params.pageNum = 1;
fetchList();
}

View File

@@ -1,10 +1,10 @@
<template>
<div class="page-container">
<el-card class="page-search" shadow="never">
<el-form ref="queryFormRef" :model="queryParams" :inline="true">
<el-form ref="queryFormRef" :model="tableData.params" :inline="true">
<el-form-item prop="keywords" label="关键字">
<el-input
v-model="queryParams.keywords"
v-model="tableData.params.keywords"
placeholder="租户名称/租户编码/域名"
clearable
@keyup.enter="handleQuery"
@@ -12,7 +12,12 @@
</el-form-item>
<el-form-item prop="status" label="状态">
<el-select v-model="queryParams.status" placeholder="全部" clearable style="width: 120px">
<el-select
v-model="tableData.params.status"
placeholder="全部"
clearable
style="width: 120px"
>
<el-option label="正常" :value="1" />
<el-option label="禁用" :value="0" />
</el-select>
@@ -50,7 +55,7 @@
<el-table
v-loading="loading"
:data="pageData"
:data="tableData.list"
highlight-current-row
border
@selection-change="handleSelectionChange"
@@ -143,10 +148,10 @@
</el-table>
<pagination
v-if="total > 0"
v-model:total="total"
v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize"
v-if="tableData.total > 0"
v-model:total="tableData.total"
v-model:page="tableData.params.pageNum"
v-model:limit="tableData.params.pageSize"
@pagination="fetchData"
/>
</el-card>
@@ -360,12 +365,7 @@ import { hasPerm } from "@/utils/auth";
import TenantAPI from "@/api/system/tenant";
import TenantPlanAPI from "@/api/system/tenant-plan";
import MenuAPI from "@/api/system/menu";
import type {
TenantCreateForm,
TenantForm,
TenantQueryParams,
TenantItem,
} from "@/api/system/tenant";
import type { TenantCreateForm, TenantForm, TenantItem } from "@/api/system/tenant";
import type { OptionItem } from "@/api/common";
import { MenuScopeEnum } from "@/enums/business";
import { isPlatformTenantId } from "@/utils/tenant";
@@ -376,21 +376,23 @@ const dataFormRef = ref<FormInstance>();
const menuTreeRef = ref();
const planPreviewTreeRef = ref();
// 查询参数
const queryParams = reactive<TenantQueryParams>({
pageNum: 1,
pageSize: 10,
keywords: "",
});
// 列表数据
const pageData = ref<TenantItem[]>([]);
const menuPermOptions = ref<OptionItem[]>([]);
const planOptions = ref<OptionItem[]>([]);
const total = ref(0);
const loading = ref(false);
const ids = ref<number[]>([]);
const tableData = reactive<PageResult<TenantItem>>({
list: [],
total: 0,
params: {
//查询参数
pageNum: 1,
pageSize: 10,
keywords: "",
},
});
// 弹窗状态
const dialogState = reactive({
title: "",
@@ -484,13 +486,13 @@ function resolvePlanLabel(planId?: number): string {
*/
function fetchData(): void {
loading.value = true;
TenantAPI.getPage(queryParams)
TenantAPI.getPage(tableData.params)
.then((data) => {
pageData.value = data.list.map((item: TenantItem) => ({
tableData.list = data.list.map((item: TenantItem) => ({
...item,
planId: item.planId != null ? Number(item.planId) : undefined,
}));
total.value = data.total ?? 0;
tableData.total = data.total ?? 0;
})
.finally(() => {
loading.value = false;
@@ -822,7 +824,7 @@ function applyMenuOptionsDisabled(options: OptionItem[], disabled: boolean): Opt
* 查询按钮点击事件
*/
function handleQuery(): void {
queryParams.pageNum = 1;
tableData.params.pageNum = 1;
fetchData();
}
@@ -831,7 +833,7 @@ function handleQuery(): void {
*/
function handleResetQuery(): void {
queryFormRef.value?.resetFields();
queryParams.pageNum = 1;
tableData.params.pageNum = 1;
fetchData();
}

View File

@@ -1,10 +1,10 @@
<template>
<div class="page-container">
<el-card class="page-search" shadow="never">
<el-form ref="queryFormRef" :model="queryParams" :inline="true">
<el-form ref="queryFormRef" :model="tableData.params" :inline="true">
<el-form-item label="关键字" prop="keywords">
<el-input
v-model="queryParams.keywords"
v-model="tableData.params.keywords"
placeholder="套餐名称/套餐编码"
clearable
@keyup.enter="handleQuery"
@@ -12,7 +12,12 @@
</el-form-item>
<el-form-item label="状态" prop="status">
<el-select v-model="queryParams.status" placeholder="全部" clearable style="width: 120px">
<el-select
v-model="tableData.params.status"
placeholder="全部"
clearable
style="width: 120px"
>
<el-option label="启用" :value="1" />
<el-option label="停用" :value="0" />
</el-select>
@@ -42,7 +47,7 @@
<el-table
ref="dataTableRef"
v-loading="loading"
:data="pageData"
:data="tableData.list"
highlight-current-row
border
>
@@ -95,10 +100,10 @@
</el-table>
<pagination
v-if="total > 0"
v-model:total="total"
v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize"
v-if="tableData.total > 0"
v-model:total="tableData.total"
v-model:page="tableData.params.pageNum"
v-model:limit="tableData.params.pageSize"
@pagination="fetchData"
/>
</el-card>
@@ -218,11 +223,7 @@ import { ElMessage, ElMessageBox, type FormInstance, type FormRules } from "elem
import { useDebounceFn } from "@vueuse/core";
import MenuAPI from "@/api/system/menu";
import TenantPlanAPI from "@/api/system/tenant-plan";
import type {
TenantPlanForm,
TenantPlanItem,
TenantPlanQueryParams,
} from "@/api/system/tenant-plan";
import type { TenantPlanForm, TenantPlanItem } from "@/api/system/tenant-plan";
import type { OptionItem } from "@/api/common";
import { MenuScopeEnum } from "@/enums/business";
@@ -232,19 +233,21 @@ const dataFormRef = ref<FormInstance>();
const dataTableRef = ref();
const menuTreeRef = ref();
// 查询参数
const queryParams = reactive<TenantPlanQueryParams>({
pageNum: 1,
pageSize: 10,
keywords: "",
});
// 列表数据
const pageData = ref<TenantPlanItem[]>([]);
const menuPermOptions = ref<OptionItem[]>([]);
const total = ref(0);
const loading = ref(false);
const tableData = reactive<PageResult<TenantPlanItem>>({
list: [],
total: 0,
params: {
//查询参数
pageNum: 1,
pageSize: 10,
keywords: "",
},
});
// 弹窗状态
const dialogState = reactive({
title: "",
@@ -280,10 +283,10 @@ const menuParentChildLinked = ref(true);
*/
function fetchData(): void {
loading.value = true;
TenantPlanAPI.getPage(queryParams)
TenantPlanAPI.getPage(tableData.params)
.then((data) => {
pageData.value = data.list;
total.value = data.total ?? 0;
tableData.list = data.list ?? [];
tableData.total = data.total ?? 0;
})
.finally(() => {
loading.value = false;
@@ -294,7 +297,7 @@ function fetchData(): void {
* 查询按钮点击事件
*/
function handleQuery(): void {
queryParams.pageNum = 1;
tableData.params.pageNum = 1;
fetchData();
}
@@ -303,7 +306,7 @@ function handleQuery(): void {
*/
function handleResetQuery(): void {
queryFormRef.value?.resetFields();
queryParams.pageNum = 1;
tableData.params.pageNum = 1;
fetchData();
}

View File

@@ -4,17 +4,17 @@
<el-row :gutter="20">
<!-- 部门树 -->
<el-col :lg="4" :xs="24" class="page-aside">
<UserDeptTree v-model="queryParams.deptId" @node-click="handleQuery" />
<UserDeptTree v-model="tableData.params.deptId" @node-click="handleQuery" />
</el-col>
<!-- 用户列表 -->
<el-col :lg="20" :xs="24" class="page-main">
<!-- 搜索区域 -->
<el-card shadow="never" class="page-search">
<el-form ref="queryFormRef" :model="queryParams" :inline="true" label-width="auto">
<el-form ref="queryFormRef" :model="tableData.params" :inline="true" label-width="auto">
<el-form-item label="关键字" prop="keywords">
<el-input
v-model="queryParams.keywords"
v-model="tableData.params.keywords"
placeholder="用户名/昵称/手机号"
clearable
@keyup.enter="handleQuery"
@@ -23,7 +23,7 @@
<el-form-item label="状态" prop="status">
<el-select
v-model="queryParams.status"
v-model="tableData.params.status"
placeholder="全部"
clearable
style="width: 100px"
@@ -35,7 +35,7 @@
<el-form-item label="创建时间">
<el-date-picker
v-model="queryParams.createTime"
v-model="tableData.params.createTime"
:editable="false"
type="daterange"
range-separator="~"
@@ -86,7 +86,7 @@
<el-table
v-loading="loading"
:data="userList"
:data="tableData.list"
border
stripe
highlight-current-row
@@ -150,10 +150,10 @@
</el-table>
<pagination
v-if="total > 0"
v-model:total="total"
v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize"
v-if="tableData.total > 0"
v-model:total="tableData.total"
v-model:page="tableData.params.pageNum"
v-model:limit="tableData.params.pageSize"
@pagination="fetchList"
/>
</el-card>
@@ -244,7 +244,7 @@
import { computed, onMounted, reactive, ref } from "vue";
import { useDebounceFn } from "@vueuse/core";
import { ElMessage, ElMessageBox, type FormInstance, type FormRules } from "element-plus";
import type { UserForm, UserQueryParams, UserItem } from "@/api/system/user";
import type { UserForm, UserItem } from "@/api/system/user";
import { downloadFile } from "@/utils";
import UserAPI from "@/api/system/user";
import DeptAPI from "@/api/system/dept";
@@ -267,17 +267,18 @@ const userStore = useUserStore();
const queryFormRef = ref<FormInstance>();
const userFormRef = ref<FormInstance>();
// 查询参数
const queryParams = reactive<UserQueryParams>({
pageNum: 1,
pageSize: 10,
});
// 列表数据
const userList = ref<UserItem[]>([]);
const total = ref(0);
const loading = ref(false);
const tableData = reactive<PageResult<UserItem>>({
list: [],
total: 0,
params: {
//查询参数
pageNum: 1,
pageSize: 10,
},
});
// 弹窗状态
const dialogState = reactive({
visible: false,
@@ -317,9 +318,9 @@ const rules: FormRules = {
async function fetchList(): Promise<void> {
loading.value = true;
try {
const data = await UserAPI.getPage(queryParams);
userList.value = data.list;
total.value = data.total ?? 0;
const data = await UserAPI.getPage(tableData.params);
tableData.list = data.list ?? [];
tableData.total = data.total ?? 0;
} finally {
loading.value = false;
}
@@ -341,7 +342,7 @@ const { selectedIds, hasSelection, handleSelectionChange } = useTableSelection<U
* 执行查询(重置页码)
*/
function handleQuery(): void {
queryParams.pageNum = 1;
tableData.params.pageNum = 1;
fetchList();
}
@@ -350,8 +351,8 @@ function handleQuery(): void {
*/
function resetQuery(): void {
queryFormRef.value?.resetFields();
queryParams.deptId = undefined;
queryParams.createTime = undefined;
tableData.params.deptId = undefined;
tableData.params.createTime = undefined;
}
/**
@@ -512,7 +513,7 @@ function handleDelete(id?: string): void {
* 导出用户列表
*/
async function exportUsers(): Promise<void> {
const response = await UserAPI.export(queryParams);
const response = await UserAPI.export(tableData.params);
downloadFile(response);
ElMessage.success("导出成功");
}