tangning před 3 týdny
rodič
revize
0998192bd3

+ 1 - 1
src/constant/camera.ts

@@ -6,7 +6,7 @@ export const cameraTypeDesc = {
   [CameraType.SWKK_L]: "四维看看lite",
   [CameraType.SWKK_LA]: "指房宝小红屋相机",
   [CameraType.SWKJ]: "双目转台相机",
-  [CameraType.SWSX]: "深寻相机",
+  [CameraType.SWSX]: "激光手持相机",
   [CameraType.SWSS1]: "激光转台相机",
   [CameraType.SWSS2]: "激光移动相机",
 };

+ 1 - 1
src/constant/scene.ts

@@ -9,7 +9,7 @@ export const SceneTypeDesc: { [key in SceneType]: string } = {
   [SceneType.SWSSMX]: "激光转台",
   [SceneType.SWYDSS]: "激光移动",
   [SceneType.SWYDMX]: "激光移动",
-  [SceneType.SWSX]: "深巡",
+  [SceneType.SWSX]: "激光手持",
   // [SceneType.QJKK]: '全景看看',
 };
 

+ 1 - 1
src/view/case/download.vue

@@ -150,7 +150,7 @@ defineExpose<QuiskExpose>({
     });
     await download();
     loading.close();
-    ElMessage.success("下载完成");
+    ElMessage.success("请等待下载完成");
     // 返回真值以通知外层工厂关闭弹窗
     return true as any;
   },

+ 3 - 3
src/view/case/newShare.vue

@@ -88,9 +88,9 @@ const handleConfirm = async (showTips = false) => {
     ElMessage.error("请选择上级组织");
     return;
   }
-  if(orgSharePerm.value == 'none' && !selectedParentId.value){
-    return "success";
-  }
+  // if(orgSharePerm.value == 'none' && !selectedParentId.value){
+  //   return "success";
+  // }
   const isAuthMap: Record<"none" | "read" | "edit", number> = {
     none: 0,
     read: 1,

+ 1 - 1
src/view/case/no-case.vue

@@ -26,7 +26,7 @@ const props = withDefaults(
   }
 );
 const toHome = () => {
-  router.replace({ name: RouteName.vrmodel });
+  router.replace({ name: RouteName.dispatch });
 };
 </script>
 <style lang="scss" scoped>

+ 1 - 1
src/view/newFireCase/dyManager/sceneDownload.vue

@@ -134,7 +134,7 @@ defineExpose<QuiskExpose>({
     });
     await download();
     loading.close();
-    ElMessage.success("下载完成");
+    ElMessage.success("请等待下载完成");
   },
 });
 </script>

+ 1 - 1
src/view/newFireCase/meshManager/sceneDownload.vue

@@ -133,7 +133,7 @@ defineExpose<QuiskExpose>({
     });
     await download();
     loading.close();
-    ElMessage.success("下载完成");
+    ElMessage.success("请等待下载完成");
     return true as any;
   },
 });

+ 1 - 1
src/view/newFireCase/mix3dManager/fusionDownload.vue

@@ -135,7 +135,7 @@ defineExpose<QuiskExpose>({
     });
     await download();
     loading.close();
-    ElMessage.success("下载完成");
+    ElMessage.success("请等待下载完成");
   },
 });
 </script>

+ 1 - 1
src/view/newFireCase/mix3dManager/sceneDownload.vue

@@ -133,7 +133,7 @@ defineExpose<QuiskExpose>({
     });
     await download();
     loading.close();
-    ElMessage.success("下载完成");
+    ElMessage.success("请等待下载完成");
   },
 });
 </script>

+ 1 - 1
src/view/newFireCase/newFireDetails/components/mix3d.vue

@@ -166,7 +166,7 @@ const tableLoading = ref(false);
 const tableRef = ref<any>(null);
 const tableData = ref<any[]>([]);
 const selectedRows = ref<any[]>([]);
