57 lines
1.6 KiB
Vue
57 lines
1.6 KiB
Vue
<script setup lang="ts">
|
|
import { computed, onActivated, onMounted, ref } from 'vue'
|
|
import localforage from 'localforage'
|
|
import { getServiceDictEntries, isIndustryEnabledByType, getIndustryTypeValue } from '@/sql'
|
|
import XmFactorGrid from '@/components/common/XmFactorGrid.vue'
|
|
|
|
interface XmBaseInfoState {
|
|
projectIndustry?: string
|
|
}
|
|
|
|
type ServiceItem = {
|
|
code: string
|
|
name: string
|
|
defCoe: number | null
|
|
desc?: string | null
|
|
notshowByzxflxs?: boolean
|
|
}
|
|
|
|
const PROJECT_INFO_KEY = 'xm-base-info-v1'
|
|
const projectIndustry = ref('')
|
|
|
|
const loadProjectIndustry = async () => {
|
|
try {
|
|
const data = await localforage.getItem<XmBaseInfoState>(PROJECT_INFO_KEY)
|
|
projectIndustry.value =
|
|
typeof data?.projectIndustry === 'string' ? data.projectIndustry.trim() : ''
|
|
} catch (error) {
|
|
console.error('loadProjectIndustry failed:', error)
|
|
projectIndustry.value = ''
|
|
}
|
|
}
|
|
|
|
const filteredServiceDict = computed<Record<string, ServiceItem>>(() => {
|
|
const industry = projectIndustry.value
|
|
if (!industry) return {}
|
|
const entries = getServiceDictEntries()
|
|
.filter(({ item }) => isIndustryEnabledByType(item, getIndustryTypeValue(industry))
|
|
)
|
|
.map(({ id, item }) => [id, item as ServiceItem] as const)
|
|
return Object.fromEntries(entries)
|
|
})
|
|
|
|
onMounted(() => {
|
|
void loadProjectIndustry()
|
|
})
|
|
|
|
onActivated(() => {
|
|
void loadProjectIndustry()
|
|
})
|
|
</script>
|
|
|
|
<template>
|
|
<XmFactorGrid title="咨询分类系数明细" storage-key="xm-consult-category-factor-v1" :dict="filteredServiceDict"
|
|
:disable-budget-edit-when-standard-null="true" :exclude-notshow-by-zxflxs="true"
|
|
:init-budget-value-from-standard="true" />
|
|
</template>
|