tangning 9 месяцев назад
Родитель
Сommit
4d8e042648

+ 22 - 0
src/api/operate/index.ts

@@ -68,6 +68,7 @@ enum Api {
   updateMail = '/service/manage/update',
   caseaddOrUpdate = '/service/manage/case/addOrUpdate',
   caseList = '/service/manage/case/list',
+  caseSceneList = '/service/manage/case/sceneList',
   caseDel = '/service/manage/case/del',
   caseRelease = '/service/manage/case/isShow',
   caseWithdraw = '/service/manage/case/release',
@@ -85,6 +86,7 @@ enum Api {
   buildSceneObj = '/service/manage/scene/buildSceneObj',
   userShareAdd = '/service/manage/jy/userShare/add',
   sceneList = '/service/manage/jy/userShare/sceneList',
+  getCaseByNum = '/service/manage/case/getCaseByNum',
 }
 
 /**
@@ -142,6 +144,17 @@ export const sceneApplyHandle = (params: PageParams) =>
     },
   });
 
+export const caseSceneList = (params: PageParams) =>
+  defHttp.get<RentListGetResultModel>({
+    url: Api.caseSceneList,
+    params: params,
+    // data: params,
+    headers: {
+      // @ts-ignore
+      ignoreCancelToken: true,
+    },
+  });
+
 export const caseListApi = (params: PageParams) =>
   defHttp.post<RentListGetResultModel>({
     url: Api.caseList,
@@ -625,6 +638,15 @@ export const sceneList = (params) =>
       ignoreCancelToken: true,
     },
   });
+export const getCaseByNum = (params) =>
+  defHttp.get<Result>({
+    url: Api.getCaseByNum,
+    params,
+    headers: {
+      // @ts-ignore
+      ignoreCancelToken: true,
+    },
+  });
 
 // 根据警员ID获取用户列表
 export const buildSceneObj = (params) =>

+ 199 - 191
src/views/case/addCaseModal.vue

@@ -3,290 +3,298 @@
     v-bind="$attrs"
     @register="register"
     title="新增案件"
-    @cancel="resetFields"
+    @visible-change="handleVisibleChange"
     @ok="handleSubmit"
-    :width="1000"
+    :width="900"
     :min-height="0"
   >
     <div class="pt-2px pr-3px">
-      <BasicTable class="powesrTable" @register="registerTable"></BasicTable>
+      <div class="mx-5 BasicForm flex">
+        <span style="line-height: 32px; margin-right: 10px">案件名称</span>
+        <div class="input">
+          <a-input v-model:value="fileFlow.caseTitle" placeholder="请输入" />
+        </div>
+        <!-- <a-button type="primary" @click="handleAdd"> 新增</a-button> -->
+      </div>
+      <BasicTable @register="registerTable">
+        <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>
+      </BasicTable>
     </div>
   </BasicModal>
 </template>
 <script lang="ts">
-  import { defineComponent, ref, computed, onMounted, reactive } from 'vue';
+  import { defineComponent, ref, nextTick, onMounted, reactive, h } 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';
+  import { getByKey, addOrUpdate, del } from '/@/api/media';
+  import {
+    BasicTable,
+    useTable,
+    TableAction,
+    BasicColumn,
+    TableImg,
+    FormProps,
+  } from '/@/components/Table';
+  import { caseaddOrUpdateApi, operateSceneList } from '/@/api/operate';
   const { t } = useI18n();
   export default defineComponent({
-    components: { BasicModal, BasicForm, BasicTable, TableAction },
+    components: { BasicModal, BasicTable, TableAction },
     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,
+        caseTitle: '',
+        file: null,
+        dylist: [],
+        mslist: [],
       });
-      const [registerDetail, { openModal: openDetaileModal }] = useModal();
       const columns: BasicColumn[] = [
         {
-          title: '人员编号',
-          dataIndex: 'ryNo',
+          title: '场景标题',
+          dataIndex: 'sceneName',
+          ellipsis: true,
+          slots: { customRender: 'href' },
+          resizable: true,
+          minWidth: 150,
           width: 150,
         },
         {
-          title: '姓名',
-          dataIndex: 'ryNickName',
+          title: '场景码',
+          dataIndex: 'num',
+          ellipsis: true,
           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: 'algorithmTime',
+          width: 180,
         },
         {
-          title: '编辑权限',
-          dataIndex: 'editAuth',
+          title: '场景大小',
+          dataIndex: 'sceneSize',
+          width: 80,
           customRender: ({ record }) => {
-            return record.editAuth == 1
-              ? '不限时间'
-              : record.editAuth == 0
-              ? '无权'
-              : `${dayjs(record.editEndTime).format('YYYY-MM-DD HH:mm')} 截止`;
+            return record.sceneSize && record.sceneSize != 0
+              ? h('span', { class: 'sceneSize' }, Math.ceil(record.sceneSize / 1024 / 1024) + 'M')
+              : '-';
           },
-          width: 150,
         },
         {
-          title: '可授权他人',
-          dataIndex: 'canLook',
+          title: '状态',
+          dataIndex: 'status',
+          width: 80,
           customRender: ({ record }) => {
-            if (type.value == 1 && record.canEditLook == 1) return '编辑';
-            return record.canEditLook == 1
-              ? '编辑和查看'
-              : record.canAuthLook == 1
-              ? '查看'
-              : `无权`;
+            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;
           },
-          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,
+        labelWidth: 50,
         autoSubmitOnEnter: true,
         autoAdvancedLine: 1,
         schemas: [
           {
             field: 'sceneName',
-            label: '案件名称',
+            label: '名称',
             component: 'Input',
             componentProps: {
               maxLength: 100,
-              placeholder: '请输入案件名称',
+              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();
+          {
+            field: 'isObj',
+            label: '类型',
+            component: 'Select',
+            // labelWidth: 50,
+            defaultValue: '0',
+            componentProps: {
+              allowClear: false,
+              options: [
+                {
+                  label: '点云场景',
+                  value: '0',
+                  key: '0',
+                },
+                {
+                  label: 'Mesh 场景',
+                  value: '1',
+                  key: '1',
+                },
+              ],
+              onChange: (value) => {
+                reload({
+                  searchInfo: { isObj: value },
+                }).then(() => {
+                  setSelectedRowKeys(value == 0 ? fileFlow.dylist : fileFlow.mslist);
+                });
+              },
+            },
+            colProps: {
+              xl: 7,
+              xxl: 7,
             },
           },
-          label: '授权方式',
-          colProps: {
-            span: 24,
-          },
-        },
-      ];
-      const [registerForm, { validate, resetFields, setFieldsValue, updateSchema }] = useForm({
-        labelWidth: 80,
-        schemas,
-        showActionButtonGroup: false,
-        actionColOptions: {
-          span: 24,
+        ],
+      };
+      const { createMessage, createConfirm } = useMessage();
+      const [registerTable, { reload, getForm, setSelectedRowKeys }] = useTable({
+        api: operateSceneList,
+        title: ``,
+        showTableSetting: false,
+        rowSelection: { type: 'checkbox',getCheckboxProps: getRowSelection, onChange: onSelectChange },
+        // titleHelpMessage: ['已启用expandRowByClick', '已启用stopButtonPropagation'],
+        columns: columns,
+        // searchInfo: { type: tableType },
+        useSearchForm: true,
+        formConfig: searchForm,
+        showIndexColumn: false,
+        rowKey: 'num',
+        fetchSetting: {
+          pageField: 'pageNum',
+          sizeField: 'pageSize',
+          listField: 'list',
+          totalField: 'total',
         },
+        canResize: true,
       });
       onMounted(() => {});
       let addListFunc = () => {};
       const [register, { closeModal }] = useModalInner((data) => {
+        console.log(data);
         data && onDataReceive(data);
       });
-
-      async function onDataReceive(data) {
+      function getRowSelection(record) {
+        return {
+        disabled: !(record.status == 1 || record.status == -2), // Column configuration not to be checked
+        name: record.name,}
+       }
+      function onSelectChange(selectedRowKeys: any, selectedRows: any) {
+        const { isObj } = getForm().getFieldsValue();
+        if (isObj == 0) {
+          fileFlow.dylist = selectedRowKeys;
+        } else if (isObj == 1) {
+          fileFlow.mslist = selectedRowKeys;
+        }
+        console.log('isObj', isObj, fileFlow);
+      }
+      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 },
-            ],
-          },
+        fileFlow.dylist = [];
+        fileFlow.mslist = [];
+        fileFlow.caseTitle = '';
+        setSelectedRowKeys([]);
+      }
+      function handleAdd() {
+        console.log('handleAdd', fileFlow.dictName);
+        let params = {
+          dictName: fileFlow.dictName,
+        };
+        if (!fileFlow.dictName) {
+          return createMessage.warning('请输入名称');
+        }
+        addOrUpdate(params).then((res) => {
+          createMessage.success('添加成功');
+          fileFlow.dictName = '';
+          reload();
         });
-        reload();
-        // setTimeout(async () => {
-        // }, 500);
       }
       const handleSubmit = async () => {
+        if(!fileFlow.caseTitle){
+          return createMessage.warning('请输入场景名称')
+        }
         try {
-          const params = await validate();
-          console.log('res', params);
-          const res = await setAuthType({
-            num: numRef.value,
-            ...params,
-            lookAuth: params.authType,
-          });
+          const apiData = {
+            caseTitle: fileFlow.caseTitle,
+            sceneNumParam: [
+              {
+                type: 0,
+                numList: fileFlow.dylist,
+              },
+              {
+                type: 1,
+                numList: fileFlow.mslist,
+              },
+            ],
+            // snCode: params.snCode,
+            // num: modelRef.value.num,
+          };
+          console.log('res', apiData);
+          const res = await caseaddOrUpdateApi(apiData);
           console.log('res', res);
           closeModal();
-          resetFields();
-          // createMessage.success('权限设置成功');
+          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);
+      function handleVisibleChange(v) {
+        // console.log(v);
+        // v && props.userData && nextTick(() => onDataReceive(props.userData));
       }
       async function handleDelete(record: Recordable) {
+        console.log('handleDelete', record);
         createConfirm({
           title: '删除',
-          content: `确定要删除 ${record.ryNickName} 吗?`,
+          content: '确定要删除吗?',
           onOk: async () => {
-            await delAuth({ id: record.id });
-            createMessage.success('删除成功');
-            reload();
+            del({ id: record.id }).then(() => {
+              createMessage.success({
+                content: '删除成功',
+              });
+              reload();
+            });
           },
         });
       }
       return {
         register,
-        schemas,
-        registerForm,
+        handleAdd,
+        registerTable,
         model: modelRef,
         fileFlow,
+        handleVisibleChange,
         handleSubmit,
         addListFunc,
-        resetFields,
-        t,
-        getCheckPerm,
-        handleEdit,
         handleDelete,
-        registerTable,
-        registerDetail,
-        openDetaileModal,
-        addPowes,
-        reload,
-        userName,
+        t,
       };
     },
   });
 </script>
-
-<style lang="less" scoped>
-  .powesrTable {
-  }
-</style>

+ 34 - 40
src/views/case/list.vue

@@ -10,18 +10,17 @@
       <div class="desc-wrap-BasicTable">
         <BasicTable @register="registerTable">
           <template #toolbar>
-            <a-button type="primary" @click="handleAdd"> 新增案件</a-button>
+            <a-button type="primary" @click="handleAdd" v-if="tableType == 1"> 新增案件</a-button>
           </template>
 
           <template #href="{ record }">
             <a
-              v-if="record.status == 1 || (record.status == -2 && record.payStatus == 1)"
+              v-if="record.caseTitle"
               target="_blank"
-              :title="record.sceneName"
+              :title="record.caseTitle"
               :href="record.webSite"
-              >{{ record.sceneName }}</a
+              >{{ record.caseTitle }}</a
             >
-            <span v-else-if="record.sceneName">{{ record.sceneName }}</span>
             <span v-else>-</span>
           </template>
           <template #action="{ record }">
@@ -30,26 +29,26 @@
               :actions="[
                 {
                   label: '编辑',
-                  disabled: !(record.status == 1 || record.status == -2),
+                  //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,
+                  //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)),
+                  //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),
                 },
@@ -57,19 +56,7 @@
                   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',
-                  },
+                  onClick: handleDelete.bind(null, record),
                 },
               ]"
             />
@@ -87,6 +74,7 @@
         :okButtonProps="{ disabled: canDownload }"
       />
       <MoveModal @register="registerMoveModal" />
+      <AddModal @register="registerAddModal" />
       <PowersModal @register="registerPowersModal" />
     </PageWrapper>
   </div>
@@ -105,6 +93,7 @@
     FormProps,
   } from '/@/components/Table';
   import { PageWrapper } from '/@/components/Page';
+  import AddModal from './addCaseModal.vue'
   import DownLoadModal from '/@/views/productOperation/modal/DownLoadModal.vue';
   import MoveModal from '/@/views/productOperation/modal/MoveModal.vue';
   import PowersModal from '/@/views/productOperation/modal/PowersModal.vue';
@@ -126,6 +115,8 @@
     buildSceneObj,
     sceneDetail,
     sceneCount,
+    caseDelApi,
+    caseListApi,
   } from '/@/api/operate';
   import { message } from 'ant-design-vue';
   import { usePermissionStore } from '/@/store/modules/permission';
@@ -142,7 +133,7 @@
       [Descriptions.name]: Descriptions,
       [Descriptions.Item.name]: Descriptions.Item,
       QrCode,
-      Icon,
+      AddModal,
       // Tabs,
       [Tabs.name]: Tabs,
       // [Tabs.TabPane?.name]: Tabs.TabPane,
@@ -294,7 +285,7 @@
         autoAdvancedLine: 1,
         schemas: [
           {
-            field: 'sceneName',
+            field: 'caseTitle',
             label: '案件名称',
             component: 'Input',
             componentProps: {
@@ -310,17 +301,19 @@
       function cancelDownload() {
         downloadOption.value = {};
       }
+      const [registerAddModal, { openModal: openAddModal }] = useModal();
       const [registerDownModal, { openModal: openDownModal }] = useModal();
       const [registerMoveModal, { openModal: openMoveModal }] = useModal();
       const [registerPowersModal, { openModal: openPowersModal }] = useModal();
       const [registerTable, { reload }] = useTable({
-        api: operateSceneList,
+        api: caseListApi,
         title: ``,
         // titleHelpMessage: ['已启用expandRowByClick', '已启用stopButtonPropagation'],
         columns: columns,
         searchInfo: { type: tableType },
         useSearchForm: true,
         formConfig: searchForm,
+        showIndexColumn: false,
         showTableSetting: true,
         beforeFetch: (T) => {
           loading.value = true;
@@ -330,7 +323,7 @@
           loading.value = false;
           return T;
         },
-        rowKey: 'num',
+        rowKey: 'caseId',
         fetchSetting: {
           pageField: 'pageNum',
           sizeField: 'pageSize',
@@ -344,6 +337,7 @@
         reload();
       }
       function handleAdd() {
+        openAddModal(true, {})
         // router.push({ path: '/scene/add' });
       }
       async function handleCopy(record: Recordable) {
@@ -361,20 +355,19 @@
         });
       }
       async function handleDelete(record: Recordable) {
-        console.log('handleDelete', record);
-        // createConfirm({
-        //   title: '删除',
-        //   content: '确定要删除场景吗?',
-        //   onOk: async () => {
-        sceneDelete({ num: record.num }).then(() => {
+        createConfirm({
+          title: '删除',
+          content: '确定要删除场景吗?',
+          onOk: async () => {
+          caseDelApi({ caseId: record.caseId }).then(() => {
           message.success({
             content: '删除成功',
           });
 
           reload();
         });
-        //   },
-        // });
+          },
+        });
       }
       async function handleMove(record: Recordable) {
         openMoveModal(true, {
@@ -513,6 +506,7 @@
         openDownModal,
         registerDownModal,
         registerMoveModal,
+        registerAddModal,
         afterClose,
         timer,
         canDownload,

+ 59 - 61
src/views/mediaLibrary/list.vue

@@ -8,13 +8,13 @@
 
       <template #href="{ record }">
         <a
-          v-if="record.status == 1 || (record.status == -2 && record.payStatus == 1)"
+          v-if="record.fileUrl"
           target="_blank"
-          :title="record.sceneName"
-          :href="record.webSite"
-          >{{ record.sceneName }}</a
+          :title="record.name"
+          :href="record.fileUrl"
+          >{{ record.name }}</a
         >
-        <span v-else-if="record.sceneName">{{ record.sceneName }}</span>
+        <span v-else-if="record.name">{{ record.name }}</span>
         <span v-else>-</span>
       </template>
       <template #action="{ record }">
@@ -39,9 +39,9 @@
         />
       </template>
     </BasicTable>
-    <grouping @register="registerGroupingModal" />
-    <uploadModal @register="registeruploadModal" />
-    <detailModal @register="registerdetailModal" />
+    <grouping @register="registerGroupingModal" @update="reload" />
+    <uploadModal @register="registeruploadModal" @update="reload" />
+    <detailModal @register="registerdetailModal" @update="reload" />
   </div>
 </template>
 <script lang="ts">
@@ -66,10 +66,7 @@
   import { useI18n } from '/@/hooks/web/useI18n';
   import { useMessage } from '/@/hooks/web/useMessage';
   import { useModal } from '/@/components/Modal';
-  import {
-    mediaList,
-    getByKey
-  } from '/@/api/media';
+  import { mediaList, getByKey, dictFiledel } from '/@/api/media';
   import { message } from 'ant-design-vue';
   import { usePermissionStore } from '/@/store/modules/permission';
   import { useUserStore } from '/@/store/modules/user';
@@ -118,40 +115,20 @@
         },
         {
           title: '文件类型',
-          dataIndex: 'fileType',
-          width: 80,
-          customRender: ({ record }) => {
-            let str;
-            switch (record.fileType - 0) {
-              case 0:
-                str = '图片';
-                break;
-              case 1:
-                str = '视频';
-                break;
-              case 2:
-                str = '音频';
-                break;
-              case 3:
-                str = '模型';
-                break;
-              default:
-                str = '其他';
-            }
-            return record.payStatus == -2 ? '封存' : str;
-          },
+          dataIndex: 'fileTypeStr',
+          width: 80
         },
         {
           title: '文件格式',
-          dataIndex: 'nickName',
+          dataIndex: 'fileFormat',
           width: 100,
           customRender: ({ record }) => {
-            return record.nickName || '-';
+            return record.fileFormat || '-';
           },
         },
         {
           title: '分组',
-          dataIndex: 'viewCount',
+          dataIndex: 'dictName',
           width: 80,
         },
         // {
@@ -190,7 +167,7 @@
         autoAdvancedLine: 1,
         schemas: [
           {
-            field: 'sceneName',
+            field: 'name',
             label: '名称',
             component: 'Input',
             componentProps: {
@@ -202,11 +179,38 @@
             },
           },
           {
-            field: 'ryNo',
+            field: 'fileType',
             label: '类型',
-            component: 'Input',
+            component: 'Select',
             componentProps: {
-              maxLength: 100,
+              labelWidth: 50,
+              options: [
+                {
+                  label: '图片',
+                  value: '0',
+                  key: '0',
+                },
+                {
+                  label: '视频',
+                  value: '1',
+                  key: '1',
+                },
+                {
+                  label: '音频',
+                  value: '2',
+                  key: '2',
+                },
+                {
+                  label: '模型',
+                  value: '3',
+                  key: '3',
+                },
+                {
+                  label: '其他',
+                  value: '4',
+                  key: '4',
+                }
+              ],
             },
             colProps: {
               xl: 6,
@@ -289,18 +293,17 @@
           title: '提示',
           content: '确定删除吗?',
           onOk: async () => {
-        sceneDelete({ num: record.num }).then(() => {
-          message.success({
-            content: '删除成功',
-          });
-
-          reload();
-        });
+            dictFiledel({ id: record.id }).then(() => {
+              message.success({
+                content: '删除成功',
+              });
+              reload();
+            });
           },
         });
       }
       function handleGrounping(record: Recordable) {
-        openGroupingDownModal(true, record)
+        openGroupingDownModal(true, record);
       }
       async function handleMove(record: Recordable) {
         openMoveModal(true, {
@@ -364,9 +367,7 @@
       function handleEdit(record: Recordable) {
         window.open(record.thumbEdit + '&&token=' + token.value);
       }
-      function exportExcel(){
-
-      }
+      function exportExcel() {}
       async function handleGenerate(record: Recordable) {
         console.log('record', record);
         let data = await sceneDetail({ id: record.id });
@@ -413,20 +414,16 @@
         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('编辑权限已过期');
-        }
+        detailModal(true, {
+          ...record,
+        });
       }
       function handlePowers(record: Recordable) {
         openPowersModal(true, {
           ...record,
         });
       }
-      onMounted(() => {
-      });
+      onMounted(() => {});
       return {
         registerTable,
         registeruploadModal,
@@ -441,6 +438,7 @@
         tableType,
         loading,
         changeTable,
+        reload,
         t,
         openGroupingDownModal,
         registerGroupingModal,
@@ -456,7 +454,7 @@
         userInfo,
         qrCodeUrl,
         exportExcel,
-        handleGrounping
+        handleGrounping,
       };
     },
   });

+ 24 - 43
src/views/mediaLibrary/modal/detailModal.vue

@@ -6,7 +6,7 @@
     @visible-change="handleVisibleChange"
     @cancel="resetFields"
     @ok="handleSubmit"
-    :min-height="0"
+    :min-height="250"
   >
     <div class="pt-2px pr-3px">
       <BasicForm @register="registerForm" :model="model">
@@ -22,7 +22,7 @@
   import { BasicModal, useModalInner } from '/@/components/Modal';
   import { BasicForm, FormSchema, useForm } from '/@/components/Form/index';
   import { useMessage } from '/@/hooks/web/useMessage';
-  import { addOrUpdate, uploadApi, getByKey } from '/@/api/media';
+  import { fileaddOrUpdate, uploadApi, getByKey } from '/@/api/media';
   import { useI18n } from '/@/hooks/web/useI18n';
 
   const { t } = useI18n();
@@ -40,59 +40,47 @@
       });
       const { createMessage } = useMessage();
       const schemas: FormSchema[] = [
-        // {
-        //   field: 'file',
-        //   component: 'Upload',
-        //   label: t('routes.product.file'),
-        //   required: true,
-        //   rules: [{ required: true, message: t('common.uploadMessge') }],
-        //   // helpMessage: t('routes.corporation.uploadHelp'),
-        //   itemProps: {
-        //     validateTrigger: 'onBlur',
-        //   },
-        //   componentProps: {
-        //     api: uploadApi,
-        //     maxNumber: 1,
-        //     maxSize: 5,
-        //     fileFlow: true,
-        //     accept: ['xls', 'xlsx'],
-        //     afterFetch: function (data) {
-        //       console.log('afterFetch', data);
-        //       // Reflect.set(data, 'url', data.name);
-        //       fileFlow.file = data.file;
-        //       return data;
-        //     },
-        //   },
-
-        //   colProps: {
-        //     span: 22,
-        //   },
-        // },
+        {
+          field: 'id',
+          component: 'Input',
+          show: false,
+          label: 'id',
+          required: false,
+        },
+        {
+          field: 'uploadId',
+          component: 'Input',
+          show: false,
+          label: 'id',
+          required: false,
+        },
         {
           field: 'name',
           component: 'Input',
           // defaultValue: '场景标题',
           label: '名称',
           colProps: {
-            span: 24,
+            span: 18,
           },
-          // required: true,
+          required: true,
         },
         {
           field: 'dictId',
           label: '分组',
           component: 'ApiSelect',
+          required: true,
           componentProps: {
             api: getByKey,
             labelField: 'dictName',
+            listHeight: 150,
             valueField: 'id',
             params: {
               type: 1,
             },
           },
           colProps: {
-            xl: 6,
-            xxl: 6,
+            xl: 18,
+            xxl: 18,
           },
         },
       ];
@@ -114,19 +102,12 @@
       function onDataReceive(data) {
         modelRef.value = data;
         resetFields();
-        setFieldsValue({
-          type: data.sceneName,
-        });
+        setFieldsValue(data);
       }
       const handleSubmit = async () => {
         try {
           const params = await validate();
-          const apiData = {
-            snCode: params.snCode,
-            num: modelRef.value.num,
-          };
-          console.log('res', apiData, params);
-          const res = await addOrUpdate(apiData);
+          const res = await fileaddOrUpdate(params);
           console.log('res', res);
           closeModal();
           resetFields();

+ 8 - 2
src/views/mediaLibrary/modal/grouping.vue

@@ -5,6 +5,7 @@
     title="分组管理"
     @visible-change="handleVisibleChange"
     @ok="handleSubmit"
+    @cancel="handleCancel"
     :min-height="0"
   >
     <div class="pt-2px pr-3px">
@@ -14,7 +15,7 @@
         </div>
         <a-button type="primary" @click="handleAdd"> 新增</a-button>
       </div>
-      <BasicTable @register="registerTable">
+      <BasicTable style="padding: 0" @register="registerTable">
         <template #action="{ record }">
           <TableAction
             v-if="!record.isShare"
@@ -113,6 +114,8 @@
         useSearchForm: true,
         formConfig: searchForm,
         showIndexColumn: false,
+        canResize: true,
+        maxHeight: 100,
         rowKey: 'num',
         fetchSetting: {
           pageField: 'pageNum',
@@ -120,7 +123,6 @@
           listField: 'list',
           totalField: 'total',
         },
-        canResize: true,
       });
       onMounted(() => {});
       let addListFunc = () => {};
@@ -167,6 +169,9 @@
         // console.log(v);
         // v && props.userData && nextTick(() => onDataReceive(props.userData));
       }
+      function handleCancel() {
+        window.location.reload();
+      }
       async function handleDelete(record: Recordable) {
         console.log('handleDelete', record);
         createConfirm({
@@ -192,6 +197,7 @@
         handleSubmit,
         addListFunc,
         handleDelete,
+        handleCancel,
         t,
       };
     },

+ 127 - 104
src/views/mediaLibrary/modal/uploadModal.vue

@@ -6,7 +6,7 @@
     @visible-change="handleVisibleChange"
     @cancel="resetFields"
     @ok="handleSubmit"
-    :min-height="0"
+    :min-height="250"
   >
     <div class="pt-2px pr-3px">
       <BasicForm @register="registerForm" :model="model">
@@ -15,120 +15,143 @@
         </template>
       </BasicForm>
       <div style="padding: 0 0 0 82px">
-        <div style="margin-bottom: 20px">支持jpg、png、jpeg、mp4、wav、mp3 、shp格式文件上传。文件大小 ≤ 2G</div>
+        <div style="margin-bottom: 20px"
+          >支持jpg、png、jpeg、mp4、wav、mp3 、shp格式文件上传。文件大小 ≤ 2G</div
+        >
         <span>注意:模型需使用zip包上传。包含贴图、模型、mtl文件,包内不得包含文件夹。</span>
       </div>
     </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 { addOrUpdate, uploadApi, getByKey } from '/@/api/media';
-import { useI18n } from '/@/hooks/web/useI18n';
+  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 { addOrUpdate, uploadApi, getByKey } from '/@/api/media';
+  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,
-      title: '上传',
-    });
-    const { createMessage } = useMessage();
-    const schemas: FormSchema[] = [
-      {
-        field: 'file',
-        component: 'Upload',
-        label: t('routes.product.file'),
-        required: true,
-        rules: [{ required: true, message: t('common.uploadMessge') }],
-        // helpMessage: t('routes.corporation.uploadHelp'),
-        itemProps: {
-          validateTrigger: 'onBlur',
+  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,
+        title: '上传',
+      });
+      const { createMessage } = useMessage();
+      const schemas: FormSchema[] = [
+        {
+          field: 'file',
+          component: 'Upload',
+          label: t('routes.product.file'),
+          required: true,
+          rules: [{ required: true, message: t('common.uploadMessge') }],
+          // helpMessage: t('routes.corporation.uploadHelp'),
+          itemProps: {
+            validateTrigger: 'onBlur',
+          },
+          componentProps: {
+            api: uploadApi,
+            maxNumber: 1,
+            maxSize: 2000,
+            fileFlow: true,
+            accept: ['jpg', 'jpg', 'png', 'jpeg', 'mp4', 'wav', 'mp3', 'shp', 'zip'],
+            afterFetch: function (data) {
+              console.log('afterFetch', data);
+              // Reflect.set(data, 'url', data.name);
+              fileFlow.file = data.file;
+              return data;
+            },
+          },
+
+          colProps: {
+            span: 22,
+          },
         },
-        componentProps: {
-          api: uploadApi,
-          maxNumber: 1,
-          maxSize: 2000,
-          fileFlow: false,
-          accept: ['jpg', 'jpg','png','jpeg','mp4','wav','mp3','shp','zip'],
-          // afterFetch: function (data) {
-          //   console.log('afterFetch', data);
-          //   // Reflect.set(data, 'url', data.name);
-          //   fileFlow.file = data.file;
-          //   return data;
-          // },
+        {
+          field: 'dictId',
+          label: '分组',
+          component: 'ApiSelect',
+          required: true,
+          componentProps: {
+            api: getByKey,
+            labelField: 'dictName',
+            listHeight: 150,
+            valueField: 'id',
+            params: {
+              type: 1,
+            },
+          },
+          colProps: {
+            xl: 18,
+            xxl: 18,
+          },
         },
-
-        colProps: {
-          span: 22,
+      ];
+      const [registerForm, { validate, resetFields, setFieldsValue }] = useForm({
+        labelWidth: 120,
+        schemas,
+        showActionButtonGroup: false,
+        actionColOptions: {
+          span: 24,
         },
-      },
-    ];
-    const [registerForm, { validate, resetFields, setFieldsValue }] = useForm({
-      labelWidth: 120,
-      schemas,
-      showActionButtonGroup: false,
-      actionColOptions: {
-        span: 24,
-      },
-    });
-    onMounted(() => {});
-    let addListFunc = () => {};
-    const [register, { closeModal }] = useModalInner((data) => {
-      console.log(data);
-      data && onDataReceive(data);
-    });
-
-    function onDataReceive(data) {
-      modelRef.value = data;
-      resetFields();
-      setFieldsValue({
-        type: data.sceneName,
       });
-    }
-    const handleSubmit = async () => {
-      try {
-        const params = await validate();
-        const apiData = {
-          snCode: params.snCode,
-          num: modelRef.value.num,
-        };
-        console.log('res', apiData, params);
-        const res = await addOrUpdate(apiData);
-        console.log('res', res);
-        closeModal();
+      onMounted(() => {});
+      let addListFunc = () => {};
+      const [register, { closeModal }] = useModalInner((data) => {
+        console.log(data);
+        data && onDataReceive(data);
+      });
+
+      function onDataReceive(data) {
+        modelRef.value = data;
         resetFields();
-        createMessage.success('场景迁移成功。');
-        emit('update');
-      } catch (error) {
-        console.log('not passing', error);
+        setFieldsValue({
+          type: data.sceneName,
+        });
+      }
+      const handleSubmit = async () => {
+        try {
+          const params = await validate();
+          const apiData = {
+            file: fileFlow.file,
+            data:{
+              dictId: params.dictId,
+            }
+          };
+          console.log('res', apiData, params);
+          const res = await uploadApi(apiData);
+          console.log('res', res);
+          closeModal();
+          resetFields();
+          createMessage.success('上传成功。');
+          emit('update');
+        } catch (error) {
+          console.log('not passing', error);
+        }
+      };
+      function handleVisibleChange(v) {
+        // console.log(v);
+        // v && props.userData && nextTick(() => onDataReceive(props.userData));
       }
-    };
-    function handleVisibleChange(v) {
-      // console.log(v);
-      // v && props.userData && nextTick(() => onDataReceive(props.userData));
-    }
-    return {
-      register,
-      schemas,
-      registerForm,
-      model: modelRef,
-      fileFlow,
-      handleVisibleChange,
-      handleSubmit,
-      addListFunc,
-      resetFields,
-      t,
-    };
-  },
-});
+      return {
+        register,
+        schemas,
+        registerForm,
+        model: modelRef,
+        fileFlow,
+        handleVisibleChange,
+        handleSubmit,
+        addListFunc,
+        resetFields,
+        t,
+      };
+    },
+  });
 </script>

+ 254 - 250
src/views/operate/caseList.vue

@@ -1,4 +1,4 @@
- <template>
+<template>
   <PageWrapper contentBackground>
     <template #footer>
       <a-tabs v-model:activeKey="language" @change="changeTable">
@@ -10,7 +10,11 @@
     <div class="desc-wrap-BasicTable">
       <BasicTable @register="registerTable">
         <template #toolbar>
-          <a-button type="primary" @click="openModal(true, {language})" v-if="getCheckPerm('news-add')">
+          <a-button
+            type="primary"
+            @click="openModal(true, { language })"
+            v-if="getCheckPerm('news-add')"
+          >
             新增案例</a-button
           >
         </template>
@@ -54,273 +58,273 @@
   </PageWrapper>
 </template>
 <script lang="ts">
-import { defineComponent, h, ref } from 'vue';
-import {
-  BasicTable,
-  useTable,
-  TableAction,
-  BasicColumn,
-  TableImg,
-  FormProps,
-} from '/@/components/Table';
-import { PageWrapper } from '/@/components/Page';
-import { Time } from '/@/components/Time';
-import { caseListApi, caseReleaseApi, casePublicApi, caseDelApi } from '/@/api/operate';
-import {  Descriptions, Switch, Tabs } from 'ant-design-vue';
-import { useModal } from '/@/components/Modal';
-import { useI18n } from '/@/hooks/web/useI18n';
-import { useMessage } from '/@/hooks/web/useMessage';
-import addNewModal from './components/case/addModal.vue';
-import { usePermissionStore } from '/@/store/modules/permission';
-export default defineComponent({
-  components: {
+  import { defineComponent, h, ref } from 'vue';
+  import {
     BasicTable,
+    useTable,
     TableAction,
-    PageWrapper,
+    BasicColumn,
     TableImg,
-    addNewModal,
-    [Descriptions.name]: Descriptions,
-    [Descriptions.Item.name]: Descriptions.Item,
-    [Tabs.name]: Tabs,
-    [Tabs.TabPane.name]: Tabs.TabPane,
-  },
-  setup() {
-    const { t } = useI18n();
-    const { createMessage } = useMessage();
-    const permissionStore = usePermissionStore();
-    const { getCheckPerm } = permissionStore;
-    const [register, { openModal }] = useModal();
-    const language = ref<string>('cn'); //未处理,0已处理(默认1)
-    const columns: BasicColumn[] = [
-      {
-        title: '案例标题',
-        dataIndex: 'title',
-        ellipsis: true,
-        width: 250,
-      },
-      // {
-      //   title: '来源',
-      //   dataIndex: 'source',
-      //   ellipsis: true,
-      //   width: 120,
-      // },
-      {
-        title: '类型',
-        dataIndex: 'typeId',
-        ellipsis: true,
-        width: 80,
-        customRender: ({ record }) => {
-          let obj = {
-            'smartCity':'智慧城市',
-            'museum':'博物馆',
-            'government':'刑侦消防',
-            'property':'房产营销',
-          }
-          return obj[record.typeId] || '智慧城市';
-        },
-      },
-      {
-        title: '创建人',
-        ellipsis: true,
-        dataIndex: 'sysUserName',
-        width: 120,
-      },
-      {
-        title: '创建时间',
-        dataIndex: 'createTime',
-        width: 150,
-        customRender: ({ record }) => {
-          return (
-            record.createTime &&
-            h(Time, {
-              value: record.createTime,
-              mode: 'datetime',
-            })
-          );
+    FormProps,
+  } from '/@/components/Table';
+  import { PageWrapper } from '/@/components/Page';
+  import { Time } from '/@/components/Time';
+  import { caseListApi, caseReleaseApi, casePublicApi, caseDelApi } from '/@/api/operate';
+  import { Descriptions, Switch, Tabs } from 'ant-design-vue';
+  import { useModal } from '/@/components/Modal';
+  import { useI18n } from '/@/hooks/web/useI18n';
+  import { useMessage } from '/@/hooks/web/useMessage';
+  import addNewModal from './components/case/addModal.vue';
+  import { usePermissionStore } from '/@/store/modules/permission';
+  export default defineComponent({
+    components: {
+      BasicTable,
+      TableAction,
+      PageWrapper,
+      TableImg,
+      addNewModal,
+      [Descriptions.name]: Descriptions,
+      [Descriptions.Item.name]: Descriptions.Item,
+      [Tabs.name]: Tabs,
+      [Tabs.TabPane.name]: Tabs.TabPane,
+    },
+    setup() {
+      const { t } = useI18n();
+      const { createMessage } = useMessage();
+      const permissionStore = usePermissionStore();
+      const { getCheckPerm } = permissionStore;
+      const [register, { openModal }] = useModal();
+      const language = ref<string>('cn'); //未处理,0已处理(默认1)
+      const columns: BasicColumn[] = [
+        {
+          title: '案例标题',
+          dataIndex: 'title',
+          ellipsis: true,
+          width: 250,
         },
-      },
-      {
-        title: '发布时间',
-        dataIndex: 'publicTime',
-        width: 150,
-        customRender: ({ record }) => {
-          return (
-            record.publicTime &&
-            h(Time, {
-              value: record.publicTime,
-              mode: 'datetime',
-            })
-          );
+        // {
+        //   title: '来源',
+        //   dataIndex: 'source',
+        //   ellipsis: true,
+        //   width: 120,
+        // },
+        {
+          title: '类型',
+          dataIndex: 'typeId',
+          ellipsis: true,
+          width: 80,
+          customRender: ({ record }) => {
+            let obj = {
+              smartCity: '智慧城市',
+              museum: '博物馆',
+              government: '刑侦消防',
+              property: '房产营销',
+            };
+            return obj[record.typeId] || '智慧城市';
+          },
         },
-      },
-      {
-        title: '排序',
-        ellipsis: true,
-        dataIndex: 'sort',
-        width: 80,
-      },
-      {
-        title: '是否显示',
-        dataIndex: 'isShow',
-        width: 80,
-        customRender: ({ record }) => {
-          if (!Reflect.has(record, 'pendingStatus')) {
-            record.pendingStatus = false;
-          }
-          return h(Switch, {
-            checked: record.isShow === 1,
-            checkedChildren: '是',
-            unCheckedChildren: '否',
-            loading: false,
-            onChange: async (checked: boolean) => {
-              record.pendingStatus = true;
-              const id: string = record.id || '';
-              const newStatus = checked ? 1 : 0;
-              Reflect.set(record, 'isShow', newStatus);
-              await caseReleaseApi({ id: id, isShow: newStatus });
-              createMessage.success(t('common.optSuccess'));
-              // reload()
-            },
-          });
+        {
+          title: '创建人',
+          ellipsis: true,
+          dataIndex: 'sysUserName',
+          width: 120,
         },
-      },
-    ];
-    const searchForm: Partial<FormProps> = {
-      labelWidth: 100,
-      autoSubmitOnEnter: true,
-      schemas: [
         {
-          field: 'publicTime',
-          label: t('routes.operate.releaseTime'),
-          component: 'RangePicker',
-          componentProps: {
-            maxLength: 100,
-            format: 'YYYY-MM-DD',
-            valueFormat: 'YYYY-MM-DD',
-            showTime: true,
-          },
-          colProps: {
-            xl: 8,
-            xxl: 8,
+          title: '创建时间',
+          dataIndex: 'createTime',
+          width: 150,
+          customRender: ({ record }) => {
+            return (
+              record.createTime &&
+              h(Time, {
+                value: record.createTime,
+                mode: 'datetime',
+              })
+            );
           },
         },
         {
-          field: 'title',
-          label: '案例标题',
-          component: 'Input',
-          colProps: {
-            xl: 5,
-            xxl: 5,
+          title: '发布时间',
+          dataIndex: 'publicTime',
+          width: 150,
+          customRender: ({ record }) => {
+            return (
+              record.publicTime &&
+              h(Time, {
+                value: record.publicTime,
+                mode: 'datetime',
+              })
+            );
           },
         },
         {
-          field: 'typeId',
-          label: '类型',
-          component: 'Select',
-          componentProps: {
-          placeholder: '请选择类型',
-          options: [
-            {
-              label: '智慧城市',
-              value: 'smartCity',
-              key: 'smartCity',
+          title: '排序',
+          ellipsis: true,
+          dataIndex: 'sort',
+          width: 80,
+        },
+        {
+          title: '是否显示',
+          dataIndex: 'isShow',
+          width: 80,
+          customRender: ({ record }) => {
+            if (!Reflect.has(record, 'pendingStatus')) {
+              record.pendingStatus = false;
+            }
+            return h(Switch, {
+              checked: record.isShow === 1,
+              checkedChildren: '是',
+              unCheckedChildren: '否',
+              loading: false,
+              onChange: async (checked: boolean) => {
+                record.pendingStatus = true;
+                const id: string = record.id || '';
+                const newStatus = checked ? 1 : 0;
+                Reflect.set(record, 'isShow', newStatus);
+                await caseReleaseApi({ id: id, isShow: newStatus });
+                createMessage.success(t('common.optSuccess'));
+                // reload()
+              },
+            });
+          },
+        },
+      ];
+      const searchForm: Partial<FormProps> = {
+        labelWidth: 100,
+        autoSubmitOnEnter: true,
+        schemas: [
+          {
+            field: 'publicTime',
+            label: t('routes.operate.releaseTime'),
+            component: 'RangePicker',
+            componentProps: {
+              maxLength: 100,
+              format: 'YYYY-MM-DD',
+              valueFormat: 'YYYY-MM-DD',
+              showTime: true,
             },
-            {
-              label: '博物馆',
-              value: 'museum',
-              key: 'museum',
+            colProps: {
+              xl: 8,
+              xxl: 8,
+            },
+          },
+          {
+            field: 'title',
+            label: '案例标题',
+            component: 'Input',
+            colProps: {
+              xl: 5,
+              xxl: 5,
             },
-            {
-              label: '刑侦消防',
-              value: 'government',
-              key: 'government',
+          },
+          {
+            field: 'typeId',
+            label: '类型',
+            component: 'Select',
+            componentProps: {
+              placeholder: '请选择类型',
+              options: [
+                {
+                  label: '智慧城市',
+                  value: 'smartCity',
+                  key: 'smartCity',
+                },
+                {
+                  label: '博物馆',
+                  value: 'museum',
+                  key: 'museum',
+                },
+                {
+                  label: '刑侦消防',
+                  value: 'government',
+                  key: 'government',
+                },
+                {
+                  label: '房产营销',
+                  value: 'property',
+                  key: 'property',
+                },
+              ],
             },
-            {
-              label: '房产营销',
-              value: 'property',
-              key: 'property',
+            colProps: {
+              xl: 5,
+              xxl: 5,
             },
-          ],
-        },
-          colProps: {
-            xl: 5,
-            xxl: 5,
           },
+        ],
+      };
+      const [registerTable, { reload }] = useTable({
+        api: caseListApi,
+        title: '案例列表',
+        columns: columns,
+        useSearchForm: true,
+        formConfig: searchForm,
+        showTableSetting: true,
+        showIndexColumn: false,
+        searchInfo: { language },
+        rowKey: 'id',
+        fetchSetting: {
+          pageField: 'pageNum',
+          sizeField: 'pageSize',
+          listField: 'list',
+          totalField: 'total',
+        },
+        beforeFetch: (T) => {
+          if (T.ctivated) {
+            T.publicTimeStart = T.ctivated[0];
+            T.publicTimeEnd = T.ctivated[1];
+          }
+          return T;
+        },
+        actionColumn: {
+          width: 220,
+          title: '操作',
+          dataIndex: 'action',
+          slots: { customRender: 'action' },
         },
-      ],
-    };
-    const [registerTable, { reload }] = useTable({
-      api: caseListApi,
-      title: '案例列表',
-      columns: columns,
-      useSearchForm: true,
-      formConfig: searchForm,
-      showTableSetting: true,
-      showIndexColumn: false,
-      searchInfo: { language },
-      rowKey: 'id',
-      fetchSetting: {
-        pageField: 'pageNum',
-        sizeField: 'pageSize',
-        listField: 'list',
-        totalField: 'total',
-      },
-      beforeFetch: (T) => {
-        if (T.ctivated) {
-          T.publicTimeStart = T.ctivated[0];
-          T.publicTimeEnd = T.ctivated[1];
-        }
-        return T;
-      },
-      actionColumn: {
-        width: 220,
-        title: '操作',
-        dataIndex: 'action',
-        slots: { customRender: 'action' },
-      },
-      canResize: true,
-    });
-    async function handleDelete(record: Recordable) {
-      await caseDelApi({ id: record.id });
-      createMessage.success(t('common.optSuccess'));
-      reload();
-    }
-    async function handlePublish(record: Recordable) {
-      console.log('点击了发布', record);
-      await casePublicApi({ id: record.id, isPublic: 1 });
-      createMessage.success(t('common.optSuccess'));
-      reload();
-    }
-    function handleEdit(record: Recordable) {
-      console.log('点击了编辑', record);
-      openModal(true, {...record,language});
-    }
-    async function handleWithdraw(record: Recordable) {
-      await casePublicApi({ id: record.id, isPublic: 0 });
-      createMessage.success(t('common.optSuccess'));
-      reload();
-    }
-    function changeTable(val: string) {
+        canResize: true,
+      });
+      async function handleDelete(record: Recordable) {
+        await caseDelApi({ id: record.id });
+        createMessage.success(t('common.optSuccess'));
+        reload();
+      }
+      async function handlePublish(record: Recordable) {
+        console.log('点击了发布', record);
+        await casePublicApi({ id: record.id, isPublic: 1 });
+        createMessage.success(t('common.optSuccess'));
+        reload();
+      }
+      function handleEdit(record: Recordable) {
+        console.log('点击了编辑', record);
+        openModal(true, { ...record, language });
+      }
+      async function handleWithdraw(record: Recordable) {
+        await casePublicApi({ id: record.id, isPublic: 0 });
+        createMessage.success(t('common.optSuccess'));
+        reload();
+      }
+      function changeTable(val: string) {
         language.value = val;
         reload();
       }
-    function hendleAddNew() {
-      console.log('新增新闻');
-    }
-    return {
-      registerTable,
-      handleDelete,
-      handleEdit,
-      handleWithdraw,
-      handlePublish,
-      hendleAddNew,
-      changeTable,
-      reload,
-      language,
-      register,
-      openModal,
-      getCheckPerm,
-    };
-  },
-});
-</script>
+      function hendleAddNew() {
+        console.log('新增新闻');
+      }
+      return {
+        registerTable,
+        handleDelete,
+        handleEdit,
+        handleWithdraw,
+        handlePublish,
+        hendleAddNew,
+        changeTable,
+        reload,
+        language,
+        register,
+        openModal,
+        getCheckPerm,
+      };
+    },
+  });
+</script>

+ 80 - 16
src/views/productOperation/cameraScene.vue

@@ -32,16 +32,18 @@
     <PageWrapper v-else contentBackground>
       <template #footer>
         <a-tabs v-model:activeKey="tableType" @change="changeTable">
-          <a-tab-pane :key="1" tab="场景列表" :disabled="loading"/>
-          <a-tab-pane :key="2" tab="场景共享" :disabled="loading"/>
-        <!-- <a-tab-pane :key="3" tab="四维双目Lite" :disabled="loading"/> 
-        <a-tab-pane :key="4" tab="四维全景" :disabled="loading"/>  --> -->
+          <a-tab-pane :key="0" tab="场景列表" :disabled="loading" />
+          <a-tab-pane :key="1" tab="场景共享" :disabled="loading" />
+          <!-- <a-tab-pane :key="3" tab="四维双目Lite" :disabled="loading"/> 
+        <a-tab-pane :key="4" tab="四维全景" :disabled="loading"/>  -->
+          -->
           <!-- <Tabs.TabPane :key="1" tab="四维看见" :disabled="loading" />
           <Tabs.TabPane :key="2" tab="深时点云场景" :disabled="loading" />
           <Tabs.TabPane :key="5" tab="深时Mesh场景" :disabled="loading" />
           <Tabs.TabPane :key="6" tab="深光点云场景" :disabled="loading" />
           <Tabs.TabPane :key="7" tab="深光Mesh场景" :disabled="loading" />  -->
-        </a-tabs></template>
+        </a-tabs></template
+      >
       <div class="desc-wrap-BasicTable">
         <BasicTable @register="registerTable">
           <template #toolbar>
@@ -172,6 +174,7 @@
       />
       <MoveModal @register="registerMoveModal" />
       <PowersModal @register="registerPowersModal" />
+      <caseListModal @register="registerCaseListModal" />
     </PageWrapper>
   </div>
 </template>
@@ -192,6 +195,7 @@
   import DownLoadModal from './modal/DownLoadModal.vue';
   import MoveModal from './modal/MoveModal.vue';
   import PowersModal from './modal/PowersModal.vue';
+  import caseListModal from './modal/caseListModal.vue';
   import { Time } from '/@/components/Time';
   import { Descriptions, Tabs, Progress } from 'ant-design-vue';
   import { useI18n } from '/@/hooks/web/useI18n';
@@ -210,6 +214,7 @@
     buildSceneObj,
     sceneDetail,
     sceneCount,
+    getCaseByNum,
   } from '/@/api/operate';
   import { message } from 'ant-design-vue';
   import { usePermissionStore } from '/@/store/modules/permission';
@@ -220,6 +225,7 @@
       DownLoadModal,
       MoveModal,
       PowersModal,
+      caseListModal,
       BasicTable,
       TableAction,
       PageWrapper,
@@ -239,7 +245,7 @@
       const permissionStore = usePermissionStore();
       const { getCheckPerm } = permissionStore;
       const loading = ref(false);
-      const tableType = ref<Recordable>(1); //0看看 、1看见、2深时
+      const tableType = ref<Recordable>(0); //0看看 、1看见、2深时
       const tabList = ref<Array>(['四维看看', '四维看见', '四维深时', '四维双目Lite']);
       const qrCodeUrl = ref({
         show: false,
@@ -379,7 +385,7 @@
         },
       ];
       const searchForm: Partial<FormProps> = {
-        labelWidth: 100,
+        labelWidth: 80,
         autoSubmitOnEnter: true,
         autoAdvancedLine: 1,
         schemas: [
@@ -391,8 +397,8 @@
               maxLength: 100,
             },
             colProps: {
-              xl: 7,
-              xxl: 7,
+              xl: 5,
+              xxl: 5,
             },
           },
           {
@@ -403,8 +409,8 @@
               maxLength: 100,
             },
             colProps: {
-              xl: 7,
-              xxl: 7,
+              xl: 6,
+              xxl: 6,
             },
           },
           {
@@ -427,6 +433,55 @@
               maxLength: 100,
             },
             colProps: {
+              xl: 5,
+              xxl: 5,
+            },
+          },
+          {
+            field: 'type',
+            label: '相机类型',
+            component: 'Select',
+            componentProps: {
+              // allowClear: false,
+              options: [
+                {
+                  label: '四维现勘 Kankan',
+                  value: '0',
+                  key: '0',
+                },
+                {
+                  label: '四维现勘 Minion',
+                  value: '1',
+                  key: '1',
+                },
+                {
+                  label: '四维现勘 Mega/点云',
+                  value: '2',
+                  key: '2',
+                },
+                {
+                  label: '四维现勘 Mega',
+                  value: '5',
+                  key: '5',
+                },
+                {
+                  label: '四维现勘 Meta/点云',
+                  value: '6',
+                  key: '6',
+                },
+                {
+                  label: '四维现勘 Meta',
+                  value: '7',
+                  key: '7',
+                },
+                {
+                  label: '四维现勘 PanoX',
+                  value: '8',
+                  key: '8',
+                },
+              ],
+            },
+            colProps: {
               xl: 6,
               xxl: 6,
             },
@@ -439,12 +494,13 @@
       const [registerDownModal, { openModal: openDownModal }] = useModal();
       const [registerMoveModal, { openModal: openMoveModal }] = useModal();
       const [registerPowersModal, { openModal: openPowersModal }] = useModal();
+      const [registerCaseListModal, { openModal: openCaseListModal }] = useModal();
       const [registerTable, { reload }] = useTable({
         api: operateSceneList,
         title: `场景列表`,
         // titleHelpMessage: ['已启用expandRowByClick', '已启用stopButtonPropagation'],
         columns: columns,
-        searchInfo: { type: tableType },
+        searchInfo: { sceneType: tableType },
         useSearchForm: true,
         formConfig: searchForm,
         showTableSetting: true,
@@ -615,10 +671,17 @@
           createMessage.error('编辑权限已过期');
         }
       }
-      function handlePowers(record: Recordable) {
-        openPowersModal(true, {
-          ...record,
-        });
+      async function handlePowers(record: Recordable) {
+        let res = await getCaseByNum({ num: record.num });
+        if (res && res.length) {
+          openCaseListModal(true, {
+            list: res,
+          });
+        } else {
+          openPowersModal(true, {
+            ...record,
+          });
+        }
       }
       onMounted(() => {
         sceneCount({}).then((res) => {
@@ -642,6 +705,7 @@
       return {
         registerTable,
         registerPowersModal,
+        registerCaseListModal,
         handleDelete,
         handleCopy,
         handleMove,

+ 19 - 4
src/views/productOperation/modal/PowersModal.vue

@@ -21,6 +21,9 @@
             新增
           </a-button>
         </template>
+        <template #sceneName="{ record }">
+          <a @click="handleRyno(record)"> {{ record.ryNo }} </a>
+        </template>
         <template #action="{ record }">
           <TableAction
             stopButtonPropagation
@@ -43,6 +46,7 @@
         </template>
       </BasicTable>
       <detailModal @register="registerDetail" @update="reload" />
+      <ryNoSceneModal @register="registerryNoModal" @update="reload" />
     </div>
   </BasicModal>
 </template>
@@ -55,6 +59,7 @@
   import { useModal } from '/@/components/Modal';
   import { useI18n } from '/@/hooks/web/useI18n';
   import detailModal from './detailModal.vue';
+  import ryNoSceneModal from './ryNoSceneModal.vue';
   import { usePermissionStore } from '/@/store/modules/permission';
   import { getAuthList, getAuthType, setAuthType, delAuth } from '/@/api/operate';
   import { BasicTable, useTable, TableAction, BasicColumn } from '/@/components/Table';
@@ -62,7 +67,7 @@
   import dayjs from 'dayjs';
   const { t } = useI18n();
   export default defineComponent({
-    components: { BasicModal, BasicForm, BasicTable, TableAction, detailModal },
+    components: { BasicModal, ryNoSceneModal, BasicForm, BasicTable, TableAction, detailModal },
     props: {
       userData: { type: Object },
     },
@@ -70,15 +75,18 @@
     setup(props, { emit }) {
       const modelRef = ref({});
       const numRef = ref(null);
+      const caseId = ref(null);
       const type = ref(0);
       const fileFlow = reactive({
         showList: true,
       });
+      const [registerryNoModal, { openModal: openryNoModal }] = useModal();
       const [registerDetail, { openModal: openDetaileModal }] = useModal();
       const columns: BasicColumn[] = [
         {
-          title: '人员编号',
+          title: '警员ID',
           dataIndex: 'ryNo',
+          slots: { customRender: 'sceneName' },
           width: 150,
         },
         {
@@ -147,6 +155,7 @@
         immediate: false,
         searchInfo: {
           num: numRef,
+          caseId: caseId,
           authType: type,
         },
         // afterFetch: (T) => {
@@ -208,8 +217,9 @@
       async function onDataReceive(data) {
         modelRef.value = data;
         numRef.value = data.num;
+        caseId.value = data.caseId;
         resetFields();
-        const { authType } = await getAuthType({ num: numRef.value });
+        const { authType } = await getAuthType({ num: numRef.value, caseId: caseId.value });
         fileFlow.showList = authType ? false : true;
         type.value = authType;
         setFieldsValue({
@@ -259,7 +269,10 @@
         }
       };
       function addPowes() {
-        openDetaileModal(true, { num: modelRef.value.num, qxType: fileFlow.showList });
+        openDetaileModal(true, { num: modelRef.value.num, caseId: caseId.value, qxType: fileFlow.showList });
+      }
+      function handleRyno(record) {
+        openryNoModal(true, record);
       }
       function handleEdit(record: Recordable) {
         openDetaileModal(true, record);
@@ -280,6 +293,7 @@
         schemas,
         registerForm,
         model: modelRef,
+        handleRyno,
         fileFlow,
         handleSubmit,
         addListFunc,
@@ -290,6 +304,7 @@
         handleDelete,
         registerTable,
         registerDetail,
+        registerryNoModal,
         openDetaileModal,
         addPowes,
         reload,

+ 228 - 0
src/views/productOperation/modal/caseListModal.vue

@@ -0,0 +1,228 @@
+<template>
+  <BasicModal
+    v-bind="$attrs"
+    @register="register"
+    title="提示"
+    @cancel="resetFields"
+    @ok="handleSubmit"
+    ok-text="跳转到案件列表"
+    :width="550"
+    :min-height="0"
+  >
+    <div class="pt-2px pr-3px">
+      <div class="pl-4">该场景已被纳入案件,请跳转到案件列表修改权限或将场景移出案件。</div>
+      <!-- <BasicForm @register="registerForm" :model="model">
+        <template #text="{ model, field }">
+          {{ model[field] }}
+        </template>
+      </BasicForm> -->
+      <BasicTable class="powesrTable" @register="registerTable" :dataSource="dataSource">
+      </BasicTable>
+      <detailModal @register="registerDetail" @update="reload" />
+    </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 { useRouter } from 'vue-router'
+  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 dataSource = ref([]);
+      const router = useRouter()
+      const numRef = ref(null);
+      const type = ref(0);
+      const fileFlow = reactive({
+        showList: true,
+      });
+      const [registerDetail, { openModal: openDetaileModal }] = useModal();
+      const columns: BasicColumn[] = [
+        {
+          title: '案件名称',
+          dataIndex: 'caseTitle',
+          width: 300,
+        },
+      ];
+      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,
+        showTableSetting: false,
+        searchInfo: {
+          num: numRef,
+          authType: type,
+        },
+        // afterFetch: (T) => {
+        //   let { authType } = getRawDataSource();
+        //   setFieldsValue({
+        //     authType,
+        //   });
+        //   fileFlow.showList = authType ? false : true;
+        //   return T;
+        // },
+        tableSetting: {
+          // 是否显示刷新按钮
+          redo: false,
+          // 是否显示尺寸调整按钮
+          size: false,
+          // 是否显示字段调整按钮
+          setting: false,
+          // 是否显示全屏按钮
+          fullScreen: false,
+        },
+        showIndexColumn: false,
+        canResize: true,
+        rowKey: 'id',
+        fetchSetting: {
+          pageField: 'pageNum',
+          sizeField: 'pageSize',
+          listField: 'list',
+          totalField: 'total',
+        },
+      });
+      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;
+        dataSource.value = data.list;
+        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 () => {
+          router.push('/case/index')
+      };
+      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,
+        userName,
+        dataSource,
+      };
+    },
+  });
+</script>
+
+<style lang="less" scoped>
+  .powesrTable {
+  }
+</style>

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

@@ -114,6 +114,13 @@
           required: false,
         },
         {
+          field: 'caseId',
+          component: 'Input',
+          show: false,
+          label: 'caseId',
+          required: false,
+        },
+        {
           field: 'ryNo',
           component: 'AutoComplete',
           label: '人员编号',
@@ -391,7 +398,7 @@
       let addListFunc = () => {};
       const [register, { closeModal }] = useModalInner(async (data) => {
         onSearch('');
-        let checkAuthOther = await checkAuthOtherApi({ num: data.num, authType: data.qxType ? 0 : 1, });
+        let checkAuthOther = await checkAuthOtherApi({ num: data.num, caseId: data.caseId, authType: data.qxType ? 0 : 1, });
         let setData = {
           ...checkAuthOther,
           ...data,
@@ -527,6 +534,7 @@
       const handleSubmit = async () => {
         try {
           const params = await validate();
+          console.log('params', params);
           let canEditLook = params.isEmpower && params.isEmpower.some((item) => item == 1) ? 1 : 0;
           await addAuth({
             ...params,

+ 317 - 0
src/views/productOperation/modal/ryNoSceneModal.vue

@@ -0,0 +1,317 @@
+<template>
+  <BasicModal
+    v-bind="$attrs"
+    @register="register"
+    :title="fileFlow.title"
+    @cancel="resetFields"
+    @ok="handleSubmit"
+    :width="1000"
+    :min-height="0"
+  >
+    <div class="pt-2px pr-3px"
+      >
+      <!-- {{ roleId }}
+      <BasicForm @register="registerForm" :model="model">
+        <template #text="{ model, field }">
+          {{ model[field] }}
+        </template>
+      </BasicForm> -->
+      <BasicTable class="powesrTable" @register="registerTable">
+        <!-- <template #toolbar>
+          <a-button type="primary" v-if="getCheckPerm('scenes-powers-add')" @click="addPowes">
+            新增
+          </a-button> 
+        </template>-->
+        <template #sceneName="{ record }">
+          <a @click="handleRyno(record)"> {{ record.ryNo }} </a>
+        </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: '编辑',
+                ifShow: getCheckPerm('scenes-powers-edit'),
+                onClick: handleEdit.bind(null, record),
+              },
+              {
+                label: '删除',
+                //icon: 'ic:outline-delete-outline',
+                disabled: record.canDel != 0,
+                color: 'error',
+                ifShow: getCheckPerm('scenes-powers-delete'),
+                onClick: handleDelete.bind(null, record),
+              },
+            ]"
+          />
+        </template>
+      </BasicTable>
+      <detailModal @register="registerDetail" @update="reload" />
+    </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 { operateSceneList, 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 ryNo = ref(null);
+      const numRef = ref(null);
+      const caseId = ref(null);
+      const type = ref(0);
+      const fileFlow = reactive({
+        title: '场景权限',
+        showList: true,
+      });
+      const [registerDetail, { openModal: openDetaileModal }] = useModal();
+      const columns: BasicColumn[] = [
+        {
+          title: '场景标题',
+          dataIndex: 'sceneName',
+          ellipsis: true,
+          slots: { customRender: 'href' },
+          resizable: true,
+          minWidth: 150,
+          width: 150,
+        },
+        {
+          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,
+        },
+      ];
+      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: operateSceneList,
+        title: `已授权列表`,
+        columns: columns,
+        useSearchForm: false,
+        immediate: false,
+        searchInfo: { ryNo: ryNo },
+        // 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 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;
+        ryNo.value = data.ryNo;
+        fileFlow.title = data.ryNickName + '拥有的场景权限';
+        numRef.value = data.num;
+        caseId.value = data.caseId;
+        resetFields();
+        const { authType } = await getAuthType({ num: numRef.value, caseId: caseId.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, caseId: caseId.value, qxType: fileFlow.showList });
+      }
+      function handleRyno(record) {
+        // register({ isShow, data });
+      }
+      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,
+        handleRyno,
+        fileFlow,
+        handleSubmit,
+        addListFunc,
+        resetFields,
+        t,
+        getCheckPerm,
+        handleEdit,
+        handleDelete,
+        registerTable,
+        registerDetail,
+        openDetaileModal,
+        addPowes,
+        reload,
+        userName,
+      };
+    },
+  });
+</script>
+
+<style lang="less" scoped>
+  .powesrTable {
+  }
+</style>