Ver código fonte

Merge branch 'feature/mockApi' of http://face3d.4dage.com:7005/zhangyupeng/zfb_mp into feature/mockApi

tangning 3 anos atrás
pai
commit
db7bc15586

+ 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,
+    },
+  });
+};

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

@@ -18,7 +18,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',
   getBrandInfo = '/basic-api/brand/info',
 }
@@ -89,6 +92,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>({
@@ -111,3 +126,34 @@ export const getLiveInfo = (params: InfoParams) => {
     },
   });
 };
+export const brandUpdateApi = (params: SceneLiveItem) => {
+  defHttp.post<GetAllSceneModel>({
+    url: Api.brandUpdate,
+    params,
+    headers: {
+      // @ts-ignore
+      ignoreCancelToken: true,
+    },
+  });
+};
+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>({
+    url: Api.brandDelete,
+    params,
+    headers: {
+      // @ts-ignore
+      ignoreCancelToken: true,
+    },
+  });
+};

+ 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,
       };
     },
   });

+ 12 - 35
src/views/scenes/live.vue

@@ -1,34 +1,3 @@
-<!-- address: "浙江省,杭州市,萧山区 山阴路688号恒隆广场B座1217"
-adminId: null
-appListPicUrl: "https://4dkk.4dage.com/shop/huafa/20211206/150212290bc34b.jpg?x-oss-process=image/resize,m_fixed,w_400,h_400"
-bindShowerId: null
-bindShowerName: null
-bindShowerNameList: null
-city: null
-contractPhone: "15975119071"
-createTime: null
-createUserDeptId: 178
-createUserId: 266
-deleted: 0
-id: 1046768
-introduceVideo: null
-introduceVideoCover: null
-latitude: 30.178317
-liveRoomUrl: "https://zfb.4dkankan.com/shop.html?m=zfb-Vs6EY33Ql"
-livestreamStatus: 0
-longitude: 120.262421
-name: "eliaukd"
-picList: ""
-sceneNum: "zfb-Vs6EY33Ql"
-sceneUrl: "https://zfb.4dkankan.com/smobile.html?m=zfb-Vs6EY33Ql"
-shareWxQrCode: "https://houseoss.4dkankan.com/domain/shop/image/zfb-Vs6EY33Ql1638771871311_QRCode.png"
-simpleDesc: "eliauk"
-sortOrder: 101
-token: null
-type: 0
-updateTime: null
-updateUserDeptId: 178
-updateUserId: 427 -->
 <template>
   <div class="p-4">
     <BasicTable @register="registerTable" :rowSelection="{ type: 'checkbox' }">
@@ -69,9 +38,7 @@ updateUserId: 427 -->
               label: '删除',
               popConfirm: {
                 title: '是否确认删除',
-                confirm: () => {
-                  createMessage.info(`暂未接入`);
-                },
+                confirm: handleDeleteLiveScene.bind(null, record),
               },
             },
           ]"
@@ -98,8 +65,9 @@ updateUserId: 427 -->
   // import { uploadApi } from '/@/api/sys/upload';
   import { Tag } from 'ant-design-vue';
   import { h } from 'vue';
-  import { ListApi, brandTypeListApi } from '/@/api/scene/live';
+  import { ListApi, brandTypeListApi, LiveSceneDeleteApi } from '/@/api/scene/live';
   import { useI18n } from '/@/hooks/web/useI18n';
+
   import { useModal } from '/@/components/Modal';
   import { useDrawer } from '/@/components/Drawer';
   import bindModal from './bindModal.vue';
@@ -288,6 +256,14 @@ updateUserId: 427 -->
         // console.log('record', record);
         openLiveDrawer(true, record);
       }
+      async function handleDeleteLiveScene(record: Recordable) {
+        try {
+          const id = [record.id];
+          await LiveSceneDeleteApi(id);
+          createMessage.success(t('common.optSuccess'));
+          reload();
+        } catch (error) {}
+      }
       return {
         registerTable,
         createMessage,
@@ -299,6 +275,7 @@ updateUserId: 427 -->
         reload,
         registerLiveDrawer,
         handleLiveOpen,
+        handleDeleteLiveScene,
       };
     },
   });

+ 83 - 29
src/views/scenes/liveDrawer.vue

@@ -45,7 +45,13 @@
   // import { useMessage } from '/@/hooks/web/useMessage';
   import { useI18n } from '/@/hooks/web/useI18n';
 
-  import { brandTypeListApi, uploadLiveApi, getAllSceneApi } from '/@/api/scene/live';
+  import {
+    brandTypeListApi,
+    uploadLiveApi,
+    getAllSceneApi,
+    uploadLiveVideoApi,
+    // LiveSceneDeleteApi,
+  } from '/@/api/scene/live';
   import { data as CascaderData } from '/@/utils/cascaderData';
 
   import { useScript } from '/@/hooks/web/useScript';
@@ -74,6 +80,10 @@
         adcode: string;
         addressComponent: AddressComponentType;
         formattedAddress: string;
+        location: {
+          lng: string;
+          lat: string;
+        };
       }
       let map;
       // Lat(120.262337, 30.178285),
@@ -101,6 +111,7 @@
           //   xl: 5,
           //   xxl: 5,
           // },
+          required: true,
           componentProps: {
             api: brandTypeListApi,
             resultField: 'list',
@@ -193,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;
@@ -220,12 +271,6 @@
         }
 
         initMap();
-        // updateSchema({
-        //   field: 'parentId',
-        //   componentProps: {
-        //     treeData,
-        //   },
-        // });
       });
 
       async function initMap() {
@@ -280,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);
         });
       }
 
@@ -295,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);
@@ -356,9 +395,24 @@
         }
       }
       async function handleMapReset() {
+        defaultAddress.location = ['33', '3301', '330109'];
         detailAddr.value = '山阴路688号恒隆广场B座1217';
         handleMapSearch();
       }
+      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 {
         detailAddr,