소스 검색

fix(bugs): hideBreadcrumb

tangning 3 년 전
부모
커밋
86571589a0

+ 1 - 39
src/api/order/index.ts

@@ -18,6 +18,7 @@ enum Api {
   downList = '/newV4/service/manage/order/down/list',
   downList = '/newV4/service/manage/order/down/list',
   downExport = '/newV4/service/manage/order/down/export',
   downExport = '/newV4/service/manage/order/down/export',
   pageInvoice = '/newV4/service/manage/invoice/pageInvoice',
   pageInvoice = '/newV4/service/manage/invoice/pageInvoice',
+  
 }
 }
 
 
 /**
 /**
@@ -121,42 +122,3 @@ export const InvoiceList = (params: PageParams) =>
       ignoreCancelToken: true,
       ignoreCancelToken: true,
     },
     },
   });
   });
-// export const allCompanyApi = (params: PageParams) =>
-//   defHttp.post<RentListGetResultModel>({
-//     url: Api.allCompany,
-//     params,
-//     headers: {
-//       // @ts-ignore
-//       ignoreCancelToken: true,
-//     },
-//   });
-
-// export const addCameraApi = (params: addCameraParams) =>
-//   defHttp.post<RentListGetResultModel>({
-//     url: Api.addCamera,
-//     params,
-//     headers: {
-//       // @ts-ignore
-//       ignoreCancelToken: true,
-//     },
-//   });
-
-// export const editCameraApi = (params: addCameraParams) =>
-//   defHttp.post<RentListGetResultModel>({
-//     url: Api.editCamera,
-//     params,
-//     headers: {
-//       // @ts-ignore
-//       ignoreCancelToken: true,
-//     },
-//   });
-
-// export const updateLiveRoomInfoApi = (params: updateParams) =>
-//   defHttp.post<Result>({
-//     url: Api.updateLiveRoomInfo,
-//     params,
-//     headers: {
-//       // @ts-ignore
-//       ignoreCancelToken: true,
-//     },
-//   });

+ 37 - 0
src/api/product/index.ts

@@ -13,6 +13,11 @@ enum Api {
   spaceSdkDel = '/newV4/service/manage/spaceSdk/delete',
   spaceSdkDel = '/newV4/service/manage/spaceSdk/delete',
   addAndUpload = '/newV4/service/manage/cameraVersion/addAndUpload',
   addAndUpload = '/newV4/service/manage/cameraVersion/addAndUpload',
   editAndUpload = '/newV4/service/manage/cameraVersion/update',
   editAndUpload = '/newV4/service/manage/cameraVersion/update',
+  // spaceSdkList = '/newV4/service/manage/spaceSdk/list',
+  spaceSdkUpload = '/newV4/service/manage/spaceSdk/upload',
+  // spaceSdkOnline = '/newV4/service/manage/spaceSdk/online',
+  // spaceSdkTop = '/newV4/service/manage/spaceSdk/top',
+  spaceSdkDelete = '/newV4/service/manage/spaceSdk/delete',
 }
 }
 
 
 /**
 /**
@@ -108,6 +113,38 @@ export const SpaceSdkUpdate = (params: PageParams) =>
    },
    },
  });
  });
 
 
+export const SpaceSdkTop = (params: addCameraParams) =>
+ defHttp.post<RentListGetResultModel>({
+   url: Api.spaceSdkTop,
+   params,
+   headers: {
+     // @ts-ignore
+     ignoreCancelToken: true,
+   },
+ });
+
+export const SpaceSdkDelete = (params: updateParams) =>
+ defHttp.post<Result>({
+   url: Api.spaceSdkDelete,
+   params,
+   headers: {
+     // @ts-ignore
+     ignoreCancelToken: true,
+   },
+ });
+
+export function SpaceSdkUpload(
+  params: UploadFileParams,
+  onUploadProgress: (progressEvent: ProgressEvent) => void,
+) {
+  return defHttp.uploadFile<Result>(
+    {
+      url: Api.spaceSdkUpload,
+      onUploadProgress,
+    },
+    params,
+  );
+ }
 export function uploadApi(
 export function uploadApi(
   params: UploadFileParams,
   params: UploadFileParams,
   onUploadProgress: (progressEvent: ProgressEvent) => void,
   onUploadProgress: (progressEvent: ProgressEvent) => void,

+ 6 - 3
src/api/sys/model/userModel.ts

@@ -15,20 +15,20 @@ export interface RoleInfo {
  * @description: Login interface return value
  * @description: Login interface return value
  */
  */
 export interface LoginResultModel {
 export interface LoginResultModel {
-  userId: string | number;
+  userId: number;
   token: string;
   token: string;
   role: RoleInfo;
   role: RoleInfo;
   avatar: string;
   avatar: string;
   roleName: string;
   roleName: string;
   userName: string;
   userName: string;
-  roleId: string | number;
+  roleId: number;
 }
 }
 
 
 /**
 /**
  * @description: Get user information return value
  * @description: Get user information return value
  */
  */
 export interface GetUserInfoModel {
 export interface GetUserInfoModel {
-  roles: RoleInfo[];
+  roles: number[];
   // 用户id
   // 用户id
   userId: string | number;
   userId: string | number;
   // 用户名
   // 用户名
@@ -39,4 +39,7 @@ export interface GetUserInfoModel {
   avatar: string;
   avatar: string;
   // 介绍
   // 介绍
   desc?: string;
   desc?: string;
+  // 权限
+  roleId: number;
+
 }
 }

+ 1 - 1
src/api/sys/user.ts

@@ -7,7 +7,7 @@ enum Api {
   // Login = '/basic-api/login',
   // Login = '/basic-api/login',
   Login = '/newV4/service/manage/login',
   Login = '/newV4/service/manage/login',
   Logout = '/basic-api/logout',
   Logout = '/basic-api/logout',
-  GetUserInfo = '/basic-api/getUserInfo',
+  GetUserInfo = '/newV4/service/manage/sysUser/getInfo',
   GetPermCode = '/getPermCode',
   GetPermCode = '/getPermCode',
 }
 }
 
 

