wangfumin преди 3 месеца
родител
ревизия
b0005d55a5

+ 11 - 3
src/app/fire/view/dispatch/editFire.vue

@@ -158,9 +158,17 @@ defineExpose<QuiskExpose>({
 
     bindFire.value.accidentDate = dateFormat(accidentDate.value, "yyyy-MM-dd");
     bindFire.value.projectSiteCode = getCode(place, bindFire.value.projectSite);
-    bindFire.value.id
-      ? await setFire(bindFire.value)
-      : await addFire(bindFire.value as any);
+    
+    // 保存数据
+    if (bindFire.value.id) {
+      await setFire(bindFire.value);
+    } else {
+      await addFire(bindFire.value as any);
+    }
+    
+    // 保存成功后,刷新fireDetails页面的数据
+    // 通过事件总线或全局事件触发刷新
+    window.location.reload()
   },
 });
 

+ 3 - 1
src/app/fire/view/dispatch/fireDetails.vue

@@ -44,7 +44,7 @@
 </template>
 
 <script setup lang="ts">
-import { computed, ref, onMounted } from "vue";
+import { computed, ref, onMounted, onUnmounted } from "vue";
 import { useRoute, useRouter } from 'vue-router';
 import { Fire } from "@/app/fire/store/fire";
 import { getFuseCodeLink, checkScenesOpen, MenuItem, getSWKKSyncLink } from "@/view/case/help";
@@ -79,6 +79,7 @@ onMounted(() => {
       desc.value = "";
       currentRecord.value = caseInfo;
       currentRecord.value.tmProject.mapUrl = caseInfo.mapUrl || '';
+      currentRecord.value.tmProject.latAndLong = caseInfo.latAndLong || '';
     } else {
       console.error("该案件不存在!");
       throw "该案件不存在!";
@@ -88,6 +89,7 @@ onMounted(() => {
       menu.onClick();
     }
   }, 0);
+  
 });
 
 // 处理菜单点击事件

+ 1 - 1
src/app/fire/view/dispatch/index.vue

@@ -70,7 +70,7 @@
           <!-- <span class="oper-span" @click="gotoQuery(row.caseId)" v-pdpath="['view']">
             查看
           </span> -->
-          <MoreMenu :caseId="row.caseId" :title="row.caseTitle" @copy="copy" />
+          <MoreMenu :caseId="row.caseId" :title="row.projectSn" @copy="copy" />
           <!-- <span class="oper-span" @click="copy(row.caseId)" v-pdpath="['view']">
             复制
           </span> -->

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

@@ -7,7 +7,7 @@
 
     <div v-if="state === State.package">
       <div class="text" style="display: flex; justify-content: space-between; margin-top: 15px">
-        <span>{{ filename }}</span>
+        <span>{{ filename  }}</span>
         <span>{{ percent }}%</span>
       </div>
       <div style="pointer-events: none">
@@ -50,7 +50,7 @@ const getState = (type: number) => {
     State.uncreate
   );
 };
-
+console.log("props", props, props.title);
 const state = ref<State>(State.uncreate);
 const count = ref<number>(0);
 const filename = ref<string>(props.title + ".zip");

+ 15 - 3
src/view/mediaLibrary/editMedia.vue

@@ -8,6 +8,10 @@
   >
     <div class="edit-container">
       <div class="form-item">
+        <span class="required">*</span>名称
+        <el-input v-model="form.name" placeholder="请输入名称"></el-input>
+      </div>
+      <div class="form-item">
         <span class="required">*</span>分组
         <el-select v-model="form.dictId" placeholder="请选择">
           <el-option 
