Files
zkxw/web-admin/src/utils/project-management.ts
T
zlwuandCursor e895daf8fc feat(project): 项目编号支持新增编辑自由填写
项目管理弹窗增加项目编号输入;后端保存改为接收客户端编号并校验租户内唯一,不再自动生成。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-11-05 14:41:41 +08:00

70 lines
2.0 KiB
TypeScript

import type { BizType, ProjectRecord } from '@/api/project-management'
/** Drill-down uses the last successful statistics query, never unsaved filter edits. */
export function buildDrillFilters(
applied: ProjectRecord,
row: ProjectRecord,
bizType: BizType
): ProjectRecord {
const { groupBy, ...filters } = applied
const result = { ...filters, bizType, unassigned: row.id === 'unassigned' } as ProjectRecord
if (!result.unassigned && row.id !== 'total') {
result[groupBy === 'team' ? 'teamId' : 'projectId'] = row.id
}
return result
}
export function assignmentSnapshot(records: ProjectRecord[]) {
return records.map(({ bizType, id, projectId }) => ({
bizType,
id,
projectId: projectId ?? null
}))
}
/** Write bodies intentionally exclude response-only labels and timestamps. */
export function managementPayload(kind: 'teams' | 'projects', form: ProjectRecord): ProjectRecord {
const fields =
kind === 'teams'
? ['teamName', 'leaderUserId', 'enabled', 'remark']
: [
'projectName',
'projectNo',
'teamId',
'leaderUserId',
'bizTypes',
'startDate',
'endDate',
'status',
'remark'
]
const data = Object.fromEntries(
fields.filter((key) => form[key] !== undefined).map((key) => [key, form[key]])
)
if (kind === 'teams') {
for (const [key, field] of [
['members', 'userId'],
['regions', 'regionId'],
['hospitals', 'hospitalId']
]) {
data[key] = (form[key] || []).map((row: ProjectRecord) => ({
...(row.id ? { id: row.id } : {}),
[field]: row[field]
}))
}
}
return data
}
export function projectOptionsParams(bizType: BizType, filter = false) {
return filter ? { bizType, usage: 'filter' as const } : { bizType }
}
/** List cells join child display names; empty entries are dropped. */
export function joinChildNames(items?: ProjectRecord[]) {
return (items || [])
.map((item) => item?.name)
.filter(Boolean)
.join('、')
}