From 727778e675f5e6151d2ceb3f117ebec2d2f3ac33 Mon Sep 17 00:00:00 2001 From: cst Date: Fri, 6 Nov 2026 08:59:31 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E8=B5=9B=E4=BA=8B1.09?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- permission_list.txt | 5 + src/api/notices/index.ts | 54 +++++ src/api/notices/types.ts | 60 +++++ src/config/fallbackRoutes.ts | 11 + src/pages/events/list/index.tsx | 7 +- src/pages/events/list/model/config.ts | 9 +- .../events/list/model/useEventListModel.ts | 2 +- .../components/NoticeFormModal.module.less | 18 ++ .../notices/components/NoticeFormModal.tsx | 216 ++++++++++++++++++ src/pages/system/notices/index.tsx | 208 +++++++++++++++++ src/pages/system/notices/model/form.ts | 68 ++++++ src/pages/system/notices/model/services.ts | 13 ++ .../system/notices/model/useNoticeModel.ts | 196 ++++++++++++++++ src/utils/routeIcon.tsx | 2 + 14 files changed, 862 insertions(+), 7 deletions(-) create mode 100644 src/api/notices/index.ts create mode 100644 src/api/notices/types.ts create mode 100644 src/pages/system/notices/components/NoticeFormModal.module.less create mode 100644 src/pages/system/notices/components/NoticeFormModal.tsx create mode 100644 src/pages/system/notices/index.tsx create mode 100644 src/pages/system/notices/model/form.ts create mode 100644 src/pages/system/notices/model/services.ts create mode 100644 src/pages/system/notices/model/useNoticeModel.ts diff --git a/permission_list.txt b/permission_list.txt index 2596644..f298ebf 100644 --- a/permission_list.txt +++ b/permission_list.txt @@ -52,6 +52,11 @@ system.roles.add # 角色权限-新增(筛选栏中的"新增 system.roles.edit # 角色权限-编辑(表格操作列中的"编辑"按钮) system.roles.delete # 角色权限-删除(表格操作列中的"删除"按钮,红色危险样式) +system.notices.view # 公告管理-查看(页面默认查看权限) +system.notices.add # 公告管理-新增(筛选栏中的"新增"按钮) +system.notices.edit # 公告管理-编辑(表格操作列中的"修改"按钮) +system.notices.delete # 公告管理-删除(表格操作列中的"删除"按钮,红色危险样式) + system.logs.view # 操作日志-查看(页面默认查看权限,无操作列按钮) system.params.view # 参数配置-查看 diff --git a/src/api/notices/index.ts b/src/api/notices/index.ts new file mode 100644 index 0000000..3e2e884 --- /dev/null +++ b/src/api/notices/index.ts @@ -0,0 +1,54 @@ +/** + * 公告管理 API + */ +import { get, post } from '@/utils/request'; +import type { + NoticeListQueryParams, + NoticeSaveParams, + NoticeVO, + PageData, + ApiResult, +} from './types'; + +export type { + NoticeType, + NoticeVO, + NoticeListQueryParams, + NoticeSaveParams, + PageData, + ApiResult, +} from './types'; + +// ============================================================ +// URL 常量 +// ============================================================ +const ANNOUNCEMENT_PAGE = '/admin/sys/announcement/page'; +const ANNOUNCEMENT_SAVE = '/admin/sys/announcement/save'; +const ANNOUNCEMENT_UPDATE = '/admin/sys/announcement/update'; +const ANNOUNCEMENT_DELETE = '/admin/sys/announcement/delete'; + +// ============================================================ +// API 函数 +// ============================================================ + +/** 公告列表分页 — GET /admin/sys/announcement/page */ +export function getNoticeList( + params: NoticeListQueryParams, +): Promise>> { + return get(ANNOUNCEMENT_PAGE, params as Record); +} + +/** 新增公告 — POST /admin/sys/announcement/save */ +export function saveNotice(params: NoticeSaveParams): Promise> { + return post(ANNOUNCEMENT_SAVE, params); +} + +/** 修改公告 — POST /admin/sys/announcement/update */ +export function updateNotice(params: NoticeSaveParams): Promise> { + return post(ANNOUNCEMENT_UPDATE, params); +} + +/** 删除公告(物理删除,单个)— POST /admin/sys/announcement/delete?id=xxx */ +export function deleteNotice(id: number): Promise> { + return post(ANNOUNCEMENT_DELETE, undefined, { id: String(id) }); +} diff --git a/src/api/notices/types.ts b/src/api/notices/types.ts new file mode 100644 index 0000000..1cc43a7 --- /dev/null +++ b/src/api/notices/types.ts @@ -0,0 +1,60 @@ +/** + * 公告管理 - 类型定义 + */ + +/** 公告类型:1=首页公告提示,2=产品更新公告 */ +export type NoticeType = 1 | 2; + +/** 公告 VO */ +export interface NoticeVO { + /** 公告 ID */ + id: number; + /** 标题(最多 30 字) */ + title: string; + /** 公告类型:1=首页公告提示,2=产品更新公告 */ + type: number; + /** 公告类型名称 */ + typeName: string; + /** 生效开始时间(YYYY-MM-DD HH:mm:ss) */ + startTime: string; + /** 生效结束时间(YYYY-MM-DD HH:mm:ss) */ + endTime: string; + /** 公告内容(纯文本,最多 500 字) */ + context: string; + /** 创建时间 */ + createDate: string; +} + +/** 公告列表分页查询参数 */ +export interface NoticeListQueryParams { + page: string; + limit: string; + /** 标题,模糊搜索 */ + title?: string; + /** 公告类型 */ + type?: number; +} + +/** 新增/修改公告参数(id:新增不传或为 0,修改必传) */ +export interface NoticeSaveParams { + id?: number; + title: string; + type: number; + startTime: string; + endTime: string; + context: string; +} + +/** 分页数据结构 */ +export interface PageData { + total: number; + list: T[]; + exData?: Record; +} + +/** 接口通用返回结构 */ +export interface ApiResult { + code: number; + msg: string; + data: T; +} diff --git a/src/config/fallbackRoutes.ts b/src/config/fallbackRoutes.ts index 67eb757..c74f954 100644 --- a/src/config/fallbackRoutes.ts +++ b/src/config/fallbackRoutes.ts @@ -164,6 +164,17 @@ export const FALLBACK_MENU_NODES: MenuNode[] = [ icon: 'AiOutlineSafetyCertificate', permission: 'system.roles.view', }, + { + // 公告管理:后端 /op/permission 尚未下发 system.notices.view 权限码, + // 暂不挂 permission(否则整条菜单会被权限过滤掉);后端配置后可在下方补回 + // permission: 'system.notices.view', + id: 'system_notices', + name: '公告管理', + path: 'system/notices', + component: 'system/notices', + componentName: 'SystemNotices', + icon: 'AiOutlineSound', + }, { id: 'system_params', name: '参数配置', diff --git a/src/pages/events/list/index.tsx b/src/pages/events/list/index.tsx index 368d81a..e08c84f 100644 --- a/src/pages/events/list/index.tsx +++ b/src/pages/events/list/index.tsx @@ -223,11 +223,14 @@ export default defineComponent({ (formData.type = val as number)} + /> + + + {/* 生效时间 */} + + { + formData.timeRange = (val as [Dayjs, Dayjs]) || null; + formRef.value?.clearValidate('timeRange'); + }} + /> + + + {/* 标题 */} + + { + formData.title = val?.target?.value ?? val ?? ''; + }} + /> + + + {/* 内容 */} + +