فهرست منبع

fix(sceneList): 生成封面

gemercheung 3 سال پیش
والد
کامیت
5a35b4026e
5فایلهای تغییر یافته به همراه132 افزوده شده و 43 حذف شده
  1. 11 0
      src/api/scene/list.ts
  2. 24 0
      src/api/scene/live.ts
  3. 1 0
      src/locales/lang/zh-CN/routes/scenes.ts
  4. 19 10
      src/views/scenes/list.vue
  5. 77 33
      src/views/scenes/liveDrawer.vue

+ 11 - 0
src/api/scene/list.ts

@@ -13,6 +13,7 @@ enum Api {
   generateSceneEditToken = '/zfb-api/zfb/api/platform/generateSceneEditToken',
   downloadSceneData = '/zfb-api/zfb/scene/downloadSceneData',
   getDownloadProcess = '/zfb-api/zfb/scene/getDownloadProcess',
+  generateDefaultLiveRoom = '/zfb-api/zfb/scene/generateDefaultLiveRoom',
 }
 
 /**
@@ -57,3 +58,13 @@ export const generateSceneEditTokenApi = (params: SceneEditParam) =>
       ignoreCancelToken: true,
     },
   });
+export const generateDefaultLiveRoomApi = (params: SceneDownloadParam) => {
+  defHttp.post<Result>({
+    url: Api.generateDefaultLiveRoom,
+    params,
+    headers: {
+      // @ts-ignore
+      ignoreCancelToken: true,
+    },
+  });
+};

+ 24 - 0
src/api/scene/live.ts

@@ -16,8 +16,10 @@ enum Api {
   // bindUser = '/zfb-api/zfb/shop/sys/brand/bindUser',
   bindUser = '/basic-api/brand/bindUser',
   brandUpdate = '/basic-api/brand/update',
+  brandSave = '/basic-api/brand/save',
   brandDelete = '/basic-api/brand/delete',
   upload = '/basic-api/sys/oss/upload',
+  uploadVideo = '/basic-api/sys/oss/upLoadVideo',
   getAllScene = '/zfb-api/zfb/scene/list',
 }
 export type SceneLiveItemResult = SceneLiveItem;
@@ -87,6 +89,18 @@ export function uploadLiveApi(
     params,
   );
 }
+export function uploadLiveVideoApi(
+  params: UploadFileParams,
+  onUploadProgress: (progressEvent: ProgressEvent) => void,
+) {
+  return defHttp.uploadFile<Result>(
+    {
+      url: Api.uploadVideo,
+      onUploadProgress,
+    },
+    params,
+  );
+}
 
 export const getAllSceneApi = (params: PageParams) => {
   defHttp.post<GetAllSceneModel>({
@@ -109,6 +123,16 @@ export const brandUpdateApi = (params: SceneLiveItem) => {
     },
   });
 };
+export const LiveSceneAddApi = (params: SceneLiveItem) => {
+  defHttp.post<GetAllSceneModel>({
+    url: Api.brandDelete,
+    params,
+    headers: {
+      // @ts-ignore
+      ignoreCancelToken: true,
+    },
+  });
+};
 
 export const LiveSceneDeleteApi = (params: string[]) => {
   defHttp.post<GetAllSceneModel>({

+ 1 - 0
src/locales/lang/zh-CN/routes/scenes.ts

@@ -29,6 +29,7 @@ export default {
   makeLiveCover: '生成直播间封面',
   sceneUrl: '场景链接',
   detailAddr: '详细地址',
+  contractPhone: '联系电话',
   roleType: {
     0: '公司管理员',
     1: '公司员工',

+ 19 - 10
src/views/scenes/list.vue

@@ -35,13 +35,7 @@
               // icon: 'dashicons:editor-kitchensink',
               color: 'error',
               label: t('routes.scenes.makeLiveCover'),
-              onClick: openSceneEditor.bind(null, record),
-            },
-            {
-              // icon: 'dashicons:editor-kitchensink',
-              color: 'error',
-              label: t('routes.scenes.editor'),
-              onClick: openSceneEditor.bind(null, record),
+              onClick: generateDefaultLiveRoom.bind(null, record),
             },
           ]"
         />
@@ -65,7 +59,12 @@
   // import { uploadApi } from '/@/api/sys/upload';
   // import { Progress } from 'ant-design-vue';
   // import { h } from 'vue';
-  import { ListApi, generateSceneEditTokenApi, downloadSceneDataAPi } from '/@/api/scene/list';
+  import {
+    ListApi,
+    generateSceneEditTokenApi,
+    downloadSceneDataAPi,
+    generateDefaultLiveRoomApi,
+  } from '/@/api/scene/list';
   import { useI18n } from '/@/hooks/web/useI18n';
   import {
     downloadByUrl,
@@ -149,7 +148,7 @@
           title: t('common.operation'),
           dataIndex: '',
           slots: { customRender: 'action' },
-          width: 240,
+          width: 300,
           fixed: 'right',
         },
       ];
@@ -196,7 +195,7 @@
         ],
       };
       // { getForm }
-      const [registerTable] = useTable({
+      const [registerTable, { reload }] = useTable({
         title: t('routes.scenes.sceneList'),
         api: ListApi,
         columns: columns,
@@ -256,6 +255,15 @@
           }
         }
       }
+      async function generateDefaultLiveRoom(record: Recordable) {
+        try {
+          await generateDefaultLiveRoomApi({
+            sceneNum: record.sceneNum,
+          });
+          // createMessage.success(t('common.optSuccess'));
+          reload();
+        } catch (error) {}
+      }
       return {
         registerTable,
         createMessage,
@@ -263,6 +271,7 @@
         openSceneEditor,
         handleDownloadScene,
         registerDownloadModal,
+        generateDefaultLiveRoom,
       };
     },
   });

+ 77 - 33
src/views/scenes/liveDrawer.vue

@@ -49,7 +49,8 @@
     brandTypeListApi,
     uploadLiveApi,
     getAllSceneApi,
-    LiveSceneDeleteApi,
+    uploadLiveVideoApi,
+    // LiveSceneDeleteApi,
   } from '/@/api/scene/live';
   import { data as CascaderData } from '/@/utils/cascaderData';
 
@@ -79,6 +80,10 @@
         adcode: string;
         addressComponent: AddressComponentType;
         formattedAddress: string;
+        location: {
+          lng: string;
+          lat: string;
+        };
       }
       let map;
       // Lat(120.262337, 30.178285),
@@ -106,6 +111,7 @@
           //   xl: 5,
           //   xxl: 5,
           // },
+          required: true,
           componentProps: {
             api: brandTypeListApi,
             resultField: 'list',
@@ -198,24 +204,64 @@
             span: 20,
           },
         },
-        // {
-        //   field: 'livePic',
-        //   label: '直播间图片',
-        //   component: 'Upload',
-        //   colProps: {
-        //     span: 20,
-        //   },
-        // },
+        {
+          field: 'picList',
+          label: '直播间图片',
+          component: 'Upload',
+          componentProps: {
+            api: uploadLiveApi,
+            maxSize: 5,
+            emptyHidePreview: true,
+            maxNumber: 15,
+            accept: ['image/*'],
+            afterFetch: function (data) {
+              Reflect.set(data, 'url', data.message.url);
+              return data;
+            },
+          },
+
+          colProps: {
+            span: 20,
+          },
+        },
+        {
+          field: 'introduceVideo',
+          label: '视频',
+          component: 'Upload',
+          componentProps: {
+            api: uploadLiveVideoApi,
+            maxSize: 5,
+            emptyHidePreview: true,
+            maxNumber: 15,
+            accept: ['video/*'],
+            afterFetch: function (data) {
+              Reflect.set(data, 'url', data.message.video);
+              return data;
+            },
+          },
+
+          colProps: {
+            span: 20,
+          },
+        },
+
+        {
+          field: 'contractPhone',
+          component: 'Input',
+          label: t('routes.scenes.contractPhone'),
+          required: true,
+          helpMessage: ['支持填写400(400-xxx-xxxx)热线、手机号等联系方式'],
+        },
       ];
       // updateSchema, validate
-      const [registerForm, { resetFields, setFieldsValue, updateSchema }] = useForm({
+      const [registerForm, { resetFields, setFieldsValue, updateSchema, validate }] = useForm({
         labelWidth: 120,
         schemas: schemas,
         showActionButtonGroup: false,
         baseColProps: { lg: 24, md: 24 },
       });
-      // closeDrawer;
-      const [registerDrawer, { setDrawerProps }] = useDrawerInner(async (data) => {
+
+      const [registerDrawer, { setDrawerProps, closeDrawer }] = useDrawerInner(async (data) => {
         resetFields();
         setDrawerProps({ confirmLoading: false });
         isUpdate.value = !!data?.isUpdate;
@@ -225,12 +271,6 @@
         }
 
         initMap();
-        // updateSchema({
-        //   field: 'parentId',
-        //   componentProps: {
-        //     treeData,
-        //   },
-        // });
       });
 
       async function initMap() {
@@ -285,11 +325,11 @@
               }
             }
           });
-          const marker = new AMap.Marker({
-            position: new AMap.LngLat(defaultAddress.lng, defaultAddress.lat),
-            title: 'lala',
-          });
-          map && map.add(marker);
+          // const marker = new AMap.Marker({
+          //   position: new AMap.LngLat(defaultAddress.lng, defaultAddress.lat),
+          //   title: 'lala',
+          // });
+          // map && map.add(marker);
         });
       }
 
@@ -300,12 +340,6 @@
       }
       const getTitle = computed(() => (!unref(isUpdate) ? '新增直播间' : '编辑直播间'));
 
-      async function handleSubmit() {
-        map && map.destroy();
-      }
-      async function handleClose() {
-        map && map.destroy();
-      }
       async function handleMapSearch() {
         if (detailAddr.value?.length > 0) {
           console.log('detailAddr.value', detailAddr.value);
@@ -361,12 +395,23 @@
         }
       }
       async function handleMapReset() {
+        defaultAddress.location = ['33', '3301', '330109'];
         detailAddr.value = '山阴路688号恒隆广场B座1217';
         handleMapSearch();
       }
-
-      async function handleDeleteLiveScene() {
-        await LiveSceneDeleteApi();
+      async function handleSubmit() {
+        try {
+          map && map.destroy();
+          const values = await validate();
+          console.log('values', values);
+          resetFields();
+          closeDrawer();
+        } catch (error) {}
+      }
+      async function handleClose() {
+        map && map.destroy();
+        resetFields();
+        closeDrawer();
       }
 
       return {
@@ -380,7 +425,6 @@
         handleMapReset,
         handleClose,
         t,
-        handleDeleteLiveScene,
       };
     },
   });