wangfumin 2 месяцев назад
Родитель
Сommit
78f0a17a35

+ 107 - 94
src/view/newFireCase/newFireDetails/components/basicInfo.vue

@@ -10,16 +10,18 @@
       </div>
       <!-- fire 展示(原有) -->
       <div v-else class="camera-from show-view">
-        <div class="form-title">案件信息</div>
-        <div class="info-row"><span class="label">项目编号:</span><span class="value">{{ bindFire.projectSn || '-' }}</span></div>
-        <div class="info-row"><span class="label">起火对象:</span><span class="value">{{ bindFire.projectName || '-' }}</span></div>
-        <div class="info-row"><span class="label">详细地址:</span><span class="value">{{ bindFire.mapUrl || '-' }}</span></div>
-        <div class="info-row"><span class="label">起火地址:</span><span class="value">{{ bindFire.projectAddress || '-' }}</span></div>
-        <div class="info-row"><span class="label">起火场所:</span><span class="value">{{ bindFire.projectSite || '-' }}</span></div>
-        <div class="info-row"><span class="label">承办单位:</span><span class="value">{{ bindFire.organizerDeptName || '-' }}</span></div>
-        <div class="info-row"><span class="label">承办人员:</span><span class="value">{{ bindFire.organizerUsers || '-' }}</span></div>
-        <div class="info-row"><span class="label">事故日期:</span><span class="value">{{ bindFire.accidentDate || '-' }}</span></div>
-        <div class="info-row"><span class="label">火灾原因:</span><span class="value">{{ bindFire.fireReason || '-' }}</span></div>
+        <div class="all-content">
+          <div class="form-title">案件信息</div>
+          <div class="info-row"><span class="label">项目编号:</span><span class="value">{{ bindFire.projectSn || '-' }}</span></div>
+          <div class="info-row"><span class="label">起火对象:</span><span class="value">{{ bindFire.projectName || '-' }}</span></div>
+          <div class="info-row"><span class="label">详细地址:</span><span class="value">{{ bindFire.mapUrl || '-' }}</span></div>
+          <div class="info-row"><span class="label">起火地址:</span><span class="value">{{ bindFire.projectAddress || '-' }}</span></div>
+          <div class="info-row"><span class="label">起火场所:</span><span class="value">{{ bindFire.projectSite || '-' }}</span></div>
+          <div class="info-row"><span class="label">承办单位:</span><span class="value">{{ bindFire.organizerDeptName || '-' }}</span></div>
+          <div class="info-row"><span class="label">承办人员:</span><span class="value">{{ bindFire.organizerUsers || '-' }}</span></div>
+          <div class="info-row"><span class="label">事故日期:</span><span class="value">{{ bindFire.accidentDate || '-' }}</span></div>
+          <div class="info-row"><span class="label">火灾原因:</span><span class="value">{{ bindFire.fireReason || '-' }}</span></div>
+        </div>
       </div>
     </div>
 
@@ -27,89 +29,93 @@
     <template v-else>
       <!-- criminal 编辑(复原 edit.vue) -->
       <el-form v-if="props.fromRoute === 'criminal'" ref="form" label-width="96px" class="camera-from">
-        <div class="form-title">案件信息</div>
-        <el-form-item label="案件名称">
-          <el-input v-model="bindFire.caseTitle" maxlength="50" placeholder="请输入案件名称" />
-        </el-form-item>
-        <el-form-item label="详细地址">
-          <el-input v-model="bindFire.mapUrl" placeholder="输入名称搜索" clearable disabled>
-            <template #append>
-              <el-button :icon="Search" @click="searchAMapAddress" />
-            </template>
-          </el-input>
-        </el-form-item>
+        <div class="all-content">
+          <div class="form-title">案件信息</div>
+          <el-form-item label="案件名称">
+            <el-input v-model="bindFire.caseTitle" maxlength="50" placeholder="请输入案件名称" />
+          </el-form-item>
+          <el-form-item label="详细地址" class="mandatory">
+            <el-input v-model="bindFire.mapUrl" placeholder="输入名称搜索" clearable disabled>
+              <template #append>
+                <el-button :icon="Search" @click="searchAMapAddress" />
+              </template>
+            </el-input>
+          </el-form-item>
+        </div>
       </el-form>
 
       <!-- fire 编辑(原有) -->
       <el-form v-else ref="form" label-width="100px" class="camera-from">
