103 lines
3.5 KiB
TypeScript
103 lines
3.5 KiB
TypeScript
import type { FileInfo, PageResult } from '@/types/api'
|
|
import type { Contract, ContractQuery } from '@/types/business/contract'
|
|
|
|
// TODO(api): 待接口文档到位后,将以下 mock 替换为 request<T> 调用
|
|
|
|
function mockFile(name: string, size: number, uploadTime: string): FileInfo {
|
|
return { name, size, uploadTime, url: '' }
|
|
}
|
|
|
|
const DETAIL_ID = 'contract-001'
|
|
|
|
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')],
|
|
},
|
|
]
|
|
|
|
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')],
|
|
}
|
|
|
|
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,
|
|
})
|
|
}
|
|
|
|
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 })
|
|
}
|