Files
zkxw/web-admin/scripts/check-oa-progress-person-lines.ts
T
2026-07-23 18:01:11 +08:00

147 lines
4.0 KiB
TypeScript

import assert from 'node:assert/strict'
import {
formatProgressPersonLines,
type ProgressPersonInput
} from '../src/utils/oa-progress-person-lines'
function run() {
// 会签部分完成
const andPartial: ProgressPersonInput[] = [
{
nickName: '甲',
status: 'approved',
commentText: '同意',
timestamp: '2026-07-23 10:01:00'
},
{
nickName: '乙',
status: 'approved',
commentText: '无异议',
timestamp: '2026-07-23 10:20:00'
},
{ nickName: '丙', status: 'pending', commentText: '', timestamp: '' }
]
const andLines = formatProgressPersonLines(andPartial)
assert.deepEqual(
andLines.map((x) => x.text),
[
'甲 同意 2026-07-23 10:01:00',
'乙 无异议 2026-07-23 10:20:00',
'丙 待处理'
]
)
assert.equal(andLines[0].tone, 'ok')
assert.equal(andLines[2].tone, 'pending')
// 或签一人已批:操作人 + 免处理仍列出
const orDone: ProgressPersonInput[] = [
{
nickName: '甲',
status: 'approved',
commentText: '同意,材料齐全',
timestamp: '2026-07-23 10:05:00'
},
{ nickName: '乙', status: 'done', commentText: '', timestamp: '2026-07-23 10:00:00' },
{ nickName: '丙', status: 'done', commentText: '', timestamp: '' }
]
const orLines = formatProgressPersonLines(orDone)
assert.deepEqual(
orLines.map((x) => x.text),
['甲 同意,材料齐全 2026-07-23 10:05:00', '乙 无需处理', '丙 无需处理']
)
assert.equal(orLines[0].tone, 'ok')
assert.equal(orLines[1].tone, 'mute')
assert.equal(orLines[2].tone, 'mute')
// 已同意但无意见 → 状态文案兜底
const emptyComment = formatProgressPersonLines([
{
nickName: '甲',
status: 'approved',
commentText: '',
timestamp: '2026-07-23 10:05:00'
}
])
assert.equal(emptyComment[0].text, '甲 已同意 2026-07-23 10:05:00')
// 拒绝
const rejected = formatProgressPersonLines([
{
nickName: '甲',
status: 'rejected',
commentText: '不同意',
timestamp: '2026-07-23 11:00:00'
},
{ nickName: '乙', status: 'done' }
])
assert.equal(rejected[0].text, '甲 不同意 2026-07-23 11:00:00')
assert.equal(rejected[0].tone, 'danger')
assert.equal(rejected[1].text, '乙 无需处理')
// 转交
const xfer: ProgressPersonInput[] = [
{
nickName: '李四',
status: 'transferred',
commentText: '',
timestamp: '2026-07-23 10:05:00',
transferToUserName: '赵六'
},
{ nickName: '赵六', status: 'pending', commentText: '', timestamp: '' }
]
const xferLines = formatProgressPersonLines(xfer)
assert.deepEqual(
xferLines.map((x) => x.text),
['李四 转交给赵六 2026-07-23 10:05:00', '赵六 待处理']
)
assert.equal(xferLines[0].tone, 'mute')
const xferComment: ProgressPersonInput[] = [
{
nickName: '李四',
status: 'transferred',
commentText: '出差代批',
timestamp: '2026-07-23 10:05:00',
transferToUserName: '赵六'
}
]
assert.equal(
formatProgressPersonLines(xferComment)[0].text,
'李四 转交给赵六 出差代批 2026-07-23 10:05:00'
)
// 转交目标缺失时回退「已转交」
assert.equal(
formatProgressPersonLines([
{
nickName: '李四',
status: 'transferred',
commentText: '',
timestamp: '2026-07-23 10:05:00'
}
])[0].text,
'李四 已转交 2026-07-23 10:05:00'
)
// 转交目标缺失但有说明:仍用说明
assert.equal(
formatProgressPersonLines([
{
nickName: '胡圆凯',
status: 'transferred',
commentText: '123123',
timestamp: '2026-07-23 17:35:12'
}
])[0].text,
'胡圆凯 123123 2026-07-23 17:35:12'
)
// 空 people
assert.deepEqual(formatProgressPersonLines([]), [])
assert.deepEqual(formatProgressPersonLines(undefined), [])
console.log('oa-progress-person-lines: all assertions passed')
}
run()