import type { FileInfo, PageResult } from '@/types/api' import type { Contract, ContractQuery } from '@/types/business/contract' // TODO(api): 待接口文档到位后,将以下 mock 替换为 request 调用 /** 构造 mock 文件信息 */ function mockFile(name: string, size: number, uploadTime: string): FileInfo { return { name, size, uploadTime, url: '' } } /** 详情 mock 所属合同 id */ const DETAIL_ID = 'contract-001' /** 合同列表 mock(3 条,覆盖全部签署状态) */ const MOCK_CONTRACTS: Contract[] = [ { id: 'contract-001', contractNo: 'C8K2M202408001', contractName: '智慧城市建设项目技术服务合同', contractType: '互联网软件通用/app开发', contractAmount: 201000, relatedProjectName: '智慧城市大数据平台建设项目', projectNo: 'P8K2M202408001', signStatus: '履行中', signDate: '2026-8-17 14:00', effectiveDate: '2026-8-17 14:00', expiryDate: '2026-8-17 14:00', files: [mockFile('项目需求规格说明书.pdf', 2516582, '2026-8-17 14:00')], }, { id: 'contract-002', contractNo: 'C8K2M202408002', contractName: '智慧城市建设项目硬件电路设计合同', contractType: '硬件电路通用/电路版设计', contractAmount: 180000, relatedProjectName: '三甲医院指挥医疗信息化系统', projectNo: 'P8K2M202408001', signStatus: '已过期', signDate: '2026-8-17 14:00', effectiveDate: '2026-8-17 14:00', expiryDate: '2026-8-17 14:00', files: [mockFile('硬件电路设计合同.pdf', 1468006, '2026-8-17 14:00')], }, { id: 'contract-003', contractNo: 'C8K2M202408003', contractName: '智慧城市建设项目物联网全案合同', contractType: '物联网全案通用/一套门禁卡', contractAmount: 96000, relatedProjectName: '社区康养智能服务系统', projectNo: 'P8K2M202408001', signStatus: '待签署', effectiveDate: '2026-8-17 14:00', expiryDate: '2026-8-17 14:00', files: [mockFile('物联网全案合同.pdf', 1258291, '2026-8-17 14:00')], }, ] /** 合同详情 mock */ const CONTRACT_DETAIL: Contract = { id: DETAIL_ID, contractNo: 'C8K2M202408001', contractName: '社区康养智能服务系统开发合同', contractType: '互联网软件开发', contractAmount: 201000, relatedProjectName: '社区康养智能服务系统', projectNo: '20260813ZZ251245', signStatus: '履行中', signDate: '2024-10-15', effectiveDate: '2024-10-15', expiryDate: '2024-10-15', files: [mockFile('项目需求规格说明书.pdf', 2516582, '2024-10-15')], } /** 合同列表(keyword 筛选 + 分页) */ export function getContractList(query: ContractQuery): Promise> { const filtered = MOCK_CONTRACTS.filter((item) => { if ( query.keyword && !item.contractName.includes(query.keyword) && !item.contractNo.includes(query.keyword) ) { return false } return true }) const pageSize = query.pageSize > 0 ? query.pageSize : 8 const start = (query.page - 1) * pageSize return Promise.resolve({ list: filtered.slice(start, start + pageSize), total: filtered.length, }) } /** 合同详情(不存在返回 null) */ export function getContractDetail(id: string): Promise { if (id === DETAIL_ID) return Promise.resolve({ ...CONTRACT_DETAIL, files: [...CONTRACT_DETAIL.files] }) const found = MOCK_CONTRACTS.find((item) => item.id === id) ?? null return Promise.resolve(found ? { ...found, files: [...found.files] } : null) } /** 获取签署二维码(返回有效期) */ export function getSignQr(_id: string): Promise<{ expiresInSeconds: number }> { return Promise.resolve({ expiresInSeconds: 272 }) } /** 刷新签署二维码(返回有效期) */ export function refreshSignQr(_id: string): Promise<{ expiresInSeconds: number }> { return Promise.resolve({ expiresInSeconds: 272 }) }