-        <div class="form-title">案件信息</div>
-        <el-form-item label="项目编号" class="mandatory">
-          <el-input
-            v-model="bindFire.projectSn"
-            maxlength="18"
-            placeholder="请输入项目编号"
-          />
-        </el-form-item>
-        <el-form-item label="起火对象" class="mandatory">
-          <el-input
-            v-model="bindFire.projectName"
-            maxlength="50"
-            placeholder="请输入起火对象"
-          />
-        </el-form-item>
-        <el-form-item label="详细地址" class="mandatory">
-          <el-input
-            v-model="bindFire.mapUrl"
-            placeholder="输入名称搜索"
-            clearable
-            readonly
-            class="mandatory"
-          >
-            <template #append>
-              <el-button :icon="Search" @click="searchAMapAddress" />
-            </template>
-          </el-input>
-        </el-form-item>
+        <div class="all-content">
+          <div class="form-title">案件信息</div>
+          <el-form-item label="项目编号" class="mandatory">
+            <el-input
+              v-model="bindFire.projectSn"
+              maxlength="18"
+              placeholder="请输入项目编号"
+            />
+          </el-form-item>
+          <el-form-item label="起火对象" class="mandatory">
+            <el-input
+              v-model="bindFire.projectName"
+              maxlength="50"
+              placeholder="请输入起火对象"
+            />
+          </el-form-item>
+          <el-form-item label="详细地址" class="mandatory">
+            <el-input
+              v-model="bindFire.mapUrl"
+              placeholder="输入名称搜索"
+              clearable
+              readonly
+              class="mandatory"
+            >
+              <template #append>
+                <el-button :icon="Search" @click="searchAMapAddress" />
+              </template>
+            </el-input>
+          </el-form-item>
 
-        <el-form-item label="起火地址" class="mandatory">
-          <el-input
-            v-model="bindFire.projectAddress"
-            maxlength="50"
-            placeholder="请输入起火地址"
-          />
-        </el-form-item>
-        <el-form-item label="起火场所" class="mandatory">
-          <el-cascader
-            style="width: 100%"
-            v-model="projectSite"
-            placeholder="起火场所"
-            :options="place"
-            :props="{ expandTrigger: 'hover' }"
-          />
-        </el-form-item>
-        <el-form-item label="承办单位" class="mandatory">
-          <companySelect v-model="bindFire.deptId" hideAll :notUpdate="true" disabled />
-        </el-form-item>
-        <el-form-item label="承办人员" class="mandatory" placeholder="请输入承办人员">
-          <el-input v-model="bindFire.organizerUsers" maxlength="50" />
-        </el-form-item>
-        <el-form-item label="事故日期" class="mandatory" placeholder="请选择事故日期">
-          <el-date-picker
-            type="date"
-            v-model="accidentDate"
-            style="width: 100%"
-            :disabled-date="(date) => date.getTime() > new Date().getTime()"
-          />
-        </el-form-item>
-        <el-form-item label="火灾原因" class="mandatory">
-          <el-cascader
-            style="width: 100%"
-            v-model="fireReason"
-            placeholder="火灾原因:"
-            :options="reason"
-            :props="{ expandTrigger: 'hover' }"
-          />
-        </el-form-item>
+          <el-form-item label="起火地址" class="mandatory">
+            <el-input
+              v-model="bindFire.projectAddress"
+              maxlength="50"
+              placeholder="请输入起火地址"
+            />
+          </el-form-item>
+          <el-form-item label="起火场所" class="mandatory">
+            <el-cascader
+              style="width: 100%"
+              v-model="projectSite"
+              placeholder="起火场所"
+              :options="place"
+              :props="{ expandTrigger: 'hover' }"
+            />
+          </el-form-item>
+          <el-form-item label="承办单位" class="mandatory">
+            <companySelect v-model="bindFire.deptId" hideAll :notUpdate="true" disabled />
+          </el-form-item>
+          <el-form-item label="承办人员" class="mandatory" placeholder="请输入承办人员">
+            <el-input v-model="bindFire.organizerUsers" maxlength="50" />
+          </el-form-item>
+          <el-form-item label="事故日期" class="mandatory" placeholder="请选择事故日期">
+            <el-date-picker
+              type="date"
+              v-model="accidentDate"
+              style="width: 100%"
+              :disabled-date="(date) => date.getTime() > new Date().getTime()"
+            />
+          </el-form-item>
+          <el-form-item label="火灾原因" class="mandatory">
+            <el-cascader
+              style="width: 100%"
+              v-model="fireReason"
+              placeholder="火灾原因:"
+              :options="reason"
+              :props="{ expandTrigger: 'hover' }"
+            />
+          </el-form-item>
+        </div>
       </el-form>
     </template>
   </div>
