feat: 扩展风险规则体系、审批动态路由与预算中心列表化改造
- 新增 25+ 条风险规则(预算/报销/申请/通用类),完善风险规则模拟与反馈发布机制 - 引入费用审批动态路由、平台风险分级、预审与风险阶段管理 - 预算中心列表化改造,优化票据夹仪表盘与数字员工工作看板 - 新增 Hermes 风险线索收集器、Agent 链路追踪中心 - 扩展数字员工能力库(18 个领域 Skill)与交通费用自动预估 - 完善报销申请快速预览、权限控制与前端测试覆盖
This commit is contained in:
@@ -11,26 +11,33 @@ function readProjectFile(path) {
|
||||
function testReceiptFolderViewSurface() {
|
||||
const view = readProjectFile('web/src/views/ReceiptFolderView.vue')
|
||||
|
||||
assert.match(view, /未关联票据/)
|
||||
assert.match(view, /已关联票据/)
|
||||
assert.match(view, /label: '全部'/)
|
||||
assert.match(view, /一键关联票据/)
|
||||
assert.match(view, /票据关键字段/)
|
||||
assert.match(view, /原始文件/)
|
||||
assert.match(view, /activeStatus = ref\('all'\)/)
|
||||
assert.match(view, /value: 'all'/)
|
||||
assert.match(view, /openAssociateDialog/)
|
||||
assert.match(view, /receipt-detail-toolbar/)
|
||||
assert.match(view, /receipt-dashboard/)
|
||||
assert.match(view, /receipt-dashboard-preview/)
|
||||
assert.match(view, /receipt-dashboard-side/)
|
||||
assert.match(view, /receipt-dashboard-bottom/)
|
||||
assert.match(view, /receipt-ocr-panel/)
|
||||
assert.match(view, /receipt-status-panel/)
|
||||
assert.match(view, /keyReceiptFields/)
|
||||
assert.match(view, /editableOtherFields/)
|
||||
assert.match(view, /ocrPreviewFields/)
|
||||
assert.match(view, /class="receipt-key-grid"/)
|
||||
assert.match(view, /class="receipt-other-collapse"/)
|
||||
assert.match(view, /class="receipt-other-scroll"/)
|
||||
assert.match(view, /其他信息/)
|
||||
assert.match(view, /previewTransform/)
|
||||
assert.match(view, /openAssociateDialogForCurrentReceipt/)
|
||||
assert.match(view, /createReceiptDetailDashboardModel/)
|
||||
assert.match(view, /ElCollapse/)
|
||||
assert.doesNotMatch(view, /新增字段/)
|
||||
assert.doesNotMatch(view, /addField/)
|
||||
assert.match(view, /const isTrainTicket = computed/)
|
||||
assert.doesNotMatch(view, /打开源文件/)
|
||||
assert.doesNotMatch(view, /openSourceFile/)
|
||||
assert.match(view, /返回票据夹/)
|
||||
assert.doesNotMatch(view, /返回列表/)
|
||||
assert.match(view, /删除票据/)
|
||||
assert.match(view, /back-label=/)
|
||||
assert.doesNotMatch(view, /back-btn/)
|
||||
assert.match(view, /deleteCurrentReceipt/)
|
||||
assert.match(view, /ElCheckboxGroup/)
|
||||
assert.match(view, /fetchReceiptFolderItems\('all'\)/)
|
||||
assert.match(view, /buildReceiptFile\(item\)/)
|
||||
@@ -90,8 +97,7 @@ function testReceiptFolderDetailLayoutAdjustments() {
|
||||
assert.match(receiptView, /showStatusColumn/)
|
||||
assert.match(receiptView, /<col v-if="showStatusColumn" class="col-status">/)
|
||||
assert.match(receiptView, /<th v-if="showStatusColumn">/)
|
||||
assert.match(receiptView, /<th>票据日期<\/th>/)
|
||||
assert.match(receiptView, /<td>{{ row\.document_date \|\| '待补充' }}<\/td>/)
|
||||
assert.match(receiptView, /document_date/)
|
||||
assert.match(receiptView, /<td>\s*<strong class="doc-id">/)
|
||||
assert.match(receiptView, /<td v-if="showStatusColumn">\s*<span class="status-tag"/)
|
||||
assert.match(receiptView, /const activeStatus = ref\('all'\)/)
|
||||
@@ -100,12 +106,14 @@ function testReceiptFolderDetailLayoutAdjustments() {
|
||||
assert.match(receiptView, /<EnterpriseDetailPage/)
|
||||
assert.match(receiptView, /variant="receipt-folder-detail"/)
|
||||
assert.match(receiptView, /<EnterpriseDetailCard class="receipt-basic-panel"/)
|
||||
assert.match(receiptView, /<EnterpriseDetailCard class="receipt-preview-panel"/)
|
||||
assert.match(receiptView, /receipt-dashboard-preview/)
|
||||
assert.match(receiptView, /receipt-dashboard-bottom/)
|
||||
assert.match(receiptView, /createReceiptDetailFieldModel/)
|
||||
assert.match(receiptView, /createReceiptDetailDashboardModel/)
|
||||
assert.match(receiptView, /buildDetailPayload\(\)/)
|
||||
assert.match(receiptView, /receiptDetailSubtitle/)
|
||||
assert.match(receiptView, /receiptDetailTopBarPayload/)
|
||||
assert.match(receiptView, /eyebrow: '票据详情'/)
|
||||
assert.match(receiptView, /eyebrow:/)
|
||||
assert.match(receiptView, /detail-topbar-change/)
|
||||
assert.doesNotMatch(receiptView, /<article v-else class="receipt-folder-detail/)
|
||||
assert.doesNotMatch(receiptView, /class="back-btn"/)
|
||||
@@ -115,6 +123,11 @@ function testReceiptFolderDetailLayoutAdjustments() {
|
||||
assert.match(receiptStyles, /\.receipt-folder-detail :deep\(\.detail-grid\)/)
|
||||
assert.match(receiptStyles, /\.receipt-folder-detail :deep\(\.detail-actions\)/)
|
||||
assert.match(receiptStyles, /\.receipt-folder-detail :deep\(\.enterprise-detail-card \.card-head\)/)
|
||||
assert.match(receiptStyles, /\.receipt-detail-toolbar/)
|
||||
assert.match(receiptStyles, /\.receipt-dashboard/)
|
||||
assert.match(receiptStyles, /\.receipt-dashboard-bottom/)
|
||||
assert.match(receiptStyles, /\.receipt-preview-tools/)
|
||||
assert.match(receiptStyles, /\.receipt-log-list/)
|
||||
assert.match(receiptStyles, /\.receipt-key-grid/)
|
||||
assert.match(receiptStyles, /\.receipt-other-collapse/)
|
||||
assert.match(receiptStyles, /\.receipt-other-scroll/)
|
||||
@@ -124,11 +137,16 @@ function testReceiptFolderDetailLayoutAdjustments() {
|
||||
assert.doesNotMatch(receiptStyles, /\.back-btn\b/)
|
||||
assert.doesNotMatch(receiptStyles, /\.danger-btn\b/)
|
||||
assert.match(fieldModel, /TRAIN_KEY_FIELD_DEFINITIONS/)
|
||||
assert.match(fieldModel, /label: '发票号码'/)
|
||||
assert.match(fieldModel, /label: '开票日期'/)
|
||||
assert.match(fieldModel, /label: '票价'/)
|
||||
assert.match(fieldModel, /label: '姓名'/)
|
||||
assert.match(fieldModel, /id: 'invoice_number'/)
|
||||
assert.match(fieldModel, /id: 'invoice_date'/)
|
||||
assert.match(fieldModel, /id: 'fare'/)
|
||||
assert.match(fieldModel, /id: 'passenger_name'/)
|
||||
assert.match(fieldModel, /syncEditableFieldsToTopLevel/)
|
||||
const dashboardModel = readProjectFile('web/src/views/scripts/receiptFolderDetailDashboard.js')
|
||||
assert.match(dashboardModel, /createReceiptDetailDashboardModel/)
|
||||
assert.match(dashboardModel, /basicInfoItems/)
|
||||
assert.match(dashboardModel, /operationLogs/)
|
||||
assert.match(dashboardModel, /archiveInfoItems/)
|
||||
}
|
||||
|
||||
function run() {
|
||||
|
||||
Reference in New Issue
Block a user