+ 9 - 1
src/locales/lang/zh-CN/routes/product.ts

@@ -15,5 +15,13 @@ export default {
     1:'四维看看',
     1:'四维看看',
     2:'四维看见',
     2:'四维看见',
     3:'四维深时',
     3:'四维深时',
-  }
+  },
+  sdkType:{
+    1:'Unity',
+    2:'UE4',
+  },
+  statusType: {
+    0: '未发布',
+    1: '已发布',
+  },
 };
 };

+ 4 - 0
src/router/routes/modules/customer.ts

@@ -30,6 +30,8 @@ export const customer: AppRouteRecordRaw = {
 
 
       meta: {
       meta: {
         title: t('routes.dashboard.customerDevice'),
         title: t('routes.dashboard.customerDevice'),
+        hideMenu: true,
+        hideBreadcrumb: true,
         // icon: 'la:file-invoice-dollar',
         // icon: 'la:file-invoice-dollar',
       },
       },
     },
     },
@@ -39,6 +41,8 @@ export const customer: AppRouteRecordRaw = {
       component: () => import('/@/views/customer/scene.vue'),
       component: () => import('/@/views/customer/scene.vue'),
       meta: {
       meta: {
         title: t('routes.dashboard.customerScene'),
         title: t('routes.dashboard.customerScene'),
+        hideMenu: true,
+        hideBreadcrumb: true,
         // icon: 'la:file-invoice-dollar',
         // icon: 'la:file-invoice-dollar',
       },
       },
     },
     },

+ 8 - 7
src/store/modules/user.ts

