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 ?? ''; + }} + /> + + + {/* 内容 */} + +