@@ -393,11 +399,15 @@ const handleMapConfirm = (LocationInfo: any) => {
 }
 .camera-from {
   width: 60%;
-  height: calc(100% - 166px);
+  height: calc(100% - 185px);
   background: #FFFFFF;
   margin: 0 auto;
-  padding: 48px 280px 48px 280px;
-  overflow: auto;
+  padding: 48px 140px 48px 140px;
+  .all-content{
+    height: calc(100% - 0px);
+    padding-right: 60px;
+    overflow: auto;
+  }
   .form-title{
     text-align: center;
     font-family: Microsoft YaHei, Microsoft YaHei;
@@ -407,17 +417,20 @@ const handleMapConfirm = (LocationInfo: any) => {
     line-height: 36px;
     margin-bottom: 44px;
   }
+  .mandatory{
+    .el-input-group__append button.el-button{
+      border-left: 0;
+    }
+  }
 }
 </style>
 
 <style scoped lang="scss">
-// todo: 滚动留白
 .show-view {
   .info-row {
     display: flex;
-    align-items: center;
+    // align-items: center;
     margin-bottom: 40px;
-    // todo: 头部对齐
     .label {
       width: 84px;
       color: rgba(0, 0, 0, 0.85);

+ 97 - 0
src/view/newFireCase/newFireDetails/components/manifesttext.vue

@@ -0,0 +1,97 @@
+<template>
+  <div class="manifest-text">
+    <p><span class="label">起火单位/地址:</span>{{ safe(d.address) }}</p>
+    <p><span class="label">提取日期:</span>{{ date }}</p>
+
+    <div class="section" v-if="Array.isArray(d.detail) && d.detail.length">
+      <div class="section-title">提取清单明细</div>
+      <div class="item" v-for="(item, idx) in d.detail" :key="idx">
+        <p class="item-title">编号 {{ idx + 1 }}</p>
+        <p>名称:{{ safe(item.name) }}</p>
+        <p>规格:{{ safe(item.spec) }}</p>
+        <p>数量:{{ safe(item.num) }}</p>
+        <p>提取部位:{{ safe(item.part) }}</p>
+        <p class="desc"><span class="label">特征:</span><span class="pre-wrap">{{ safe(item.desc) }}</span></p>
+      </div>
+    </div>
+
+    <div class="section" v-if="Array.isArray(d.extractUser) && d.extractUser.length">
+      <div class="section-title">提取人</div>
+      <div class="user-item" v-for="(u, i) in d.extractUser" :key="i">
+        <p>姓名:{{ safe(u.name) }}</p>
+        <p>工作单位:{{ safe(u.address) }}</p>
+        <p>身份证件号码:{{ safe(u.id) }}</p>
+      </div>
+    </div>
+
+    <div class="section" v-if="Array.isArray(d.witnessInfo) && d.witnessInfo.length">
+      <div class="section-title">证人或当事人</div>
+      <div class="witness-item" v-for="(w, i) in d.witnessInfo" :key="i">
+        <p>姓名:{{ safe(w.name) }}</p>
+        <p>身份证件号码:{{ safe(w.id) }}</p>
+        <p>联系电话:{{ safe(w.phone) }}</p>
+        <p>单位或住址:{{ safe(w.address) }}</p>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+import { computed } from 'vue';
+
+interface DetailItem {
+  name?: string;
+  spec?: string;
+  num?: string | number;
+  part?: string;
+  desc?: string;
+}
+
+interface Person {
+  name?: string;
+  address?: string;
+  id?: string;
+  phone?: string;
+}
+
+interface Time { year?: string | number; month?: string | number; day?: string | number }
+
+interface ExtractionData {
+  address?: string;
+  time?: Time;
+  location?: string;
+  detail?: DetailItem[];
+  extractUser?: Person[];
+  witnessInfo?: Person[];
+}
+
+const props = defineProps<{ data?: ExtractionData }>();
+const d = computed(() => props.data ?? {});
+
+const date = computed(() => {
+  const t = (d.value.time || {}) as Time;
+  const y = t.year ?? '';
+  const m = t.month ?? '';
+  const day = t.day ?? '';
+  if (y === '' && m === '' && day === '') return '-';
+  return `${y}年${m}月${day}日`;
+});
+
+const safe = (v: any) => (v === undefined || v === null || v === '' ? '-' : String(v));
+</script>
+
+<style scoped>
+.manifest-text {
+  line-height: 40px;
+  font-size: 14px;
+  color: rgba(0, 0, 0, 0.85);
+  word-break: break-word;
+}
+.label { color: rgba(0, 0, 0, 0.65); }
+.section { margin-top: 0; }
+.section-title { font-weight: 600; margin-bottom: 8px; color: rgba(0, 0, 0, 0.85); }
+.item { padding: 8px 12px; border: 1px solid #f0f0f0; border-radius: 4px; background: #fafafa; margin-bottom: 8px; }
+.item-title { font-weight: 600; margin-bottom: 4px; }
+.desc .pre-wrap { white-space: pre-wrap; }
+.user-item, .witness-item { padding: 8px 12px; border: 1px solid #f0f0f0; border-radius: 4px; background: #fafafa; margin-bottom: 16px; }
+</style>

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

@@ -360,7 +360,7 @@ onMounted(async () => {
     width: 510px;
     height: 100%;
     overflow: auto;
-    border-right: 1px solid #f0f0f0;
+    // border-right: 1px solid #f0f0f0;
     .no-data{
       line-height: 100px;
       color: #909399;

+ 12 - 12
src/view/newFireCase/newFireDetails/components/siteInspection.vue

@@ -293,7 +293,7 @@
             <template v-else>
               <div class="records-preview">
                 <h3 class="title">基本信息</h3>
-                <pre class="preview-text">{{ currentInspection.content }}</pre>
+                <SiteText :data="inquestData" />
               </div>
             </template>
           </div>
@@ -321,7 +321,7 @@
             </template>
             <template v-else>
               <div class="records-preview">
-                <pre class="preview-text">{{ currentExtraction.content }}</pre>
+                <ManifestText :data="extractionData" />
               </div>
             </template>
           </div>
@@ -349,6 +349,8 @@
 import { ref, computed, watch, onMounted, onUnmounted } from 'vue';
 import { ElMessage, ElMessageBox } from 'element-plus';
 import RelName from './relName.vue';
+import SiteText from './sitetext.vue';
+import ManifestText from './manifesttext.vue';
 // 弹窗已移除,直接跳转到绘制页面
 import { CaseFile, BoardType, setCaseFile, delCaseFile, getCaseFileImageInfo } from '@/store/caseFile';
 import { FileDrawType } from '@/constant/caseFile';
@@ -782,12 +784,12 @@ const formatInquest = (d: any) => {
   const s = d.startTime || {}; const e = d.endTime || {};
   const witnesses = Array.isArray(d.witnessInfo) ? d.witnessInfo.map((w: any, i: number) => `证人${i+1}:${w.name || '-'},${w.year || ''}年${w.month || ''}月${w.day || ''}日\n身份证件号码:${w.id || '-'}\n单位或住址:${w.address || '-'}\n`).join('\n') : '';
   return (
-    `勘验次数:第 ${d.count || '-'} 次勘验\n` +
-    `勘验时间:${s.year || ''}年${s.month || ''}月${s.day || ''}日 ${s.hour || ''}时${s.min || ''}分 至 ${e.year || ''}年${e.month || ''}月${e.day || ''}日 ${e.hour || ''}时${e.min || ''}分\n` +
-    `勘验地点:${d.address || '-'}\n` +
-    `勘验人员姓名、勘验人描述(含技术员职务):${d.userInfo || '-'}\n` +
-    `勘验气象条件(天空、风力、温度):${d.weather || '-'}\n\n` +
-    `勘验情况:\n${d.situation || ''}\n\n` +
+    `勘验次数: 第 ${d.count || '-'} 次勘验\n` +
+    `勘验时间: ${s.year || ''}年${s.month || ''}月${s.day || ''}日 ${s.hour || ''}时${s.min || ''}分 至 ${e.year || ''}年${e.month || ''}月${e.day || ''}日 ${e.hour || ''}时${e.min || ''}分\n` +
+    `勘验地点: ${d.address || '-'}\n` +
+    `勘验人员姓名、勘验人描述(含技术员职务): ${d.userInfo || '-'}\n` +
+    `勘验气象条件(天空、风力、温度): ${d.weather || '-'}\n\n` +
+    `勘验情况: \n${d.situation || ''}\n\n` +
     `一、环境勘验\n${d.environment || ''}\n\n` +
     `二、初步勘验\n${d.firstInquest || ''}\n\n` +
     `三、细项勘验\n${d.carefulInquest || ''}\n\n` +
@@ -973,7 +975,6 @@ const downloadSelected = async (id?: number) => {
     if (activeTab.value === 'inspection') {
       if (!caseId.value) return;
       const title = ((inspectionList.value.find((i) => Number(i?.id) === Number(selectedInquestId.value))?.title) || '勘验笔录') + '.docx';
-      console.log(currentInspection.value, 'downloadSelected')
       const blob: Blob = await (exportCaseInquestInfo(caseId.value!, id) as any);
       await saveAs(blob, title);
       return;
@@ -1287,7 +1288,7 @@ watch(caseId, () => { loadListsFromTree(); loadAlbum(); });
 .let-bar {
   width: 510px;
   height: 100%;
-  border-right: 1px solid #f0f0f0;
+  // border-right: 1px solid #f0f0f0;
   background: #fff;
   .scene-tabs{
     height: calc(100% - 60px);
@@ -1460,11 +1461,10 @@ watch(caseId, () => { loadListsFromTree(); loadAlbum(); });
     .section-title {
       font-size: 16px;
       font-weight: 500;
-      margin-bottom: 12px;
       color: rgba(0,0,0,.85);
     }
     .records-preview {
-      height: calc(100% - 120px);
+      height: calc(100% - 140px);
       max-width: 960px;
       margin: 0 auto;
       padding: 48px;

+ 148 - 0
src/view/newFireCase/newFireDetails/components/sitetext.vue

@@ -0,0 +1,148 @@
+<template>
+  <div class="site-text">
+    <p><span class="label">勘验次数:</span>第 {{ safe(d.count) }} 次勘验</p>
+    <p><span class="label">勘验时间:</span>{{ dateRange }}</p>
+    <p><span class="label">勘验地点:</span>{{ safe(d.address) }}</p>
+    <p><span class="label">勘验人员姓名、勘验人描述(含技术员职务):</span>{{ safe(d.userInfo) }}</p>
+    <p><span class="label">勘验气象条件(天空、风力、温度):</span>{{ safe(d.weather) }}</p>
+
+    <div class="section">
+      <div class="section-title">勘验情况:</div>
+      <div class="section-body">{{ safe(d.situation) }}</div>
+    </div>
+
+    <div class="section">
+      <div class="section-title">一、环境勘验</div>
+      <div class="section-body">{{ safe(d.environment) }}</div>
+    </div>
+
+    <div class="section">
+      <div class="section-title">二、初步勘验</div>
+      <div class="section-body">{{ safe(d.firstInquest) }}</div>
+    </div>
+
+    <div class="section">
+      <div class="section-title">三、细项勘验</div>
+      <div class="section-body">{{ safe(d.carefulInquest) }}</div>
+    </div>
+
+    <div class="section">
+      <div class="section-title">四、专项勘验</div>
+      <div class="section-body">{{ safe(d.specialInquest) }}</div>
+    </div>
+
+    <div class="section">
+      <div class="section-title">提取物品描述:</div>
+      <div class="section-body">{{ safe(d.itemDescription) }}</div>
+    </div>
+
+    <div class="section">
+      <div class="section-title">现场拍照制图描述:</div>
+      <div class="section-body">{{ safe(d.imgDescription) }}</div>
+    </div>
+
+    <div class="section">
+      <div class="section-title">勘验信息:</div>
+      <p>勘验负责人:{{ safe(d.leader) }}</p>
+      <p>记录人:{{ safe(d.recorder) }}</p>
+      <p>勘验人:{{ safe(d.inspector) }}</p>
+    </div>
+
+    <div v-if="Array.isArray(d.witnessInfo) && d.witnessInfo.length" class="section witness-list">
+      <div class="section-title">证人信息:</div>
+      <div class="witness-item" v-for="(w, i) in d.witnessInfo" :key="i">
+        <p>证人{{ i + 1 }}:{{ safe(w.name) }},{{ safe(w.year) }}年{{ safe(w.month) }}月{{ safe(w.day) }}日</p>
+        <p>身份证件号码:{{ safe(w.id) }}</p>
+        <p>单位或住址:{{ safe(w.address) }}</p>
+      </div>
+    </div>
+  </div>
+  
+</template>
+
+<script setup lang="ts">
+import { computed } from 'vue';
+
+interface Time {
+  year?: string | number;
+  month?: string | number;
+  day?: string | number;
+  hour?: string | number;
+  min?: string | number;
+}
+
+interface Witness {
+  name?: string;
+  year?: string | number;
+  month?: string | number;
+  day?: string | number;
+  id?: string;
+  address?: string;
+}
+
+interface InquestData {
+  count?: string | number;
+  startTime?: Time;
+  endTime?: Time;
+  address?: string;
+  userInfo?: string;
+  weather?: string;
+  situation?: string;
+  environment?: string;
+  firstInquest?: string;
+  carefulInquest?: string;
+  specialInquest?: string;
+  itemDescription?: string;
+  imgDescription?: string;
+  leader?: string;
+  recorder?: string;
+  inspector?: string;
+  witnessInfo?: Witness[];
+}
+
+const props = defineProps<{ data?: InquestData }>();
+const d = computed(() => props.data ?? {});
+const s = computed(() => d.value.startTime || {});
+const e = computed(() => d.value.endTime || {});
+
+const dateRange = computed(() => {
+  const sv = s.value as Time;
+  const ev = e.value as Time;
+  const sdate = `${sv.year ?? ''}年${sv.month ?? ''}月${sv.day ?? ''}日 ${sv.hour ?? ''}时${sv.min ?? ''}分`;
+  const edate = `${ev.year ?? ''}年${ev.month ?? ''}月${ev.day ?? ''}日 ${ev.hour ?? ''}时${ev.min ?? ''}分`;
+  return `${sdate} 至 ${edate}`.trim();
+});
+
+const safe = (v: any) => (v === undefined || v === null || v === '' ? '-' : String(v));
+</script>
+
+<style scoped>
+.site-text {
+  line-height: 48px;
+  font-size: 14px;
+  color: #000;
+  word-break: break-word;
+}
+/* .label {
+  color: rgba(0, 0, 0, 0.65);
+} */
+.section {
+  margin-top: 0;
+}
+.section-title {
+  color: rgba(0, 0, 0, 0.85);
+}
+.section-body {
+  white-space: pre-wrap;
+}
+.witness-list {
+  margin-top: 12px;
+}
+.witness-item {
+  padding: 8px 12px;
+  border: 1px solid #f0f0f0;
+  border-radius: 4px;
+  background: #fafafa;
+  margin-bottom: 8px;
+}
+</style>

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

@@ -71,7 +71,7 @@ const startShot = (payload?: any) => {
   emit("start", payload);
 }
 // 从路由查询参数中获取当前菜单项,如果没有则默认为 'info'
-let currentMenuKey = ref(route.query.tab as string || 'scene');
+let currentMenuKey = ref(route.query.tab as string || 'info');
 // 处理菜单点击事件
 const handleMenuClick = async(menu) => {
   currentMenuKey.value = menu.key;

+ 1 - 2
src/view/newFireCase/newFireDetails/showIndex.vue

@@ -71,7 +71,7 @@ const startShot = (payload?: any) => {
   emit("start", payload);
 }
 // 从路由查询参数中获取当前菜单项,如果没有则默认为 'scene'
-let currentMenuKey = ref(route.query.tab as string || 'info');
+let currentMenuKey = ref(route.query.tab as string || 'scene');
 
 // 是否存在“实景三维”数据,用于控制菜单项显示
 const hasScene3D = ref(false);
@@ -126,7 +126,6 @@ const handleMenuClick = async(menu) => {
         tab: menu.key
       }
     });
-    
     // 执行菜单项的点击事件
     menu.onClick();
 };