@@ -131,14 +131,15 @@ export const useUserStore = defineStore({
     },
     },
     async getUserInfoAction(): Promise<UserInfo | null> {
     async getUserInfoAction(): Promise<UserInfo | null> {
       if (!this.getToken) return null;
       if (!this.getToken) return null;
-      // const userInfo = await getUserInfo();
-      const userInfo = this.userInfo || getAuthCache<UserInfo>(USER_INFO_KEY);
-      console.log('getUserInfo ',userInfo,'USER_INFO_KEY',)
-      const { roles = [] } = userInfo;
-      if (isArray(roles)) { 
-        const roleList = roles.map((item) => item.value) as RoleEnum[];
+      const userInfo = await getUserInfo();
+      const { roleId  } = userInfo;
+      if (isArray(roleId)) { 
+        const roleList = roleId.map((item) => item.value) as RoleEnum[];
         this.setRoleList(roleList);
         this.setRoleList(roleList);
-      } else {
+      }else if(roleId) {
+        userInfo.roles = [roleId];
+        this.setRoleList([]);
+      }else{
         userInfo.roles = [];
         userInfo.roles = [];
         this.setRoleList([]);
         this.setRoleList([]);
       }
       }

+ 92 - 2
src/views/product/data.tsx

@@ -1,12 +1,15 @@
 import { BasicColumn } from '/@/components/Table/src/types/table';
 import { BasicColumn } from '/@/components/Table/src/types/table';
-import { h } from 'vue';
+import { h, computed } from 'vue';
 import { Time } from '/@/components/Time';
 import { Time } from '/@/components/Time';
 import { useMessage } from '/@/hooks/web/useMessage';
 import { useMessage } from '/@/hooks/web/useMessage';
 import { useI18n } from '/@/hooks/web/useI18n';
 import { useI18n } from '/@/hooks/web/useI18n';
 import { Switch } from 'ant-design-vue';
 import { Switch } from 'ant-design-vue';
-import { EditAndUpload, } from '/@/api/product/index';
+import { EditAndUpload, SpaceSdkTop } from '/@/api/product/index';
+import { useLocaleStore } from '/@/store/modules/locale';
+const localeStore = useLocaleStore();
 const { createMessage } = useMessage();
 const { createMessage } = useMessage();
 const { t } = useI18n();
 const { t } = useI18n();
+const isJA = computed(() => localeStore.getLocale === 'en');
 
 
 export const refundTimeTableSchema: BasicColumn[] = [
 export const refundTimeTableSchema: BasicColumn[] = [
   {
   {
@@ -69,6 +72,83 @@ export const refundTimeTableSchema: BasicColumn[] = [
   },
   },
 ];
 ];
 
 
+export const sdkTableSchema: BasicColumn[] = [
+  {
+    title: '版本号',
+    width: 80,
+    dataIndex: 'version',
+  },
+  {
+    title: '版本更新说明',
+    width: 240,
+    dataIndex: 'imprintCh',
+  },
+  // {
+  //   title: '版本更新说明',
+  //   width: 150,
+  //   dataIndex: 'imprintEn',
+  // },
+  {
+    title: '首次发布时间',
+    width: 120,
+    dataIndex: 'publishTime',
+    customRender: ({ record }) => {
+      return (
+        record.publishTime &&
+        h(Time, {
+          value: record.publishTime,
+          mode: 'datetime',
+        })
+      );
+    },
+  },{
+    title: '创建人',
+    width: 80,
+    dataIndex: 'recStatus',
+  },{
+    title: '创建时间',
+    width: 120,
+    dataIndex: 'createTime',
+    customRender: ({ record }) => {
+      return (
+        record.createTime &&
+        h(Time, {
+          value: record.createTime,
+          mode: 'datetime',
+        })
+      );
+    },
+  },{
+    title: '置顶',
+    dataIndex: 'isTop',
+    width: 80,
+    customRender: ({ record }) => {
+      if (!Reflect.has(record, 'pendingStatus')) {
+        record.pendingStatus = false;
+      }
+      return h(Switch, {
+        checked: record.isTop == 1 ? true : false,
+        checkedChildren: '启用',
+        unCheckedChildren: '禁用',
+        loading: false,
+        onChange: async (checked: boolean) => {
+          record.pendingStatus = true;
+          const newStatus = checked?1:0;
+          await SpaceSdkTop({...record,isTop:newStatus});
+          Reflect.set(record, 'isTop', checked);
+          createMessage.success(t('common.optSuccess'));
+        },
+      });
+    },
+  },{
+    title: '发布状态',
+    dataIndex: 'status',
+    width: 80,
+    customRender: ({ record }) => {
+      return renderType(record.status)
+    },
+  },
+];
 export const refundTimeTableData: any[] = [
 export const refundTimeTableData: any[] = [
   {
   {
     t1: '2017-10-01 14:10',
     t1: '2017-10-01 14:10',
@@ -99,3 +179,13 @@ export const refundTimeTableData: any[] = [
     t5: '1h',
     t5: '1h',
   },
   },
 ];
 ];
+function renderType(type: number): string {
+  switch (type) {
+    case 0:
+      return t(`routes.product.statusType.0`);
+    case 1:
+      return t(`routes.product.statusType.1`);
+    default:
+      return t(`routes.product.statusType.1`);
+  }
+}

+ 258 - 0
src/views/product/sdk/AddModal.vue

@@ -0,0 +1,258 @@
+<template>
+  <BasicModal
+    v-bind="$attrs"
+    @register="register"
+    title="新增相机"
+    @visible-change="handleVisibleChange"
+    @cancel="resetFields"
+    @ok="handleSubmit"
+  >
+    <div class="pt-2px pr-3px">
+      <BasicForm @register="registerForm" :model="model" >
+        <template #text="{ model, field }">
+          {{ model[field]  }}
+        </template>
+      </BasicForm>
+    </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 { uploadApi, AddAndUpload } from '/@/api/product/index';
+  import { useI18n } from '/@/hooks/web/useI18n';
+
+  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: 'type',
+          component: 'Input',
+          label: t('routes.product.types'),
+          slot: 'text',
+          colProps: {
+            span: 24,
+          },
+          // required: true,
+        },
+        {
+          field: 'version',
+          component: 'Input',
+          label: t('routes.product.version'),
+          required: true,
+          colProps: {
+            span: 24,
+          },
+          rules: [
+            {
+              required: true,
+              // @ts-ignore
+              validator: async (rule, value) => {
+                if (!value) {
+                  return Promise.reject(t('common.inputText')+t('routes.product.version'));
+                }
+                if(/.*[\u4e00-\u9fa5]+.*$/.test(value)){
+                  /* eslint-disable-next-line */
+                  return Promise.reject('不支持中文字符');
+                }
+                return Promise.resolve();
+              },
+              trigger: 'change',
+            },
+          ],
+          componentProps: {
+            maxLength: 15,
+            onChange: (data) => {
+              console.log('data', data);
+            },
+          },
+        },
+        // {
+        //   field: 'minVersion',
+        //   component: 'Input',
+        //   label: t('routes.product.minVersion'),
+        //   required: true,
+        //   rules: [
+        //     {
+        //       required: true,
+        //       // @ts-ignore
+        //       validator: async (rule, value) => {
+        //         const regPos = /.*[\u4e00-\u9fa5]+.*$/; // 非中文
+        //         if (!value) {
+        //           return Promise.reject(t('common.inputText')+t('routes.product.minVersion'));
+        //         }
+        //         if (regPos.test(value)) {
+        //           /* eslint-disable-next-line */
+        //           return Promise.reject('不支持中文字符');
+        //         }
+        //         return Promise.resolve();
+        //       },
+        //       trigger: 'change',
+        //     },
+        //   ],
+        //   colProps: {
+        //     span: 24,
+        //   },
+        // },
+        {
+          field: 'description',
+          component: 'InputTextArea',
+          required: true,
+          label: t('routes.product.description')+'中文',
+          colProps: {
+            span: 24,
+          },
+        },
+        {
+          field: 'description',
+          component: 'InputTextArea',
+          required: true,
+          label: t('routes.product.description')+'英文',
+          colProps: {
+            span: 24,
+          },
+        },
+        {
+          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: {
+            api: uploadApi,
+            maxNumber: 1,
+            maxSize: 1000,
+            fileFlow:true,
+            accept: ['4dage'],
+            afterFetch: function (data) {
+              console.log('uploadApi',data)
+              Reflect.set(data, 'url', data.file);
+              fileFlow.file = data.file
+              return data;
+            },
+          },
+
+          colProps: {
+            span: 22,
+          },
+        },
+        {
+          field: 'orderSn',
+          component: 'CheckboxGroup',
+          label: '官网置顶',
+          componentProps: {
+            options: [
+              { label: '顶顶顶顶顶顶顶', value: 1 },
+            ],
+          },
+          colProps: {
+            span: 24,
+          },
+        },
+      ];
+      const [registerForm, { validate, resetFields, setFieldsValue }] = useForm({
+        labelWidth: 120,
+        schemas,
+        showActionButtonGroup: false,
+        actionColOptions: {
+          span: 24,
+        },
+      });
+      onMounted(() => {});
+      let addListFunc = () => {};
+      const [register, { closeModal }] = useModalInner((data) => {
+        data && onDataReceive(data);
+      });
+      function renderOwnTypeLabel(type: number): string {
+        switch (type) {
+          case 2:
+            return t('routes.product.sdkType.2');
+          case 1:
+            return t('routes.product.sdkType.1');
+          case 3:
+            return t('routes.product.type.3');
+          default:
+            return '';
+        }
+      }
+      function rendercameraTypeLabel(cameraType: number): string {
+        switch (cameraType) {
+          case 4:
+            return t('routes.devices.cameraName.4');
+          case 1:
+            return t('routes.devices.cameraName.1');
+          case 9:
+            return t('routes.devices.cameraName.9');
+          case 10:
+            return t('routes.devices.cameraName.10');
+          case 6:
+            return t('routes.devices.cameraName.6');
+          default:
+            return '';
+        }
+      }
+      function onDataReceive(data) {
+        modelRef.value = data
+        resetFields();
+        setFieldsValue({
+          type:renderOwnTypeLabel(Number(data)),
+        });
+      }
+      const handleSubmit = async () => {
+        try {
+          const params = await validate();
+          const apiData = {
+            data:{
+            ...params as any,
+            type:modelRef.value,
+            file:fileFlow.file,
+            }
+          }
+          console.log('res', apiData);
+          const res = await AddAndUpload(apiData);
+          console.log('res', res);
+          closeModal();
+          resetFields();
+          createMessage.success(t('common.optSuccess'));
+          emit('update');
+        } catch (error) {
+          console.log('not passing', error);
+        }
+      };
+      function handleVisibleChange(v) {
+        v && props.userData && nextTick(() => onDataReceive(props.userData));
+      }
+      return {
+        register,
+        rendercameraTypeLabel,
+        renderOwnTypeLabel,
+        schemas,
+        registerForm,
+        model: modelRef,
+        fileFlow,
+        handleVisibleChange,
+        handleSubmit,
+        addListFunc,
+        resetFields,
+        t,
+      };
+    },
+  });
+</script>

