type Meeting = { id: number; belOrgNo: string; organizationName: string; meetSubj: string; meetConte: string; plainContent: string; meetDt: string; meetNo: string; meetTypeCd: string; displayName: string; createTm: string; updateTm: string; }; type GetMeetingListInput = { belOrgNo?: unknown; meetSubj?: unknown; meetTypeCd?: unknown; startDate?: unknown; endDate?: unknown; page?: unknown; pageSize?: unknown; sortField?: unknown; sortOrder?: unknown; }; type GetMeetingListResult = { list: Meeting[]; total: number; page: number; pageSize: number; }; function getAllMeetings(): Meeting[] { return [ { id: 33029032315325800, belOrgNo: "31021", organizationName: "上海浦东支行", meetSubj: "安全测试1", meetConte: "

1231

", plainContent: "1231", meetDt: "2026-01-07", meetNo: "ORTHER2026-01-16 17:02:05", meetTypeCd: "TRAINING", displayName: "刘晓鸣", createTm: "2026-01-16", updateTm: "2026-01-16 17:02:05" }, { id: 33029032315325801, belOrgNo: "11001", organizationName: "北京西城支行", meetSubj: "二化管理体系例会", meetConte: "

1.各部门汇报日常工作以及问题

2.当前阶段化重点说明

", plainContent: "各部门汇报日常工作以及问题;当前阶段化重点说明", meetDt: "2026-01-15", meetNo: "MORNING2026-01-15 19:56:24", meetTypeCd: "MORNING", displayName: "黄丽丽", createTm: "2026-01-15", updateTm: "2026-01-15 19:56:24" } ]; } function toInt(value: unknown, fallback: number): number { if (typeof value === "number" && Number.isFinite(value)) return Math.floor(value); if (typeof value === "string" && value.trim() !== "") { const parsed = Number.parseInt(value, 10); if (Number.isFinite(parsed)) return parsed; } return fallback; } function normalizeString(value: unknown): string { if (typeof value !== "string") return ""; return value.trim(); } function normalizeDateString(value: unknown): string { if (typeof value !== "string") return ""; const trimmed = value.trim(); if (!trimmed) return ""; return trimmed.slice(0, 10); } function getTimeValue(value: unknown): number { if (!value) return 0; const str = typeof value === "string" ? value : String(value); const normalized = str.length >= 10 ? str : str.slice(0, 10); const d = new Date(normalized); if (Number.isNaN(d.getTime())) return 0; return d.getTime(); } export const getMeetingList = async (input: GetMeetingListInput): Promise => { const belOrgNo = normalizeString(input.belOrgNo); const meetSubj = normalizeString(input.meetSubj); const meetTypeCd = normalizeString(input.meetTypeCd); const startDate = normalizeDateString(input.startDate); const endDate = normalizeDateString(input.endDate); const pageSize = Math.max(1, Math.min(200, toInt(input.pageSize, 10))); const page = Math.max(1, toInt(input.page, 1)); const sortField = normalizeString(input.sortField); const sortOrder = input.sortOrder === "ascending" || input.sortOrder === "descending" ? input.sortOrder : ""; const all = getAllMeetings(); const filtered = all.filter((item) => { if (belOrgNo && item.belOrgNo !== belOrgNo) return false; if (meetTypeCd && item.meetTypeCd !== meetTypeCd) return false; if (meetSubj && !item.meetSubj.includes(meetSubj)) return false; if (startDate && endDate) { const created = normalizeDateString(item.createTm); if (!created || created < startDate || created > endDate) return false; } return true; }); let sorted = filtered.slice(); if (sortField && sortOrder && (sortField === "createTm" || sortField === "updateTm")) { const field = sortField as "createTm" | "updateTm"; const order = sortOrder === "ascending" ? 1 : -1; sorted = sorted.sort((a, b) => { const av = getTimeValue(a[field]); const bv = getTimeValue(b[field]); if (av === bv) return 0; return av > bv ? order : -order; }); } const total = sorted.length; const start = (page - 1) * pageSize; const list = sorted.slice(start, start + pageSize); return { list, total, page, pageSize }; };