fix: 重构通知公告页面,修复点击查询重置分页的问题

This commit is contained in:
valarchie 2023-07-13 12:14:52 +08:00
parent 7ff4936570
commit 5d81009f48
3 changed files with 116 additions and 49 deletions

View File

@ -62,7 +62,7 @@ export const getDeptList = (data?: object) => {
export const getSystemNoticeListApi = (params?: SystemNoticeQuery) => { export const getSystemNoticeListApi = (params?: SystemNoticeQuery) => {
return http.request<ResponseData<PageDTO<SystemNoticeDTO>>>( return http.request<ResponseData<PageDTO<SystemNoticeDTO>>>(
"get", "get",
"/system/notice/list", "/system/notices",
{ {
params params
} }
@ -71,21 +71,63 @@ export const getSystemNoticeListApi = (params?: SystemNoticeQuery) => {
/** 添加系统通知 */ /** 添加系统通知 */
export const addSystemNoticeApi = (data: SystemNoticeRequest) => { export const addSystemNoticeApi = (data: SystemNoticeRequest) => {
return http.request<ResponseData<any>>("post", "/system/notice/", { return http.request<ResponseData<void>>("post", "/system/notices", {
data data
}); });
}; };
/** 修改系统通知 */ /** 修改系统通知 */
export const updateSystemNoticeApi = (data: SystemNoticeRequest) => { export const updateSystemNoticeApi = (data: SystemNoticeRequest) => {
return http.request<ResponseData<any>>("put", "/system/notice/", { return http.request<ResponseData<void>>(
data "put",
}); `/system/notices/${data.noticeId}`,
{
data
}
);
}; };
/** 删除系统通知 */ /** 删除系统通知 */
export const deleteSystemNoticeApi = (data: Array<number>) => { export const deleteSystemNoticeApi = (data: Array<number>) => {
return http.request<ResponseData<any>>("delete", `/system/notice/${data}`, { return http.request<ResponseData<void>>("delete", "/system/notices", {
data params: {
// 需要将数组转换为字符串 否则Axios会将参数变成 noticeIds[0]:1 noticeIds[1]:2 这种格式,后端接收参数不成功
noticeIds: data.toString()
}
}); });
}; };
type OperationLogDTO = {
operationId: number;
businessType: number;
businessTypeStr: string;
requestMethod: string;
requestModule: string;
requestUrl: string;
calledMethod: string;
operatorType: number;
operatorTypeStr: string;
userId: number;
username: string;
operatorIp: string;
operatorLocation: string;
deptId: number;
deptName: string;
operationParam: string;
operationResult: string;
status: number;
statusStr: string;
errorStack: string;
operationTime: Date;
};
/** 获取操作日志列表 */
export const getOperationLogListApi = (params?: SystemNoticeQuery) => {
return http.request<ResponseData<PageDTO<OperationLogDTO>>>(
"get",
"/operationLog/list",
{
params
}
);
};

View File

@ -29,6 +29,7 @@ const {
columns, columns,
dataList, dataList,
pagination, pagination,
defaultSort,
onSearch, onSearch,
resetForm, resetForm,
openDialog, openDialog,
@ -131,7 +132,7 @@ const {
adaptive adaptive
:data="dataList" :data="dataList"
:columns="dynamicColumns" :columns="dynamicColumns"
:default-sort="{ prop: 'createTime', order: 'descending' }" :default-sort="defaultSort"
:pagination="pagination" :pagination="pagination"
:paginationSmall="size === 'small' ? true : false" :paginationSmall="size === 'small' ? true : false"
:header-cell-style="{ :header-cell-style="{

View File

@ -12,13 +12,18 @@ import {
deleteSystemNoticeApi, deleteSystemNoticeApi,
SystemNoticeRequest SystemNoticeRequest
} from "@/api/system"; } from "@/api/system";
import { reactive, ref, onMounted, h, toRaw } from "vue"; import { reactive, ref, onMounted, h, toRaw, watchEffect } from "vue";
import { useUserStoreHook } from "@/store/modules/user"; import { useUserStoreHook } from "@/store/modules/user";
const noticeTypeMap = useUserStoreHook().dictionaryMap["sysNotice.noticeType"]; const noticeTypeMap = useUserStoreHook().dictionaryMap["sysNotice.noticeType"];
const noticeStatusMap = useUserStoreHook().dictionaryMap["sysNotice.status"]; const noticeStatusMap = useUserStoreHook().dictionaryMap["sysNotice.status"];
export function useNoticeHook() { export function useNoticeHook() {
const defaultSort = {
prop: "createTime",
order: "descending"
};
const pagination = reactive<PaginationProps>({ const pagination = reactive<PaginationProps>({
total: 0, total: 0,
pageSize: 10, pageSize: 10,
@ -32,9 +37,15 @@ export function useNoticeHook() {
creatorName: "", creatorName: "",
pageNum: pagination.currentPage, pageNum: pagination.currentPage,
pageSize: pagination.pageSize, pageSize: pagination.pageSize,
orderColumn: "createTime", orderColumn: defaultSort.prop,
orderDirection: "descending" orderDirection: defaultSort.order
}); });
watchEffect(() => {
searchFormParams.pageNum = pagination.currentPage;
searchFormParams.pageSize = pagination.pageSize;
});
const formRef = ref(); const formRef = ref();
const dataList = ref([]); const dataList = ref([]);
const pageLoading = ref(true); const pageLoading = ref(true);
@ -109,14 +120,48 @@ export function useNoticeHook() {
} }
]; ];
async function onSearch() {
// 点击搜索的时候 需要重置分页
pagination.currentPage = 1;
getNoticeList();
}
function resetForm(formEl, tableRef) {
if (!formEl) return;
// 清空查询参数
formEl.resetFields();
// 清空排序
searchFormParams.orderColumn = "";
searchFormParams.orderDirection = "";
tableRef.getTableRef().clearSort();
// 重置分页并查询
onSearch();
}
async function getNoticeList() {
pageLoading.value = true;
const { data } = await getSystemNoticeListApi(toRaw(searchFormParams));
dataList.value = data.rows;
pagination.total = data.total;
setTimeout(() => {
pageLoading.value = false;
}, 500);
}
async function handleDelete(row) { async function handleDelete(row) {
await deleteSystemNoticeApi([row.noticeId]).then(() => { await deleteSystemNoticeApi([row.noticeId]).then(() => {
message(`您删除了通知标题为${row.name}的这条数据`, { type: "success" }); message(`您删除了通知标题为${row.name}的这条数据`, { type: "success" });
// 刷新列表 // 刷新列表
onSearch(); getNoticeList();
}); });
} }
function handleSelectionChange(rows) {
multipleSelection.value = rows.map(item => item.noticeId);
}
async function handleBulkDelete(tableRef) { async function handleBulkDelete(tableRef) {
if (multipleSelection.value.length === 0) { if (multipleSelection.value.length === 0) {
message("请选择需要删除的数据", { type: "warning" }); message("请选择需要删除的数据", { type: "warning" });
@ -140,26 +185,29 @@ export function useNoticeHook() {
type: "success" type: "success"
}); });
// 刷新列表 // 刷新列表
onSearch(); getNoticeList();
}); });
}) })
.catch(() => { .catch(() => {
message("取消删除", { message("取消删除", {
type: "info" type: "info"
}); });
// 清空checkbox选择的数据
tableRef.getTableRef().clearSelection(); tableRef.getTableRef().clearSelection();
}); });
} }
/**
*
* @param sort
*/
function handleSortChange(sort) { function handleSortChange(sort) {
searchFormParams.pageNum = 1; // 排序参数改变建议把分页重置为第一页
pagination.currentPage = 1;
// 填充分页参数
searchFormParams.orderColumn = sort.prop; searchFormParams.orderColumn = sort.prop;
searchFormParams.orderDirection = sort.order; searchFormParams.orderDirection = sort.order;
onSearch(); getNoticeList();
}
function handleSelectionChange(rows) {
multipleSelection.value = rows.map(item => item.noticeId);
} }
async function handleAdd(row, done) { async function handleAdd(row, done) {
@ -170,7 +218,7 @@ export function useNoticeHook() {
// 关闭弹框 // 关闭弹框
done(); done();
// 刷新列表 // 刷新列表
onSearch(); getNoticeList();
}); });
} }
@ -182,46 +230,21 @@ export function useNoticeHook() {
// 关闭弹框 // 关闭弹框
done(); done();
// 刷新列表 // 刷新列表
onSearch(); getNoticeList();
}); });
} }
function handleSizeChange(val: number) { function handleSizeChange(val: number) {
pagination.currentPage = 1; pagination.currentPage = 1;
pagination.pageSize = val; pagination.pageSize = val;
searchFormParams.pageNum = pagination.currentPage; getNoticeList();
searchFormParams.pageSize = pagination.pageSize;
onSearch();
} }
function handleCurrentChange(val: number) { function handleCurrentChange(val: number) {
pagination.currentPage = val; pagination.currentPage = val;
searchFormParams.pageNum = pagination.currentPage; getNoticeList();
onSearch();
} }
async function onSearch() {
pageLoading.value = true;
const { data } = await getSystemNoticeListApi(toRaw(searchFormParams));
dataList.value = data.rows;
pagination.total = data.total;
setTimeout(() => {
pageLoading.value = false;
}, 500);
}
const resetForm = (formEl, tableRef) => {
if (!formEl) return;
formEl.resetFields();
searchFormParams.orderColumn = "";
searchFormParams.orderDirection = "";
tableRef.getTableRef().clearSort();
onSearch();
};
function openDialog(title = "新增", row?: AddNoticeRequest) { function openDialog(title = "新增", row?: AddNoticeRequest) {
addDialog({ addDialog({
title: `${title}公告`, title: `${title}公告`,
@ -260,7 +283,7 @@ export function useNoticeHook() {
} }
onMounted(() => { onMounted(() => {
onSearch(); getNoticeList();
}); });
return { return {
@ -269,6 +292,7 @@ export function useNoticeHook() {
columns, columns,
dataList, dataList,
pagination, pagination,
defaultSort,
onSearch, onSearch,
resetForm, resetForm,
openDialog, openDialog,