Ver código fonte

日期组件bug

tangning 2 dias atrás
pai
commit
e802f644d4

Diferenças do arquivo suprimidas por serem muito extensas
+ 0 - 15152
pnpm-lock.yaml


+ 11 - 0
src/components/Scrollbar/src/Scrollbar.vue

@@ -9,6 +9,7 @@
       <component :is="tag" ref="resize" :class="['scrollbar__view', viewClass]" :style="viewStyle">
         <slot></slot>
       </component>
+      <div class="version" v-if="version">版本号 {{ version }}</div>
     </div>
     <template v-if="!native">
       <bar :move="moveX" :size="sizeWidth" />
@@ -17,6 +18,7 @@
   </div>
 </template>
 <script lang="ts">
+  import projectSetting from '/@/settings/projectSetting';
   import { addResizeListener, removeResizeListener } from '/@/utils/event';
   import componentSetting from '/@/settings/componentSetting';
   const { scrollbar } = componentSetting;
@@ -67,6 +69,7 @@
     setup(props) {
       const sizeWidth = ref('0');
       const sizeHeight = ref('0');
+      const version = ref(projectSetting.version);
       const moveX = ref(0);
       const moveY = ref(0);
       const wrap = ref();
@@ -127,6 +130,7 @@
         resize,
         update,
         handleScroll,
+        version,
       };
     },
   });
@@ -203,4 +207,11 @@
     opacity: 100%;
     transition: opacity 340ms ease-out;
   }
+  .version{
+    color: rgba(255, 255, 255, 0.7);
+    position: absolute;
+    bottom: 0;
+    width: 100%;
+    text-align: center;
+  }
 </style>

+ 1 - 2
src/router/routes/basic.ts