+ 246 - 0
src/views/product/sdk/EditModal.vue

@@ -0,0 +1,246 @@
+<template>
+  <BasicModal
+    v-bind="$attrs"
+    @register="register"
+    title="编辑相机"
+    @visible-change="handleVisibleChange"
+    @cancel="resetFields"
+    @ok="handleSubmit"
+  >
+    <div class="pt-2px pr-3px">
+      <BasicForm @register="registerForm" :model="model" >
+        <template #text="{ model, field }">
+          {{ model[field]  }}
+        </template>
+      </BasicForm>
+    </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 { EditAndUpload, } from '/@/api/product/index';
+  import { useI18n } from '/@/hooks/web/useI18n';
+
+  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: 'id',
+          component: 'Input',
+          label: t('routes.product.types'),
+          show: false,
+          colProps: {
+            span: 24,
+          },
+        },{
+          field: 'type',
+          component: 'Input',
+          label: t('routes.product.types'),
+          show: false,
+          colProps: {
+            span: 24,
+          },
+        },{
+          field: 'name',
+          component: 'Input',
+          label: t('routes.product.types'),
+          slot: 'text',
+          colProps: {
+            span: 24,
+          },
+          // required: true,
+        },
+        {
+          field: 'version',
+          component: 'Input',
+          label: t('routes.product.version'),
+          required: true,
+          colProps: {
+            span: 24,
+          },
+          rules: [
+            {
+              required: true,
+              // @ts-ignore
+              validator: async (rule, value) => {
+                if (!value) {
+                  return Promise.reject(t('common.inputText')+t('routes.product.version'));
+                }
+                if(/.*[\u4e00-\u9fa5]+.*$/.test(value)){
+                  /* eslint-disable-next-line */
+                  return Promise.reject('不支持中文字符');
+                }
+                return Promise.resolve();
+              },
+              trigger: 'change',
+            },
+          ],
+          componentProps: {
+            maxLength: 15,
+            onChange: (data) => {
+              console.log('data', data);
+            },
+          },
+        },
+        {
+          field: 'minVersion',
+          component: 'Input',
+          label: t('routes.product.minVersion'),
+          required: true,
+          rules: [
+            {
+              required: true,
+              // @ts-ignore
+              validator: async (rule, value) => {
+                const regPos = /.*[\u4e00-\u9fa5]+.*$/; // 非中文
+                if (!value) {
+                  return Promise.reject(t('common.inputText')+t('routes.product.minVersion'));
+                }
+                if (regPos.test(value)) {
+                  /* eslint-disable-next-line */
+                  return Promise.reject('不支持中文字符');
+                }
+                return Promise.resolve();
+              },
+              trigger: 'change',
+            },
+          ],
+          colProps: {
+            span: 24,
+          },
+        },
+        {
+          field: 'description',
+          component: 'InputTextArea',
+          required: true,
+          label: t('routes.product.description'),
+          colProps: {
+            span: 24,
+          },
+        },
+        // {
+        //   field: 'file',
+        //   component: 'Upload',
+        //   label: t('routes.product.file'),
+        //   required: true,
+        //   rules: [{ required: true, message: t('common.uploadMessge') }],
+        //   itemProps: {
+        //     validateTrigger: 'onBlur',
+        //   },
+        //   componentProps: {
+        //     api: uploadApi,
+        //     maxNumber: 1,
+        //     maxSize: 1000,
+        //     fileFlow:true,
+        //     accept: ['4dage'],
+        //     afterFetch: function (data) {
+        //       console.log('uploadApi',data)
+        //       Reflect.set(data, 'url', data.file);
+        //       fileFlow.file = data.file
+        //       return data;
+        //     },
+        //   },
+      ];
+      const [registerForm, { validate, resetFields, setFieldsValue }] = useForm({
+        labelWidth: 120,
+        schemas,
+        showActionButtonGroup: false,
+        actionColOptions: {
+          span: 24,
+        },
+      });
+      onMounted(() => {});
+      let addListFunc = () => {};
+      const [register, { closeModal }] = useModalInner((data) => {
+        data && onDataReceive(data);
+      });
+      function renderOwnTypeLabel(type: number): string {
+        switch (type) {
+          case 2:
+            return t('routes.product.type.2');
+          case 1:
+            return t('routes.product.type.1');
+          case 3:
+            return t('routes.product.type.3');
+          default:
+            return '';
+        }
+      }
+      function rendercameraTypeLabel(cameraType: number): string {
+        switch (cameraType) {
+          case 4:
+            return t('routes.devices.cameraName.4');
+          case 1:
+            return t('routes.devices.cameraName.1');
+          case 9:
+            return t('routes.devices.cameraName.9');
+          case 10:
+            return t('routes.devices.cameraName.10');
+          case 6:
+            return t('routes.devices.cameraName.6');
+          default:
+            return '';
+        }
+      }
+      function onDataReceive(data) {
+        modelRef.value = data
+        console.log('onDataReceive',data)
+        resetFields();
+        setFieldsValue({
+          ...data,
+          type:renderOwnTypeLabel(Number(data.type)),
+        });
+      }
+      const handleSubmit = async () => {
+        try {
+          const params = await validate();
+          console.log('modelRef',params)
+          const apiData = {
+            // ...modelRef.value,
+            ...params as any,
+          }
+          console.log('res', apiData);
+          const res = await EditAndUpload(apiData);
+          console.log('res', res);
+          closeModal();
+          resetFields();
+          createMessage.success(t('common.optSuccess'));
+          emit('update');
+        } catch (error) {
+          console.log('not passing', error);
+        }
+      };
+      function handleVisibleChange(v) {
+        v && props.userData && nextTick(() => onDataReceive(props.userData));
+      }
+      return {
+        register,
+        rendercameraTypeLabel,
+        renderOwnTypeLabel,
+        schemas,
+        registerForm,
+        model: modelRef,
+        fileFlow,
+        handleVisibleChange,
+        handleSubmit,
+        addListFunc,
+        resetFields,
+        t,
+      };
+    },
+  });
+</script>

