'20260305修复bug'

This commit is contained in:
zwgczx committed 2026-03-05 17:58:38 +08:00
1 parent 53c1b2c0db
commit 75f293f877
20 files changed
+1167 -1400

No files matched your search

@@ -3,7 +3,7 @@ import { computed, onActivated, onBeforeUnmount, onMounted, ref, watch } from 'v
import { AgGridVue } from 'ag-grid-vue3'
import type { ColDef, ColGroupDef } from 'ag-grid-community'
import localforage from 'localforage'
import { isMajorCodeInIndustryScope, majorList } from '@/sql'
import { getMajorDictEntries, isMajorIdInIndustryScope } from '@/sql'
import { myTheme, gridOptions } from '@/lib/diyAgGridOptions'
import { decimalAggSum, roundTo, sumByNumber } from '@/lib/decimal'
import { formatThousands } from '@/lib/numberFormat'
@@ -32,6 +32,8 @@ interface DictLeaf {
id: string
code: string
name: string
hasCost: boolean
hasArea: boolean
}
interface DictGroup {
@@ -47,6 +49,8 @@ interface DetailRow {
groupName: string
majorCode: string
majorName: string
hasCost: boolean
hasArea: boolean
amount: number | null
benchmarkBudget: number | null
benchmarkBudgetBasic: number | null
@@ -139,13 +143,9 @@ const shouldForceDefaultLoad = () => {
}
const detailRows = ref<DetailRow[]>([])
type majorLite = { code: string; name: string; defCoe: number | null }
const serviceEntries = Object.entries(majorList as Record<string, majorLite>)
.sort((a, b) => Number(a[0]) - Number(b[0]))
.filter((entry): entry is [string, majorLite] => {
const item = entry[1]
return Boolean(item?.code && item?.name)
})
type majorLite = { code: string; name: string; defCoe: number | null; hasCost?: boolean; hasArea?: boolean }
const serviceEntries = getMajorDictEntries().map(({ id, item }) => [id, item] as [string, majorLite])
const majorIdAliasMap = new Map(getMajorDictEntries().map(({ rawId, id }) => [rawId, id]))
const detailDict: DictGroup[] = (() => {
const groupMap = new Map<string, DictGroup>()
@@ -181,7 +181,9 @@ const detailDict: DictGroup[] = (() => {
groupMap.get(parentCode)!.children.push({
id: key,
code,
name: item.name
name: item.name,
hasCost: item.hasCost !== false,
hasArea: item.hasArea !== false
})
}
@@ -200,7 +202,7 @@ const buildDefaultRows = (): DetailRow[] => {
if (!activeIndustryCode.value) return []
const rows: DetailRow[] = []
for (const group of detailDict) {
if (activeIndustryCode.value && !isMajorCodeInIndustryScope(group.code, activeIndustryCode.value)) continue
if (activeIndustryCode.value && !isMajorIdInIndustryScope(group.id, activeIndustryCode.value)) continue
for (const child of group.children) {
rows.push({
id: child.id,
@@ -208,6 +210,8 @@ const buildDefaultRows = (): DetailRow[] => {
groupName: group.name,
majorCode: child.code,
majorName: child.name,
hasCost: child.hasCost,
hasArea: child.hasArea,
amount: null,
benchmarkBudget: null,
benchmarkBudgetBasic: null,
@@ -253,7 +257,12 @@ const mergeWithDictRows = (
const includeFactorValues = options?.includeFactorValues ?? true
const dbValueMap = new Map<string, SourceRow>()
for (const row of rowsFromDb || []) {
dbValueMap.set(row.id, row)
const rowId = String(row.id)
dbValueMap.set(rowId, row)
const aliasId = majorIdAliasMap.get(rowId)
if (aliasId && !dbValueMap.has(aliasId)) {
dbValueMap.set(aliasId, row)
}
}
return buildDefaultRows().map(row => {
@@ -264,7 +273,7 @@ const mergeWithDictRows = (
return {
...row,
amount: includeAmount && typeof fromDb.amount === 'number' ? fromDb.amount : null,
amount: includeAmount && row.hasCost && typeof fromDb.amount === 'number' ? fromDb.amount : null,
benchmarkBudget: typeof fromDb.benchmarkBudget === 'number' ? fromDb.benchmarkBudget : null,
benchmarkBudgetBasic: typeof fromDb.benchmarkBudgetBasic === 'number' ? fromDb.benchmarkBudgetBasic : null,
benchmarkBudgetOptional: typeof fromDb.benchmarkBudgetOptional === 'number' ? fromDb.benchmarkBudgetOptional : null,
@@ -311,6 +320,9 @@ const formatMajorFactor = (params: any) => {
}
const formatEditableMoney = (params: any) => {
if (!params.node?.group && !params.node?.rowPinned && !params.data?.hasCost) {
return ''
}
if (!params.node?.group && !params.node?.rowPinned && (params.value == null || params.value === '')) {
return '点击输入'
}
@@ -358,11 +370,14 @@ const columnDefs: Array<ColDef<DetailRow> | ColGroupDef<DetailRow>> = [
minWidth: 100,
flex: 2,
editable: params => !params.node?.group && !params.node?.rowPinned,
cellClass: params => (!params.node?.group && !params.node?.rowPinned ? 'ag-right-aligned-cell editable-cell-line' : 'ag-right-aligned-cell'),
editable: params => !params.node?.group && !params.node?.rowPinned && Boolean(params.data?.hasCost),
cellClass: params =>
!params.node?.group && !params.node?.rowPinned && params.data?.hasCost
? 'ag-right-aligned-cell editable-cell-line'
: 'ag-right-aligned-cell',
cellClassRules: {
'editable-cell-empty': params =>
!params.node?.group && !params.node?.rowPinned && (params.value == null || params.value === '')
!params.node?.group && !params.node?.rowPinned && Boolean(params.data?.hasCost) && (params.value == null || params.value === '')
},
aggFunc: decimalAggSum,
valueParser: params => parseNumberOrNull(params.newValue, { precision: 2 }),
@@ -549,6 +564,8 @@ const pinnedTopRowData = computed(() => [
groupName: '',
majorCode: '',
majorName: '',
hasCost: false,
hasArea: false,
amount: totalAmount.value,
benchmarkBudget: totalBenchmarkBudget.value,
benchmarkBudgetBasic: totalBenchmarkBudgetBasic.value,