ldj 1 gadu atpakaļ
vecāks
revīzija
3c6f67afe3

+ 15 - 0
mirror.html

@@ -0,0 +1,15 @@
+<!doctype html>
+<html lang="en">
+
+<head>
+  <meta charset="UTF-8" />
+  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+  <link rel="icon" type="image/ico" href="/favicon.ico" id="app-icon" />
+</head>
+
+<body>
+  <div id="app"></div>
+  <script type="module" src="/src/app/mirror/main.ts"></script>
+</body>
+
+</html>

+ 2 - 1
package.json

@@ -22,6 +22,7 @@
     "mitt": "^3.0.1",
     "qs": "^6.11.2",
     "sass": "^1.64.2",
+    "sortablejs": "^1.15.2",
     "swiper": "^11.1.4",
     "unplugin-element-plus": "^0.7.2",
     "unplugin-vue-define-options": "^1.3.12",
@@ -37,4 +38,4 @@
     "vite": "^4.4.5",
     "vue-tsc": "^1.8.5"
   }
-}
+}

+ 7 - 0
src/app/fire/store/fire.ts

@@ -52,6 +52,13 @@ export type Fire = {
   field2: string;
   field3: string;
   field4: string;
+
+  field5: string;
+  field6: string;
+  field7: string;
+  field8: string;
+  field9: string;
+  field10: string;
 };
 
 export enum FirePaggingRoute {

+ 75 - 25
src/app/fire/view/dispatch/editFire.vue

@@ -3,20 +3,20 @@
     <div class="def-select-map" ref="mapEl"></div>
     <div class="el-form-item">
       <el-col :span="12">
-        <el-form-item label="事件分类" class="mandatory">
+        <el-form-item label="项目编号" class="mandatory">
           <el-input
             v-model="bindFire.projectSn"
             maxlength="18"
-            placeholder="请输入事件分类"
+            placeholder="请输入项目编号"
           />
         </el-form-item>
       </el-col>
       <el-col :span="12">
-        <el-form-item label="分类登记" class="mandatory">
+        <el-form-item label="起火对象" class="mandatory">
           <el-input
             v-model="bindFire.projectName"
             maxlength="50"
-            placeholder="请输入分类登记"
+            placeholder="请输入起火对象"
           />
         </el-form-item>
       </el-col>
@@ -37,19 +37,14 @@
     <el-form-item label="勘验地址" class="mandatory">
       <el-input v-model="bindFire.field1" maxlength="50" placeholder="请输入勘验地址" />
     </el-form-item>
-    <el-form-item label="勘验信息" class="mandatory">
-      <el-input
-        v-model="bindFire.projectSite"
-        placeholder="请输入天气情况等标准化勘验信息"
-      />
-      <!--       
+    <el-form-item label="起火场所" class="mandatory">
       <el-cascader
         style="width: 100%"
         v-model="projectSite"
-        placeholder="天气情况等标准化勘验信息"
+        placeholder="起火场所"
         :options="place"
         :props="{ expandTrigger: 'hover' }"
-      /> -->
+      />
     </el-form-item>
     <el-form-item label="全宗名称" class="mandatory">
       <el-input v-model="bindFire.field2" maxlength="50" placeholder="请输入全宗名称" />
@@ -87,9 +82,10 @@
         </el-form-item>
       </el-col>
     </div>
+
     <div class="el-form-item">
       <el-col :span="12">
-        <el-form-item label="勘验日期" class="mandatory" placeholder="请选择勘验日期">
+        <el-form-item label="事故日期" class="mandatory" placeholder="请选择事故日期">
           <el-date-picker
             type="date"
             v-model="accidentDate"
@@ -104,6 +100,59 @@
         </el-form-item>
       </el-col>
     </div>
+
+    <div class="el-form-item">
+      <el-col :span="12">
+        <el-form-item label="事件分类" class="mandatory">
+          <el-input
+            v-model="bindFire.field5"
+            maxlength="18"
+            placeholder="请输入事件分类"
+          />
+        </el-form-item>
+      </el-col>
+      <el-col :span="12">
+        <el-form-item label="分类登记" class="mandatory">
+          <el-input
+            v-model="bindFire.field6"
+            maxlength="50"
+            placeholder="请输入分类登记"
+          />
+        </el-form-item>
+      </el-col>
+    </div>
+
+    <div class="el-form-item">
+      <el-col :span="12">
+        <el-form-item label="勘验信息" class="mandatory">
+          <el-input
+            v-model="bindFire.field7"
+            placeholder="请输入天气情况等标准化勘验信息"
+          />
+        </el-form-item>
+      </el-col>
+      <el-col :span="12">
+        <el-form-item label="勘验日期" class="mandatory" placeholder="请选择勘验日期">
+          <el-date-picker
+            type="date"
+            v-model="f8"
+            style="width: 100%"
+            :disabled-date="(date) => date.getTime() > new Date().getTime()"
+          />
+        </el-form-item>
+      </el-col>
+    </div>
+    <el-col :span="12">
+      <el-form-item label="火灾原因" class="mandatory">
+        <el-cascader
+          style="width: 100%"
+          v-model="fireReason"
+          placeholder="火灾原因:"
+          :options="reason"
+          :props="{ expandTrigger: 'hover' }"
+        />
+      </el-form-item>
+    </el-col>
   </el-form>
 </template>
 
@@ -135,6 +184,7 @@ const projectSite = genCascaderValue(bindFire, "projectSite");
 const accidentDate = ref(
   bindFire.value.accidentDate ? new Date(bindFire.value.accidentDate) : new Date()
 );
+const f8 = ref(bindFire.value.field8 ? new Date(bindFire.value.field8) : new Date());
 const keyword = ref(bindFire.value.projectAddress || "");
 const resultEl = ref<HTMLDivElement>();
 const searchAMap = ref<any>();
@@ -197,14 +247,14 @@ defineExpose<QuiskExpose>({
       ElMessage.error("详细地址不能为空!");
       throw "详细地址不能为空!";
     } else if (!bindFire.value.projectSn || !bindFire.value.projectSn.trim()) {
-      ElMessage.error("事件分类不能为空!");
-      throw "事件分类不能为空!";
+      ElMessage.error("项目编号不能为空!");
+      throw "项目编号不能为空!";
     } else if (!bindFire.value.projectName || !bindFire.value.projectName.trim()) {
-      ElMessage.error("分类登记不能为空!");
-      throw "分类登记不能为空!";
+      ElMessage.error("起火对象不能为空!");
+      throw "起火对象不能为空!";
     } else if (!bindFire.value.projectSite || !bindFire.value.projectSite.trim()) {
-      ElMessage.error("天气情况等标准化勘验信息不能为空!");
-      throw "天气情况等标准化勘验信息不能为空!";
+      ElMessage.error("起火场所不能为空!");
+      throw "起火场所不能为空!";
     } else if (!bindFire.value.deptId || !bindFire.value.deptId.trim()) {
       ElMessage.error("承办单位不能为空!");
       throw "承办单位不能为空!";
@@ -212,15 +262,15 @@ defineExpose<QuiskExpose>({
       ElMessage.error("勘验人员不能为空!");
       throw "勘验人员不能为空!";
     } else if (!accidentDate) {
-      ElMessage.error("勘验日期不能为空!");
-      throw "勘验日期不能为空!";
+      ElMessage.error("事故日期不能为空!");
+      throw "事故日期不能为空!";
+    } else if (!bindFire.value.fireReason || !bindFire.value.fireReason.trim()) {
+      ElMessage.error("火灾原因不能为空!");
+      throw "火灾原因不能为空!";
     }
-    // else if (!bindFire.value.fireReason || !bindFire.value.fireReason.trim()) {
-    //   ElMessage.error("火灾原因不能为空!");
-    //   throw "火灾原因不能为空!";
-    // }
 
     bindFire.value.accidentDate = dateFormat(accidentDate.value, "yyyy-MM-dd");
+    bindFire.value.field8 = dateFormat(f8.value, "yyyy-MM-dd");
     bindFire.value.projectSiteCode = getCode(place, bindFire.value.projectSite);
     bindFire.value.id
       ? await setFire(bindFire.value)

+ 14 - 10
src/app/fire/view/dispatch/header.vue

@@ -1,10 +1,10 @@
 <template>
   <com-head :options="head" showCtrl>
     <el-form label-width="84px">
-      <el-form-item label="事件分类:">
+      <el-form-item label="项目编号:">
         <el-input v-model="pagging.state.query.projectSn" placeholder="请输入"></el-input>
       </el-form-item>
-      <el-form-item label="分类登记:">
+      <el-form-item label="起火对象:">
         <el-input
           v-model="pagging.state.query.projectName"
           placeholder="请输入"
@@ -16,23 +16,27 @@
           placeholder="请输入"
         ></el-input>
       </el-form-item>
-      <el-form-item label="勘验信息:">
-        <el-input
-          v-model="pagging.state.query.projectSite"
-          placeholder="请输入"
-        ></el-input>
-        <!-- <el-cascader
+      <el-form-item label="起火场所:">
+        <el-cascader
           style="width: 100%"
           v-model="projectSite"
           placeholder="请选择"
           :options="[{ label: '全部', value: UN_REQ_NUM.toString() }].concat(place)"
           :props="{ expandTrigger: 'hover', checkStrictly: true }"
-        ></el-cascader> -->
+        ></el-cascader>
+      </el-form-item>
+
+      <el-form-item label="勘验信息:">
+        <el-input
+          v-model="pagging.state.query.field7"
+          placeholder="请输入"
+        ></el-input>
       </el-form-item>
+      
       <el-form-item label="承办单位:">
         <com-company v-model="pagging.state.query.deptId" />
       </el-form-item>
-      <el-form-item label="勘验日期:">
+      <el-form-item label="事故日期:">
         <el-date-picker
           type="date"
           v-model="pagging.state.query.accidentDate"

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

@@ -14,7 +14,6 @@
           </el-button>
         </template>
         <template v-else>
-          <el-button type="primary" @click="openMap"> 查看地图案件分布 </el-button>
           <el-button type="primary" @click="addHandler" v-pdpath="'add'">
             新增火调项目
           </el-button>
@@ -156,7 +155,5 @@ const editHandler = async (row: Fire) => {
 const addHandler = async () => {
   (await addFire({})) && pagging.refresh();
 };
-const openMap = () => {
-  window.open("./map.html");
-};
+
 </script>

+ 10 - 10
src/app/fire/view/dispatch/list.vue

@@ -25,8 +25,9 @@
           {{ pagging.state.pag.size * (pagging.state.pag.currentPage - 1) + $index + 1 }}
         </div>
       </el-table-column>
-      <el-table-column label="事件分类" prop="projectSn"></el-table-column>
-      <el-table-column label="分类登记" prop="projectName" v-slot:default="{ row }">
+      <el-table-column label="项目编号" prop="projectSn"></el-table-column>
+      <el-table-column label="事件分类" prop="field5"></el-table-column>
+      <el-table-column label="起火对象" prop="projectName" v-slot:default="{ row }">
         <el-tooltip
           class="item"
           effect="dark"
@@ -38,6 +39,7 @@
         </el-tooltip>
         <p class="tip" v-else>{{ row.projectName }}</p>
       </el-table-column>
+      <el-table-column label="分类登记" prop="field6"></el-table-column>
       <el-table-column label="详细地址" prop="projectAddress" v-slot:default="{ row }">
         <el-tooltip
           class="item"
@@ -50,11 +52,7 @@
         </el-tooltip>
         <p class="tip" v-else>{{ row.projectAddress }}</p>
       </el-table-column>
-      <el-table-column
-        label="天气情况等标准化勘验信息"
-        prop="projectSite"
-        v-slot:default="{ row }"
-      >
+      <el-table-column label="起火场所" prop="projectSite" v-slot:default="{ row }">
         <el-tooltip
           class="item"
           effect="dark"
@@ -66,14 +64,16 @@
         </el-tooltip>
         <p class="tip" v-else>{{ row.projectSite }}</p>
       </el-table-column>
+      <el-table-column label="勘验信息" prop="field7"></el-table-column>
       <el-table-column label="勘验地址" prop="field1"></el-table-column>
       <el-table-column label="全宗名称" prop="field2"></el-table-column>
       <el-table-column label="勘验人姓名" prop="field3"></el-table-column>
       <el-table-column label="勘验人单位、职务" prop="field4"></el-table-column>
 
       <el-table-column label="承办单位" prop="organizerDeptName"></el-table-column>
-      <el-table-column label="勘验日期" prop="accidentDate"></el-table-column>
-      <!-- <el-table-column label="火灾原因" prop="fireReason" v-slot:default="{ row }">
+      <el-table-column label="事故日期" prop="accidentDate"></el-table-column>
+      <el-table-column label="勘验日期" prop="field8"></el-table-column>
+      <el-table-column label="火灾原因" prop="fireReason" v-slot:default="{ row }">
         <el-tooltip
           class="item"
           effect="dark"
@@ -84,7 +84,7 @@
           <p class="tip oper-user">{{ row.fireReason }}</p>
         </el-tooltip>
         <p class="tip" v-else>{{ row.fireReason }}</p>
-      </el-table-column> -->
+      </el-table-column>
       <el-table-column label="项目状态" v-slot:default="{ row }">
         {{ fireStatusDesc[row.status as FireStatus] }}
       </el-table-column>

+ 218 - 0
src/app/mirror/App.vue

@@ -0,0 +1,218 @@
+<template>
+  <div class="mirror-setting">
+
+    <!-- 分镜配置 -->
+    <div class="project-title">
+      <el-input class="title" type="textarea" :autosize="{ minRows: 1, maxRows: 4 }" v-model="project.title" />
+    </div>
+    <div class="content">
+      <el-table class="main-table" key="id" border v-dragable="dragOptions" :data="data" header-row-class-name="t-head"
+        header-cell-class-name="t-cell">
+        <!-- <template v-for="item in columns" :key="item.prop">
+          <el-table-column  :prop="item.prop" :label="item.label" />
+          大纲
+        </template> -->
+        <el-table-column prop="name" label="大纲">
+          <template v-slot="{ row }">
+            <el-input type="textarea" :autosize="{ minRows: 3 }" v-model="row.name" :row="3" placeholder="概括拍摄内容" />
+          </template>
+        </el-table-column>
+
+        <el-table-column prop="desc" label="分镜描述">
+          <template v-slot="{ row }">
+            <el-input class="gray" type="textarea" :autosize="{ minRows: 3 }" v-model="row.desc" :row="3"
+              placeholder="详细描述分镜" />
+          </template>
+        </el-table-column>
+        <!-- show-overflow-tooltip -->
+        <el-table-column prop="clip" label="已拍摄片段">
+          <template v-slot="{ row }">
+            <el-input class="gray" type="textarea" :autosize="{ minRows: 3 }" v-model="row.clip" placeholder="详细描述分镜" />
+          </template>
+        </el-table-column>
+
+        <el-table-column prop="words" label="台词文案">
+          <template v-slot="{ row }">
+            <el-input class="gray" type="textarea" :autosize="{ minRows: 3 }" v-model="row.words"
+              placeholder="点击输入台词" />
+          </template>
+        </el-table-column>
+
+        <el-table-column prop="marks" label="备注">
+          <template v-slot="{ row }">
+            <el-input class="gray" type="textarea" :autosize="{ minRows: 3 }" v-model="row.marks"
+              placeholder="点击输入内容" />
+          </template>
+        </el-table-column>
+      </el-table>
+
+    </div>
+    <div class="add-handle">
+
+      <el-button type="primary">
+        <el-icon class="el-icon--right">
+          <Plus />
+        </el-icon>
+        添加
+        <el-input class="add-line" type="text" v-model="addLine" size="small">
+        </el-input>
+        行
+      </el-button>
+    </div>
+  </div>
+</template>
+
+<script lang="ts" setup>
+import { vDragable } from "./dragable";
+import { ElMessage } from "element-plus";
+import { reactive, ref } from "vue";
+
+const project = reactive({
+  title: "我的脚本"
+})
+const addLine = ref(3);
+
+const dragOptions = [
+  {
+    selector: "thead tr", // add drag support for column
+    option: {
+      // sortablejs's option
+      animation: 150,
+      onEnd: (evt) => {
+        let oldCol: any = {};
+        Object.assign(oldCol, columns.value[evt.oldIndex]);
+        columns.value.splice(evt.oldIndex, 1); // 因为新增了数据,所以要移除原来的列的index要在原来的基础上
+        setTimeout(() => {
+          columns.value.splice(evt.newIndex, 0, oldCol); // 把原来的列数据添加到新的位置,然后再从原位置移除它,触发table的重绘
+        }, 30);
+        console.log(evt.oldIndex, evt.newIndex);
+      },
+    },
+  },
+  {
+    selector: "tbody", // add drag support for row
+    option: {
+      // sortablejs's option
+      animation: 150,
+      onEnd: (evt: any) => {
+        // ElMessage.success(
+        //   `Drag the ${evt.oldIndex}th row to ${evt.newIndex}`
+        // );
+        console.log(evt.oldIndex, evt.newIndex);
+      },
+    },
+  },
+];
+
+const columns = ref([
+  // { prop: "id", label: "ID", hidden: true, },
+  { prop: "name", label: "大纲" },
+  { prop: "desc", label: "分镜描述" },
+  { prop: "clip", label: "已拍摄片段" },
+  { prop: "words", label: "台词文案" },
+  { prop: "marks", label: "备注" },
+]);
+
+const data = reactive([
+  { id: 1, name: "", desc: "" },
+  { id: 2, name: "", desc: "" },
+  { id: 3, name: "", desc: "" },
+
+]);
+
+</script>
+
+<style>
+body,
+#app {
+  margin: 0;
+  padding: 0;
+}
+
+.mirror-setting {
+  width: 100%;
+  min-height: 100%;
+  padding-top: 80px;
+  min-height: calc(100vh - 80px);
+  margin: 0 auto;
+  background: #eee;
+}
+
+.content {
+  margin: 0 auto;
+  display: flex;
+  padding: 0 40px;
+
+}
+
+.t-head {
+  border: 1px solid #ddd;
+  /* padding: 10px; */
+  /* display: flex; */
+  position: relative;
+  background-color: #eee;
+}
+
+tbody {
+  /* border-top: 20px solid transparent; */
+}
+
+.t-head th {
+  margin-bottom: 20px;
+}
+
+.project-title {
+  display: flex;
+  padding: 0 40px;
+  /* justify-content: center; */
+}
+
+.project-title .title {
+  font-size: 28px;
+  min-height: 0;
+  height: auto;
+  background-color: transparent !important;
+  /* width: 300px; */
+  margin: 30px 0;
+}
+
+.el-textarea__inner {
+  background-color: transparent;
+  box-shadow: none;
+  resize: none;
+}
+
+.gray .el-textarea__inner {
+  background: rgba(227, 225, 225, 0.2);
+}
+
+.el-textarea__inner:focus {
+  box-shadow: none
+}
+
+.el-textarea__inner:hover {
+  box-shadow: none
+}
+
+.add-handle {
+  padding: 30px 0;
+  display: flex;
+  justify-content: center;
+
+}
+
+.add-line {
+  margin: 0 10px;
+  width: 30px;
+}
+
+.add-line .el-input__wrapper {
+  box-shadow: none;
+  background: rgba(23, 41, 46, .2);
+}
+
+.add-line input {
+  color: white;
+  text-align: center
+}
+</style>

+ 11 - 0
src/app/mirror/dragable.ts

@@ -0,0 +1,11 @@
+import Sortable from "sortablejs";
+
+export const vDragable = {
+  mounted(el, binding) {
+    const options = binding.value;
+    for (let oi = 0; oi < options.length; oi++) {
+      const o = options[oi];
+      new Sortable(el.querySelector(o.selector), o.option);
+    }
+  },
+};

+ 14 - 0
src/app/mirror/main.ts

@@ -0,0 +1,14 @@
+import { createApp } from "vue";
+import "element-plus/dist/index.css";
+import * as ElementPlusIconsVue from "@element-plus/icons-vue";
+import App from "./App.vue";
+import ElementPlus from "element-plus";
+
+const app = createApp(App);
+
+for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
+  app.component(key, component);
+}
+
+app.use(ElementPlus);
+app.mount("#app");

+ 2 - 2
src/constant/caseFile.ts

@@ -1,13 +1,13 @@
 import { BoardType } from "@/store/caseFile";
 
 export const FileDrawType = 1;
-export const DrawFormats = [".jpg", ".jpeg", ".png", ".raw"];
+export const DrawFormats = [".jpg", ".jpeg", ".png", ".raw", ".dcm"];
 export const OtherFormats = [".pdf", ".jpeg", ".doc", ".docx", ".jpg", ".png"];
 export const BoardTypeDesc = {
   [BoardType.scene]: "现场图",
   [BoardType.map]: "方位图",
 };
-export const DrawFormatDesc = "jpg、png、raw等格式的文件";
+export const DrawFormatDesc = "jpg、png、raw、dcm等格式的文件";
 export const OtherFormatDesc = "pdf、word、jpg、png等格式的文件";
 
 export const maxFileSize = 100 * 1024 * 1024;

+ 1 - 0
src/store/scene.ts

@@ -67,6 +67,7 @@ export interface ModelScene extends BaseScene {
   modelTitle: string;
   modelId: number;
   createStatus: ModelSceneStatus;
+  fileNewName: string;
   modelSize: string;
   modelDateType: string;
   progress?: number;

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

@@ -131,7 +131,7 @@ watchEffect(() => caseId.value && currentTypeId.value && refresh());
 
 const query = (file: CaseFile) => {
   const ext = file.filesUrl.substring(file.filesUrl.lastIndexOf(".")).toLocaleLowerCase();
-  if (ext === ".raw") {
+  if ([".raw", ".dcm"].includes(ext)) {
     window.open(`/xfile-viewer/index.html?file=${file.filesUrl}&time=` + Date.now());
   } else {
     window.open(file.filesUrl + "?time=" + Date.now());

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

@@ -1,7 +1,7 @@
 <template>
   <el-form ref="form" label-width="80px" class="share-from">
     <el-form-item label="链接">
-      <el-input :modelValue="shareLink" placeholder="请输入事件分类" disabled />
+      <el-input :modelValue="shareLink" disabled />
     </el-form-item>
     <el-form-item label="密码">
       <el-input

+ 5 - 0
src/view/organization/index.vue

@@ -30,6 +30,7 @@
                   class="butList oper-span"
                   v-if="!topDeptIds.includes(Number(data.id))"
                 >
+                  <a @click.stop="openMap(data)"> 大屏链接 </a>
                   <a
                     @click.stop="showOrganizationDetail({ dept: data })"
                     v-pdpath="['view']"
@@ -72,6 +73,10 @@ import { RouteName, router } from "@/router";
 import { SuccessFilled } from "@element-plus/icons-vue";
 import { topDeptIds } from "@/constant/appDeptId";
 
+const openMap = (data: Organization) => {
+  window.open(`./map.html?deptId=${data.id}`);
+};
+
 const organTrees = ref<Organization[]>([]);
 
 const addHandler = async () => {

+ 3 - 7
src/view/statistics/statisticsInject.ts

@@ -139,7 +139,7 @@ export const statisticsConfigs: ConfigItem[] = reactive([
     },
   },
   {
-    title: "天气情况等标准化勘验信息统计",
+    title: "起火场所",
     data: {
       tooltip: {
         trigger: "axis",
@@ -212,9 +212,7 @@ export const updateParams = async (params: StatisticsParams) => {
       }));
       console.log(statisticsConfigs[ndx].data);
     } else {
-      statisticsConfigs[ndx].data.xAxis.data = items.map(
-        (item) => item.groupKey
-      );
+      statisticsConfigs[ndx].data.xAxis.data = items.map((item) => item.groupKey);
       statisticsConfigs[ndx].data.xAxis.axisLabel = {
         interval: "auto",
         rotate: 0,
@@ -265,9 +263,7 @@ export const updateParams = async (params: StatisticsParams) => {
           },
         ];
       }
-      statisticsConfigs[ndx].data.series![0].data = items.map(
-        (item) => item.dataCount
-      );
+      statisticsConfigs[ndx].data.series![0].data = items.map((item) => item.dataCount);
     }
   }
 };

+ 13 - 3
src/view/vrmodel/modelContent.vue

@@ -46,10 +46,17 @@
     <el-table-column label="操作" v-slot:default="{ row }" width="350px">
       <span
         class="oper-span"
+        @click="downOrigin(row)"
+        v-if="row.createStatus === ModelSceneStatus.SUCCESS && row.fileNewName"
+      >
+        下载原始资源
+      </span>
+      <span
+        class="oper-span"
         @click="downHash(row)"
         v-if="row.createStatus === ModelSceneStatus.SUCCESS"
       >
-        下载Hash
+        Hash
       </span>
       <span
         class="oper-span"
@@ -110,7 +117,6 @@ import {
   ModelMaxSize,
   ModelSceneStatusDesc,
   ModelSupportFormats,
-  SceneTypePaths,
 } from "@/constant/scene";
 import { confirm } from "@/helper/message";
 import { useUpload } from "@/hook/upload";
@@ -119,7 +125,7 @@ import { watchPolling } from "@/hook/watchPolling";
 import { OpenType, openSceneUrl } from "../case/help";
 import { operateIsPermissionByPath } from "@/directive/permission";
 import { editModelScene } from "./quisk";
-import { downModelHash } from "@/request";
+import saveAs from "@/util/file-serve";
 
 const props = defineProps<{ pagging: ScenePagging }>();
 
@@ -191,6 +197,10 @@ const refreshStatus = (models: ModelScene[]) => {
   return Promise.all(refreshStatusAll);
 };
 
+const downOrigin = async (model: ModelScene) => {
+  await saveAs(model.fileNewName, model.modelTitle + ".zip");
+};
+
 watchPolling(() => {
   const payload = (props.pagging.state.table.rows as ModelScene[]).filter(
     (item) => item.createStatus === ModelSceneStatus.RUN

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

@@ -35,7 +35,7 @@
         @click="downHash(row)"
         v-if="row.status === QuoteSceneStatus.SUCCESS"
       >
-        下载Hash
+        Hash
       </span>
       <span
         class="oper-span"

+ 24 - 24
yarn.lock

@@ -838,30 +838,30 @@
     "get-intrinsic" "^1.2.4"
     "object-inspect" "^1.13.1"
 
-"source-map-js@^1.2.0", "source-map-js@>=0.6.2 <2.0.0":
-  "integrity" "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg=="
-  "resolved" "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.2.0.tgz"
-  "version" "1.2.0"
-
-"swiper@^11.1.4":
-  "integrity" "sha512-1n7kbYJB2dFEpUHRFszq7gys/ofIBrMNibwTiMvPHwneKND/t9kImnHt6CfGPScMHgI+dWMbGTycCKGMoOO1KA=="
-  "resolved" "https://registry.npmmirror.com/swiper/-/swiper-11.1.4.tgz"
-  "version" "11.1.4"
-
-"three@^0.158.0":
-  "integrity" "sha512-TALj4EOpdDPF1henk2Q+s17K61uEAAWQ7TJB68nr7FKxqwyDr3msOt5IWdbGm4TaWKjrtWS8DJJWe9JnvsWOhQ=="
-  "resolved" "https://registry.npmmirror.com/three/-/three-0.158.0.tgz"
-  "version" "0.158.0"
-
-"to-fast-properties@^2.0.0":
-  "integrity" "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog=="
-  "resolved" "https://registry.npmmirror.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz"
-  "version" "2.0.0"
-
-"to-regex-range@^5.0.1":
-  "integrity" "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ=="
-  "resolved" "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz"
-  "version" "5.0.1"
+sortablejs@^1.15.2:
+  version "1.15.2"
+  resolved "https://registry.npmjs.org/sortablejs/-/sortablejs-1.15.2.tgz#4e9f7bda4718bd1838add9f1866ec77169149809"
+  integrity sha512-FJF5jgdfvoKn1MAKSdGs33bIqLi3LmsgVTliuX6iITj834F+JRQZN90Z93yql8h0K2t0RwDPBmxwlbZfDcxNZA==
+
+"source-map-js@>=0.6.2 <2.0.0", source-map-js@^1.2.0:
+  version "1.2.0"
+  resolved "https://mirrors.cloud.tencent.com/npm/source-map-js/-/source-map-js-1.2.0.tgz#16b809c162517b5b8c3e7dcd315a2a5c2612b2af"
+  integrity sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==
+
+swiper@^11.1.4:
+  version "11.1.4"
+  resolved "https://mirrors.cloud.tencent.com/npm/swiper/-/swiper-11.1.4.tgz#2f8e303e8bf9e5bc40a3885fc637ae60ff27996c"
+  integrity sha512-1n7kbYJB2dFEpUHRFszq7gys/ofIBrMNibwTiMvPHwneKND/t9kImnHt6CfGPScMHgI+dWMbGTycCKGMoOO1KA==
+
+to-fast-properties@^2.0.0:
+  version "2.0.0"
+  resolved "https://mirrors.cloud.tencent.com/npm/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
+  integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==
+
+to-regex-range@^5.0.1:
+  version "5.0.1"
+  resolved "https://mirrors.cloud.tencent.com/npm/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
+  integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
   dependencies:
     "is-number" "^7.0.0"