@@ -59,7 +63,8 @@ const dialogVisible = computed({
 const form = ref({
   id: '',
   dictId: '',
-  uploadId: ''
+  uploadId: '',
+  name: ''  // 添加文件名字段
 });
 
 // 监听媒体数据变化,初始化表单
@@ -68,6 +73,7 @@ watch(() => props.mediaData, (newVal) => {
     form.value.id = newVal.id;
     form.value.dictId = newVal.dictId || '';
     form.value.uploadId = newVal.uploadId || '';
+    form.value.name = newVal.name || '';  // 初始化文件名
   }
 }, { immediate: true, deep: true });
 
@@ -83,11 +89,17 @@ const handleConfirm = async () => {
     return;
   }
   
+  if (!form.value.name || !form.value.name.trim()) {
+    ElMessage.warning('请输入文件名称');
+    return;
+  }
+  
   try {
     await editMediaItem({
       id: form.value.id,
       dictId: form.value.dictId,
-      uploadId: form.value.uploadId
+      uploadId: form.value.uploadId,
+      name: form.value.name.trim()  // 添加文件名到提交数据
     });
     
     ElMessage.success('编辑成功');
@@ -115,7 +127,7 @@ const handleConfirm = async () => {
     margin-right: 5px;
   }
   
-  .el-select {
+  .el-select, .el-input {
     margin-left: 10px;
     width: 300px;
   }

+ 3 - 1
src/view/mediaLibrary/groupManage.vue

@@ -46,7 +46,8 @@
       <span class="total-info">共 {{ total }} 条数据</span>
       <el-pagination
         background
-        layout="prev, pager, next"
+        :page-sizes="[100, 200, 300, 400]"
+        layout="prev, pager, next, jumper"
         :total="total"
         :current-page="currentPage"
         :page-size="pageSize"
@@ -176,6 +177,7 @@ const handleCurrentChange = (page: number) => {
 // 关闭弹窗
 const handleClose = () => {
   dialogVisible.value = false;
+  emit('refresh');
 };
 
 // 确认按钮

+ 8 - 2
src/view/mediaLibrary/index.vue

@@ -15,7 +15,13 @@
       </el-form-item>
       <el-form-item label="分组:">
         <el-select v-model="state.query.dictId" clearable placeholder="请选择">
-          <el-option v-for="group in groupList" :key="group.id" :label="group.dictName" :value="group.id"></el-option>
+          <el-option 
+            v-for="group in groupList" 
+            :key="group.id" 
+            :label="group.dictName" 
+            :value="group.id"
+            :title="group.dictName"
+          ></el-option>
         </el-select>
       </el-form-item>
       <el-form-item class="searh-btns" style="grid-area: 1 / 4 / 2 / 4">
@@ -46,7 +52,7 @@
       </el-table-column> -->
       <el-table-column label="名称">
         <template #default="{ row }">
-          <p class="oper-span tip clickable" @click="floadileUrl(row)">{{ row.fileName }}</p>
+          <p class="oper-span tip clickable" @click="floadileUrl(row)">{{ row.name }}</p>
         </template>
       </el-table-column>
       <el-table-column label="文件类型" prop="fileTypeStr"></el-table-column>

+ 35 - 11
src/view/mediaLibrary/uploadMedia.vue

@@ -24,50 +24,63 @@
           class="upload-box"
           action="#"
           :auto-upload="false"
+          :accept="acceptType"
           :on-change="handleFileChange"
+          :on-remove="handleFileRemove"
           :file-list="fileList"
-          :multiple="true"
         >
           <div class="upload-button">
             <span>文件</span>
-            <el-button type="primary">上传</el-button>
+            <el-button type="primary" :disabled="!selectedGroup">上传</el-button>
           </div>
         </el-upload>
       </div>
       
-      <div class="upload-tips">
+      <div class="upload-tips" v-if="selectedGroup !== 1">
         <div class="tip-item">
-          <div class="tip-content">支持jpg、png、jpeg、mp4、wav、mp3、3ds格式文件上传,文件大小小于 2G</div>
+          <div class="tip-content">支持jpg、png、jpeg、mp4、wav、mp3、shp格式文件上传,文件大小 &lt;= 2G</div>
         </div>
         
         <div class="tip-item">
-          <div class="tip-content">上传.zip:需要zip内上传,包含数据和模型,mix文件包含不使用的文件,文件名不使用中文字符,如:</div>
+          <div class="tip-content">上传 obj:需使用zip包上传。包含贴图、模型、mtl文件,包内不得包含文件夹,文件名不得使用中文。如图:</div>
           <div class="tip-example">
             <img src="@/assets/image/libraryImg/examplezip.png" alt="示例zip" />
           </div>
         </div>
         
         <div class="tip-item">
-          <div class="tip-content">上传.gltf/.glb:需要zip内上传,包含不使用自定义文件,文件名不使用中文字符,文件大小小于 1G,如:</div>
+          <div class="tip-content">上传ply/las/laz:需使用zip包上传,包内不得包含文件夹,文件名不得使用中文。文件大小 &lt;= 1G。如图:</div>
           <div class="tip-example">
             <img src="@/assets/image/libraryImg/egzip.png" alt="示例gltf" />
           </div>
         </div>
         
         <div class="tip-item">
-          <div class="tip-content">上传.osgb:需要zip内上传,包含 Data 文件夹,xml 文件,包含不使用的文件,文件名不使用中文字符,文件大小小于 2G,如:</div>
+          <div class="tip-content">上传.osgb:需使用zip包上传,包含 Data 文件夹,xml 文件,包含不使用的文件夹,文件名不得使用中文。文件大小 &lt;= 1G。如图:</div>
           <div class="tip-example">
             <img src="@/assets/image/libraryImg/osgbzip.png" alt="示例osgb" />
           </div>
         </div>
         
         <div class="tip-item">
-          <div class="tip-content">上传.b3dm:需要zip内上传,包含 Tileset.json 文件,包含json文件,包含不使用的文件,文件名不使用中文字符,文件大小小于 1G,如:</div>
+          <div class="tip-content">上传.b3dm:需使用zip包上传,包含 Tile 文件夹,内含json文件,包含不使用的文件夹,文件名不得使用中文。文件大小 &lt;= 1G。如图:</div>
           <div class="tip-example">
             <img src="@/assets/image/libraryImg/b3dmzip.png" alt="示例b3dm" />
           </div>
         </div>
       </div>
+      <div class="upload-tips" v-else>
+        <div class="tip-item">
+          <div class="tip-content">支持obj、glb格式文件上传,文件大小 &lt;= 5MB</div>
+        </div>
+        
+        <div class="tip-item">
+          <div class="tip-content">上传 obj:需使用zip包上传。包含贴图、模型、mtl文件,包内不得包含文件夹,文件名不得使用中文。如图:</div>
+          <div class="tip-example">
+            <img src="@/assets/image/libraryImg/examplezip.png" alt="示例zip" />
+          </div>
+        </div>
+      </div>
     </div>
     
     <template #footer>
@@ -96,7 +109,13 @@ const props = defineProps({
 });
 
 const emit = defineEmits(['update:visible', 'refresh']);
-
+const acceptType = computed(() => {
+  if (selectedGroup.value == 1) {
+    return '.obj,.glb,.zip';
+  } else {
+    return '.jpg,.png,.jpeg,.mp4,.wav,.mp3,.shp,.zip';
+  }
+});
 const dialogVisible = computed({
   get: () => props.visible,
   set: (val) => emit('update:visible', val)
@@ -110,6 +129,11 @@ const handleFileChange = (file, files) => {
   fileList.value = files;
 };
 
+// 处理文件删除
+const handleFileRemove = (file, fileList) => {
+  handleFileChange({}, []);
+};
+
 // 关闭弹窗
 const handleClose = () => {
   dialogVisible.value = false;
@@ -123,12 +147,12 @@ const handleUpload = async () => {
     ElMessage.warning('请选择分组');
     return;
   }
-  
+
   if (fileList.value.length === 0) {
     ElMessage.warning('请选择要上传的文件');
     return;
   }
-  
+
   try {
     // 这里实现文件上传逻辑
     const formData = new FormData();