feat: 新增预算后端服务与差旅风险规则库
后端新增预算模型、端点和服务模块,支持预算 CRUD 和余额 查询,清理旧生成规则文件并替换为按严重等级分类的差旅风 险规则库,优化认证权限和报销单访问策略,新增财务规则目 录和演示数据构建脚本,前端预算中心增加对话框交互,完善 审计页面运行时模型和元数据展示,补充单元测试。
This commit is contained in:
@@ -70,7 +70,8 @@ import {
|
||||
import {
|
||||
createDefaultRiskRuleForm,
|
||||
RISK_RULE_BUSINESS_STAGE_OPTIONS,
|
||||
RISK_RULE_EXPENSE_CATEGORY_OPTIONS
|
||||
RISK_RULE_EXPENSE_CATEGORY_OPTIONS,
|
||||
RISK_RULE_LEVEL_OPTIONS
|
||||
} from './auditViewRiskRuleModel.js'
|
||||
|
||||
export default {
|
||||
@@ -99,6 +100,7 @@ export default {
|
||||
const activeFilterPopover = ref('')
|
||||
const selectedDomain = ref('')
|
||||
const selectedOwner = ref('')
|
||||
const selectedRiskLevel = ref('')
|
||||
const selectedStatus = ref('')
|
||||
const selectedRiskScenario = ref('')
|
||||
const selectedOnlineState = ref('')
|
||||
@@ -345,20 +347,29 @@ export default {
|
||||
const ownerOptions = computed(() => {
|
||||
const uniqueOwners = [...new Set(currentAssets.value.map((item) => item.owner).filter(Boolean))]
|
||||
return [
|
||||
{ value: '', label: activeType.value === 'riskRules' ? '全部审核人' : '全部负责人' },
|
||||
{ value: '', label: '全部负责人' },
|
||||
...uniqueOwners.map((value) => ({
|
||||
value,
|
||||
label: value
|
||||
}))
|
||||
]
|
||||
})
|
||||
const riskLevelOptions = computed(() => [
|
||||
{ value: '', label: '全部风险等级' },
|
||||
...RISK_RULE_LEVEL_OPTIONS
|
||||
])
|
||||
const selectedDomainLabel = computed(
|
||||
() => domainOptions.value.find((item) => item.value === selectedDomain.value)?.label || '业务域'
|
||||
)
|
||||
const selectedOwnerLabel = computed(
|
||||
() =>
|
||||
ownerOptions.value.find((item) => item.value === selectedOwner.value)?.label ||
|
||||
(activeType.value === 'riskRules' ? '审核人' : '负责人')
|
||||
'负责人'
|
||||
)
|
||||
const selectedRiskLevelLabel = computed(
|
||||
() =>
|
||||
riskLevelOptions.value.find((item) => item.value === selectedRiskLevel.value)?.label ||
|
||||
'风险等级'
|
||||
)
|
||||
const selectedStatusLabel = computed(
|
||||
() => STATUS_OPTIONS.find((item) => item.value === selectedStatus.value)?.label || '状态'
|
||||
@@ -366,6 +377,8 @@ export default {
|
||||
const showRiskScenarioFilter = computed(() =>
|
||||
['financialRules', 'riskRules'].includes(activeType.value)
|
||||
)
|
||||
const showOwnerFilter = computed(() => activeType.value !== 'riskRules')
|
||||
const showRiskLevelFilter = computed(() => activeType.value === 'riskRules')
|
||||
const showStatusFilter = computed(() => true)
|
||||
const showOnlineFilter = computed(() => false)
|
||||
const showEnabledFilter = computed(() => false)
|
||||
@@ -402,8 +415,11 @@ export default {
|
||||
if (showEnabledFilter.value && selectedEnabledState.value) {
|
||||
tokens.push(`是否启用:${selectedEnabledStateLabel.value}`)
|
||||
}
|
||||
if (selectedOwner.value) {
|
||||
tokens.push(`${activeType.value === 'riskRules' ? '审核人' : '负责人'}:${selectedOwner.value}`)
|
||||
if (showOwnerFilter.value && selectedOwner.value) {
|
||||
tokens.push(`负责人:${selectedOwner.value}`)
|
||||
}
|
||||
if (showRiskLevelFilter.value && selectedRiskLevel.value) {
|
||||
tokens.push(`风险等级:${selectedRiskLevelLabel.value}`)
|
||||
}
|
||||
if (keyword.value.trim()) {
|
||||
tokens.push(`搜索:${keyword.value.trim()}`)
|
||||
@@ -415,7 +431,8 @@ export default {
|
||||
const hasFilters = activeFilterTokens.value.length > 0
|
||||
const supportedFilters = [
|
||||
'业务域',
|
||||
activeType.value === 'riskRules' ? '审核人' : '负责人',
|
||||
...(showOwnerFilter.value ? ['负责人'] : []),
|
||||
...(showRiskLevelFilter.value ? ['风险等级'] : []),
|
||||
...(showRiskScenarioFilter.value ? ['使用场景'] : []),
|
||||
...(showStatusFilter.value ? ['状态'] : []),
|
||||
...(showOnlineFilter.value ? ['是否上线'] : []),
|
||||
@@ -480,7 +497,7 @@ export default {
|
||||
return '当前为页面预览态,暂不执行真实审核和上线。'
|
||||
}
|
||||
if (!canManageSelected.value) {
|
||||
return '仅高级管理人员可执行审核和上线。'
|
||||
return '仅高级财务人员可执行审核和上线。'
|
||||
}
|
||||
if (!isDisplayingWorkingVersion.value) {
|
||||
return '请先切回当前工作版本,再执行审核或上线。'
|
||||
@@ -498,6 +515,7 @@ export default {
|
||||
keyword: keyword.value,
|
||||
selectedDomain: selectedDomain.value,
|
||||
selectedOwner: selectedOwner.value,
|
||||
selectedRiskLevel: selectedRiskLevel.value,
|
||||
selectedStatus: selectedStatus.value,
|
||||
selectedRiskScenario: selectedRiskScenario.value,
|
||||
selectedOnlineState: selectedOnlineState.value,
|
||||
@@ -548,6 +566,7 @@ export default {
|
||||
keyword.value = ''
|
||||
selectedDomain.value = ''
|
||||
selectedOwner.value = ''
|
||||
selectedRiskLevel.value = ''
|
||||
selectedStatus.value = ''
|
||||
selectedRiskScenario.value = ''
|
||||
selectedOnlineState.value = ''
|
||||
@@ -579,6 +598,9 @@ export default {
|
||||
if (name === 'owner') {
|
||||
selectedOwner.value = value
|
||||
}
|
||||
if (name === 'riskLevel') {
|
||||
selectedRiskLevel.value = value
|
||||
}
|
||||
if (name === 'status') {
|
||||
selectedStatus.value = value
|
||||
}
|
||||
@@ -1832,22 +1854,27 @@ export default {
|
||||
detailError,
|
||||
selectedDomain,
|
||||
selectedOwner,
|
||||
selectedRiskLevel,
|
||||
selectedStatus,
|
||||
selectedRiskScenario,
|
||||
selectedOnlineState,
|
||||
selectedEnabledState,
|
||||
selectedDomainLabel,
|
||||
selectedOwnerLabel,
|
||||
selectedRiskLevelLabel,
|
||||
selectedStatusLabel,
|
||||
selectedRiskScenarioLabel,
|
||||
selectedOnlineStateLabel,
|
||||
selectedEnabledStateLabel,
|
||||
showRiskScenarioFilter,
|
||||
showOwnerFilter,
|
||||
showRiskLevelFilter,
|
||||
showStatusFilter,
|
||||
showOnlineFilter,
|
||||
showEnabledFilter,
|
||||
domainOptions,
|
||||
ownerOptions,
|
||||
riskLevelOptions,
|
||||
statusOptions: STATUS_OPTIONS,
|
||||
riskScenarioOptions: RISK_SCENARIO_OPTIONS,
|
||||
onlineStateOptions: ONLINE_STATE_OPTIONS,
|
||||
|
||||
Reference in New Issue
Block a user