Explorar o código

feat: 增加E57 download

gemercheung hai 1 ano
pai
achega
55a33588f7

+ 30 - 2
src/api/scene/list.ts

@@ -30,9 +30,9 @@ enum Api {
   unCollaborateList = 'service/manage_jp/contractor/details',
   unCollaborateList = 'service/manage_jp/contractor/details',
   genOBJ = 'service/manage_jp/scene/generateObjFile',
   genOBJ = 'service/manage_jp/scene/generateObjFile',
   updateMapShow = 'service/manage_jp/scene/updateMapShow',
   updateMapShow = 'service/manage_jp/scene/updateMapShow',
-  checkE57 = 'service//manage_jp/user/scene/checkDownLoadE57',
+  checkE57 = 'service/manage_jp/user/scene/checkDownLoadE57',
   downloadE57 = 'service/manage_jp/user/scene/downSceneE57',
   downloadE57 = 'service/manage_jp/user/scene/downSceneE57',
-  downloadProcessE57 = 'service/manage_jp/scene/downloadProcessE57',
+  getDownloadProcessE57 = 'service/manage_jp/user/scene/downloadProcessE57',
 }
 }
 
 
 /**
 /**
@@ -191,3 +191,31 @@ export const updateMapShowApi = (params: { num: string; mapShow: number }) =>
       ignoreCancelToken: true,
       ignoreCancelToken: true,
     },
     },
   });
   });
+export const checkDownloadE57Api = (params: Pick<SceneDownloadParam, 'num'>) =>
+  defHttp.get<SceneDownloadModel>({
+    url: Api.checkE57,
+    params,
+    headers: {
+      // @ts-ignore
+      ignoreCancelToken: true,
+    },
+  });
+
+export const downloadSceneDataE57APi = (params: SceneDownloadParam) =>
+  defHttp.get<SceneDownloadModel>({
+    url: Api.downloadE57,
+    params,
+    headers: {
+      // @ts-ignore
+      ignoreCancelToken: true,
+    },
+  });
+export const getE57DownloadProcessApi = (params: Pick<SceneDownloadParam, 'num'>) =>
+  defHttp.get<GetDownloadProcessModel>({
+    url: Api.getDownloadProcessE57,
+    params,
+    headers: {
+      // @ts-ignore
+      ignoreCancelToken: true,
+    },
+  });

+ 2 - 0
src/locales/lang/json/zh-CN.json

@@ -460,7 +460,9 @@
   "routes.scenes.creatobj": "生成 obj",
   "routes.scenes.creatobj": "生成 obj",
   "routes.scenes.delete": "删除",
   "routes.scenes.delete": "删除",
   "routes.scenes.downloadScene": "下载",
   "routes.scenes.downloadScene": "下载",
+  "routes.scenes.downloadSceneE57": "下载E57",
   "routes.scenes.downloadSceneConfirm": "是否确认下载场景",
   "routes.scenes.downloadSceneConfirm": "是否确认下载场景",
+  "routes.scenes.downloadSceneConfirmE57": "是否确认下载场景E57?",
   "routes.scenes.editor": "打开编辑器",
   "routes.scenes.editor": "打开编辑器",
   "routes.scenes.houseType.0": "新房",
   "routes.scenes.houseType.0": "新房",
   "routes.scenes.houseType.1": "二手房",
   "routes.scenes.houseType.1": "二手房",

+ 163 - 0
src/views/scenes/downloadE57Modal.vue

@@ -0,0 +1,163 @@
+<template>
+  <BasicModal
+    v-bind="$attrs"
+    @register="register"
+    :title="t('routes.scenes.downloadScene')"
+    :showCancelBtn="false"
+    :okText="downloadInfo.isDownloaded ? t('common.okText') : t('routes.scenes.cancelDownload')"
+    @ok="handleSubmit"
+    @cancel="cancelDownload"
+  >
+    <div class="pt-20px">
+      <BasicForm @register="registerForm">
+        <template #label="{ model, field }">
+          {{ model[field] }}
+        </template>
+        <template #process> {{ downloadInfo.process }} % </template>
+        <template #status> {{ downloadInfo.status }} </template>
+      </BasicForm>
+    </div>
+    <template #centerFooter>
+      <!-- <a-button>xxxx</a-button> -->
+    </template>
+  </BasicModal>
+</template>
+<script lang="ts">
+  import { defineComponent, reactive, ref, watch } from 'vue';
+  import { BasicModal, useModalInner } from '/@/components/Modal';
+  import { BasicForm, FormSchema, useForm } from '/@/components/Form/index';
+  import { useI18n } from '/@/hooks/web/useI18n';
+  import { getE57DownloadProcessApi } from '/@/api/scene/list';
+  import {
+    downloadByUrl,
+    // downloadByData,
+    // downloadByBase64,
+    // downloadByOnlineUrl,
+  } from '/@/utils/file/download';
+  const { t } = useI18n();
+  const schemas: FormSchema[] = [
+    {
+      field: 'sceneName',
+      label: t('routes.scenes.sceneName') + ':',
+      component: 'Input',
+      slot: 'label',
+    },
+    {
+      field: 'process',
+      label: t('routes.scenes.process') + ':',
+      component: 'Input',
+      slot: 'process',
+    },
+    {
+      field: 'status',
+      label: t('component.upload.fileStatue') + ':',
+      component: 'Input',
+      slot: 'status',
+    },
+  ];
+
+  export default defineComponent({
+    components: { BasicModal, BasicForm },
+    props: {
+      userData: { type: Object },
+    },
+    emits: ['register', 'success'],
+    setup() {
+      const { t } = useI18n();
+      // const { createMessage } = useMessage();
+      const sceneNum = ref('');
+      const isObj = ref<Number>(0);
+      const finishDowloadUrl = ref('');
+      const downloadInfo = reactive<Recordable>({});
+      downloadInfo.timer = null;
+      downloadInfo.process = 0;
+      downloadInfo.status = t('component.upload.downloadState');
+      downloadInfo.isDownloaded = false;
+
+      const [registerForm, { setFieldsValue }] = useForm({
+        schemas: schemas,
+        labelWidth: 120,
+        showActionButtonGroup: false,
+
+        actionColOptions: {
+          span: 24,
+        },
+        // submitFunc: handleSubmit,
+      });
+      const [register, { closeModal }] = useModalInner((data) => {
+        data && onDataReceive(data);
+      });
+
+      function onDataReceive(data) {
+        console.log('Data Received', data, data.num);
+        downloadInfo.timer = null;
+        downloadInfo.process = 0;
+        downloadInfo.status = t('component.upload.downloadState');
+        downloadInfo.isDownloaded = false;
+        setFieldsValue({
+          ...data,
+        });
+        isObj.value = data.isObj;
+        sceneNum.value = data.num;
+      }
+      const handleSubmit = async () => {
+        try {
+          cancelDownload();
+          closeModal();
+          if (downloadInfo.isDownloaded) {
+            downloadByUrl({
+              url: finishDowloadUrl.value as any as string,
+              target: '_self',
+            });
+          }
+        } catch (error) {}
+      };
+      async function getDownloadInfo(sceneNum: string) {
+        let param = {
+          num: sceneNum,
+          isObj: isObj.value,
+        };
+        downloadInfo.timer = setInterval(async () => {
+          const res = await getE57DownloadProcessApi(param);
+          console.log('res', res);
+          const percent = res.percent && Math.round(res.percent);
+          downloadInfo.process = percent;
+          if (res.status === 1000) {
+            downloadInfo.status = t('component.upload.getting');
+          }
+          if (res.status === 1002 && res.url?.length > 0) {
+            cancelDownload();
+            finishDowloadUrl.value = res.url;
+            downloadInfo.isDownloaded = true;
+            downloadInfo.status = t('component.upload.gettingSuccess');
+            handleSubmit();
+          }
+        }, 2000);
+      }
+      function cancelDownload() {
+        clearInterval(downloadInfo.timer);
+        sceneNum.value = '';
+      }
+      watch(
+        () => sceneNum.value,
+        () => {
+          console.log('sceneNum', sceneNum.value);
+          if (sceneNum.value) {
+            getDownloadInfo(sceneNum.value);
+          }
+        },
+      );
+
+      return {
+        t,
+        register,
+        schemas,
+        handleSubmit,
+        closeModal,
+        registerForm,
+        downloadInfo,
+        cancelDownload,
+      };
+    },
+  });
+</script>

+ 41 - 1
src/views/scenes/list.vue

@@ -108,6 +108,7 @@
                   confirm: handleDelete.bind(null, record),
                   confirm: handleDelete.bind(null, record),
                 },
                 },
               },
               },
+
               {
               {
                 tooltip: t('routes.scenes.downloadScene'),
                 tooltip: t('routes.scenes.downloadScene'),
                 disabled: record.status != -2,
                 disabled: record.status != -2,
@@ -125,11 +126,25 @@
                 icon: 'carbon:migrate',
                 icon: 'carbon:migrate',
                 onClick: handleMigrate.bind(null, record),
                 onClick: handleMigrate.bind(null, record),
               },
               },
+              {
+                tooltip: t('routes.scenes.downloadSceneE57'),
+                disabled: record.status != -2,
+                ifShow: () => {
+                  return tableType === 2;
+                },
+                icon: 'gis:layer-download',
+                popConfirm: {
+                  placement: 'left',
+                  title: t('routes.scenes.downloadSceneConfirmE57'),
+                  confirm: handleDownloadSceneE57.bind(null, record),
+                },
+              },
             ]"
             ]"
           />
           />
         </template>
         </template>
       </BasicTable>
       </BasicTable>
       <DownloadModal @register="registerDownloadModal" />
       <DownloadModal @register="registerDownloadModal" />
+      <DownloadE57Modal @register="registerDownloadE57Modal" />
       <AssistantModal @register="registerAssistantModal" @success="reload" />
       <AssistantModal @register="registerAssistantModal" @success="reload" />
       <MigrateModal
       <MigrateModal
         @register="registerMigrateModal"
         @register="registerMigrateModal"
@@ -165,6 +180,8 @@
     patchcoldStorageApi,
     patchcoldStorageApi,
     generateObjFileAPI,
     generateObjFileAPI,
     updateMapShowApi,
     updateMapShowApi,
+    checkDownloadE57Api,
+    downloadSceneDataE57APi,
   } from '/@/api/scene/list';
   } from '/@/api/scene/list';
   import { useI18n } from '/@/hooks/web/useI18n';
   import { useI18n } from '/@/hooks/web/useI18n';
   import {
   import {
@@ -176,6 +193,7 @@
 
 
   import { useUserStore } from '/@/store/modules/user';
   import { useUserStore } from '/@/store/modules/user';
   import DownloadModal from './downloadModal.vue';
   import DownloadModal from './downloadModal.vue';
+  import DownloadE57Modal from './downloadE57Modal.vue';
   import AssistantModal from './assistantModal.vue';
   import AssistantModal from './assistantModal.vue';
   import { useLocaleStore } from '/@/store/modules/locale';
   import { useLocaleStore } from '/@/store/modules/locale';
   import { SceneDownloadParam } from '/@/api/scene/model';
   import { SceneDownloadParam } from '/@/api/scene/model';
@@ -196,6 +214,7 @@
       PageWrapper,
       PageWrapper,
       MigrateModal,
       MigrateModal,
       Switch,
       Switch,
+      DownloadE57Modal,
       [Tabs.name]: Tabs,
       [Tabs.name]: Tabs,
       [Tabs.TabPane.name]: Tabs.TabPane,
       [Tabs.TabPane.name]: Tabs.TabPane,
     },
     },
@@ -213,6 +232,7 @@
 
 
       const { createMessage, createConfirm } = useMessage();
       const { createMessage, createConfirm } = useMessage();
       const [registerDownloadModal, { openModal: openDownloadModal }] = useModal();
       const [registerDownloadModal, { openModal: openDownloadModal }] = useModal();
+      const [registerDownloadE57Modal, { openModal: openDownloadE57Modal }] = useModal();
       const [registerAssistantModal, { openModal: openAssistantModal }] = useModal();
       const [registerAssistantModal, { openModal: openAssistantModal }] = useModal();
       const [registerMigrateModal, { openModal: openMigrateModal }] = useModal();
       const [registerMigrateModal, { openModal: openMigrateModal }] = useModal();
       const { t } = useI18n();
       const { t } = useI18n();
@@ -305,7 +325,7 @@
           title: t('common.operation'),
           title: t('common.operation'),
           dataIndex: '',
           dataIndex: '',
           slots: { customRender: 'action' },
           slots: { customRender: 'action' },
-          width: 260,
+          width: 300,
           ellipsis: false,
           ellipsis: false,
           fixed: 'right',
           fixed: 'right',
         },
         },
@@ -557,6 +577,24 @@
         setTimeout(reload, 100);
         setTimeout(reload, 100);
       }
       }
 
 
+      async function handleDownloadSceneE57(record: Recordable) {
+        let param: SceneDownloadParam = {
+          num: record.num,
+        };
+        const checker = await checkDownloadE57Api(param);
+        console.log('checker', checker);
+        if (checker.downloadStatus < 3) {
+          const res = await downloadSceneDataE57APi(param);
+          console.log('res', res);
+          openDownloadE57Modal(true, { ...record });
+        } else {
+          downloadByUrl({
+            url: checker.downloadUrl,
+            target: '_self',
+          });
+        }
+      }
+
       return {
       return {
         reload,
         reload,
         registerTable,
         registerTable,
@@ -585,6 +623,8 @@
         handleMigrateSuccess,
         handleMigrateSuccess,
         handleMigrateCancel,
         handleMigrateCancel,
         handleUpdateSwitch,
         handleUpdateSwitch,
+        handleDownloadSceneE57,
+        registerDownloadE57Modal,
       };
       };
     },
     },
   });
   });