Files
zkxw/web-admin/src/utils/oa-person-value.ts
T
2026-07-30 12:09:45 +08:00

62 lines
1.7 KiB
TypeScript

export type OaPersonValueItem = { id: string; name: string }
export function isPersonValueItem(v: unknown): v is OaPersonValueItem {
if (!v || typeof v !== 'object') return false
const o = v as Record<string, unknown>
return String(o.id || '').trim() !== '' && String(o.name || '').trim() !== ''
}
export function normalizePersonModelValue(
raw: unknown,
multiple: boolean
): OaPersonValueItem | OaPersonValueItem[] | null {
if (multiple) {
if (Array.isArray(raw)) {
return raw.filter(isPersonValueItem).map((x) => ({
id: String(x.id).trim(),
name: String(x.name).trim()
}))
}
if (isPersonValueItem(raw)) {
return [{ id: String(raw.id).trim(), name: String(raw.name).trim() }]
}
return []
}
if (isPersonValueItem(raw)) {
return { id: String(raw.id).trim(), name: String(raw.name).trim() }
}
if (Array.isArray(raw) && raw.length === 1 && isPersonValueItem(raw[0])) {
return { id: String(raw[0].id).trim(), name: String(raw[0].name).trim() }
}
return null
}
export function formatPersonDisplay(raw: unknown): string {
if (Array.isArray(raw)) {
return raw
.filter(isPersonValueItem)
.map((x) => x.name)
.filter(Boolean)
.join('、')
}
if (isPersonValueItem(raw)) return raw.name
return ''
}
export function extractPersonIds(raw: unknown): string[] {
const n = Array.isArray(raw)
? raw.filter(isPersonValueItem)
: isPersonValueItem(raw)
? [raw]
: []
const out: string[] = []
const seen = new Set<string>()
for (const x of n) {
const id = String(x.id).trim()
if (!id || seen.has(id)) continue
seen.add(id)
out.push(id)
}
return out
}