Jelajahi Sumber

批量导入

tangning 3 bulan lalu
induk
melakukan
3564d8b6a3

+ 42 - 17
src/api/customer/index.ts

@@ -1,6 +1,7 @@
 import { defHttp } from '/@/utils/http/axios';
 import { PageParams, deleteParams, addParams, cameraListParams, companyExcelParams } from './model';
 import { Result, FileStream, UploadFileParams } from '/#/axios';
+import { useI18n } from '/@/hooks/web/useI18n';
 
 enum Api {
   companyList = '/service/manage/company/list',
@@ -9,7 +10,8 @@ enum Api {
   companyDelete = '/service/manage/company/delete',
   cameraList = '/service/agent/camera/list',
   companyUploadExcel = '/service/manage/excel/uploadExcel',
-  downTemplate = '/service/manage/excel/downTemplate',
+  downTemplate = '/service/agent/camera/downTemplate',
+  uploadAuthModelExcel = '/service/agent/authorizeModeling/uploadAuthModelExcel',
 }
 
 export const companyList = (params: PageParams) =>
@@ -62,29 +64,52 @@ export const cameraList = (params: cameraListParams) =>
       ignoreCancelToken: true,
     },
   });
-export const downTemplate = (params: companyExcelParams) =>
-  defHttp.downloadFile<FileStream>({
+
+export const downTemplate = (params: companyExcelParams) => {
+  const { t } = useI18n();
+  const fileName = {
+    0: '批量分发.xlsx',
+    1: t('routes.empower.pldr') + '.xlsx',
+    2: '客户关联模板.xlsx',
+    3: '入库模板.xlsx',
+  };
+  return defHttp.downloadFile<FileStream>({
     method: 'GET',
     url: Api.downTemplate,
     params: params,
-    // data: params, 
-    fileName:params.type == 0?'入库模板.xlsx':params.type == 1?'出库模板.xlsx':'客户关联模板.xlsx',
+    fileName: fileName[params.type] || '客户关联模板.xlsx',
     headers: {
       // @ts-ignore
       ignoreCancelToken: true,
     },
-    responseType: 'blob'
+    responseType: 'blob',
   });
+};
+
+//导入算法授权授权时间
+
+export function uploadAuthModelExcel(
+  params: UploadFileParams,
+  onUploadProgress: (progressEvent: ProgressEvent) => void,
+) {
+  return defHttp.uploadFile<Result>(
+    {
+      url: Api.uploadAuthModelExcel,
+      onUploadProgress,
+    },
+    params,
+  );
+}
 
 export function companyUploadExcel(
-    params: UploadFileParams,
-    onUploadProgress: (progressEvent: ProgressEvent) => void,
-  ) {
-    return defHttp.uploadFile<Result>(
-      {
-        url: Api.companyUploadExcel,
-        onUploadProgress,
-      },
-      params,
-    );
-   }
+  params: UploadFileParams,
+  onUploadProgress: (progressEvent: ProgressEvent) => void,
+) {
+  return defHttp.uploadFile<Result>(
+    {
+      url: Api.companyUploadExcel,
+      onUploadProgress,
+    },
+    params,
+  );
+}

+ 1 - 1
src/api/customer/model.ts

@@ -30,5 +30,5 @@ export interface cameraListParams {
 }
 export interface companyExcelParams {
   file?: File | Blob;
-  type?: Number;
+  type: number;
 }

+ 2 - 0
src/locales/lang/en/routes/empower.ts

@@ -1,6 +1,8 @@
 export default {
   name: 'Offline Lincense',
   sq: 'License',
+  pldr: 'Batch Import',
+  pldrsuccess: 'Import successful',
   customerName: 'Customer Account',
   endCustomer: 'End Customer',
   useTypeStr: 'Usage Type',

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

@@ -1,6 +1,9 @@
 export default {
   name: '本地版授权管理',
   sq: '授权',
+  pldr: '批量导入',
+  pldrsuccess: '导入成功',
+  pldrtips: '下载批量导入模板',
   customerName: '客户账号',
   endCustomer: '终端客户',
   useTypeStr: '使用类型',

+ 2 - 8
src/views/empower/AddModal.vue

@@ -135,10 +135,7 @@
             valueFormat: 'YYYY-MM-DD',
             // showTime: true,
           },
-          colProps: {
-            xl: 20,
-            xxl: 20,
-          },
+          colProps: { span: 20 },
         },
         {
           field: 'authorizeEndTime',
@@ -151,10 +148,7 @@
             valueFormat: 'YYYY-MM-DD',
             // showTime: true,
           },
-          colProps: {
-            xl: 20,
-            xxl: 20,
-          },
+          colProps: { span: 20 },
         },
         {
           field: 'agentId',

+ 139 - 0
src/views/empower/batchModal.vue

@@ -0,0 +1,139 @@
+<template>
+  <BasicModal
+    v-bind="$attrs"
+    @register="register"
+    :title="t('routes.empower.pldr')"
+    @visible-change="handleVisibleChange"
+    @cancel="resetFields"
+    @ok="handleSubmit"
+    :min-height="0"
+  >
+    <div class="pt-2px pr-3px">
+      <BasicForm @register="registerForm" :model="model">
+        <template #text="{ model, field }">
+          {{ model[field] }}
+        </template>
+      </BasicForm>
+      <a @click="getTemplate" style="padding: 20px 0 0 80px">{{t('routes.empower.pldrtips')}}</a>
+    </div>
+  </BasicModal>
+</template>
+<script lang="ts">
+  import { defineComponent, ref, nextTick, onMounted, reactive } from 'vue';
+  import { BasicModal, useModalInner } from '/@/components/Modal';
+  import { BasicForm, FormSchema, useForm } from '/@/components/Form/index';
+  import { useMessage } from '/@/hooks/web/useMessage';
+  // import { sceneMove } from '/@/api/operate';
+  import { uploadAuthModelExcel, downTemplate } from '/@/api/customer';
+  import { useI18n } from '/@/hooks/web/useI18n';
+  import { downloadByData } from '/@/utils/file/download'
+  const { t } = useI18n();
+  export default defineComponent({
+    components: { BasicModal, BasicForm },
+    props: {
+      userData: { type: Object },
+    },
+    emits: ['update', 'register'],
+    setup(props, { emit }) {
+      const modelRef = ref({});
+      const fileFlow = reactive({
+        file: null,
+      });
+      const { createMessage } = useMessage();
+      const schemas: FormSchema[] = [
+        {
+          field: 'file',
+          component: 'Upload',
+          label: t('routes.product.file'),
+          required: true,
+          rules: [{ required: true, message: t('common.uploadMessge') }],
+          // helpMessage: t('routes.corporation.uploadHelp'),
+          itemProps: {
+            validateTrigger: 'onBlur',
+          },
+          componentProps: {
+            maxNumber: 1,
+            maxSize: 5,
+            fileFlow: true,
+            accept: ['xls', 'xlsx'],
+            afterFetch: function (data) {
+              // console.log('uploadApi', data);
+              // Reflect.set(data, 'url', data.file);
+              fileFlow.file = data.file;
+              console.log(fileFlow.file);
+              return data;
+            },
+          },
+
+          colProps: {
+            span: 22,
+          },
+        },
+      ];
+      const [registerForm, { validate, resetFields, setFieldsValue }] = useForm({
+        labelWidth: 120,
+        schemas,
+        showActionButtonGroup: false,
+        actionColOptions: {
+          span: 24,
+        },
+      });
+      onMounted(() => {});
+      let addListFunc = () => {};
+      const [register, { closeModal }] = useModalInner((data) => {
+        // console.log(data);
+        data && onDataReceive(data);
+      });
+
+      function onDataReceive(data) {
+        modelRef.value = data;
+        resetFields();
+        setFieldsValue({
+          type: data.sceneName,
+        });
+      }
+      const handleSubmit = async () => {
+        try {
+          const params = await validate();
+          const apiData = {
+            file: fileFlow.file,
+            data:{
+              type: 1,
+            }
+          };
+          const res = await uploadAuthModelExcel(apiData);
+          closeModal();
+          resetFields();
+          emit('update');
+          createMessage.success(res || t('routes.empower.pldrsuccess'));
+        } catch (error) {
+          console.log('not passing', error);
+        }
+      };
+      function handleVisibleChange(v) {
+        // console.log(v);
+        // v && props.userData && nextTick(() => onDataReceive(props.userData));
+      }
+      async function getTemplate() {
+        try {
+          await downTemplate({ type: 1 });
+        } catch (error) {
+          console.log('not passing', error);
+        }
+      }
+      return {
+        register,
+        schemas,
+        registerForm,
+        model: modelRef,
+        fileFlow,
+        handleVisibleChange,
+        handleSubmit,
+        addListFunc,
+        resetFields,
+        t,
+        getTemplate,
+      };
+    },
+  });
+</script>

+ 10 - 0
src/views/empower/index.vue

@@ -3,6 +3,7 @@
     <BasicTable @register="registerTable">
       <template #toolbar>
         <a-button type="primary" @click="handleEdit">{{t('routes.empower.sq')}}</a-button>
+        <a-button type="primary" @click="handleAllExport">{{t('routes.empower.pldr')}}</a-button>
       </template>
       <template #copy="{ record }">
         <a @click="handleCopy(record.authorizeKey)">
@@ -28,6 +29,7 @@
       </template>
     </BasicTable>
     <AddModal @register="register" @update="reload" />
+    <batchModal @register="registerBatch" @update="reload" />
   </div>
 </template>
 <script lang="ts">
@@ -45,6 +47,7 @@
   import { copyTextToClipboard } from '/@/hooks/web/useCopyToClipboard';
   import { Time } from '/@/components/Time';
   import AddModal from './AddModal.vue';
+  import batchModal from './batchModal.vue';
   import { useMessage } from '/@/hooks/web/useMessage';
   // import { usePermissionStore } from '/@/store/modules/permission';
   import { useI18n } from '/@/hooks/web/useI18n';
@@ -54,6 +57,7 @@
       BasicTable,
       AddModal,
       TableAction,
+      batchModal,
       Time,
     },
     setup() {
@@ -62,6 +66,7 @@
       // const { getCheckPerm } = permissionStore;
       const { t } = useI18n();
       const [register, { openModal }] = useModal();
+      const [registerBatch, { openModal:openBatchModal }] = useModal();
       const columns: BasicColumn[] = [
         {
           title: t('routes.empower.customerName'),
@@ -251,6 +256,9 @@
         copyTextToClipboard(str);
         createMessage.success(t('routes.scene.copySccuse'));
       }
+      function handleAllExport() {
+        openBatchModal(true, {});
+      }
       function handleEdit(record = {}) {
         openModal(true, {
           ...record,
@@ -263,9 +271,11 @@
         handleDelete,
         reload,
         register,
+        registerBatch,
         t,
         // getCheckPerm,
         handleEdit,
+        handleAllExport,
       };
     },
   });