This commit is contained in:
zwgczx committed 2026-03-06 17:40:08 +08:00
1 parent 626513bc21
commit c482faacbf
9 files changed
+198 -47

No files matched your search

+70
View File
@@ -0,0 +1,70 @@
<template>
<TypeLine
scene="xm-tab"
title=""
storage-key="project-active-cat"
default-category="info"
:categories="xmCategories"
/>
</template>
<script setup lang="ts">
import { computed, defineAsyncComponent, markRaw, onBeforeUnmount, onMounted, ref } from 'vue'
import localforage from 'localforage'
import TypeLine from '@/layout/typeLine.vue'
const infoView = markRaw(defineAsyncComponent(() => import('@/components/views/info.vue')))
const scaleInfoView = markRaw(defineAsyncComponent(() => import('@/components/views/xmInfo.vue')))
const htView = markRaw(defineAsyncComponent(() => import('@/components/views/Ht.vue')))
const consultCategoryFactorView = markRaw(
defineAsyncComponent(() => import('@/components/views/XmConsultCategoryFactor.vue'))
)
const majorFactorView = markRaw(
defineAsyncComponent(() => import('@/components/views/XmMajorFactor.vue'))
)
const PROJECT_INFO_KEY = 'xm-base-info-v1'
const PROJECT_INIT_CHANGED_EVENT = 'xm-project-init-changed'
const hasProjectBaseInfo = ref(false)
const fullXmCategories = [
{ key: 'info', label: '基础信息', component: infoView },
{ key: 'contract', label: '合同段管理', component: htView },
{ key: 'scale-info', label: '规模信息', component: scaleInfoView },
{ key: 'consult-category-factor', label: '咨询分类系数', component: consultCategoryFactorView },
{ key: 'major-factor', label: '工程专业系数', component: majorFactorView }
]
const xmCategories = computed(() =>
hasProjectBaseInfo.value ? fullXmCategories : [fullXmCategories[0]]
)
const refreshProjectBaseInfoState = async () => {
try {
const data = await localforage.getItem(PROJECT_INFO_KEY)
hasProjectBaseInfo.value = Boolean(data)
} catch (error) {
console.error('read project base info failed:', error)
hasProjectBaseInfo.value = false
}
}
const handleProjectInitChanged = (event: Event) => {
const detail = (event as CustomEvent<boolean>).detail
if (typeof detail === 'boolean') {
hasProjectBaseInfo.value = detail
return
}
void refreshProjectBaseInfoState()
}
onMounted(() => {
void refreshProjectBaseInfoState()
window.addEventListener(PROJECT_INIT_CHANGED_EVENT, handleProjectInitChanged as EventListener)
})
onBeforeUnmount(() => {
window.removeEventListener(PROJECT_INIT_CHANGED_EVENT, handleProjectInitChanged as EventListener)
})
</script>