feat 搭建架构骨架
This commit is contained in:
110
src/api/contract.ts
Normal file
110
src/api/contract.ts
Normal file
@@ -0,0 +1,110 @@
|
||||
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 })
|
||||
}
|
||||
Reference in New Issue
Block a user