gemercheung 1 rok temu
rodzic
commit
2cb97173f1

+ 10 - 0
src/api/archive/resstore.ts

@@ -11,6 +11,7 @@ enum Api {
   restore = '/service/manage_jp/storage/restore',
   allUserList = '/service/manage_jp/user/allUserList',
   cameraList = '/service/manage_jp/camera/getByUser',
+  migrate = '/service/manage_jp/scene/move',
 }
 
 /**
@@ -26,6 +27,15 @@ export const restoreApi = (params: restoreItemParam) =>
       ignoreCancelToken: true,
     },
   });
+export const migrateApi = (params: restoreItemParam) =>
+  defHttp.post<Result>({
+    url: Api.migrate,
+    params,
+    headers: {
+      // @ts-ignore
+      ignoreCancelToken: true,
+    },
+  });
 export const getAllAccountListApi = (params: allUserListParam) =>
   defHttp.post<Result>({
     url: Api.allUserList,

+ 4 - 0
src/locales/lang/ja/apiCode.ts

@@ -77,6 +77,10 @@ export default {
   errCode5023: 'このシーンはOBJの生成をサポートしません',
   errCode5024: '協同エディットに失敗、企業管理アカウントを入力してください。',
 
+  errCode5025: '场景已生成obj',
+  errCode5026: '场景已在改相机,无需迁移',
+  errCode5027: '相机类型不同,不能迁移',
+
   errCode50006: 'メール送信テンプレートが存在しません',
   errCode50050: '長さが限界を超えています!',
   errCode50051: '記録が見当たりませんでした!',

+ 3 - 0
src/locales/lang/ja/routes/scenes.ts

@@ -67,4 +67,7 @@ export default {
   unAssistant: '協同エディットを終了',
   addAssistant: '協同数追加',
   shootUserName: '撮影アカウント',
+  migrate: '迁移',
+  migrateAccount: '迁移账号',
+  migrateDevice: '迁移相机',
 };

+ 3 - 0
src/locales/lang/zh-CN/apiCode.ts

@@ -27,6 +27,9 @@ export default {
   errCode5022: '只能操作激光场景',
   errCode5023: '当前场景不支持生成 obj',
   errCode5024: '场景协作失败,请填写公司管理员账号',
+  errCode5025: '场景已生成obj',
+  errCode5026: '场景已在改相机,无需迁移',
+  errCode5027: '相机类型不同,不能迁移',
 
   errCode50006: '邮件发送模板不存在',
   errCode50050: '长度超出限制!',

+ 3 - 0
src/locales/lang/zh-CN/routes/scenes.ts

@@ -67,4 +67,7 @@ export default {
   unAssistantConfirm: '是否确定取消协作?',
   addAssistant: '添加协助',
   shootUserName: '拍摄账号',
+  migrate: '迁移',
+  migrateAccount: '迁移账号',
+  migrateDevice: '迁移相机',
 };

+ 39 - 8
src/views/scenes/list.vue

@@ -107,12 +107,24 @@
                   confirm: handleDownloadScene.bind(null, record),
                 },
               },
+              {
+                tooltip: t('routes.scenes.migrate'),
+                disabled: record.status != -2,
+                ifShow: record.isDel,
+                icon: 'carbon:migrate',
+                onClick: handleMigrate.bind(null, record),
+              },
             ]"
           />
         </template>
       </BasicTable>
       <DownloadModal @register="registerDownloadModal" />
       <AssistantModal @register="registerAssistantModal" @success="reload" />
+      <MigrateModal
+        @register="registerMigrateModal"
+        @success="handleMigrateSuccess"
+        @cancel="handleMigrateCancel"
+      />
     </div>
   </PageWrapper>
 </template>
@@ -131,12 +143,7 @@
   import { useMessage } from '/@/hooks/web/useMessage';
   import { useModal } from '/@/components/Modal';
   import { Tabs } from 'ant-design-vue';
-  // import { sceneDetail, buildSceneObj } from '/@/api/lastApi/index';
-  // import { Progress } from 'ant-design-vue';
-  // import { h } from 'vue';
-  // addDownloadNumApi,
-  // checkDownloadApi,
-  // generateSceneEditTokenApi,
+
   import {
     ListApi,
     downloadSceneDataAPi,
@@ -163,6 +170,7 @@
   import { SceneDownloadParam } from '/@/api/scene/model';
   import { RoleEnum } from '/@/enums/roleEnum';
   import { onMounted } from 'vue';
+  import MigrateModal from './migrateModal.vue';
 
   const localeStore = useLocaleStore();
   console.log('localeStore', localeStore);
@@ -178,6 +186,7 @@
       DownloadModal,
       AssistantModal,
       PageWrapper,
+      MigrateModal,
       [Tabs.name]: Tabs,
       [Tabs.TabPane.name]: Tabs.TabPane,
     },
@@ -196,6 +205,7 @@
       const { createMessage, createConfirm } = useMessage();
       const [registerDownloadModal, { openModal: openDownloadModal }] = useModal();
       const [registerAssistantModal, { openModal: openAssistantModal }] = useModal();
+      const [registerMigrateModal, { openModal: openMigrateModal }] = useModal();
       const { t } = useI18n();
       const loading = ref(false);
       const tableType = ref<Number>(0); //0看看 、1看见、2深时
@@ -483,8 +493,8 @@
         if (keys.length > 0) {
           createConfirm({
             iconType: 'warning',
-            title: () => h('span', '批量归档'),
-            content: () => h('span', '是否确定?'),
+            title: () => h('span', t('routes.archive.patchArchive')),
+            content: () => h('span', t('common.isConfirm')),
             onOk: async () => {
               try {
                 await patchcoldStorageApi({
@@ -512,6 +522,23 @@
         tableHeight.value = window.innerHeight - 390;
         // reload();
       });
+      const handleMigrate = (record: Recordable) => {
+        try {
+          console.log('record', record);
+          openMigrateModal(true, {
+            tableType: tableType.value,
+            sceneNum: [record.num],
+          });
+        } catch (error) {
+          console.log('error', error);
+        }
+      };
+      const handleMigrateSuccess = () => {
+        reload();
+      };
+      const handleMigrateCancel = () => {
+        reload();
+      };
 
       return {
         reload,
@@ -537,6 +564,10 @@
         isPatchAuth,
         handleFetchSuccess,
         tableHeight,
+        registerMigrateModal,
+        handleMigrate,
+        handleMigrateSuccess,
+        handleMigrateCancel,
       };
     },
   });

+ 145 - 0
src/views/scenes/migrateModal.vue

@@ -0,0 +1,145 @@
+<template>
+  <BasicModal
+    v-bind="$attrs"
+    @register="register"
+    :title="t('routes.scenes.migrate')"
+    width="700px"
+    :minHeight="250"
+    :centered="true"
+    @ok="handleSubmit"
+    @cancel="handleCancel"
+  >
+    <div class="pt-10px pb-60px">
+      <BasicForm @register="registerForm" />
+    </div>
+    <template #centerFooter>
+      <!-- <a-button>xxxx</a-button> -->
+    </template>
+  </BasicModal>
+</template>
+<script lang="ts">
+  import { defineComponent, reactive, ref } from 'vue';
+  import { BasicModal, useModalInner } from '/@/components/Modal';
+  import { BasicForm, FormSchema, useForm } from '/@/components/Form/index';
+
+  import { migrateApi } from '/@/api/archive/resstore';
+  import { useI18n } from '/@/hooks/web/useI18n';
+  import { useMessage } from '/@/hooks/web/useMessage';
+
+  const { t } = useI18n();
+  const { createMessage } = useMessage();
+
+  export default defineComponent({
+    components: { BasicModal, BasicForm },
+    props: {
+      userData: { type: Object },
+    },
+    emits: ['register', 'success', 'cancel'],
+    setup(_, { emit }) {
+      const [register, { closeModal }] = useModalInner((data) => {
+        data && onDataReceive(data);
+      });
+      const selectData = ref({
+        account: '',
+        tableType: NaN,
+        num: [],
+      });
+      const schemas: FormSchema[] = [
+        {
+          field: 'userName',
+          label: t('routes.scenes.migrateAccount'),
+          component: 'Input',
+          required: true,
+        },
+        {
+          field: 'cameraId',
+          label: t('routes.scenes.migrateDevice'),
+          component: 'Input',
+          required: true,
+        },
+      ];
+      const [
+        registerForm,
+        {
+          validate,
+          clearValidate,
+          getFieldsValue,
+          resetFields,
+          appendSchemaByField,
+          removeSchemaByFiled,
+        },
+      ] = useForm({
+        schemas: schemas,
+        labelWidth: 150,
+        baseColProps: { span: 22 },
+        autoSubmitOnEnter: true,
+        showResetButton: false,
+        showSubmitButton: false,
+        submitFunc: async () => {},
+      });
+
+      const checked = ref<boolean>(false);
+      const headerInfo = reactive<Recordable>({});
+      const searchInfo = reactive<Recordable>({});
+
+      function onDataReceive(data: any) {
+        console.log('Data Received', data);
+        selectData.value.tableType = Number(data.tableType);
+        selectData.value.num = data.sceneNum;
+      }
+
+      const handleSelect = async () => {
+        // const keys = getSelectRowKeys();
+        // console.log('key', key);
+      };
+      const handleChange = (val, row) => {
+        console.log('val,row', val, row);
+      };
+      const handleSubmit = async () => {
+        try {
+          await validate();
+          const fields = getFieldsValue();
+          await migrateApi({
+            numList: selectData.value.num,
+            cameraId: fields.cameraId,
+            userName: fields.userName,
+          });
+          createMessage.success(t('common.optSuccess'));
+          resetFields();
+          closeModal();
+          emit('success');
+
+          setTimeout(() => {
+            createMessage.destroy();
+          }, 3000);
+        } catch (error) {
+          console.error('error', error);
+        }
+      };
+      const handleCancel = async () => {
+        selectData.value.account = '';
+        selectData.value.tableType = NaN;
+        selectData.value.num = [];
+        removeSchemaByFiled('cameraId');
+        appendSchemaByField(schemas[1], 'cameraId');
+        resetFields();
+        emit('cancel');
+      };
+
+      return {
+        register,
+        searchInfo,
+        closeModal,
+        handleSelect,
+        headerInfo,
+        handleChange,
+        t,
+        checked,
+        handleSubmit,
+        registerForm,
+        handleCancel,
+        clearValidate,
+      };
+    },
+  });
+</script>