-const pager = ref({ page: 1, pageSize: 40, total: 0 });
+const pager = ref({ page: 1, pageSize: 10, total: 0 });
 let titleDebounceTimer: any = null;
 
 const resetImportSelection = async () => {

+ 21 - 6
src/view/newFireCase/newFireDetails/components/siteInspection.vue

@@ -278,9 +278,9 @@
               <div v-if="isInspectionImage && inspectionImageUrl" class="scene-image" @click="openInspectionViewer()">
                 <el-image :src="inspectionImageUrl" fit="contain" class="inline-image" />
               </div>
-              <div v-else class="records-preview">
-                <h3 class="title">上传文件</h3>
-                <div class="preview-text" @click="openInquestFile(inquestData)">{{ inquestData.filesTitle || '-' }}</div>
+              <div v-else class="records-nopreview">
+                <div class="title">暂不支持预览</div>
+                <el-button  @click="openInquestFile(inquestData)">下载</el-button>
               </div>
               <el-image-viewer
                 v-if="showViewer"
@@ -308,9 +308,9 @@
               <div v-if="isExtractionImage && extractionImageUrl" class="scene-image" @click="openExtractionViewer()">
                 <el-image :src="extractionImageUrl" fit="contain" class="inline-image" />
               </div>
-              <div v-else class="records-preview">
-                <h3 class="title">上传文件</h3>
-                <div class="preview-text" @click="openInquestFile(inquestData)">{{ extractionData.filesTitle || '-' }}</div>
+              <div v-else class="records-nopreview">
+                <div class="title">暂不支持预览</div>
+                <el-button  @click="openInquestFile(inquestData)">下载</el-button>
               </div>
               <el-image-viewer
                 v-if="showViewer"
@@ -640,6 +640,7 @@ const renameSelected = () => {
 };
 const applyRenameSelected = async (newName: string) => {
   const file = currentSelectedFile.value;
+  console.log('renameSelected', file);
   if (!file) return;
   try {
     await setCaseFile({ filesId: file.filesId, filesTitle: newName.trim() });
@@ -647,6 +648,7 @@ const applyRenameSelected = async (newName: string) => {
     // 本地同步更新名称,避免再次请求
     file.filesTitle = newName.trim();
     const mapToPic = (item: any): PicItem => ({
+      ...file,
       url: item.listCover || item.filesUrl || item.cover || item.url,
       name: item.filesTitle || item.title || '未命名',
     });
@@ -1494,11 +1496,24 @@ watch(caseId, () => { loadListsFromTree(); loadAlbum(); });
     height: 100%;
     overflow: auto;
     background: #f5f5f5;
+    position: relative;
     .section-title {
       font-size: 16px;
       font-weight: 500;
       color: rgba(0,0,0,.85);
     }
+    .records-nopreview{
+      text-align: center;
+      position: absolute; /* 子级绝对定位 */
+      /* 核心2行,固定写法 */
+      top: 50%;    /* 先让子元素顶部,移动到父元素垂直中点 */
+      left: 50%;   /* 先让子元素左侧,移动到父元素水平中点 */
+      transform: translate(-50%, -50%); /* 向左、向上位移自身的50% */
+      .title{
+        // display: inline-block;
+        color: #9a9a9a;
+      }
+    }
     .records-preview {
       height: calc(100% - 140px);
       max-width: 960px;

+ 78 - 1
src/view/newFireCase/newFireDetails/editIndex.vue

@@ -4,11 +4,19 @@
       <el-menu-item 
         v-for="menu in menus" 
         :key="menu.key"
+        v-show="showItem(menu)"
         :index="menu.key"
         @click="handleMenuClick(menu)"
       >
         {{ menu.label }}
       </el-menu-item>
+      <!-- <el-menu-item 
+      v-if="editOrShow != 'edit'"
+        index="screenRecord"
+        @click="handleMenuClick(menu)"
+      >
+        现场讲解
+      </el-menu-item> -->
     </el-menu>
 
     <template v-if="currentMenuKey === 'info'">
@@ -43,6 +51,7 @@ import SiteInspection from './components/siteInspection.vue';
 import OtherFiles from './components/otherFiles.vue';
 import { ElMessage } from "element-plus";
 import { Fire, setFire } from "@/app/fire/store/fire";
+import { getFusionAndSceneList, caseFilesTypeGetTree, getRecordCaseVideo } from '@/store/editCsae';
 
 const props = defineProps<{
   caseId: number;
@@ -59,7 +68,15 @@ const emit = defineEmits<{
 const route = useRoute();
 const vueRouter = useRouter();
 const caseId = computed(() => Number(route.params.caseId));
+const editOrShow = computed(() => route.query.editOrShow as string || 'show');
 let tempFire = ref({});
+const fusionList = ref([]);
+const scenes = ref<Scene[]>([]);
+const showObj = ref<any>({
+  siteInspection: true,
+  otherFiles: true,
+  screenRecord: true
+});
 watch(
   () => props.currentRecord,
   (newVal) => {
@@ -74,6 +91,43 @@ watch(
 const startShot = (payload?: any) => {
   emit("start", payload);
 }
+const initData = async () => {
+    getFusionAndSceneList({ caseId: caseId.value, type: 'scene' }).then(res => {
+      console.log('getFusionAndSceneList', res)
+      scenes.value = res || []
+    })
+    getFusionAndSceneList({ caseId: caseId.value, type: 'fusion' }).then(res => {
+      console.log('getFusionAndSceneList', res)
+      fusionList.value = res || []
+    })
+    
+    caseFilesTypeGetTree(caseId.value).then(res => {
+      showObj.value.siteInspection = recursiveSearch(res.filter(item => item.filesTypeName != '其他资料'))
+      showObj.value.otherFiles = recursiveSearch(res.filter(item => item.filesTypeName == '其他资料'))
+      console.log('caseFilesTypeGetTree', res, showObj.value)
+      // fusionList.value = res || []
+    })
+    getRecordCaseVideo({ caseId: caseId.value }).then(res => {
+      console.log('getRecordCaseVideo', res)
+      showObj.value.screenRecord = res.length > 0;
+    })
+    // const res: any = await caseFilesTypeGetTree(caseId.value!);
+}
+const showItem = (item) => {
+  console.log('showItem', item)
+  if(editOrShow.value === 'edit') return true;
+  if(!item) return false;
+  switch (item.key) { 
+    case 'scene': return scenes.value.length;
+    case 'mix3d': return fusionList.value.length; // 暂时隐藏
+    case 'siteInspection': return showObj.value.siteInspection; // 暂时隐藏
+    case 'otherFiles': return showObj.value.otherFiles; // 暂时隐藏
+    case 'screenRecord': return showObj.value.screenRecord; // 暂时隐藏
+    default: return true;
+  }
+}
+
+initData()
 // 从路由查询参数中获取当前菜单项,如果没有则默认为 'info'
 let currentMenuKey = ref(route.query.tab as string || 'info');
 // 处理菜单点击事件
@@ -189,7 +243,30 @@ const renameHandler = async (evt: any) => {
     ElMessage.error('保存失败,请稍后重试');
   }
 };
-
+const recursiveSearch = (nodes) => {
+    // 如果没有节点,直接返回
+    if (!nodes || !nodes.length) return;
+    
+    // 遍历当前节点
+    for (const node of nodes) {
+      // 检查是否符合条件
+      if (node.caseFilesList && node.caseFilesList.length > 0 && node.caseFilesList.some(file => file.filesUrl)) {
+        // 如果只需要第一个,直接返回
+            return true; // 终止递归
+      }
+      
+      // 如果有子节点,递归查询
+      if (node.childrenList && node.childrenList.length) {
+        const found = recursiveSearch(node.childrenList);
+        // 如果已经找到第一个,终止递归
+        if(found){
+          return true;
+        }
+      }
+    }
+    
+    return false;
+  }
 onMounted(() => {
   window.addEventListener('fireDetails:renameTitle', renameHandler as any);
 });

+ 1 - 1
src/view/newFireCase/newdispatch/editFire.vue

@@ -242,7 +242,7 @@ const tableRef = ref<any>(null);
 const tableData = ref<Scene[]>([]);
 const selectedRows = ref<Scene[]>([]);
 const tableLoading = ref(false);
-const pager = ref({ page: 1, pageSize: 40, total: 0 });
+const pager = ref({ page: 1, pageSize: 10, total: 0 });
 let titleDebounceTimer: any = null;
 
 const rowKey = (row: any) => `${Number(row?.type)}__${String(row?.num)}`;

+ 1 - 1
src/view/vrmodel/sceneDownload.vue

@@ -133,7 +133,7 @@ defineExpose<QuiskExpose>({
     });
     await download();
     loading.close();
-    ElMessage.success("下载完成");
+    ElMessage.success("请等待下载完成");
   },
 });
 </script>