+ 148 - 160
src/views/product/sdk/index.vue

@@ -1,179 +1,167 @@
 <template>
 <template>
-    <BasicTable @register="registerTable">
-      <template #toolbar>
-        <a-button type="primary" @click="exportExcel"> 导出</a-button>
-      </template>
-      <template #action="{ record }">
+  <PageWrapper contentBackground>
+    <template #footer>
+      <a-tabs v-model:activeKey="searchInfo.type" @change="tabChange">
+        <a-tab-pane key="1" :tab="t('routes.product.sdkType.1')" />
+        <a-tab-pane key="2" :tab="t('routes.product.sdkType.2')" />
+      </a-tabs>
+    </template>
+    <div class="desc-wrap-BasicTable">
+      <BasicTable @register="registerTimeTable">
+        <template #toolbar>
+          <a-button
+            type="primary"
+            @click="
+              () => {
+                openAddModal(true, searchInfo.type);
+              }
+            "
+            >{{ t('routes.product.addVstive') }}</a-button
+          >
+        </template>
+        <template #action="{ record }">
           <TableAction
           <TableAction
-            stopButtonPropagation
             :actions="[
             :actions="[
               {
               {
                 label: '编辑',
                 label: '编辑',
-                icon: 'ic:outline-delete-outline',
-                onClick: handleDelete.bind(null, record),
+                icon: 'ep:edit',
+                onClick: handleEdit.bind(null, record),
               },
               },
               {
               {
                 label: '删除',
                 label: '删除',
                 icon: 'ic:outline-delete-outline',
                 icon: 'ic:outline-delete-outline',
-                onClick: handleDelete.bind(null, record),
+                popConfirm: {
+                  title: '是否确认删除',
+                  confirm: handleDelete.bind(null, record),
+                },
               },
               },
             ]"
             ]"
           />
           />
