/** * 合同变更记录 API */ import request from '@/utils/http' import type { ChangeForm, ChangeQuery, ChangeVO } from './types' export type { ChangeForm, ChangeQuery, ChangeVO } from './types' function unwrapData(res: any) { return res?.data ?? res ?? {} } function mapListQuery(query: ChangeQuery = {}): Record { const params: Record = { pageNum: query.pageNum ?? 1, pageSize: query.pageSize ?? 20 } ;['contractNo', 'contractName', 'changeType', 'approvalStatus', 'beginTime', 'endTime'].forEach((key) => { const val = (query as any)[key] if (val != null && val !== '') params[key] = val }) if (query.contractId != null) params.contractId = String(query.contractId) return params } function stringifyIds(ids: number | number[] | string | string[]) { return Array.isArray(ids) ? ids.map(String).join(',') : String(ids) } const BASE = '/web/crm/contract/change' export async function listChange(query: ChangeQuery) { const res = await request.get({ url: `${BASE}/list`, params: mapListQuery(query) }) const data = unwrapData(res) return { rows: data.list || data.rows || [], total: data.total ?? 0 } } export async function getChange(id: number | string) { const data = await request.get({ url: `${BASE}/${String(id)}` }) return { data: unwrapData(data) as ChangeVO } } export function addChange(data: ChangeForm) { return request.post({ url: BASE, data: { ...data, id: data.id != null ? String(data.id) : undefined, contractId: String(data.contractId) } }) } export function updateChange(data: ChangeForm) { return request.put({ url: BASE, data: { ...data, id: data.id != null ? String(data.id) : undefined, contractId: String(data.contractId) } }) } export function delChange(ids: number | number[] | string | string[]) { return request.del({ url: `${BASE}/${stringifyIds(ids)}` }) } export function submitChangeApproval(data: { id: number | string approverIds: (number | string)[] remark?: string }) { return request.post({ url: `${BASE}/submitApproval`, data: { id: String(data.id), approverIds: data.approverIds.map(String), remark: data.remark } }) } export function withdrawChange(id: number | string) { return request.put({ url: `${BASE}/withdraw/${String(id)}` }) } export function executeChange(id: number | string) { return request.put({ url: `${BASE}/execute/${String(id)}` }) } export async function exportChange(data: Record = {}) { const { ids, columns, ...rest } = data const body: Record = { ...mapListQuery(rest as ChangeQuery), ...(ids ? { ids } : {}), ...(columns ? { columns } : {}) } return request.post({ url: `${BASE}/export`, data: body, responseType: 'blob' }) }