Browse Source

feat: save

gemercheung 1 năm trước cách đây
mục cha
commit
8104dfd660

+ 2 - 90
src/api/archive/list.ts

@@ -1,13 +1,5 @@
 import { defHttp } from '/@/utils/http/axios';
-import {
-  PageParams,
-  RentListGetResultModel,
-  SceneEditParam,
-  SceneDownloadParam,
-  GetDownloadProcessModel,
-  SceneDownloadModel,
-} from './model';
-import { Result } from '/#/axios';
+import { PageParams, ListModel } from './model';
 
 enum Api {
   pageList = '/service/manage_jp/storage/list',
@@ -18,7 +10,7 @@ enum Api {
  */
 
 export const ListApi = (params: PageParams) =>
-  defHttp.post<RentListGetResultModel>({
+  defHttp.post<ListModel>({
     url: Api.pageList,
     params,
     headers: {
@@ -26,83 +18,3 @@ export const ListApi = (params: PageParams) =>
       ignoreCancelToken: true,
     },
   });
-export const DeleteApi = (params: string) =>
-  defHttp.post<Result>({
-    url: Api.detele,
-    params: {
-      sceneNum: params,
-    },
-    headers: {
-      // @ts-ignore
-      ignoreCancelToken: true,
-    },
-  });
-export const sceneCopy = (params: string) =>
-  defHttp.post<Result>({
-    url: Api.sceneCopy,
-    params: {
-      num: params,
-    },
-    headers: {
-      // @ts-ignore
-      ignoreCancelToken: true,
-    },
-  });
-export const UpgradeToV4 = (params: string) =>
-  defHttp.get<Result>({
-    url: Api.upgradeToV4,
-    params: {
-      num: params,
-    },
-    headers: {
-      // @ts-ignore
-      ignoreCancelToken: true,
-    },
-  });
-export const downloadSceneDataAPi = (params: SceneDownloadParam) =>
-  defHttp.get<SceneDownloadModel>({
-    url: Api.downloadSceneData,
-    params,
-    headers: {
-      // @ts-ignore
-      ignoreCancelToken: true,
-    },
-  });
-export const getDownloadProcessApi = (params: SceneDownloadParam) =>
-  defHttp.get<GetDownloadProcessModel>({
-    url: Api.getDownloadProcess,
-    params,
-    headers: {
-      // @ts-ignore
-      ignoreCancelToken: true,
-    },
-  });
-
-export const generateSceneEditTokenApi = (params: SceneEditParam) =>
-  defHttp.post<Result>({
-    url: Api.generateSceneEditToken,
-    params,
-    headers: {
-      // @ts-ignore
-      ignoreCancelToken: true,
-    },
-  });
-
-export const addDownloadNumApi = (params: SceneDownloadParam) =>
-  defHttp.get<Result>({
-    url: Api.addDownloadNum,
-    params,
-    headers: {
-      // @ts-ignore
-      ignoreCancelToken: true,
-    },
-  });
-export const checkDownloadApi = (params: SceneDownloadParam) =>
-  defHttp.get<SceneDownloadModel>({
-    url: Api.checkDownload,
-    params,
-    headers: {
-      // @ts-ignore
-      ignoreCancelToken: true,
-    },
-  });

+ 0 - 99
src/api/archive/live.ts

@@ -1,99 +0,0 @@
-import { defHttp } from '/@/utils/http/axios';
-import {
-  PageParams,
-  RentListGetResultModel,
-  SceneLiveItem,
-  bindAnchorListParam,
-  GetAllSceneModel,
-} from './model';
-import { Result, UploadFileParams } from '/#/axios';
-enum Api {
-  pageList = '/basic-api/brand/brandBindList',
-  bindAnchorList = '/zfb-api/zfb/shop/sys/user/bindList',
-  olderBindAnchorList = '/basic-api/sys/user/bindList',
-  // brandTypeList = '/zfb-api/zfb/shop/brand/brandTypeList',
-  brandTypeList = '/basic-api/brand/brandTypeList',
-  // bindUser = '/zfb-api/zfb/shop/sys/brand/bindUser',
-  bindUser = '/basic-api/brand/bindUser',
-  brandUpdate = '/basic-api/brand/update',
-  upload = '/basic-api/sys/oss/upload',
-  getAllScene = '/zfb-api/zfb/scene/list',
-}
-export type SceneLiveItemResult = SceneLiveItem;
-/**
- * @description: Get sample list value
- */
-
-export const ListApi = (params: PageParams) =>
-  defHttp.get<RentListGetResultModel>({
-    url: Api.pageList,
-    params,
-    headers: {
-      // @ts-ignore
-      ignoreCancelToken: true,
-    },
-  });
-export const bindOldAnchorListApi = (params: bindAnchorListParam) =>
-  defHttp.post<RentListGetResultModel>({
-    url: Api.olderBindAnchorList,
-    params: params,
-    data: params,
-    headers: {
-      // @ts-ignore
-      ignoreCancelToken: true,
-    },
-  });
-export const bindAnchorListApi = (params: bindAnchorListParam) =>
-  defHttp.post<RentListGetResultModel>({
-    url: Api.bindAnchorList,
-    params: params,
-    data: params,
-    headers: {
-      // @ts-ignore
-      ignoreCancelToken: true,
-    },
-  });
-export const bindUserApi = (params: bindAnchorListParam[]) =>
-  defHttp.post<RentListGetResultModel>({
-    url: Api.bindUser,
-    params: params,
-    // data: params,
-    headers: {
-      // @ts-ignore
-      ignoreCancelToken: true,
-    },
-  });
-export const brandTypeListApi = (params: PageParams) =>
-  defHttp.get<RentListGetResultModel>({
-    url: Api.brandTypeList,
-
-    params,
-    headers: {
-      // @ts-ignore
-      ignoreCancelToken: true,
-    },
-  });
-
-export function uploadLiveApi(
-  params: UploadFileParams,
-  onUploadProgress: (progressEvent: ProgressEvent) => void,
-) {
-  return defHttp.uploadFile<Result>(
-    {
-      url: Api.upload,
-      onUploadProgress,
-    },
-    params,
-  );
-}
-
-export const getAllSceneApi = (params: PageParams) => {
-  defHttp.post<GetAllSceneModel>({
-    url: Api.getAllScene,
-    params,
-    headers: {
-      // @ts-ignore
-      ignoreCancelToken: true,
-    },
-  });
-};

+ 12 - 69
src/api/archive/model.ts

@@ -3,62 +3,6 @@ import { BasicPageParams, BasicFetchResult } from '/@/api/model/baseModel';
  * @description: Request list interface parameters
  */
 export type PageParams = BasicPageParams;
-export interface bindAnchorListParam {
-  brandId?: number | string;
-  canShow?: number;
-  type?: number;
-  userId?: number | string;
-}
-export interface SceneDownloadParam {
-  sceneNum?: string;
-  num?: string;
-  isObj?: number | null;
-}
-
-export interface SceneEditParam {
-  sceneNum: string;
-  userName: string;
-}
-
-export interface SceneLiveItem {
-  address: string;
-  adminId: number;
-  appListPicUrl: string;
-  bindShowerId: number;
-  bindShowerName: string;
-  bindShowerNameList: string;
-  city: string;
-  contractPhone: string;
-  createTime: number;
-  createUserDeptId: number;
-  createUserId: number;
-  deleted: number;
-  id: number;
-  introduceVideo: string;
-  introduceVideoCover: string;
-  latitude: number;
-  liveRoomUrl: string;
-  livestreamStatus: number;
-  longitude: number;
-  name: string;
-  picList: string;
-  sceneName: string;
-  sceneNum: string;
-  sceneUrl: string;
-  shareWxQrCode: string;
-  simpleDesc: string;
-  sortOrder: number;
-  token: string;
-  type: number;
-  updateTime: number;
-  updateUserId: number;
-}
-
-export interface SceneProccessItem {
-  precent?: number;
-  status?: number;
-  url?: string;
-}
 
 export interface sceneItem {
   appListPicUrl: string;
@@ -74,19 +18,18 @@ export interface sceneItem {
   updateTime: number;
   updateUserId: number;
 }
-export interface SceneDownloadModel {
-  downloadStatus: number;
-  downloadUrl: string;
+export interface restoreItemParam {
+  numList: string[];
+  cameraId: number | string;
 }
-export interface GetDownloadProcessModel {
-  percent: number;
-  status: number;
-  url: string;
+export interface allUserListParam {
+  userName: string;
+}
+export interface cameraListParam {
+  userId: string;
+  type: number;
+  // cameraId: string;
 }
-/**
- * @description: Request list return value
- */
-export type RentListGetResultModel = BasicFetchResult<SceneLiveItem>;
-export type LiveListGetResultModel = BasicFetchResult<SceneLiveItem>;
 // export type GetDownloadProcessModel = BasicFetchResult<SceneProccessItem>;
-export type GetAllSceneModel = BasicFetchResult<sceneItem>;
+export type ListModel = BasicFetchResult<sceneItem>;
+export type GetCameraListAllModel = BasicFetchResult<sceneItem>;

+ 52 - 0
src/api/archive/resstore.ts

@@ -0,0 +1,52 @@
+import { defHttp } from '/@/utils/http/axios';
+import {
+  restoreItemParam,
+  allUserListParam,
+  cameraListParam,
+  GetCameraListAllModel,
+} from './model';
+import { Result } from '/#/axios';
+
+enum Api {
+  restore = '/service/manage_jp/storage/restore',
+  allUserList = '/service/manage_jp/user/allUserList',
+  cameraList = '/service/manage_jp/camera/getByUser',
+}
+
+/**
+ * @description: Get sample list value
+ */
+
+export const restoreApi = (params: restoreItemParam) =>
+  defHttp.post<Result>(
+    {
+      url: Api.restore,
+      params,
+      headers: {
+        // @ts-ignore
+        ignoreCancelToken: true,
+      },
+    },
+    {
+      isTransformResponse: false,
+    },
+  );
+export const getAllAccountListApi = (params: allUserListParam) =>
+  defHttp.post<Result>({
+    url: Api.allUserList,
+    params,
+    headers: {
+      // @ts-ignore
+      ignoreCancelToken: true,
+    },
+  });
+
+export const getCameraListApi = (params: cameraListParam) =>
+  defHttp.post<GetCameraListAllModel>({
+    url: Api.cameraList,
+    params,
+    headers: {
+      // @ts-ignore
+      ignoreCancelToken: true,
+    },
+  });

+ 32 - 8
src/api/scene/list.ts

@@ -7,6 +7,7 @@ import {
   GetDownloadProcessModel,
   SceneDownloadModel,
   patchcoldStoragedParam,
+  collaborateParam,
 } from './model';
 import { Result } from '/#/axios';
 
@@ -20,7 +21,8 @@ enum Api {
   delete = '/service/manage_jp/user/scene/delete',
   upgradeToV4 = '/service/manage_jp/scene/upgradeToV4',
   sceneCopy = 'service/manage_jp/scene/copyScene',
-  coldStorage = 'service//manage_jp/storage/coldStorage',
+  coldStorage = 'service/manage_jp/storage/coldStorage',
+  collaborate = 'service/manage_jp/contractor/collaborate',
 }
 
 /**
@@ -117,11 +119,33 @@ export const checkDownloadApi = (params: SceneDownloadParam) =>
     },
   });
 export const patchcoldStorageApi = (params: patchcoldStoragedParam) =>
-  defHttp.post<Result>({
-    url: Api.coldStorage,
-    params,
-    headers: {
-      // @ts-ignore
-      ignoreCancelToken: true,
+  defHttp.post<Result>(
+    {
+      url: Api.coldStorage,
+      params,
+
+      headers: {
+        // @ts-ignore
+        ignoreCancelToken: true,
+      },
     },
-  });
+    {
+      isTransformResponse: false,
+    },
+  );
+
+export const addCollaborateApi = (params: collaborateParam) =>
+  defHttp.post<Result>(
+    {
+      url: Api.collaborate,
+      params,
+
+      headers: {
+        // @ts-ignore
+        ignoreCancelToken: true,
+      },
+    },
+    {
+      isTransformResponse: false,
+    },
+  );

+ 4 - 0
src/api/scene/model.ts

@@ -86,6 +86,10 @@ export interface GetDownloadProcessModel {
 export interface patchcoldStoragedParam {
   numList: string[];
 }
+export interface collaborateParam {
+  numList: string[];
+  userName: string;
+}
 /**
  * @description: Request list return value
  */

+ 23 - 113
src/views/archive/list.vue

@@ -9,10 +9,7 @@
       </a-tabs>
     </template>
     <div class="desc-wrap-BasicTable">
-      <BasicTable
-        @register="registerTable"
-        :rowSelection="{ type: 'checkbox', onChange: handleSelect }"
-      >
+      <BasicTable @register="registerTable" :rowSelection="{ type: 'checkbox' }">
         <template #toolbar>
           <a-button type="primary" @click="patchRestoreScene"> 批量复原</a-button>
           <!-- <a-button type="primary" color="warning" @click="() => {}"> 编辑</a-button>
@@ -50,6 +47,7 @@
         </template>
       </BasicTable>
     </div>
+    <RestoreModal @register="registerRestoreModal" />
   </PageWrapper>
 </template>
 <script lang="ts">
@@ -68,29 +66,15 @@
   import { Tabs } from 'ant-design-vue';
   import { sceneDetail, buildSceneObj } from '/@/api/lastApi/index';
 
-  import {
-    ListApi,
-    downloadSceneDataAPi,
-    addDownloadNumApi,
-    checkDownloadApi,
-    DeleteApi,
-    UpgradeToV4,
-    sceneCopy,
-  } from '/@/api/archive/list';
+  import { ListApi } from '/@/api/archive/list';
   import { useI18n } from '/@/hooks/web/useI18n';
-  import {
-    downloadByUrl,
-    // downloadByData,
-    // downloadByBase64,
-    // downloadByOnlineUrl,
-  } from '/@/utils/file/download';
-
+  import RestoreModal from './restoreModal.vue';
   // import { useUserStore } from '/@/store/modules/user';
 
   import { useLocaleStore } from '/@/store/modules/locale';
-  import { SceneDownloadParam } from '/@/api/scene/model';
   const localeStore = useLocaleStore();
-  console.log('localeStore', localeStore);
+  const [registerRestoreModal, { openModal: openRestoreModal }] = useModal();
+  // console.log('localeStore', localeStore);
 
   // const userStore = useUserStore();
 
@@ -100,12 +84,13 @@
       TableAction,
       TableImg,
       PageWrapper,
+      RestoreModal,
       [Tabs.name]: Tabs,
       [Tabs.TabPane.name]: Tabs.TabPane,
     },
     setup() {
       const { createMessage, createConfirm } = useMessage();
-      const [registerDownloadModal, { openModal: openDownloadModal }] = useModal();
+
       const { t } = useI18n();
       const loading = ref(false);
       const tableType = ref<Number>(0); //0看看 、1看见、2深时
@@ -221,7 +206,7 @@
         tableSetting: { fullScreen: true },
         clickToRowSelect: true,
         showIndexColumn: true,
-        rowKey: 'num',
+        rowKey: 'sceneNum',
         beforeFetch: (T) => {
           loading.value = true;
           return T;
@@ -258,54 +243,6 @@
           createMessage.error(t(`apiCode.errCode${data.code}`));
         }
       }
-      function handleLivestream(item) {
-        let url = item.webSite;
-        let page = url.substring(url.lastIndexOf('/') + 1, url.lastIndexOf('.html'));
-        url = url.replace(page, 'rtc-live');
-        window.open(url.replace('http://', 'https://') + (isJA.value ? '&lang=ja' : ''), '_blank');
-      }
-      function handleCopy(item) {
-        createConfirm({
-          iconType: 'warning',
-          title: () => h('span', t('routes.scenes.copyInfi.title')),
-          content: () => h('span', t('routes.scenes.copyInfi.content')),
-          onOk: async () => {
-            await sceneCopy(item.num);
-            createMessage.success(t('common.optSuccess'));
-            reload();
-          },
-        });
-      }
-      function handleUpgrade(item) {
-        createConfirm({
-          iconType: 'warning',
-          title: () => h('span', t('routes.scenes.upgradeMessg.title')),
-          content: () => h('span', t('routes.scenes.upgradeMessg.text')),
-          onOk: async () => {
-            console.log('item', item);
-            let res = await UpgradeToV4(item.num);
-            console.log('res', res);
-            createMessage.success(t('common.optSuccess'));
-            reload();
-          },
-        });
-      }
-      // async function restoreScene(record: Recordable) {
-      //   try {
-      //     const langtext = isJA.value ? 'ja' : 'zh';
-      //     const token = userStore.getToken; //&token=${token}
-      //     let url = record.webSite.replace('smobile', 'epc') + `&lang=${langtext}`;
-      //     if (tableType.value == 4 || tableType.value == 2) {
-      //       url = url + `&token=${token}`;
-      //     }
-      //     if (record.isUpgrade == 1) {
-      //       url = url.replace('smg', 'epg');
-      //     }
-      //     openUrl(url);
-      //   } catch (error) {
-      //     console.log('error', error);
-      //   }
-      // }
       async function restoreScene(record: Recordable) {
         try {
           console.log('record', record);
@@ -313,79 +250,52 @@
           console.log('error', error);
         }
       }
-      async function handleDelete(record: Recordable) {
-        console.log('DeleteApi', record);
-        await DeleteApi(record.num);
-        createMessage.success(t('common.optSuccess'));
-        reload();
-      }
 
-      async function handleDownloadScene(record: Recordable) {
-        let param: SceneDownloadParam = {
-          num: record.num,
-          isObj: null,
-        };
-        if (tableType.value == 4 || tableType.value == 2) {
-          param.isObj = tableType.value == 4 ? 1 : 0;
-        }
-        await addDownloadNumApi(param);
-        // SceneDownloadModel
-        const checker = await checkDownloadApi(param);
-        if (checker.downloadStatus < 3) {
-          const res = await downloadSceneDataAPi(param);
-          console.log('res', res);
-          openDownloadModal(true, { ...record, isObj: param.isObj });
-        } else {
-          downloadByUrl({
-            url: checker.downloadUrl,
-            target: '_self',
-          });
-        }
-      }
       function changeTable(val: Number) {
         tableType.value = val;
         reload();
       }
-      const handleSelect = async () => {
-        const keys = getSelectRowKeys();
-        console.log('key', keys);
-      };
       const patchRestoreScene = async () => {
         const keys = getSelectRowKeys();
-        console.log('patchRestoreScene', keys);
+
+        if (keys.length > 0) {
+          console.log('patchRestoreScene', keys);
+          openRestoreModal(true, {
+            tableType: tableType.value,
+          });
+        } else {
+          createMessage.info(t('modal.atLeastOne'));
+        }
       };
+
       return {
         registerTable,
         createMessage,
         t,
         handleGenerate,
         restoreScene,
-        handleDownloadScene,
-        handleDelete,
-        handleLivestream,
-        handleUpgrade,
-        registerDownloadModal,
         changeTable,
-        handleCopy,
         tableType,
         loading,
         isJA,
-        handleSelect,
         patchRestoreScene,
+        registerRestoreModal,
+        openRestoreModal,
       };
     },
   });
 </script>
 <style scoped>
   :deep(.ant-table-tbody > tr > td:not(.ant-table-selection-column, .ant-table-cell-fix-right)) {
-    /* background-color: gray; */
     opacity: 0.5;
+    pointer-events: none;
   }
   :deep(.ant-table-tbody
       > tr.ant-table-row-selected
       > td:not(.ant-table-selection-column, .ant-table-cell-fix-right)) {
     /* background-color: gray; */
     opacity: 0.6;
+    pointer-events: all;
   }
   /* :deep(.ant-table-tbody > tr.ant-table-row-selected > td) {
     background-color: red !important;

+ 176 - 0
src/views/archive/restoreModal.vue

@@ -0,0 +1,176 @@
+<template>
+  <BasicModal
+    v-bind="$attrs"
+    @register="register"
+    :title="`温馨提示`"
+    width="600px"
+    :centered="true"
+    @ok="handleSubmit"
+    @cancel="() => {}"
+  >
+    <div class="pt-20px pb-40px">
+      <BasicForm @register="registerForm" />
+    </div>
+    <template #centerFooter>
+      <!-- <a-button>xxxx</a-button> -->
+    </template>
+  </BasicModal>
+</template>
+<script lang="ts">
+  import { defineComponent, reactive, ref, computed } from 'vue';
+  // import { Switch } from 'ant-design-vue';
+  import { BasicModal, useModalInner } from '/@/components/Modal';
+
+  // import { BasicTable, useTable } from '/@/components/Table';
+  import { BasicForm, FormSchema, useForm } from '/@/components/Form/index';
+  // import { useMessage } from '/@/hooks/web/useMessage';
+  import { getAllAccountListApi, getCameraListApi } from '/@/api/archive/resstore';
+  import { useI18n } from '/@/hooks/web/useI18n';
+  import { useMessage } from '/@/hooks/web/useMessage';
+
+  // bindAnchorListApi
+  // import { bindOldAnchorListApi, bindUserApi } from '/@/api/scene/live';
+  // import { bindAnchorListParam } from '/@/api/scene/model';
+
+  const { t } = useI18n();
+  const { createMessage } = useMessage();
+
+  export default defineComponent({
+    components: { BasicModal, BasicForm },
+    props: {
+      userData: { type: Object },
+    },
+    emits: ['register', 'success'],
+    setup() {
+      const [register, { closeModal }] = useModalInner((data) => {
+        data && onDataReceive(data);
+      });
+      const selectData = ref({
+        account: '',
+        tableType: NaN,
+      });
+      const schemas: FormSchema[] = [
+        {
+          field: 'brandId',
+          label: '复原账号',
+          component: 'ApiSelect',
+          componentProps: {
+            api: getAllAccountListApi,
+            // resultField: 'list',
+            numberToString: true,
+            labelField: 'userName',
+            valueField: 'userName',
+            showSearch: true,
+            optionFilterProp: 'label',
+            immediate: false,
+            listHeight: 130,
+            allowClear: true,
+            getPopupContainer: (node) => {
+              if (node) {
+                return node.parentNode;
+              } else {
+                return document.body;
+              }
+            },
+            onChange: (data) => {
+              console.log('data', data);
+              selectData.value.account = data;
+            },
+            params: {
+              page: 1,
+              limit: 1000,
+            },
+          },
+        },
+        {
+          field: 'cameraId',
+          label: '复原相机',
+          component: 'ApiSelect',
+          componentProps: {
+            api: async (params) => {
+              console.log('params', params);
+              if (!selectData.value.account) {
+                createMessage.error('请先选择复原相机');
+                return;
+              } else {
+                const res = await getCameraListApi({
+                  userId: selectData.value.account,
+                  type: selectData.value.tableType,
+                });
+                return res;
+              }
+            },
+            // resultField: 'list',
+            numberToString: true,
+            labelField: 'userName',
+            valueField: 'userName',
+            optionFilterProp: 'label',
+            immediate: false,
+            listHeight: 130,
+            getPopupContainer: (node) => {
+              if (node) {
+                return node.parentNode;
+              } else {
+                return document.body;
+              }
+            },
+            params: {
+              page: 1,
+              limit: 1000,
+            },
+          },
+        },
+      ];
+      const [registerForm] = useForm({
+        schemas: schemas,
+        labelWidth: 100,
+        baseColProps: { span: 22 },
+        autoSubmitOnEnter: true,
+        showResetButton: false,
+        showSubmitButton: false,
+        submitFunc: async () => {},
+      });
+
+      // const SelectRowsList = computed(() => {
+      //   const data = getSelectRowKeys();
+      //   return data;
+      // });
+      const mapCheckedValue = computed(() => (key) => {
+        return key === 1 ? true : false;
+      });
+      const checked = ref<boolean>(false);
+      const headerInfo = reactive<Recordable>({});
+      const searchInfo = reactive<Recordable>({});
+
+      function onDataReceive(data) {
+        console.log('Data Received', data.tableType);
+        selectData.value.tableType = Number(data.tableType);
+      }
+
+      const handleSelect = async () => {
+        // const keys = getSelectRowKeys();
+        // console.log('key', key);
+      };
+      const handleChange = (val, row) => {
+        console.log('val,row', val, row);
+      };
+      const handleSubmit = async () => {
+        console.log('handleSubmit');
+      };
+
+      return {
+        register,
+        searchInfo,
+        closeModal,
+        handleSelect,
+        headerInfo,
+        handleChange,
+        t,
+        checked,
+        mapCheckedValue,
+        handleSubmit,
+        registerForm,
+      };
+    },
+  });
+</script>

+ 49 - 28
src/views/scenes/assistantModal.vue

@@ -4,6 +4,7 @@
     @register="register"
     :title="`添加协助`"
     width="600px"
+    :minHeight="100"
     :centered="true"
     @ok="handleSubmit"
     @cancel="() => {}"
@@ -11,39 +12,38 @@
     <div class="pt-20px">
       <BasicForm @register="registerForm" />
     </div>
-    <template #centerFooter>
-      <!-- <a-button>xxxx</a-button> -->
-    </template>
+    <template #centerFooter> </template>
   </BasicModal>
 </template>
 <script lang="ts">
-  import { defineComponent, reactive, ref, computed } from 'vue';
-  // import { Switch } from 'ant-design-vue';
+  import { defineComponent, reactive, ref } from 'vue';
   import { BasicModal, useModalInner } from '/@/components/Modal';
-
-  // import { BasicTable, useTable } from '/@/components/Table';
   import { BasicForm, useForm } from '/@/components/Form/index';
-  // import { useMessage } from '/@/hooks/web/useMessage';
-  // import { checkUserAddAble } from '/@/api/corporation/modal';
   import { useI18n } from '/@/hooks/web/useI18n';
-  // bindAnchorListApi
-  // import { bindOldAnchorListApi, bindUserApi } from '/@/api/scene/live';
-  // import { bindAnchorListParam } from '/@/api/scene/model';
-
+  import { useMessage } from '/@/hooks/web/useMessage';
+  import { addCollaborateApi } from '/@/api/scene/list';
   const { t } = useI18n();
-  // const { createMessage } = useMessage();
+  const { createMessage } = useMessage();
   export default defineComponent({
     components: { BasicModal, BasicForm },
     props: {
       userData: { type: Object },
     },
     emits: ['register', 'success'],
-    setup() {
+    setup(_, { emit }) {
       const [register, { closeModal }] = useModalInner((data) => {
         data && onDataReceive(data);
       });
-      const [registerForm] = useForm({
-        schemas: [{ field: 'type', component: 'Input', label: '企业账号' }],
+
+      const currentNum = ref('');
+      const [registerForm, { getFieldsValue }] = useForm({
+        schemas: [
+          {
+            field: 'userName',
+            component: 'Input',
+            label: '企业账号',
+          },
+        ],
         labelWidth: 100,
         baseColProps: { span: 22 },
         autoSubmitOnEnter: true,
@@ -52,19 +52,13 @@
         submitFunc: async () => {},
       });
 
-      const SelectRowsList = computed(() => {
-        const data = getSelectRowKeys();
-        return data;
-      });
-      const mapCheckedValue = computed(() => (key) => {
-        return key === 1 ? true : false;
-      });
       const checked = ref<boolean>(false);
       const headerInfo = reactive<Recordable>({});
       const searchInfo = reactive<Recordable>({});
 
       function onDataReceive(data) {
-        console.log('Data Received', data.id);
+        console.log('Data Received', data.num);
+        currentNum.value = data.num;
       }
 
       const handleSelect = async () => {
@@ -75,7 +69,36 @@
         console.log('val,row', val, row);
       };
       const handleSubmit = async () => {
-        console.log('handleSubmit');
+        const field = getFieldsValue();
+        console.log('field', field);
+        if (!field.userName) {
+          createMessage.error('请选择企业账号');
+
+          return;
+        } else {
+          const res = await addCollaborateApi({
+            numList: [currentNum.value],
+            userName: field.userName,
+          });
+          if (res.code == 0) {
+            createMessage.success(t('common.optSuccess'));
+            closeModal();
+            emit('success');
+          } else {
+            if (res.code == 5015) {
+              createMessage.error('承包商不存在');
+              setTimeout(() => {
+                createMessage.destroy();
+              }, 3000);
+            }
+            if (res.code == 5014) {
+              createMessage.error('场景已被协作,无法再次协作');
+              setTimeout(() => {
+                createMessage.destroy();
+              }, 3000);
+            }
+          }
+        }
       };
 
       return {
@@ -87,8 +110,6 @@
         handleChange,
         t,
         checked,
-        SelectRowsList,
-        mapCheckedValue,
         handleSubmit,
         registerForm,
       };

+ 33 - 22
src/views/scenes/list.vue

@@ -99,7 +99,7 @@
         </template>
       </BasicTable>
       <DownloadModal @register="registerDownloadModal" />
-      <AssistantModal @register="registerAssistantModal" />
+      <AssistantModal @register="registerAssistantModal" @success="reload" />
     </div>
   </PageWrapper>
 </template>
@@ -290,7 +290,7 @@
         ],
       };
       // { getForm }
-      const [registerTable, { reload, getSelectRowKeys }] = useTable({
+      const [registerTable, { reload, getSelectRowKeys, clearSelectedRowKeys }] = useTable({
         title: t('routes.scenes.sceneList'),
         api: ListApi,
         columns: columns,
@@ -421,30 +421,32 @@
       }
 
       function needAssistant(record: Recordable) {
-        console.log('record', record);
+        // console.log('record', record);
         openAssistantModal(true, { ...record });
       }
       function handlePatchSelect() {
         const keys = getSelectRowKeys();
-
-        createConfirm({
-          iconType: 'warning',
-          title: () => h('span', '批量归档'),
-          content: () => h('span', '是否确定?'),
-          onOk: async () => {
-            try {
-              const res = await patchcoldStorageApi({
-                numList: keys,
-              });
-              console.log('res', res);
-              if (res.code === 0) {
-              }
-            } catch (error) {}
-
-            // createMessage.success(t('common.optSuccess'));
-            // reload();
-          },
-        });
+        if (keys.length > 0) {
+          createConfirm({
+            iconType: 'warning',
+            title: () => h('span', '批量归档'),
+            content: () => h('span', '是否确定?'),
+            onOk: async () => {
+              try {
+                const res = await patchcoldStorageApi({
+                  numList: keys,
+                });
+                if (res.code === 0) {
+                  createMessage.success(t('common.optSuccess'));
+                  clearSelectedRowKeys();
+                  reload();
+                }
+              } catch (error) {}
+            },
+          });
+        } else {
+          createMessage.info(t('modal.atLeastOne'));
+        }
       }
       function getCheckboxProps(record: any) {
         return {
@@ -453,6 +455,7 @@
       }
 
       return {
+        reload,
         registerTable,
         createMessage,
         t,
@@ -476,3 +479,11 @@
     },
   });
 </script>
+
+<style scoped>
+  :deep(.ant-table-tbody > tr:has(.ant-checkbox-disabled) > td) {
+    opacity: 0.5;
+    user-select: none;
+    pointer-events: none;
+  }
+</style>