-      </template>
-    </BasicTable>
+        </template>
+      </BasicTable>
+    </div>
+    <AddModal @update="reload" @register="registerAddModal" />
+    <EditModal @register="registerEditModal" @update="reload" />
+  </PageWrapper>
 </template>
 </template>
 <script lang="ts">
 <script lang="ts">
-  import { defineComponent, h } from 'vue';
-  import { BasicTable, useTable, TableAction, BasicColumn, TableImg, FormProps } from '/@/components/Table';
-  import { PageWrapper } from '/@/components/Page';
-  import { Time } from '/@/components/Time';
-  import { Descriptions } from 'ant-design-vue';
-  import { useI18n } from '/@/hooks/web/useI18n';
-  import { useMessage } from '/@/hooks/web/useMessage';
-  import { InvoiceList,DownExport } from '/@/api/order'
-  import { SpaceSdkList, DelAndUpload } from '/@/api/product';
-
-  export default defineComponent({
-    components: { 
-      BasicTable, 
-      TableAction, 
-      PageWrapper,
-      TableImg,
-      [Descriptions.name]: Descriptions,
-      [Descriptions.Item.name]: Descriptions.Item,
-    },
-    setup() {
-      const { t } = useI18n();
-      const { createMessage,createConfirm } = useMessage();
-      const columns: BasicColumn[] = [
+import { defineComponent, reactive, h } from 'vue';
+import { BasicTable, useTable, FormProps, TableAction, BasicColumn } from '/@/components/Table';
+import { PageWrapper } from '/@/components/Page';
+import { Divider, Card, Empty, Descriptions, Steps, Tabs } from 'ant-design-vue';
+import { SpaceSdkList, DelAndUpload, EditAndUpload } from '/@/api/product';
+import { sdkTableSchema } from '../data';
+import { useModal } from '/@/components/Modal';
+import { useI18n } from '/@/hooks/web/useI18n';
+import AddModal from './AddModal.vue';
+import EditModal from './EditModal.vue';
+import { useMessage } from '/@/hooks/web/useMessage';
+export default defineComponent({
+  components: {
+    BasicTable,
+    AddModal,
+    EditModal,
+    TableAction,
+    PageWrapper,
+    [Divider.name]: Divider,
+    [Card.name]: Card,
+    Empty,
+    [Descriptions.name]: Descriptions,
+    [Descriptions.Item.name]: Descriptions.Item,
+    [Steps.name]: Steps,
+    [Steps.Step.name]: Steps.Step,
+    [Tabs.name]: Tabs,
+    [Tabs.TabPane.name]: Tabs.TabPane,
+  },
+  setup() {
+    const { t } = useI18n();
+    const searchInfo = reactive<Recordable>({
+      type: '1',
+    });
+    const [registerAddModal, { openModal: openAddModal }] = useModal();
+    const [registerEditModal, { openModal: openEditModal }] = useModal();
+    const { createMessage } = useMessage();
+    const searchForm: Partial<FormProps> = {
+      labelWidth: 100,
+      schemas: [
         {
         {
-          title: '时间',
-          dataIndex: 'createTime',
-          width: 150,
-          customRender: ({ record }) => {
-            return (
-              record.createTime &&
-              h(Time, {
-                value: record.createTime,
-                mode: 'datetime',
-              })
-            );
+          field: 'version',
+          label: '版本号',
+          component: 'Input',
+          componentProps: {
+            maxLength: 100,
           },
           },
-        },
-        {
-          title: '订单号',
-          dataIndex: 'orderSn',
-          ellipsis: false,
-          width: 180,
-        },
-        {
-          title: '用户名',
-          dataIndex: 'userName',
-          width: 80,
-        },
-        {
-          title: '订单金额',
-          dataIndex: 'amount',
-          width: 80,
-        },
-        {
-          title: '支付方式',
-          dataIndex: 'payType',
-          // slots: { customRender: 'orderType' },
-          width: 80,
-        },
-        {
-          title: '订单状态',
-          dataIndex: 'payStatus',
-          // slots: { customRender: 'orderStatus' },
-          width: 80,
-        },
-      ];
-      const searchForm: Partial<FormProps> = {
-        labelWidth: 100,
-        schemas: [
-          {
-            field: 'sceneName',
-            label: '开票申请时间',
-            component: 'RangePicker',
-            componentProps: {
-              maxLength: 100,
-            },
-            colProps: {
-              xl: 7,
-              xxl: 7,
-            },
+          colProps: {
+            xl: 6,
+            xxl: 6,
           },
           },
-          {
-            field: 'sceneName',
-            label: '支付时间',
-            component: 'RangePicker',
-            componentProps: {
-              maxLength: 100,
-            },
-            colProps: {
-              xl: 7,
-              xxl: 7,
-            },
-          },{
-            field: 'sceneName',
-            label: '订单号',
-            component: 'Input',
-            componentProps: {
-              maxLength: 100,
-            },
-            colProps: {
-              xl: 6,
-              xxl: 6,
-            },
-          }
-        ],
-      };
-      const [registerTable] = useTable({
-        api: InvoiceList,
-        title: '发票列表',
-        // titleHelpMessage: ['已启用expandRowByClick', '已启用stopButtonPropagation'],
-        columns: columns,
-        useSearchForm: true,
-        formConfig: searchForm,
-        showTableSetting: true,
-        rowKey: 'id',
-        fetchSetting: {
-          pageField: 'pageNum',
-          sizeField: 'size',
-          listField: 'records',
-          totalField: 'total',
-        },
-        actionColumn: {
-          width: 250,
-          title: 'Action',
-          dataIndex: 'action',
-          slots: { customRender: 'action' },
         },
         },
-        canResize: false,
+      ],
+    };
+    const [registerTimeTable, { reload }] = useTable({
+      api: SpaceSdkList,
+      title: 'SDK列表',
+      columns: sdkTableSchema,
+      useSearchForm: true,
+      formConfig: searchForm,
+      showTableSetting: true,
+      showIndexColumn:false,
+      rowKey: 'id',
+      fetchSetting: {
+        pageField: 'pageNum',
+        sizeField: 'pageSize',
+        listField: 'list',
+        totalField: 'total',
+      },
+      searchInfo: searchInfo,
+      actionColumn: {
+        width: 180,
+        title: '操作',
+        dataIndex: 'action',
+        slots: { customRender: 'action' },
+      },
+      canResize: false,
+    });
+    function tabChange(val: string) {
+      console.log('tabChange', val);
+      reload();
+    }
+    async function handleDelete(record: Recordable) {
+      console.log('点击了删除', record);
+      await DelAndUpload({ id: record.id });
+      createMessage.success(t('common.optSuccess'));
+      reload();
+    }
+    function handleOpen(record: Recordable) {
+      console.log('点击了启用', record);
+    }
+    function handleEdit(record: Recordable) {
+      console.log('record', record);
+      openEditModal(true, {
+        ...record,
       });
       });
-      function handleDelete(record: Recordable) {
-        console.log('点击了删除', record);
-      }
-      function handleOpen(record: Recordable) {
-        console.log('点击了启用', record);
-      }
-      function exportExcel() {
-        createConfirm({
-          iconType: 'warning',
-          title: () => h('span', '温馨提示'),
-          content: () => h('span', '确定当前标签下的订单记录?'),
-          onOk: async () => {
-            await DownExport();
-          },
-        });
-      }
-      return {
-        registerTable,
-        handleDelete,
-        handleOpen,
-        exportExcel,
-      };
-    },
-  });
-</script>
+    }
+    return {
+      registerTimeTable,
+      handleDelete,
+      handleOpen,
+      tabChange,
+      reload,
+      registerAddModal,
+      registerEditModal,
+      openAddModal,
+      handleEdit,
+      t,
+      searchInfo,
+    };
+  },
+});
+</script>
+<style lang="less" scoped>
+.desc-wrap-BasicTable {
+  background-color: #f0f2f5;
+  .vben-basic-table-form-container {
+    padding: 0;
+  }
+}
+</style>

+ 2 - 1
types/store.d.ts

@@ -37,7 +37,8 @@ export interface UserInfo {
   avatar: string;
   avatar: string;
   desc?: string;
   desc?: string;
   homePath?: string;
   homePath?: string;
-  roles: RoleInfo[];
+  roleId: number;
+  roles: number[];//RoleInfo[];
 }
 }
 
 
 export interface BeforeMiniState {
 export interface BeforeMiniState {