|
|
@@ -33,7 +33,7 @@
|
|
|
</template>
|
|
|
|
|
|
<script setup lang="ts">
|
|
|
-import { ref, computed, watch } from "vue";
|
|
|
+import { ref, computed, watch, onMounted } from "vue";
|
|
|
import { useRoute, useRouter } from 'vue-router';
|
|
|
import BasicInfo from './components/basicInfo.vue';
|
|
|
import ScreenShot from './components/screenShot.vue';
|
|
|
@@ -41,6 +41,7 @@ import Scene from './components/scene.vue';
|
|
|
import Mix3d from './components/mix3d.vue';
|
|
|
import SiteInspection from './components/siteInspection.vue';
|
|
|
import OtherFiles from './components/otherFiles.vue';
|
|
|
+import { getFusionAndSceneList } from '@/store/editCsae';
|
|
|
|
|
|
const props = defineProps<{
|
|
|
caseId: number;
|
|
|
@@ -69,8 +70,51 @@ watch(() => props.currentRecord, (newVal, oldVal) => {
|
|
|
const startShot = (payload?: any) => {
|
|
|
emit("start", payload);
|
|
|
}
|
|
|
-// 从路由查询参数中获取当前菜单项,如果没有则默认为 'info'
|
|
|
-let currentMenuKey = ref(route.query.tab as string || 'info');
|
|
|
+// 从路由查询参数中获取当前菜单项,如果没有则默认为 'scene'
|
|
|
+let currentMenuKey = ref(route.query.tab as string || 'scene');
|
|
|
+
|
|
|
+// 是否存在“实景三维”数据,用于控制菜单项显示
|
|
|
+const hasScene3D = ref(false);
|
|
|
+const refreshSceneAvailability = async () => {
|
|
|
+ try {
|
|
|
+ if (caseId.value) {
|
|
|
+ const list: any = await getFusionAndSceneList({ caseId: caseId.value, type: 'scene' });
|
|
|
+ hasScene3D.value = Array.isArray(list) && list.length > 0;
|
|
|
+ if (!hasScene3D.value) {
|
|
|
+ currentMenuKey.value = 'mix3d';
|
|
|
+ vueRouter.replace({
|
|
|
+ path: route.path,
|
|
|
+ query: { ...route.query, tab: 'mix3d' }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ hasScene3D.value = false;
|
|
|
+ currentMenuKey.value = 'mix3d';
|
|
|
+ vueRouter.replace({
|
|
|
+ path: route.path,
|
|
|
+ query: { ...route.query, tab: 'mix3d' }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ } catch (e) {
|
|
|
+ hasScene3D.value = false;
|
|
|
+ }
|
|
|
+};
|
|
|
+onMounted(() => {
|
|
|
+ refreshSceneAvailability();
|
|
|
+});
|
|
|
+watch(() => caseId.value, () => {
|
|
|
+ refreshSceneAvailability();
|
|
|
+});
|
|
|
+// 若无实景三维且当前在该页,回退到“多元融合”
|
|
|
+watch(hasScene3D, (has) => {
|
|
|
+ if (!has && currentMenuKey.value === 'scene') {
|
|
|
+ currentMenuKey.value = 'mix3d';
|
|
|
+ vueRouter.replace({
|
|
|
+ path: route.path,
|
|
|
+ query: { ...route.query, tab: 'mix3d' }
|
|
|
+ });
|
|
|
+ }
|
|
|
+});
|
|
|
// 处理菜单点击事件
|
|
|
const handleMenuClick = async(menu) => {
|
|
|
currentMenuKey.value = menu.key;
|
|
|
@@ -85,12 +129,6 @@ const handleMenuClick = async(menu) => {
|
|
|
|
|
|
// 执行菜单项的点击事件
|
|
|
menu.onClick();
|
|
|
- // const caseInfo = await getCaseInfo(caseId.value!);
|
|
|
- // if (caseInfo) {
|
|
|
- // // 设置页面标题,使用案件信息
|
|
|
- // pageTitle.value = caseInfo.caseTitle + " | 编辑"; // 使用 pageTitle
|
|
|
- // desc.value = "";
|
|
|
- // }
|
|
|
};
|
|
|
const menus = computed(() => {
|
|
|
if (!caseId.value) {
|
|
|
@@ -99,7 +137,7 @@ const menus = computed(() => {
|
|
|
const currentCaseId = caseId.value;
|
|
|
// const fuseLink = getFuseCodeLink(currentCaseId);
|
|
|
|
|
|
- return [
|
|
|
+ const list = [
|
|
|
{
|
|
|
key: "info",
|
|
|
disabled: false, // 默认不禁用,与原来不同
|
|
|
@@ -148,6 +186,8 @@ const menus = computed(() => {
|
|
|
},
|
|
|
},
|
|
|
];
|
|
|
+ // 若无实景三维,则不显示该项
|
|
|
+ return list.filter(item => item.key !== 'scene' || hasScene3D.value);
|
|
|
});
|
|
|
const menusAbstract = computed(() => {
|
|
|
if (!caseId.value) {
|
|
|
@@ -156,7 +196,7 @@ const menusAbstract = computed(() => {
|
|
|
const currentCaseId = caseId.value;
|
|
|
// const fuseLink = getFuseCodeLink(currentCaseId);
|
|
|
|
|
|
- return [
|
|
|
+ const list = [
|
|
|
{
|
|
|
key: "info",
|
|
|
disabled: false, // 默认不禁用,与原来不同
|
|
|
@@ -182,5 +222,7 @@ const menusAbstract = computed(() => {
|
|
|
},
|
|
|
}
|
|
|
];
|
|
|
+ // 若无实景三维,则不显示该项
|
|
|
+ return list.filter(item => item.key !== 'scene' || hasScene3D.value);
|
|
|
});
|
|
|
</script>
|