bill hai 8 meses
pai
achega
63d497f404

+ 19 - 13
src/components/chunk-upload/index.vue

@@ -4,7 +4,7 @@
     :multiple="false"
     :limit="1"
     :accept="api.accept.value"
-    :show-file-list="false"
+    :show-file-list="true"
     :http-request="() => {}"
     :file-list="api.fileList.value"
     :disable="api.percentage.value || disabled"
@@ -57,15 +57,23 @@ type Init = {
 };
 
 const getFileMd5 = (file: File) => {
-  const fileReader = new FileReader();
-  fileReader.readAsBinaryString(file);
+  const str = file.name + file.size + file.lastModified.toString();
+  let binaryStr = "";
+  for (let i = 0; i < str.length; i++) {
+    binaryStr += str.charCodeAt(i).toString(2).padStart(8, "0");
+  }
   const spark = new SparkMD5();
-  return new Promise<string>((resolve) => {
-    fileReader.onload = (e) => {
-      spark.appendBinary(e.target!.result as any);
-      resolve(spark.end());
-    };
-  });
+  spark.appendBinary(binaryStr);
+  return spark.end();
+
+  // const fileReader = new FileReader();
+  // fileReader.readAsBinaryString(file);
+  // return new Promise<string>((resolve) => {
+  //   fileReader.onload = (e) => {
+
+  //     resolve(spark.end());
+  //   };
+  // });
 };
 
 const chunksUpload = async (
@@ -97,8 +105,8 @@ const chunksUpload = async (
   const setPercentage = () => {
     let p = 1 - chunkLen / chunkCount;
     p += chunkProgress.reduce((t, c) => t + c / chunkLen, 0);
-    p += merge ? 0 : -0.1;
-    p = Math.min(1, Math.max(0, p));
+    p += merge ? 0 : -0.01;
+    p = Math.min(1, Math.max(0.01, p));
     onPercentage(Math.ceil(p * 100));
     uploadIngs[init.id] = p;
   };
@@ -134,10 +142,8 @@ const chunksUpload = async (
       i * parallelCount,
       Math.min((i + 1) * parallelCount, chunks.length)
     );
-    console.log(chunkGroup);
     await Promise.all(uploadChunks(chunkGroup, i * parallelCount));
   }
-  console.log(chunkProgress);
 
   setPercentage();
   await axios.post(mergeChunkUpload, {

+ 4 - 1
src/hook/upload.ts

@@ -52,6 +52,7 @@ export const useUpload = <T>(props: UploadProps<T>) => {
   };
 
   const upload = async (file: File) => {
+    console.error("???");
     const fileType = file.name
       .substring(file.name.lastIndexOf("."))
       .toUpperCase();
@@ -59,11 +60,13 @@ export const useUpload = <T>(props: UploadProps<T>) => {
     if (!props.formats.some((type) => type.toUpperCase() === fileType)) {
       ElMessage.error(`请上传${format.value}`);
       return false;
+      throw `请上传${format.value}`;
     } else if (file.size > props.maxSize) {
       ElMessage.error(`请上传${size.value}以内的文件`);
-      return false;
+      throw `请上传${size.value}以内的文件`;
     } else {
       fileRef.value = file;
+      console.error(props.upload || defaultUpload);
       await (props.upload || defaultUpload)(
         file,
         (val) => (percentage.value = val)

+ 1 - 1
src/request/index.ts

@@ -91,7 +91,7 @@ axios.interceptors.request.use(async (config) => {
 });
 
 const responseInterceptor = (res: AxiosResponse<any, any>) => {
-  closeLoading();
+  closeLoading(res.config?.url);
   const hasIgnore = res.config?.params
     ? "ingoreRes" in res.config.params
     : res.config?.url?.includes("/fusion-chunk/");

+ 8 - 8
src/request/loading.ts

@@ -2,15 +2,12 @@ import { ElLoading } from "element-plus";
 import { notOpenUrls } from "./config";
 
 let loading: ReturnType<typeof ElLoading.service> | null;
+let openCount = 0;
 
 export const openLoading = (url?: string) => {
-  if (
-    loading ||
-    (url && ~notOpenUrls.indexOf(url)) ||
-    url?.includes("/fusion-chunk/")
-  )
+  if ((url && ~notOpenUrls.indexOf(url)) || url?.includes("/fusion-chunk/"))
     return;
-
+  openCount++;
   loading = ElLoading.service({
     lock: true,
     text: "加载中",
@@ -18,9 +15,12 @@ export const openLoading = (url?: string) => {
   });
 };
 
-export const closeLoading = () => {
-  if (loading) {
+export const closeLoading = (url?: string) => {
+  if ((url && ~notOpenUrls.indexOf(url)) || url?.includes("/fusion-chunk/"))
+    return;
+  if (loading && --openCount <= 0) {
     loading.close();
     loading = null;
+    openCount = 0;
   }
 };

+ 8 - 2
src/store/scene.ts

@@ -103,6 +103,7 @@ export interface ModelScene extends BaseScene {
   renderType: string;
   modelId: number;
   createStatus: ModelSceneStatus;
+  uploadId: number;
   fileNewName: string;
   modelSize: string;
   modelDateType: string;
@@ -154,8 +155,13 @@ export const setModelScene = (scene: ModelScene) =>
 export const cancelUploadModelScene = (scene: ModelScene) =>
   axios.get(cancelUModel, { params: { modelId: scene.modelId } });
 
-export const delModelScene = (scene: ModelScene) =>
-  axios.post(deleteModel, { modelId: scene.modelId });
+export const delModelScene = (scene: ModelScene) => {
+  console.log(scene);
+  return axios.post(deleteModel, {
+    modelId: scene.modelId,
+    uploadId: scene.uploadId,
+  });
+};
 
 export const copyModelScene = (scene: ModelScene) =>
   axios.post(copyModel, { modelId: scene.modelId });

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

@@ -39,8 +39,8 @@ const headOptions = [
   // { value: SceneType.SWSSMX, name: SceneTypeDesc[SceneType.SWSSMX] },
   { value: SceneType.SWYDSS, name: SceneTypeDesc[SceneType.SWYDSS] },
   { value: SceneType.SWYDMX, name: SceneTypeDesc[SceneType.SWYDMX] },
-  { value: SceneType.C_SWKK, name: SceneTypeDesc[SceneType.C_SWKK] },
   { value: SceneType.C_SWSS, name: SceneTypeDesc[SceneType.C_SWSS] },
+  { value: SceneType.C_SWKK, name: SceneTypeDesc[SceneType.C_SWKK] },
   { value: SceneType.SWMX, name: SceneTypeDesc[SceneType.SWMX] },
 ];
 </script>

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

@@ -65,7 +65,7 @@
         @click="delOrCancel(row)"
         v-pdpath="'del'"
       >
-        {{ row.createStatus !== ModelSceneStatus.RUN ? "删除" : "取消上传" }}
+        {{ row.createStatus !== ModelSceneStatus.RUN ? "删除" : "取消转换" }}
       </span>
 
       <span v-else class="oper-span" v-pdpath="['viewaaa']"> 模型转换中… </span>

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

@@ -26,6 +26,7 @@
         {{ ZipTypeDesc[row.fileType] }}
       </el-table-column>
       <el-table-column label="大小" prop="fileSize"></el-table-column>
+      <el-table-column label="上传人" prop="userName"></el-table-column>
       <el-table-column label="上传时间" prop="createTime"></el-table-column>
       <el-table-column label="状态" v-slot:default="{ row }: { row: QuoteScene }">
         {{

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

@@ -63,7 +63,9 @@ const stateTitle = {
 
 const params = {
   num: props.scene.num,
-  isObj: Number(![SceneType.SWSS, SceneType.SWYDSS].includes(props.scene.type)),
+  isObj: Number(
+    ![SceneType.SWSS, SceneType.SWYDSS, SceneType.C_SWSS].includes(props.scene.type)
+  ),
 };
 // 初始化
 const initial = async () => {

+ 23 - 14
src/view/vrmodel/upload.vue

@@ -45,6 +45,7 @@ import {
 import { operateIsPermissionByPath } from "@/directive/permission";
 import { computed, reactive, ref, watchEffect } from "vue";
 import { ElMessage } from "element-plus";
+import { closeLoading, openLoading } from "@/request";
 
 const props = defineProps<{
   type: SceneType;
@@ -120,6 +121,7 @@ export type UploadInfo = {
   uploadId: number;
 };
 
+let handler = false;
 const info = reactive({
   name: props.name,
   fileType: props.fileType,
@@ -128,21 +130,28 @@ const info = reactive({
 const uploadRef = ref();
 defineExpose<QuiskExpose>({
   submit: async () => {
-    if (!info.name.trim()) {
-      ElMessage.error("请填写标题");
-      throw "请填写标题";
+    if (handler) return;
+    await new Promise((resolve) => setTimeout(resolve, 100));
+    handler = true;
+    try {
+      if (!info.name.trim()) {
+        ElMessage.error("请填写标题");
+        throw "请填写标题";
+      }
+      if (info.fileType === void 0) {
+        ElMessage.error("请选择类型");
+        throw "请选择类型";
+      }
+      if (!uploadRef.value.file) {
+        ElMessage.error("请选择要上传的数据");
+        throw "请选择要上传的文件";
+      }
+      info.uploadId = -1;
+      await uploadRef.value.upload();
+      return info;
+    } finally {
+      handler = false;
     }
-    if (info.fileType === void 0) {
-      ElMessage.error("请选择类型");
-      throw "请选择类型";
-    }
-    if (!uploadRef.value.file) {
-      ElMessage.error("请选择要上传的数据");
-      throw "请选择要上传的文件";
-    }
-    info.uploadId = -1;
-    await uploadRef.value.upload();
-    return info;
   },
 });
 </script>