tangning 10 ヶ月 前
コミット
f8deeb1ca6

+ 293 - 0
src/views/case/addCaseModal.vue

@@ -0,0 +1,293 @@
+<template>
+  <BasicModal
+    v-bind="$attrs"
+    @register="register"
+    title="新增案件"
+    @cancel="resetFields"
+    @ok="handleSubmit"
+    :width="1000"
+    :min-height="0"
+  >
+    <div class="pt-2px pr-3px">
+      
+      <BasicTable class="powesrTable" @register="registerTable"></BasicTable>
+    </div>
+  </BasicModal>
+</template>
+<script lang="ts">
+  import { defineComponent, ref, computed, 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 { useModal } from '/@/components/Modal';
+  import { useI18n } from '/@/hooks/web/useI18n';
+  import detailModal from './detailModal.vue';
+  import { usePermissionStore } from '/@/store/modules/permission';
+  import { getAuthList, getAuthType, setAuthType, delAuth } from '/@/api/operate';
+  import { BasicTable, useTable, TableAction, BasicColumn } from '/@/components/Table';
+  import { useUserStore } from '/@/store/modules/user';
+  import dayjs from 'dayjs';
+  const { t } = useI18n();
+  export default defineComponent({
+    components: { BasicModal, BasicForm, BasicTable, TableAction, detailModal },
+    props: {
+      userData: { type: Object },
+    },
+    emits: ['update', 'register'],
+    setup(props, { emit }) {
+      const modelRef = ref({});
+      const numRef = ref(null);
+      const type = ref(0);
+      const fileFlow = reactive({
+        showList: true,
+      });
+      const [registerDetail, { openModal: openDetaileModal }] = useModal();
+      const columns: BasicColumn[] = [
+        {
+          title: '人员编号',
+          dataIndex: 'ryNo',
+          width: 150,
+        },
+        {
+          title: '姓名',
+          dataIndex: 'ryNickName',
+          width: 180,
+        },
+        {
+          title: '查看权限',
+          dataIndex: 'lookAuth',
+          customRender: ({ record }) => {
+            return record.lookAuth == 1
+              ? '不限时间'
+              : record.lookAuth == 0
+              ? '无权'
+              : `${dayjs(record.lookEndTime).format('YYYY-MM-DD HH:mm')} 截止`;
+          },
+          width: 150,
+        },
+        {
+          title: '编辑权限',
+          dataIndex: 'editAuth',
+          customRender: ({ record }) => {
+            return record.editAuth == 1
+              ? '不限时间'
+              : record.editAuth == 0
+              ? '无权'
+              : `${dayjs(record.editEndTime).format('YYYY-MM-DD HH:mm')} 截止`;
+          },
+          width: 150,
+        },
+        {
+          title: '可授权他人',
+          dataIndex: 'canLook',
+          customRender: ({ record }) => {
+            if (type.value == 1 && record.canEditLook == 1) return '编辑';
+            return record.canEditLook == 1
+              ? '编辑和查看'
+              : record.canAuthLook == 1
+              ? '查看'
+              : `无权`;
+          },
+          width: 120,
+        },
+        {
+          title: '操作',
+          dataIndex: 'action',
+          slots: { customRender: 'action' },
+          ifShow: true,
+          fixed: 'right',
+          flag: 'ACTION',
+          width: 80,
+        },
+      ];
+      const permissionStore = usePermissionStore();
+      const userStore = useUserStore();
+      const userName = computed(() => userStore.getUserInfo?.userName);
+      const roleId = computed(() => userStore.getUserInfo?.roleId);
+      const { getCheckPerm } = permissionStore;
+      const { createMessage, createConfirm } = useMessage();
+      const [registerTable, { reload, getRawDataSource }] = useTable({
+        api: getAuthList,
+        title: `场景列表`,
+        columns: columns,
+        useSearchForm: false,
+        immediate: false,
+        searchInfo: {
+          num: numRef,
+          authType: type,
+        },
+        // afterFetch: (T) => {
+        //   let { authType } = getRawDataSource();
+        //   setFieldsValue({
+        //     authType,
+        //   });
+        //   fileFlow.showList = authType ? false : true;
+        //   return T;
+        // },
+        showTableSetting: true,
+        tableSetting: { fullScreen: true },
+        showIndexColumn: false,
+        canResize: true,
+        rowKey: 'id',
+        fetchSetting: {
+          pageField: 'pageNum',
+          sizeField: 'pageSize',
+          listField: 'list',
+          totalField: 'total',
+        },
+      });
+      const searchForm: Partial<FormProps> = {
+        labelWidth: 100,
+        autoSubmitOnEnter: true,
+        autoAdvancedLine: 1,
+        schemas: [
+          {
+            field: 'sceneName',
+            label: '案件名称',
+            component: 'Input',
+            componentProps: {
+              maxLength: 100,
+              placeholder: '请输入案件名称',
+            },
+            colProps: {
+              xl: 7,
+              xxl: 7,
+            },
+          },
+        ],
+      };
+      const schemas: FormSchema[] = [
+        {
+          field: 'authType',
+          component: 'RadioGroup',
+          defaultValue: 0,
+          componentProps: {
+            options: [
+              { label: '授权浏览', value: 0 },
+              { label: '公开浏览', value: 1 },
+            ],
+            onChange: (value) => {
+              type.value = value.target.value;
+              fileFlow.showList = value.target.value ? false : true;
+              reload();
+            },
+          },
+          label: '授权方式',
+          colProps: {
+            span: 24,
+          },
+        },
+      ];
+      const [registerForm, { validate, resetFields, setFieldsValue, updateSchema }] = useForm({
+        labelWidth: 80,
+        schemas,
+        showActionButtonGroup: false,
+        actionColOptions: {
+          span: 24,
+        },
+      });
+      onMounted(() => {});
+      let addListFunc = () => {};
+      const [register, { closeModal }] = useModalInner((data) => {
+        data && onDataReceive(data);
+      });
+
+      async function onDataReceive(data) {
+        modelRef.value = data;
+        numRef.value = data.num;
+        resetFields();
+        const { authType } = await getAuthType({ num: numRef.value });
+        fileFlow.showList = authType ? false : true;
+        type.value = authType;
+        setFieldsValue({
+          type: data.sceneName,
+          authType,
+        });
+        console.log(
+          'roleId',
+          roleId.value,
+          userName.value != data.userName || roleId.value != 1 || roleId.value != 45 || roleId.value != 48,
+        );
+        let disabled = !(
+          userName.value == data.userName ||
+          roleId.value == 1 ||
+          roleId.value == 45 ||
+          roleId.value == 48
+        );
+        updateSchema({
+          field: 'authType',
+          componentProps: {
+            options: [
+              { label: '授权浏览', value: 0, disabled: disabled && authType == 1 },
+              { label: '公开浏览', value: 1, disabled: disabled && authType == 0 },
+            ],
+          },
+        });
+        reload();
+        // setTimeout(async () => {
+        // }, 500);
+      }
+      const handleSubmit = async () => {
+        try {
+          const params = await validate();
+          console.log('res', params);
+          const res = await setAuthType({
+            num: numRef.value,
+            ...params,
+            lookAuth: params.authType,
+          });
+          console.log('res', res);
+          closeModal();
+          resetFields();
+          // createMessage.success('权限设置成功');
+          emit('update');
+        } catch (error) {
+          console.log('not passing', error);
+        }
+      };
+      function addPowes() {
+        openDetaileModal(true, { num: modelRef.value.num, qxType: fileFlow.showList });
+      }
+      function handleEdit(record: Recordable) {
+        openDetaileModal(true, record);
+      }
+      async function handleDelete(record: Recordable) {
+        createConfirm({
+          title: '删除',
+          content: `确定要删除 ${record.ryNickName} 吗?`,
+          onOk: async () => {
+            await delAuth({ id: record.id });
+            createMessage.success('删除成功');
+            reload();
+          },
+        });
+      }
+      return {
+        register,
+        schemas,
+        registerForm,
+        model: modelRef,
+        fileFlow,
+        handleSubmit,
+        addListFunc,
+        resetFields,
+        t,
+        getCheckPerm,
+        handleEdit,
+        handleDelete,
+        registerTable,
+        registerDetail,
+        openDetaileModal,
+        addPowes,
+        reload,
+        userName,
+      };
+    },
+  });
+</script>
+
+<style lang="less" scoped>
+  .powesrTable {
+  }
+</style>

+ 590 - 0
src/views/case/list.vue

@@ -0,0 +1,590 @@
+<template>
+  <div class="scren">
+    <PageWrapper contentBackground>
+      <template #footer>
+        <a-tabs v-model:activeKey="tableType" @change="changeTable">
+          <Tabs.TabPane :key="1" tab="案件管理" :disabled="loading" />
+          <Tabs.TabPane :key="2" tab="案件共享" :disabled="loading" />
+        </a-tabs
+      ></template>
+      <div class="desc-wrap-BasicTable">
+        <BasicTable @register="registerTable">
+          <template #toolbar>
+            <a-button type="primary" @click="handleAdd"> 新增案件</a-button>
+          </template>
+
+          <template #href="{ record }">
+            <a
+              v-if="record.status == 1 || (record.status == -2 && record.payStatus == 1)"
+              target="_blank"
+              :title="record.sceneName"
+              :href="record.webSite"
+              >{{ record.sceneName }}</a
+            >
+            <span v-else-if="record.sceneName">{{ record.sceneName }}</span>
+            <span v-else>-</span>
+          </template>
+          <template #action="{ record }">
+            <TableAction
+              stopButtonPropagation
+              :actions="[
+                {
+                  label: '编辑',
+                  disabled: !(record.status == 1 || record.status == -2),
+                  ifShow: getTypeCheckPerm('scenes-edit') && tableType != 3 && record.isEdit,
+                  onClick: handlegotoEdit.bind(null, record),
+                },
+                {
+                  label: '权限',
+                  disabled: !(record.status == 1 || record.status == -2) || !record.isAuth,
+                  ifShow: getTypeCheckPerm('scenes-powers'),
+                  onClick: handlePowers.bind(null, record),
+                },
+                {
+                  label: '下载',
+                  ifShow:
+                    getTypeCheckPerm('scenes-download') &&
+                    tableType != 3 &&
+                    (record.userName == userInfo.userName ||
+                      userInfo.roleId == 1 ||
+                      userInfo.roleId == 45 ||
+                      userInfo.roleId == 48),
+                  disabled: !(record.status == 1 || (record.status == -2 && record.payStatus == 1)),
+                  //icon: 'carbon:download',
+                  onClick: handleDownload.bind(null, record),
+                },
+                {
+                  label: '删除',
+                  //icon: 'ic:outline-delete-outline',
+                  color: 'error',
+                  ifShow:
+                    getTypeCheckPerm('scenes-delete') &&
+                    (record.userName == userInfo.userName ||
+                      userInfo.roleId == 1 ||
+                      userInfo.roleId == 45 ||
+                      userInfo.roleId == 48),
+                  disabled: record.status == 0,
+                  //onClick: handleDelete.bind(null, record),
+                  popConfirm: {
+                    title: '是否删除?',
+                    confirm: handleDelete.bind(null, record),
+                    placement: 'topRight',
+                  },
+                },
+              ]"
+            />
+          </template>
+        </BasicTable>
+      </div>
+      <DownLoadModal
+        :downloadOption="downloadOption"
+        @cancel="afterClose"
+        @register="registerDownModal"
+        @update="reload"
+        cancelText="取消下载"
+        okText="下载"
+        @cancelDownload="cancelDownload"
+        :okButtonProps="{ disabled: canDownload }"
+      />
+      <MoveModal @register="registerMoveModal" />
+      <PowersModal @register="registerPowersModal" />
+    </PageWrapper>
+  </div>
+</template>
+<script lang="ts">
+  import { defineComponent, h, computed, toRefs, ref, onMounted } from 'vue';
+  import Icon from '/@/components/Icon/index';
+  import dayjs from 'dayjs';
+  import { QrCode } from '/@/components/Qrcode/index';
+  import {
+    BasicTable,
+    useTable,
+    TableAction,
+    BasicColumn,
+    TableImg,
+    FormProps,
+  } from '/@/components/Table';
+  import { PageWrapper } from '/@/components/Page';
+  import DownLoadModal from '/@/views/productOperation/modal/DownLoadModal.vue';
+  import MoveModal from '/@/views/productOperation/modal/MoveModal.vue';
+  import PowersModal from '/@/views/productOperation/modal/PowersModal.vue';
+  import { Time } from '/@/components/Time';
+  import { Descriptions, Tabs, Progress } from 'ant-design-vue';
+  import { useI18n } from '/@/hooks/web/useI18n';
+  import { useMessage } from '/@/hooks/web/useMessage';
+  import { useModal } from '/@/components/Modal';
+  import {
+    operateSceneList,
+    sceneMove,
+    sceneDelete,
+    sceneReset,
+    sceneDownload,
+    checkDownLoad,
+    downloadProcess,
+    sceneCopy,
+    rebuildScene,
+    buildSceneObj,
+    sceneDetail,
+    sceneCount,
+  } from '/@/api/operate';
+  import { message } from 'ant-design-vue';
+  import { usePermissionStore } from '/@/store/modules/permission';
+  import { useUserStore } from '/@/store/modules/user';
+  import { func } from 'vue-types';
+  export default defineComponent({
+    components: {
+      DownLoadModal,
+      MoveModal,
+      PowersModal,
+      BasicTable,
+      TableAction,
+      PageWrapper,
+      [Descriptions.name]: Descriptions,
+      [Descriptions.Item.name]: Descriptions.Item,
+      QrCode,
+      Icon,
+      // Tabs,
+      [Tabs.name]: Tabs,
+      // [Tabs.TabPane?.name]: Tabs.TabPane,
+    },
+    setup() {
+      const { t } = useI18n();
+      const { createMessage, createConfirm } = useMessage();
+      const userStore = useUserStore();
+      const userInfo = computed(() => userStore.getUserInfo);
+      const permissionStore = usePermissionStore();
+      const { getCheckPerm } = permissionStore;
+      const loading = ref(false);
+      const tableType = ref<Recordable>(1); //0看看 、1看见、2深时
+      const columns: BasicColumn[] = [
+        {
+          title: '场景标题',
+          dataIndex: 'sceneName',
+          ellipsis: true,
+          slots: { customRender: 'href' },
+          resizable: true,
+          minWidth: 150,
+          width: 300,
+        },
+        // {
+        //   title: '场景码',
+        //   dataIndex: 'num',
+        //   ellipsis: true,
+        //   width: 180,
+        // },
+        {
+          title: '创建时间',
+          dataIndex: 'createTime',
+          width: 230,
+          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: '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: 'isCopy',
+        //   width: 80,
+        //   customRender: ({ record }) => {
+        //     return record.isCopy ? '是' : '否';
+        //   },
+        // },
+        // {
+        //   title: '复制时间',
+        //   dataIndex: 'copyTime',
+        //   width: 180,
+        //   customRender: ({ record }) => {
+        //     return record.copyTime
+        //       ? h(Time, {
+        //           value: record.copyTime,
+        //           mode: 'datetime',
+        //         })
+        //       : '-';
+        //   },
+        // },
+        // {
+        //   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',
+        //   width: 80,
+        //   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: 'action',
+          slots: { customRender: 'action' },
+          ifShow: true,
+          fixed: 'right',
+          flag: 'ACTION',
+          width: 400,
+        },
+      ];
+      const searchForm: Partial<FormProps> = {
+        labelWidth: 100,
+        autoSubmitOnEnter: true,
+        autoAdvancedLine: 1,
+        schemas: [
+          {
+            field: 'sceneName',
+            label: '案件名称',
+            component: 'Input',
+            componentProps: {
+              maxLength: 100,
+            },
+            colProps: {
+              xl: 7,
+              xxl: 7,
+            },
+          },
+        ],
+      };
+      function cancelDownload() {
+        downloadOption.value = {};
+      }
+      const [registerDownModal, { openModal: openDownModal }] = useModal();
+      const [registerMoveModal, { openModal: openMoveModal }] = useModal();
+      const [registerPowersModal, { openModal: openPowersModal }] = useModal();
+      const [registerTable, { reload }] = useTable({
+        api: operateSceneList,
+        title: `场景列表`,
+        // titleHelpMessage: ['已启用expandRowByClick', '已启用stopButtonPropagation'],
+        columns: columns,
+        searchInfo: { type: tableType },
+        useSearchForm: true,
+        formConfig: searchForm,
+        showTableSetting: true,
+        beforeFetch: (T) => {
+          loading.value = true;
+          return T;
+        },
+        afterFetch: (T) => {
+          loading.value = false;
+          return T;
+        },
+        rowKey: 'num',
+        fetchSetting: {
+          pageField: 'pageNum',
+          sizeField: 'pageSize',
+          listField: 'list',
+          totalField: 'total',
+        },
+        canResize: true,
+      });
+      function changeTable(val: string) {
+        tableType.value = val;
+        reload();
+      }
+      function handleAdd() {
+        // router.push({ path: '/scene/add' });
+      }
+      async function handleCopy(record: Recordable) {
+        createConfirm({
+          title: '复制场景',
+          content: '确定要复制场景吗?',
+          onOk: async () => {
+            sceneCopy({ num: record.num }).then(() => {
+              message.success({
+                content: '复制成功',
+              });
+              reload();
+            });
+          },
+        });
+      }
+      async function handleDelete(record: Recordable) {
+        console.log('handleDelete', record);
+        // createConfirm({
+        //   title: '删除',
+        //   content: '确定要删除场景吗?',
+        //   onOk: async () => {
+        sceneDelete({ num: record.num }).then(() => {
+          message.success({
+            content: '删除成功',
+          });
+
+          reload();
+        });
+        //   },
+        // });
+      }
+      async function handleMove(record: Recordable) {
+        openMoveModal(true, {
+          ...record,
+        });
+        // sceneMove({ snCode: record.snCode, num: record.num })
+        //   .then(() => {
+        //     message.success({
+        //       content: '迁移成功',
+        //     });
+        //   })
+        //   .catch(() => {
+        //     message.success({
+        //       content: '迁移失败',
+        //     });
+        //   });
+      }
+      let timer: null = ref(null);
+      const downloadOption = ref<Object>({});
+      const canDownload = ref<boolean>(true);
+      function handleDownload(record: Recordable) {
+        console.log('handleDownload', record, canDownload.value);
+        canDownload.value = true;
+        let isObj = tableType.value == 5 || tableType.value == 7 ? 1 : 0;
+        checkDownLoad({ num: record.num, isObj }).then((res) => {
+          console.log(res);
+          if (res.downloadStatus != 3) {
+            // 未下载过,需要打包
+            sceneDownload({ num: record.num, isObj }).then((res) => {
+              console.log(res);
+              openDownModal(true, {
+                ...record,
+              });
+              if (res.downloadStatus == 1) {
+                if (timer.value) {
+                  afterClose();
+                }
+                timer.value = setInterval(() => {
+                  downloadProcess({ num: record.num, isObj }).then((res) => {
+                    if (res.status == '1003') {
+                      createMessage.error('下载失败');
+                      afterClose();
+                      return;
+                    }
+                    if (res.percent >= 100) {
+                      canDownload.value = false;
+                      afterClose();
+                    }
+                    downloadOption.value = res;
+                    console.log(res);
+                  });
+                }, 1000);
+              }
+            });
+          } else {
+            canDownload.value = false;
+            window.open(res.downloadUrl);
+          }
+        });
+      }
+      function handleEdit(record: Recordable) {
+        window.open(record.thumbEdit + '&&token=' + token.value);
+      }
+      async function handleGenerate(record: Recordable) {
+        console.log('record', record);
+        let data = await sceneDetail({ id: record.id });
+        console.log('data', data);
+        let { buildObjStatus } = data;
+        let toastText =
+          buildObjStatus == 2
+            ? 'Mesh场景正在计算中,请耐心等待'
+            : buildObjStatus == 1
+            ? '重新生成Mesh场景将覆盖现有场景信息,计算过程中Mesh场景无法打开,确定要重新生成吗?'
+            : '生成obj需要较长时间,请耐心等待';
+        // if (data.code === 200) {
+        createConfirm({
+          iconType: 'warning',
+          title: () => h('span', '生成 obj'),
+          content: () => h('span', toastText),
+          onOk: async () => {
+            if (buildObjStatus !== 2) {
+              await buildSceneObj({ id: record.id, sceneNum: record.num });
+            }
+            createMessage.success(t('common.optSuccess'));
+            reload();
+          },
+        });
+        // } else {
+        //   createMessage.error(t(`apiCode.errCode${data.code}`));
+        // }
+      }
+      function afterClose() {
+        clearInterval(timer.value);
+        timer.value = null;
+      }
+      function handleReset(record: Recordable) {
+        console.log('handleReset', record);
+        rebuildScene({ num: record.num }).then(() => {
+          message.success({
+            content: '操作成功',
+          });
+          reload();
+        });
+      }
+      function getTypeCheckPerm(val) {
+        let myType = tableType.value;
+        return getCheckPerm(val) || getCheckPerm(`${val}-${myType}`);
+      }
+      function handlegotoEdit(record: Recordable) {
+        let url = record.webSite.replace('smg', 'epg');
+        if (!record.editAuthTime || (record.editAuthTime && dayjs() < dayjs(record.editAuthTime))) {
+          window.open(url);
+        } else {
+          createMessage.error('编辑权限已过期');
+        }
+      }
+      function handlePowers(record: Recordable) {
+        openPowersModal(true, {
+          ...record,
+        });
+      }
+      onMounted(() => {
+      });
+      return {
+        registerTable,
+        registerPowersModal,
+        handleDelete,
+        handleCopy,
+        handleMove,
+        handleDownload,
+        handleReset,
+        tableType,
+        loading,
+        changeTable,
+        t,
+        openDownModal,
+        registerDownModal,
+        registerMoveModal,
+        afterClose,
+        timer,
+        canDownload,
+        downloadOption,
+        cancelDownload,
+        handleGenerate,
+        getTypeCheckPerm,
+        handlegotoEdit,
+        handlePowers,
+        userInfo,
+        handleAdd,
+      };
+    },
+  });
+</script>
+<style lang="less" scoped>
+  .scren {
+    .noScene {
+      position: absolute;
+      top: calc(50% - 126px);
+      width: 100%;
+      text-align: center;
+      &-content {
+        font-size: 14px;
+        color: rgba(0, 0, 0, 0.85);
+        line-height: 22px;
+        font-style: normal;
+        text-transform: none;
+        .codelist {
+          margin-top: 36px;
+          width: 424px;
+          height: auto;
+          display: flex;
+          justify-content: space-between;
+          margin: 0 auto;
+          .codediv {
+            font-weight: 400;
+            font-size: 17px;
+            color: rgba(0, 0, 0, 0.85);
+            line-height: 22px;
+            height: auto;
+            padding: 24px;
+            background: #fff;
+            text-align: center;
+            .codetext {
+              margin-top: 10px;
+            }
+          }
+        }
+      }
+    }
+  }
+  // .tableHeader {
+  //   height: 50px;
+  //   display: flex;
+  //   align-items: center;
+
+  //   .item {
+  //     font-size: 14px;
+  //     color: #666;
+  //     margin-right: 10px;
+  //     cursor: pointer;
+  //     &.active {
+  //       font-weight: bold;
+  //       color: #222;
+  //     }
+  //   }
+  // }
+  .desc-wrap-BasicTable {
+    background-color: #f0f2f5;
+    .vben-basic-table-form-container {
+      padding: 0;
+    }
+  }
+</style>

ファイルの差分が大きいため隠しています
+ 512 - 510
src/views/productOperation/cameraScene.vue


+ 2 - 1
src/views/productOperation/modal/DownLoadModal.vue

@@ -2,7 +2,7 @@
   <BasicModal
     v-bind="$attrs"
     @register="register"
-    title="场景下载"
+    title="系统正在为您打包数据"
     :minHeight="0"
     @visible-change="handleVisibleChange"
     @cancel="hundleCancel"
@@ -13,6 +13,7 @@
         <p>正在打包场景离线数据{{ downloadPercent }}</p>
         <span>{{ modelRef.sceneName }}.zip</span>
         <Progress :percent="downloadOption.percent" />
+        <p>* 打包完成后将关闭弹窗自动下载。</p>
       </div>
     </div>
   </BasicModal>