@@ -10,8 +10,8 @@ import {
 // 404 on a page
 export const PAGE_NOT_FOUND_ROUTE: AppRouteRecordRaw = {
   path: '/:path(.*)*',
-  name: PAGE_NOT_FOUND_NAME,
   component: LAYOUT,
+  name: PAGE_NOT_FOUND_NAME,
   meta: {
     title: 'ErrorPage',
     hideBreadcrumb: true,
@@ -20,7 +20,6 @@ export const PAGE_NOT_FOUND_ROUTE: AppRouteRecordRaw = {
   children: [
     {
       path: '/:path(.*)*',
-      name: PAGE_NOT_FOUND_NAME,
       component: EXCEPTION_COMPONENT,
       meta: {
         title: 'ErrorPage',

+ 1 - 0
src/settings/projectSetting.ts

@@ -14,6 +14,7 @@ import { primaryColor } from '../../build/config/themeConfig';
 
 // ! You need to clear the browser cache after the change
 const setting: ProjectConfig = {
+  version: '2.2.0',
   // Whether to show the configuration button
   showSettingButton: true,
 

+ 98 - 344
src/views/productOperation/cameraScene.vue

@@ -34,7 +34,12 @@
         <a-tabs v-model:activeKey="tableType" @change="changeTable">
           <a-tab-pane :key="0" tab="场景列表" :disabled="loading" />
           <a-tab-pane :key="1" tab="场景共享" :disabled="loading" />
-          <a-tab-pane :key="2" v-if="getCheckPerm('scenes-All')" tab="全域核查" :disabled="loading" />
+          <a-tab-pane
+            :key="2"
+            v-if="getCheckPerm('scenes-All')"
+            tab="全域核查"
+            :disabled="loading"
+          />
           <!-- <a-tab-pane :key="3" tab="四维双目Lite" :disabled="loading"/> 
         <a-tab-pane :key="4" tab="四维全景" :disabled="loading"/>  -->
           -->
@@ -48,14 +53,24 @@
       <div class="desc-wrap-BasicTable">
         <BasicTable @register="registerTable">
           <template #toolbar>
-            <a-button type="primary" v-if="tableType == 0 && getCheckPerm('scenes-upload')" @click="handleUpload"> 上传</a-button>
+            <a-button
+              type="primary"
+              v-if="tableType == 0 && getCheckPerm('scenes-upload')"
+              @click="handleUpload"
+            >
+              上传</a-button
+            >
             <!-- <a-button type="primary" @click="exportExcel"> 导出1</a-button> -->
           </template>
 
           <template #href="{ record }">
             <span v-if="tableType == 2">{{ record.sceneName }}</span>
             <a
-              v-else-if="record.status == 1 || record.status == 6 || (record.status == -2 && record.payStatus == 1)"
+              v-else-if="
+                record.status == 1 ||
+                record.status == 6 ||
+                (record.status == -2 && record.payStatus == 1)
+              "
               target="_blank"
               :title="record.sceneName"
               :href="record.webSite"
@@ -117,7 +132,8 @@
                   label: '下载',
                   ifShow:
                     getTypeCheckPerm('scenes-download') &&
-                    tableType != 1 && record.uploadType != 'offline' &&
+                    tableType != 1 &&
+                    record.uploadType != 'offline' &&
                     (record.userName == userInfo.userName ||
                       userInfo.roleId == 1 ||
                       userInfo.roleId == 45 ||
@@ -128,9 +144,13 @@
                 },
                 {
                   label: '重算',
-                  disabled: record.status == 0 || record.status == 6 || (record.status == -2 && record.payStatus != 1),
+                  disabled:
+                    record.status == 0 ||
+                    record.status == 6 ||
+                    (record.status == -2 && record.payStatus != 1),
                   ifShow:
-                    getTypeCheckPerm('scenes-recalculate') && record.uploadType != 'offline' &&
+                    getTypeCheckPerm('scenes-recalculate') &&
+                    record.uploadType != 'offline' &&
                     tableType != 1 &&
                     (userInfo.roleId == 1 || userInfo.roleId == 45 || userInfo.roleId == 48),
                   popConfirm: {
@@ -142,7 +162,8 @@
                   label: '复制',
                   disabled: !(record.status == 1 || (record.status == -2 && record.payStatus == 1)),
                   ifShow:
-                    getTypeCheckPerm('scenes-copy') && record.uploadType != 'offline' &&
+                    getTypeCheckPerm('scenes-copy') &&
+                    record.uploadType != 'offline' &&
                     tableType != 1 &&
                     (record.userName == userInfo.userName ||
                       userInfo.roleId == 1 ||
@@ -229,6 +250,7 @@
   import { Time } from '/@/components/Time';
   import { Descriptions, Tabs, Progress, Tooltip } from 'ant-design-vue';
   import { useI18n } from '/@/hooks/web/useI18n';
+  import { searchFormData, columns, columnsAll } from './data';
   import { useMessage } from '/@/hooks/web/useMessage';
   import { SCENE_TYPE } from '/@/settings/siteSetting';
   import { useModal } from '/@/components/Modal';
@@ -288,328 +310,16 @@
         ios: 'http://fir.4dage.com/jmjjios?release_id=67779a9423389f7d79fd886a',
         android: 'http://fir.4dage.com/zpnv?release_id=677ba62423389f143d2594f5',
       });
-      const columns: BasicColumn[] = [
-        {
-          title: '场景标题',
-          dataIndex: 'sceneName',
-          ellipsis: true,
-          slots: { customRender: 'href' },
-          resizable: true,
-          minWidth: 150,
-          width: 150,
-        },
-        {
-          title: '人员编号',
-          dataIndex: 'userName',
-          width: 100,
-        },
-        {
-          title: t('routes.staff.userName'),
-          dataIndex: 'nickName',
-          width: 100,
-          customRender: ({ record }) => {
-            return record.nickName || '-';
-          },
-        },
-        {
-          title: '浏览量',
-          dataIndex: 'viewCount',
-          width: 80,
-        },
-        {
-          title: '状态',
-          dataIndex: 'status',
-          slots: { customRender: 'status' },
-          width: 120,
-          // customRender: ({ record }) => {
-          //   let str;
-          //   switch (record.status - 0) {
-          //     case 0:
-          //       str = '计算中';
-          //       break;
-          //     case 1:
-          //       str = '计算成功';
-          //       break;
-          //     case -2:
-          //       str = '计算成功';
-          //       break;
-          //     case -1:
-          //       str = '计算失败';
-          //       break;
-          //   }
-          //   return record.payStatus == -2 ? '封存' : str;
-          // },
-        },
-        {
-          title: '相机类型',
-          dataIndex: 'type',
-          defaultHidden: true,
-          width: 120,
-          customRender: ({ record }) => {
-            let str;
-            switch (record.type) {
-              case 0:
-                str = SCENE_TYPE[1];
-                break;
-              case 1:
-                str = SCENE_TYPE[0];
-                break;
-              case 2:
-                str = SCENE_TYPE[2];
-                break;
-              case 5:
-                str = SCENE_TYPE[4];
-                break;
-              case 6:
-                str = SCENE_TYPE[3];
-                break;
-              case 7:
-                str = SCENE_TYPE[3];
-                break;
-              case 8:
-                str = SCENE_TYPE[4];
-                break;
-              case 9:
-                str = SCENE_TYPE[0];
-                break;
-              case 10:
-                str = SCENE_TYPE[2];
-                break;
-              case 11:
-                str = SCENE_TYPE[3];
-                break;
-            }
-            return str;
-          },
-        },
-        {
-          title: '场景码',
-          dataIndex: 'num',
-          ellipsis: true,
-          width: 180,
-          defaultHidden: true,
-        },
-        {
-          title: '拍摄时间',
-          dataIndex: 'createTime',
-          width: 180,
-          customRender: ({ record }) => {
-            return (
-              record.createTime &&
-              h(Time, {
-                value: record.createTime,
-                mode: 'datetime',
-              })
-            );
-          },
-        },
-        {
-          title: '是否复制',
-          dataIndex: 'isCopy',
-          width: 80,
-          defaultHidden: true,
-          customRender: ({ record }) => {
-            return record.isCopy ? '是' : '否';
-          },
-        },
-        {
-          title: '计算完成时间',
-          dataIndex: 'amount',
-          width: 180,
-          customRender: ({ record }) => {
-            return (
-              (record.algorithmTime &&
-                h(Time, {
-                  value: record.algorithmTime,
-                  mode: 'datetime',
-                })) ||
-              '-'
-            );
-          },
-        },
-        {
-          title: '计算时长',
-          dataIndex: 'amountdf',
-          width: 180,
-          customRender: ({ record }) => {
-            let startBuildTime = record.startBuildTime;
-            if(!record.algorithmTime || !startBuildTime) return '-'
-            let seconds =  dayjs(record.algorithmTime).diff(dayjs(startBuildTime), 'seconds')
-            if(record.statusString == '计算中'){
-              seconds =  dayjs().diff(dayjs(startBuildTime), 'seconds')
-            }
-            return convertSeconds(seconds);
-          },
-        },
-        {
-          title: 'SN码',
-          dataIndex: 'snCode',
-          defaultHidden: true,
-          width: 180,
-        },
-        {
-          title: '场景大小',
-          dataIndex: 'sceneSize',
-          width: 80,
-          customRender: ({ record }) => {
-            return record.sceneSize && record.sceneSize != 0
-              ? h('span', { class: 'sceneSize' }, Math.ceil(record.sceneSize / 1024 / 1024) + 'M')
-              : '-';
-          },
-        },
-        {
-          title: '复制时间',
-          dataIndex: 'copyTime',
-          width: 180,
-          defaultHidden: true,
-          customRender: ({ record }) => {
-            return record.copyTime
-              ? h(Time, {
-                  value: record.copyTime,
-                  mode: 'datetime',
-                })
-              : '-';
-          },
-        },
-        {
-          title: '操作',
-          dataIndex: 'action',
-          slots: { customRender: 'action' },
-          // fixed: 'right',
-          flag: 'ACTION',
-          width: 400,
-        },
-      ];
       const searchForm: Partial<FormProps> = {
         labelWidth: 80,
         autoSubmitOnEnter: true,
         autoAdvancedLine: 2,
-        schemas: [
-          {
-            field: 'sceneName',
-            label: '场景标题',
-            component: 'Input',
-            componentProps: {
-              maxLength: 100,
-            },
-            colProps: {
-              span: 6,
-            },
-          },
-          {
-            field: 'userName',
-            label: '人员编号',
-            component: 'Input',
-            componentProps: {
-              maxLength: 100,
-            },
-            colProps: {
-              span: 6,
-            },
-          },
-          {
-            field: 'type',
-            label: '相机类型',
-            component: 'ApiSelect',
-            componentProps: {
-              style: { maxWidth: '250px', placeholder: '全部' },
-              placeholder: '全部',
-              api: sceneGroupCount,
-              immediate: false,
-              resultField: 'list',
-              labelField: 'name',
-              valueField: 'id',
-              params: { type: 'camera' },
-            },
-            colProps: {
-              span: 6,
-            },
-          },
-          // {
-          //   field: 'type',
-          //   label: '相机类型',
-          //   component: 'Select',
-          //   // defaultValue: '7',
-          //   componentProps: {
-          //     options: [
-          //       {
-          //         label: SCENE_TYPE[1],
-          //         value: '0',
-          //         key: '0',
-          //       },
-          //       {
-          //         label: SCENE_TYPE[0],
-          //         value: '1',
-          //         key: '1',
-          //       },
-          //       {
-          //         label: SCENE_TYPE[2],
-          //         value: '5',
-          //         key: '5',
-          //       },
-          //       {
-          //         label: SCENE_TYPE[3],
-          //         value: '7',
-          //         key: '7',
-          //       },
-          //       {
-          //         label: SCENE_TYPE[4],
-          //         value: '8',
-          //         key: '8',
-          //       },
-          //     ],
-          //   },
-          //   colProps: {
-          //     xl: 6,
-          //     xxl: 6,
-          //   },
-          // },
-          {
-            field: 'num',
-            label: '场景码',
-            component: 'Input',
-            componentProps: {
-              maxLength: 100,
-            },
-            colProps: {
-              span: 6,
-            },
-          },
-          {
-            field: 'snCode',
-            label: 'SN 码',
-            component: 'Input',
-            componentProps: {
-              maxLength: 100,
-            },
-            colProps: {
-              span: 6,
-            },
-          },
-          {
-            field: 'platformId',
-            label: '平台',
-            component: 'ApiSelect',
-            show: false,
-            componentProps: {
-              style: { maxWidth: '250px', placeholder: '全部' },
-              placeholder: '全部',
-              api: sceneGroupCount,
-              immediate: false,
-              resultField: 'list',
-              labelField: 'name',
-              valueField: 'id',
-            },
-            colProps: {
-              span: 6,
-            },
-          },
-        ],
+        schemas: searchFormData(),
       };
       function cancelDownload() {
         downloadOption.value = {};
       }
-      function handleUpload(){
+      function handleUpload() {
         openUplodaModal(true, {});
       }
       const [registerDownModal, { openModal: openDownModal, closeModal }] = useModal();
@@ -617,7 +327,7 @@
       const [registerUplodaModal, { openModal: openUplodaModal }] = useModal();
       const [registerPowersModal, { openModal: openPowersModal }] = useModal();
       const [registerCaseListModal, { openModal: openCaseListModal }] = useModal();
-      const [registerTable, { reload, getForm }] = useTable({
+      const [registerTable, { reload: reload1 }] = useTable({
         api: operateSceneList,
         title: `场景列表`,
         // titleHelpMessage: ['已启用expandRowByClick', '已启用stopButtonPropagation'],
@@ -644,19 +354,61 @@
         },
         canResize: true,
       });
+      const [registerTable1, { reload: reload2 }] = useTable({
+        api: operateSceneList,
+        title: `场景列表`,
+        columns: columnsAll,
+        useSearchForm: true,
+        formConfig: {
+          labelWidth: 80,
+          autoSubmitOnEnter: true,
+          autoAdvancedLine: 2,
+          schemas: searchFormData(true),
+        },
+        showTableSetting: true,
+        showIndexColumn: false,
+        beforeFetch: (T) => {
+          loading.value = true;
+          return T;
+        },
+        afterFetch: (T) => {
+          loading.value = false;
+          return T;
+        },
+        rowKey: 'id',
+        fetchSetting: {
+          pageField: 'pageNum',
+          sizeField: 'pageSize',
+          listField: 'list',
+          totalField: 'total',
+        },
+        canResize: true,
+      });
       function changeTable(val: string) {
         tableType.value = val;
-        getForm().updateSchema([
-          { field: 'platformId', show: val == '2' },
-          // { field: 'snCode', colProps: {
-          //     span: val == '2' ? 5 : 6,
-          //   }, },
-          // { field: 'sceneName', colProps: {
-          //     span: val == '2' ? 5 : 6,
-          //   }, },
-        ]);
+        // getForm().updateSchema({ field: 'platform', show: val == '2' });
+        // let listColumns = columns.map((item) => {
+        //   if (item.dataIndex == 'action') {
+        //     return {
+        //       ...item,
+        //       ifShow: val == '2' ? false : true,
+        //     };
+        //   }
+        //   if (item.dataIndex == 'platformName') {
+        //     return {
+        //       ...item,
+        //       ifShow: val == '2' ? true : false,
+        //     };
+        //   }
+        //   return item;
+        // });
+        // setColumns(listColumns);
         reload();
       }
+      function reload() {
+        reload1();
+        // reload2();
+      }
       async function handleCopy(record: Recordable) {
         createConfirm({
           title: '复制场景',
@@ -688,13 +440,15 @@
         // });
       }
       function convertSeconds(seconds) {
-        if(seconds == 'NaN') return
-      var days =seconds>(3600*24)? Math.floor(seconds / (3600*24)):0;
-      var hours = seconds>3600?Math.floor((seconds % (3600*24)) / 3600):0;
-      var minutes = Math.floor((seconds % 3600) / 60);
-      var remainingSeconds = seconds % 60;
-      return  `${ days && (days + '天')||''} ${hours && (hours + '小时')||''} ${minutes ||'0'}分钟 ${remainingSeconds||'0'}秒`
-    }
+        if (seconds == 'NaN') return;
+        var days = seconds > 3600 * 24 ? Math.floor(seconds / (3600 * 24)) : 0;
+        var hours = seconds > 3600 ? Math.floor((seconds % (3600 * 24)) / 3600) : 0;
+        var minutes = Math.floor((seconds % 3600) / 60);
+        var remainingSeconds = seconds % 60;
+        return `${(days && days + '天') || ''} ${(hours && hours + '小时') || ''} ${
+          minutes || '0'
+        }分钟 ${remainingSeconds || '0'}秒`;
+      }
       async function handleMove(record: Recordable) {
         openMoveModal(true, {
           ...record,
@@ -829,17 +583,17 @@
         }
       }
       async function handlePowers(record: Recordable) {
-        let res = await getCaseByNum({ num: record.num, authType: 0,  });
+        let res = await getCaseByNum({ num: record.num, authType: 0 });
         // if (res && res.length) {
         //   openCaseListModal(true, {
         //     list: res,
         //   });
         // } else {
-          openPowersModal(true, {
-            ...record,
-            sourceType: 'scene',
-            tableType: tableType.value,
-          });
+        openPowersModal(true, {
+          ...record,
+          sourceType: 'scene',
+          tableType: tableType.value,
+        });
         // }
       }
       onMounted(async () => {

+ 456 - 0
src/views/productOperation/data.ts

@@ -0,0 +1,456 @@
+import { BasicColumn } from '/@/components/Table';
+import { SCENE_TYPE } from '/@/settings/siteSetting';
+import { Time } from '/@/components/Time';
+import { jyPlatformlist, sceneGroupCount } from '/@/api/jyUserPlatform/index'; //roleLIstApi
+import dayjs from 'dayjs';
+import { h } from 'vue';
+export const columns: BasicColumn[] = [
+  {
+    title: '场景标题',
+    dataIndex: 'sceneName',
+    ellipsis: true,
+    slots: { customRender: 'href' },
+    resizable: true,
+    minWidth: 150,
+    width: 150,
+  },
+  {
+    title: '人员编号',
+    dataIndex: 'userName',
+    width: 100,
+  },
+  {
+    title: '姓名',
+    dataIndex: 'nickName',
+    width: 100,
+    customRender: ({ record }) => {
+      return record.nickName || '-';
+    },
+  },
+  {
+    title: '浏览量',
+    dataIndex: 'viewCount',
+    width: 80,
+  },
+  {
+    title: '状态',
+    dataIndex: 'status',
+    slots: { customRender: 'status' },
+    width: 120,
+    // customRender: ({ record }) => {
+    //   let str;
+    //   switch (record.status - 0) {
+    //     case 0:
+    //       str = '计算中';
+    //       break;
+    //     case 1:
+    //       str = '计算成功';
+    //       break;
+    //     case -2:
+    //       str = '计算成功';
+    //       break;
+    //     case -1:
+    //       str = '计算失败';
+    //       break;
+    //   }
+    //   return record.payStatus == -2 ? '封存' : str;
+    // },
+  },
+  {
+    title: '相机类型',
+    dataIndex: 'type',
+    defaultHidden: true,
+    width: 120,
+    customRender: ({ record }) => {
+      let str;
+      switch (record.type) {
+        case 0:
+          str = SCENE_TYPE[1];
+          break;
+        case 1:
+          str = SCENE_TYPE[0];
+          break;
+        case 2:
+          str = SCENE_TYPE[2];
+          break;
+        case 5:
+          str = SCENE_TYPE[4];
+          break;
+        case 6:
+          str = SCENE_TYPE[3];
+          break;
+        case 7:
+          str = SCENE_TYPE[3];
+          break;
+        case 8:
+          str = SCENE_TYPE[4];
+          break;
+        case 9:
+          str = SCENE_TYPE[0];
+          break;
+        case 10:
+          str = SCENE_TYPE[2];
+          break;
+        case 11:
+          str = SCENE_TYPE[3];
+          break;
+      }
+      return str;
+    },
+  },
+  {
+    title: '场景码',
+    dataIndex: 'num',
+    ellipsis: true,
+    width: 180,
+    defaultHidden: true,
+  },
+  {
+    title: '拍摄时间',
+    dataIndex: 'createTime',
+    width: 180,
+    customRender: ({ record }) => {
+      return (
+        record.createTime &&
+        h(Time, {
+          value: record.createTime,
+          mode: 'datetime',
+        })
+      );
+    },
+  },
+  {
+    title: '是否复制',
+    dataIndex: 'isCopy',
+    width: 80,
+    defaultHidden: true,
+    customRender: ({ record }) => {
+      return record.isCopy ? '是' : '否';
+    },
+  },
+  {
+    title: '计算完成时间',
+    dataIndex: 'amount',
+    width: 180,
+    customRender: ({ record }) => {
+      return (
+        (record.algorithmTime &&
+          h(Time, {
+            value: record.algorithmTime,
+            mode: 'datetime',
+          })) ||
+        '-'
+      );
+    },
+  },
+  {
+    title: '计算时长',
+    dataIndex: 'amountdf',
+    width: 180,
+    customRender: ({ record }) => {
+      const startBuildTime = record.startBuildTime;
+      if (!record.algorithmTime || !startBuildTime) return '-';
+      let seconds = dayjs(record.algorithmTime).diff(dayjs(startBuildTime), 'seconds');
+      if (record.statusString == '计算中') {
+        seconds = dayjs().diff(dayjs(startBuildTime), 'seconds');
+      }
+      return convertSeconds(seconds);
+    },
+  },
+  {
+    title: 'SN码',
+    dataIndex: 'snCode',
+    defaultHidden: true,
+    width: 180,
+  },
+  {
+    title: '场景大小',
+    dataIndex: 'sceneSize',
+    width: 80,
+    customRender: ({ record }) => {
+      return record.sceneSize && record.sceneSize != 0
+        ? h('span', { class: 'sceneSize' }, Math.ceil(record.sceneSize / 1024 / 1024) + 'M')
+        : '-';
+    },
+  },
+  {
+    title: '复制时间',
+    dataIndex: 'copyTime',
+    width: 180,
+    defaultHidden: true,
+    customRender: ({ record }) => {
+      return record.copyTime
+        ? h(Time, {
+            value: record.copyTime,
+            mode: 'datetime',
+          })
+        : '-';
+    },
+  },
+  // {
+  //   title: '平台',
+  //   dataIndex: 'platformName',
+  //   ifShow: false,
+  //   width: 120,
+  // },
+  {
+    title: '操作',
+    dataIndex: 'action',
+    //ifShow: tableType.value == 2,
+    slots: { customRender: 'action' },
+    // fixed: 'right',
+    flag: 'ACTION',
+    width: 400,
+  },
+];
+export const columnsAll: BasicColumn[] = [
+  {
+    title: '场景标题',
+    dataIndex: 'sceneName',
+    ellipsis: true,
+    slots: { customRender: 'href' },
+    resizable: true,
+    minWidth: 150,
+    width: 150,
+  },
+  {
+    title: '人员编号',
+    dataIndex: 'userName',
+    width: 100,
+  },
+  {
+    title: '姓名',
+    dataIndex: 'nickName',
+    width: 100,
+    customRender: ({ record }) => {
+      return record.nickName || '-';
+    },
+  },
+  {
+    title: '状态',
+    dataIndex: 'status',
+    slots: { customRender: 'status' },
+    width: 120,
+    // customRender: ({ record }) => {
+    //   let str;
+    //   switch (record.status - 0) {
+    //     case 0:
+    //       str = '计算中';
+    //       break;
+    //     case 1:
+    //       str = '计算成功';
+    //       break;
+    //     case -2:
+    //       str = '计算成功';
+    //       break;
+    //     case -1:
+    //       str = '计算失败';
+    //       break;
+    //   }
+    //   return record.payStatus == -2 ? '封存' : str;
+    // },
+  },
+  {
+    title: '相机类型',
+    dataIndex: 'type',
+    defaultHidden: true,
+    width: 120,
+    customRender: ({ record }) => {
+      let str;
+      switch (record.type) {
+        case 0:
+          str = SCENE_TYPE[1];
+          break;
+        case 1:
+          str = SCENE_TYPE[0];
+          break;
+        case 2:
+          str = SCENE_TYPE[2];
+          break;
+        case 5:
+          str = SCENE_TYPE[4];
+          break;
+        case 6:
+          str = SCENE_TYPE[3];
+          break;
+        case 7:
+          str = SCENE_TYPE[3];
+          break;
+        case 8:
+          str = SCENE_TYPE[4];
+          break;
+        case 9:
+          str = SCENE_TYPE[0];
+          break;
+        case 10:
+          str = SCENE_TYPE[2];
+          break;
+        case 11:
+          str = SCENE_TYPE[3];
+          break;
+      }
+      return str;
+    },
+  },
+  {
+    title: '场景码',
+    dataIndex: 'num',
+    ellipsis: true,
+    width: 180,
+  },
+  {
+    title: '拍摄时间',
+    dataIndex: 'createTime',
+    width: 180,
+    customRender: ({ record }) => {
+      return (
+        record.createTime &&
+        h(Time, {
+          value: record.createTime,
+          mode: 'datetime',
+        })
+      );
+    },
+  },
+  {
+    title: '计算完成时间',
+    dataIndex: 'amount',
+    width: 180,
+    customRender: ({ record }) => {
+      return (
+        (record.algorithmTime &&
+          h(Time, {
+            value: record.algorithmTime,
+            mode: 'datetime',
+          })) ||
+        '-'
+      );
+    },
+  },
+  {
+    title: '计算时长',
+    dataIndex: 'amountdf',
+    width: 180,
+    customRender: ({ record }) => {
+      const startBuildTime = record.startBuildTime;
+      if (!record.algorithmTime || !startBuildTime) return '-';
+      let seconds = dayjs(record.algorithmTime).diff(dayjs(startBuildTime), 'seconds');
+      if (record.statusString == '计算中') {
+        seconds = dayjs().diff(dayjs(startBuildTime), 'seconds');
+      }
+      return convertSeconds(seconds);
+    },
+  },
+  {
+    title: 'SN码',
+    dataIndex: 'snCode',
+    width: 180,
+  },
+  {
+    title: '场景大小',
+    dataIndex: 'sceneSize',
+    width: 80,
+    customRender: ({ record }) => {
+      return record.sceneSize && record.sceneSize != 0
+        ? h('span', { class: 'sceneSize' }, Math.ceil(record.sceneSize / 1024 / 1024) + 'M')
+        : '-';
+    },
+  },
+  {
+    title: '所属平台',
+    dataIndex: 'platformName',
+    width: 120,
+  },
+];
+export const searchFormData = (show) => [
+  {
+    field: 'sceneName',
+    label: '场景标题',
+    component: 'Input',
+    componentProps: {
+      maxLength: 100,
+    },
+    colProps: {
+      span: 6,
+    },
+  },
+  {
+    field: 'userName',
+    label: '人员编号',
+    component: 'Input',
+    componentProps: {
+      maxLength: 100,
+    },
+    colProps: {
+      span: 6,
+    },
+  },
+  {
+    field: 'type',
+    label: '相机类型',
+    component: 'ApiSelect',
+    componentProps: {
+      style: { maxWidth: '250px', placeholder: '全部' },
+      placeholder: '全部',
+      api: sceneGroupCount,
+      immediate: false,
+      resultField: 'list',
+      labelField: 'name',
+      valueField: 'id',
+      params: { type: 'camera' },
+    },
+    colProps: {
+      span: 6,
+    },
+  },
+  {
+    field: 'num',
+    label: '场景码',
+    component: 'Input',
+    componentProps: {
+      maxLength: 100,
+    },
+    colProps: {
+      span: 6,
+    },
+  },
+  {
+    field: 'snCode',
+    label: 'SN 码',
+    component: 'Input',
+    componentProps: {
+      maxLength: 100,
+    },
+    colProps: {
+      span: 6,
+    },
+  },
+  {
+    field: 'platform',
+    label: '平台',
+    component: 'ApiSelect',
+    show: !!show,
+    componentProps: {
+      style: { maxWidth: '250px', placeholder: '全部' },
+      placeholder: '全部',
+      api: sceneGroupCount,
+      immediate: false,
+      resultField: 'list',
+      labelField: 'name',
+      valueField: 'id',
+    },
+    colProps: {
+      span: 6,
+    },
+  },
+];
+function convertSeconds(seconds) {
+  if (seconds == 'NaN') return;
+  const days = seconds > 3600 * 24 ? Math.floor(seconds / (3600 * 24)) : 0;
+  const hours = seconds > 3600 ? Math.floor((seconds % (3600 * 24)) / 3600) : 0;
+  const minutes = Math.floor((seconds % 3600) / 60);
+  const remainingSeconds = seconds % 60;
+  return `${(days && days + '天') || ''} ${(hours && hours + '小时') || ''} ${minutes || '0'}分钟 ${
+    remainingSeconds || '0'
+  }秒`;
+}

+ 0 - 1
src/views/productOperation/modal/detailModal.vue

@@ -26,7 +26,6 @@
   import { useI18n } from '/@/hooks/web/useI18n';
   import { uploadApi } from '/@/api/product/index';
   import { getByRyId, getinnerByRyId, addAuth, checkAuthOtherApi } from '/@/api/operate';
-  import { useModalInner } from '/@/components/Modal';
   import dayjs from 'dayjs';
 
   const { t } = useI18n();

+ 1 - 1
src/views/statistics/scene/index.vue

@@ -281,7 +281,7 @@
           action: '年',
         },
       ];
-      if (getUserInfo.value.roleId != 47) {
+      if (getUserInfo.value.roleId != 47 || pageAuth.value == 'admin') {
         list.push({
           title: '总采集用户数/总用户数',
           icon: 'transaction|svg',

+ 1 - 0
types/config.d.ts

@@ -80,6 +80,7 @@ export interface TransitionSetting {
 }
 
 export interface ProjectConfig {
+  version?: string;
   // Storage location of permission related information
   permissionCacheType: CacheTypeEnum;
   // Whether to show the configuration button

Diferenças do arquivo suprimidas por serem muito extensas
+ 4665 - 3817
yarn.lock