111 lines
3.9 KiB
TypeScript
111 lines
3.9 KiB
TypeScript
import type { FileInfo, PageResult } from '@/types/api'
|
||
import type { Contract, ContractQuery } from '@/types/business/contract'
|
||
|
||
// TODO(api): 待接口文档到位后,将以下 mock 替换为 request<T> 调用
|
||
|
||
/** 构造 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<PageResult<Contract>> {
|
||
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<Contract | null> {
|
||
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 })
|
||
}
|