feat: 优化差旅报销预审流程与个人工作台 UI 体系

- 完善 user_agent_application 申请差旅报销预审槽位与消息组装
- 增强预算助理报告与风险建议卡片交互
- 重构登录页视觉样式与移动端响应式适配
- 优化个人工作台、文档中心、政策中心、员工管理等页面布局
- 拆分 travelRequestDetailPreReviewModel 为 advice/submit 模型
- 补充报销草稿、风险复核、Item Sync 与模板执行器测试覆盖
This commit is contained in:
caoxiaozhu
2026-06-02 14:01:51 +08:00
parent 92444e7eae
commit ca691f3ee0
107 changed files with 5663 additions and 1542 deletions

View File

@@ -73,6 +73,34 @@ function normalizeApplicationDate(claim) {
)
}
function normalizeApplicationDateText(value) {
const text = normalizeText(value)
if (!text) {
return ''
}
const matched = text.match(/^(\d{4}-\d{2}-\d{2})/)
return matched?.[1] || text
}
function normalizeApplicationBusinessTime(claim) {
const start = normalizeApplicationDateText(claim?.start_date || claim?.startDate || claim?.begin_date || claim?.beginDate)
const end = normalizeApplicationDateText(claim?.end_date || claim?.endDate || claim?.finish_date || claim?.finishDate)
if (start && end && start !== end) {
return `${start}${end}`
}
return normalizeApplicationDateText(
start
|| claim?.business_time
|| claim?.businessTime
|| claim?.time_range
|| claim?.timeRange
|| claim?.occurred_at
|| claim?.occurredAt
|| claim?.occurred_date
|| claim?.occurredDate
)
}
function toTimestamp(value) {
const date = new Date(value)
return Number.isNaN(date.getTime()) ? 0 : date.getTime()
@@ -216,6 +244,7 @@ export function normalizeRequiredApplicationCandidate(claim) {
location,
amount: normalizeText(claim?.amount || claim?.budget_amount || claim?.budgetAmount),
amount_label: amountText,
business_time: normalizeApplicationBusinessTime(claim),
status,
status_label: STATUS_LABELS[status] || normalizeText(claim?.approval_stage || claim?.approvalStage || status),
application_date: normalizeApplicationDate(claim)
@@ -247,6 +276,7 @@ export function buildRequiredApplicationActions(applications, actionType) {
const claimNo = normalizeText(application.claim_no) || '未编号申请单'
const description = [
application.status_label,
application.business_time && `时间:${application.business_time}`,
application.location && `地点:${application.location}`,
application.amount_label && `预算:${application.amount_label}`,
application.reason && `事由:${application.reason}`
@@ -265,6 +295,7 @@ export function buildRequiredApplicationActions(applications, actionType) {
application_location: application.location,
application_amount: application.amount,
application_amount_label: application.amount_label,
application_business_time: application.business_time,
application_status: application.status,
application_status_label: application.status_label,
application_date: application.application_date