浏览代码

提交代码

tangning 2 年之前
父节点
当前提交
27da1dcb1d

+ 34 - 1
src/api/operate/index.ts

@@ -56,6 +56,10 @@ enum Api {
   caseDel='/service/manage/case/del',
   caseRelease='/service/manage/case/isShow',
   caseWithdraw='/service/manage/case/release',
+  //房间管理
+  roomList='/service/manage/takeLook/roomList',
+  updateRoomShow='/service/manage/takeLook/updateRoomShow',
+  deleteRoom='/service/manage/takeLook/deleteRoom',
 }
 
 /**
@@ -462,4 +466,33 @@ export const intercomMessageHandle = (params: updateParams) =>
       // @ts-ignore
       ignoreCancelToken: true,
     },
-  });
+  });
+  
+// 房间管理/列表
+export const roomList = (params) =>
+defHttp.post<Result>({
+  url: Api.roomList,
+  params,
+  headers: {
+    // @ts-ignore
+    ignoreCancelToken: true,
+  },
+});
+export const updateRoomShow = (params) =>
+defHttp.post<Result>({
+  url: Api.updateRoomShow,
+  params,
+  headers: {
+    // @ts-ignore
+    ignoreCancelToken: true,
+  },
+});
+export const deleteRoom = (params) =>
+defHttp.post<Result>({
+  url: Api.deleteRoom,
+  params,
+  headers: {
+    // @ts-ignore
+    ignoreCancelToken: true,
+  },
+});

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

@@ -64,4 +64,5 @@ export default {
   customer: '客户管理',
   customerDevice: '客户设备',
   customerScene: '客户场景',
+  livestream:'带看房间管理',
 };

+ 9 - 0
src/router/routes/modules/productOperation.ts

@@ -79,6 +79,15 @@ export const productOperation: AppRouteRecordRaw = {
         icon: 'fa6-solid:panorama',
       },
     },
+    {
+      path: 'livestream',
+      name: 'livestream',
+      component: () => import('/@/views/productOperation/livestream.vue'),
+      meta: {
+        title: t('routes.dashboard.livestream'),
+        icon: 'fa6-solid:panorama',
+      },
+    },
   ],
 };
 export default productOperation;

+ 14 - 3
src/views/account/overview/AddDownModal.vue

@@ -5,7 +5,7 @@
     title="新增下载"
     @visible-change="handleVisibleChange"
     @cancel="resetFields"
-    @ok="handleSubmit"
+    @ok="handleConfirm"
   >
     <div class="pt-2px pr-3px">
       <BasicForm @register="registerForm">
@@ -17,7 +17,7 @@
   </BasicModal>
 </template>
 <script lang="ts">
-  import { defineComponent, nextTick, onMounted, reactive, computed } from 'vue';
+  import { defineComponent, nextTick, onMounted, reactive, computed, h } from 'vue';
   import { BasicModal, useModalInner } from '/@/components/Modal';
   import { BasicForm, FormSchema, useForm } from '/@/components/Form/index';
   import { useMessage } from '/@/hooks/web/useMessage';
@@ -45,7 +45,7 @@
         id:'',
         type:'down',//down-下载,equity-权益
       })
-      const { createMessage } = useMessage();
+      const { createMessage, createConfirm } = useMessage();
       const schemas: FormSchema[] = [
           {
             field: 'id',
@@ -88,6 +88,16 @@
         fileFlow.id = data.id
         setFieldsValue(data);
       }
+      async function handleConfirm() {
+        createConfirm({
+          iconType: 'warning',
+          title: () => h('span', '温馨提示'),
+          content: () => h('span', `确定要新增下载次数吗?`),
+          onOk: async () => {
+            handleSubmit()
+          },
+        });
+      }
       const handleSubmit = async () => {
         const submitUrl = AddDownNumApi
         try {
@@ -116,6 +126,7 @@
         handleSubmit,
         addListFunc,
         resetFields,
+        handleConfirm,
         t,
       };
     },

+ 14 - 3
src/views/account/overview/AddModal.vue

@@ -5,7 +5,7 @@
     title="新增权益"
     @visible-change="handleVisibleChange"
     @cancel="resetFields"
-    @ok="handleSubmit"
+    @ok="handleConfirm"
   >
     <div class="pt-2px pr-3px">
       <BasicForm @register="registerForm">
@@ -17,7 +17,7 @@
   </BasicModal>
 </template>
 <script lang="ts">
-  import { defineComponent, nextTick, onMounted, reactive, computed } from 'vue';
+  import { defineComponent, nextTick, onMounted, reactive, computed, h } from 'vue';
   import { BasicModal, useModalInner } from '/@/components/Modal';
   import { BasicForm, FormSchema, useForm } from '/@/components/Form/index';
   import { useMessage } from '/@/hooks/web/useMessage';
@@ -45,7 +45,7 @@
         id:'',
         type:'down',//down-下载,equity-权益
       })
-      const { createMessage } = useMessage();
+      const { createMessage, createConfirm } = useMessage();
       const schemas: FormSchema[] = [
           {
             field: 'id',
@@ -203,6 +203,16 @@
         fileFlow.id = data.id
         setFieldsValue(data);
       }
+      async function handleConfirm() {
+        createConfirm({
+          iconType: 'warning',
+          title: () => h('span', '温馨提示'),
+          content: () => h('span', `确定要新增权益吗?`),
+          onOk: async () => {
+            handleSubmit()
+          },
+        });
+      }
       const handleSubmit = async () => {
         const submitUrl = AddUserIncrementApi
         try {
@@ -237,6 +247,7 @@
         handleSubmit,
         addListFunc,
         resetFields,
+        handleConfirm,
         t,
       };
     },

+ 10 - 6
src/views/device/detailsMoadl.vue

@@ -6,7 +6,7 @@
     @visible-change="handleVisibleChange"
     @cancel="resetFields"
     @ok="handleSubmit"
-    :height="800"
+    :min-height="370"
   >
     <div class="pt-2px pr-3px">
       <BasicForm @register="registerForm" :model="model">
@@ -94,16 +94,17 @@ export default defineComponent({
             },
           ],
           onChange:(value)=>{
-            updateSchema([{field: 'agentId',ifShow:value=='4',},
-                    {field: 'companyName',ifShow:value!='4',}])
+            // updateSchema([{field: 'agentId',ifShow:value=='4',},
+            //         {field: 'companyName',ifShow:value!='4',}])
             }
         },
       },{
             field: 'agentId',
             component: 'ApiSelect',
             label: '经销商名称',
-            required: true,
             componentProps: {
+            filterOption: onFilterOption,
+            showSearch:true,
             api: async function () {
               const {list} = await agentNewList({pageSize:1000,pageNum:1});
               return list
@@ -194,8 +195,8 @@ export default defineComponent({
       const { outType } = data;
       let obj = t('routes.product.outType')
       resetFields();
-      updateSchema([{field: 'agentId',ifShow:data.outType=='4',},
-                    {field: 'companyName',ifShow:data.outType!='4',}])
+      // updateSchema([{field: 'agentId',ifShow:data.outType=='4',},
+      //               {field: 'companyName',ifShow:data.outType!='4',}])
       setFieldsValue({
         type: obj[outType],
 
@@ -223,6 +224,9 @@ export default defineComponent({
       }
     };
     function onFilterOption(inputText: string, option: Option) {
+      if(option.label){
+        return option.label.toUpperCase().indexOf(inputText.toUpperCase()) >= 0;
+      }
       return option.value.toUpperCase().indexOf(inputText.toUpperCase()) >= 0;
     }
 

+ 166 - 3
src/views/productOperation/cameraScene.vue

@@ -8,7 +8,66 @@
         <a-tab-pane :key="3" tab="四维双目Lite" :disabled="loading"/> </a-tabs
     ></template>
     <div class="desc-wrap-BasicTable">
-      <BasicTable @register="registerTable">
+      
+      <BasicTable v-show="tableType == 2" @register="regisSsterTable">
+        <template #toolbar>
+          <!-- <a-button type="primary" @click="exportExcel"> 导出1</a-button> -->
+        </template>
+
+        <template #href="{ record }">
+          <a v-if="record.sceneName" target="_blank" :href="record.thumb">{{record.sceneName}}</a>
+          <span v-else>-</span>
+        </template>
+        <template #action="{ record }">
+          <TableAction
+            stopButtonPropagation
+            :actions="[
+              {
+                label: '迁移',
+                disabled:!(record.status == 1 || record.status == -2),
+                ifShow:getTypeCheckPerm('scenes-move') && tableType != 3,
+                onClick: handleMove.bind(null, record),
+              },
+              {
+                label: '下载',
+                ifShow:getTypeCheckPerm('scenes-download') && tableType != 3,
+                disabled:!(record.status == 1 || (record.status == -2 && record.payStatus == 1)),
+                //icon: 'carbon:download',
+                onClick: handleDownload.bind(null, record),
+              },
+              {
+                label: '重算',
+                disabled: record.status == 0 || (record.status == -2 && record.payStatus != 1),
+                ifShow:getTypeCheckPerm('scenes-recalculate') && tableType != 3,
+                popConfirm: {
+                  title: '是否重算?',
+                  confirm: handleReset.bind(null, record),
+                },
+              },
+              {
+                label: '复制',
+                disabled:!(record.status == 1 || (record.status == -2 && record.payStatus == 1)),
+                ifShow:getTypeCheckPerm('scenes-copy') && tableType != 3,
+                onClick: handleCopy.bind(null, record),
+              },
+              {
+                label: '删除',
+                //icon: 'ic:outline-delete-outline',
+                color: 'error',
+                ifShow:getTypeCheckPerm('scenes-delete'),
+                disabled:record.status == 0,
+                //onClick: handleDelete.bind(null, record),
+                popConfirm: {
+                  title: '是否删除?',
+                  confirm: handleDelete.bind(null, record),
+                  placement: 'topRight',
+                },
+              },
+            ]"
+          />
+        </template>
+      </BasicTable>
+      <BasicTable v-show="tableType != 2" @register="registerTable">
         <template #toolbar>
           <!-- <a-button type="primary" @click="exportExcel"> 导出1</a-button> -->
         </template>
@@ -295,15 +354,86 @@
           },
         ],
       };
+      
+      const searchFormSs: Partial<FormProps> = {
+        labelWidth: 100,
+        autoSubmitOnEnter:true,
+        autoAdvancedLine:1,
+        actionColOptions: {
+          span: 24,
+        },
+        schemas: [
+          {
+            field: 'sceneName',
+            label: '场景标题',
+            component: 'Input',
+            componentProps: {
+              maxLength: 100,
+            },
+            colProps: {
+              xl: 7,
+              xxl: 7,
+            },
+          },{
+            field: 'num',
+            label: '场景码',
+            component: 'Input',
+            componentProps: {
+              maxLength: 100,
+            },
+            colProps: {
+              xl: 7,
+              xxl: 7,
+            },
+          },
+          {
+            field: 'snCode',
+            label: 'SN码',
+            component: 'Input',
+            componentProps: {
+              maxLength: 100,
+            },
+            colProps: {
+              xl: 7,
+              xxl: 7,
+            },
+          },{
+            field: 'timeList',
+            label: '拍摄时间段',
+            component: 'RangePicker',
+            componentProps: {
+              maxLength: 100,
+              format: 'YYYY-MM-DD',
+              valueFormat: 'YYYY-MM-DD',
+              showTime: true,
+            },
+            colProps: {
+              xl: 8,
+              xxl: 8,
+            },
+          },
+          {
+            field: 'userName',
+            label: '绑定账号',
+            component: 'Input',
+            componentProps: {
+              maxLength: 100,
+            },
+            colProps: {
+              xl: 7,
+              xxl: 7,
+            },
+          },
+        ],
+      };
       function cancelDownload() {
         downloadOption.value = {};
       }
       const [registerDownModal, { openModal: openDownModal }] = useModal();
       const [registerMoveModal, { openModal: openMoveModal }] = useModal();
-      const [registerTable, { reload }] = useTable({
+      const [registerTable, { reload:listReload }] = useTable({
         api: operateSceneList,
         title: `场景列表`,
-        // titleHelpMessage: ['已启用expandRowByClick', '已启用stopButtonPropagation'],
         columns: columns,
         searchInfo: { type: tableType },
         useSearchForm: true,
@@ -326,6 +456,31 @@
         },
         canResize: true,
       });
+      const [regisSsterTable, { reload:SsReload }] = useTable({
+        api: operateSceneList,
+        title: `场景列表`,
+        columns: columns,
+        searchInfo: { type: tableType },
+        useSearchForm: true,
+        formConfig: searchFormSs,
+        showTableSetting: true,
+        beforeFetch:(T)=>{
+          loading.value = true
+          return T
+        },
+        afterFetch: (T) => {
+          loading.value = false
+          return T;
+        },
+        rowKey: 'num',
+        fetchSetting: {
+          pageField: 'pageNum',
+          sizeField: 'pageSize',
+          listField: 'list',
+          totalField: 'total',
+        },
+        canResize: true,
+      });
       function changeTable(val: string) {
         tableType.value = val;
         reload();
@@ -345,6 +500,13 @@
           },
         });
       }
+      function reload(){
+        if(tableType.value == 3){
+          listReload()
+        }else{
+          SsReload()
+        }
+      }
       async function handleDelete(record: Recordable) {
         console.log('handleDelete', record);
         // createConfirm({
@@ -458,6 +620,7 @@
         downloadOption,
         cancelDownload,
         getTypeCheckPerm,
+        regisSsterTable,
       };
     },
   });

+ 279 - 0
src/views/productOperation/livestream.vue

@@ -0,0 +1,279 @@
+<template>
+  <BasicTable @register="registerTable">
+    <template #toolbar>
+      <!-- <a-button type="primary" @click="exportExcel"> 导出1</a-button> -->
+    </template>
+    <template #href="{ record }">
+          <a v-if="record.roomTitle" target="_blank" :href="record.share">{{record.roomTitle}}</a>
+          <span v-else>-</span>
+    </template>
+    <template #action="{ record }">
+      <TableAction
+        stopButtonPropagation
+        :actions="[
+          {
+            label: '删除',
+            color: 'error',
+            ifShow:getCheckPerm('projects-delete'),
+            onClick: handleDelete.bind(null, record),
+          },
+        ]"
+      />
+    </template>
+  </BasicTable>
+</template>
+<script lang="ts">
+  import { defineComponent, h, reactive, toRefs } from 'vue';
+  import {
+    BasicTable,
+    useTable,
+    TableAction,
+    BasicColumn,
+    TableImg,
+    FormProps,
+  } from '/@/components/Table';
+  import { PageWrapper } from '/@/components/Page';
+  import { Time } from '/@/components/Time';
+  import { Descriptions } from 'ant-design-vue';
+  import { useI18n } from '/@/hooks/web/useI18n';
+  import { useMessage } from '/@/hooks/web/useMessage';
+  import { Switch } from 'ant-design-vue';
+  import { roomList, deleteRoom, updateRoomShow } from '/@/api/operate';
+  import { message } from 'ant-design-vue';
+  import { usePermissionStore } from '/@/store/modules/permission';
+  export default defineComponent({
+    components: {
+      BasicTable,
+      TableAction,
+      PageWrapper,
+      TableImg,
+      [Descriptions.name]: Descriptions,
+      [Descriptions.Item.name]: Descriptions.Item,
+    },
+    setup() {
+      const { t } = useI18n();
+      const { createMessage, createConfirm } = useMessage();
+      const permissionStore = usePermissionStore();
+      const { getCheckPerm } = permissionStore;
+      const columns: BasicColumn[] = [
+        {
+          title: '带看房间标题',
+          dataIndex: 'roomTitle',
+          slots: { customRender: 'href' },
+          width: 150,
+          // customRender: ({ record }) => {
+          //   return record.name ? h('span', record.name) : '-';
+          // },
+        },
+        {
+          title: '房间编号',
+          dataIndex: 'roomHostName',
+          ellipsis: true,
+          width: 180,
+        },
+        {
+          title: '用户账号',
+          dataIndex: 'roomUserName',
+          width: 100,
+        },
+        {
+          title: '带看状态',
+          dataIndex: 'roomStatus',
+          width: 100,
+          customRender: ({ record }) => {
+            let status = {
+              0:'进行中',
+              1:'未开启',
+              2:'已关闭',
+            }
+            return h('span', status[record.roomStatus] || '-')
+          },
+        },
+        {
+          title: '创建时间',
+          dataIndex: 'createTime',
+          width: 180,
+          customRender: ({ record }) => {
+            return record.createTime
+              ? h(Time, {
+                  value: record.createTime,
+                  mode: 'datetime',
+                })
+              : '-';
+          },
+        },
+        {
+          title: '最新编辑时间',
+          dataIndex: 'updateTime',
+          width: 180,
+          customRender: ({ record }) => {
+            return record.updateTime
+              ? h(Time, {
+                  value: record.updateTime,
+                  mode: 'datetime',
+                })
+              : '-';
+          },
+        },
+        {
+          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.roomId || '';
+              const newStatus = checked ? 1 : 0;
+              Reflect.set(record, 'isShow', newStatus);
+              await updateRoomShow({ roomId: id, isShow: newStatus });
+              createMessage.success(t('common.optSuccess'));
+              // reload()
+            },
+          });
+          },
+        },
+        {
+          title: '浏览量',
+          dataIndex: 'roomViewCount',
+          width: 80,
+        },
+        {
+          title: '操作',
+          dataIndex: 'action',
+          slots: { customRender: 'action' },
+          ifShow: true,
+          fixed: 'right',
+          flag: 'ACTION',
+          width: 50,
+        },
+      ];
+      const searchForm: Partial<FormProps> = {
+        labelWidth: 100,
+        autoSubmitOnEnter:true,
+        schemas: [
+          {
+            field: 'roomTitle',
+            label: '房间标题',
+            component: 'Input',
+            componentProps: {
+              maxLength: 100,
+            },
+            colProps: {
+              xl: 7,
+              xxl: 7,
+            },
+          },
+          {
+            field: 'roomUserName',
+            label: '用户账号',
+            component: 'Input',
+            componentProps: {
+              maxLength: 100,
+            },
+            colProps: {
+              xl: 6,
+              xxl: 6,
+            },
+          },
+          {
+            field: 'IsShow',
+            label: '是否显示',
+            component: 'Select',
+            defaultValue:' ',
+            componentProps: {
+              options: [{
+                label: '全部',
+                  value: '',
+                  key: '',
+              },{
+                label: '是',
+                  value: 1,
+                  key: '1',
+              },{
+                label: '否',
+                  value: 0,
+                  key: '0',
+              }]
+            },
+            colProps: {
+              xl: 6,
+              xxl: 6,
+            },
+          },
+        ],
+      };
+      const [registerTable, { reload }] = useTable({
+        api: roomList,
+        title: '房间列表',
+        // titleHelpMessage: ['已启用expandRowByClick', '已启用stopButtonPropagation'],
+        columns: columns,
+        searchInfo: { type: 1 },
+        useSearchForm: true,
+        formConfig: searchForm,
+        showTableSetting: true,
+        rowKey: 'num',
+        fetchSetting: {
+          pageField: 'pageNum',
+          sizeField: 'pageSize',
+          listField: 'list',
+          totalField: 'total',
+        },
+        canResize: true,
+      });
+      async function handleDelete(record: Recordable) {
+        createConfirm({
+          title: '删除',
+          content: '确定要删除吗?',
+          onOk: async () => {
+            const res = await deleteRoom({ roomId: record.roomId })
+            console.log('resres',res)
+              message.success({
+                content: '删除成功',
+              });
+              reload();
+          }
+        })
+      }
+      async function handleMove(record: Recordable) {
+        sceneMove({ snCode: record.snCode, num: record.num })
+          .then(() => {
+            message.success({
+              content: '迁移成功',
+            });
+          })
+      }
+      function handleDownload(record: Recordable) {
+        console.log('handleDownload', record);
+      }
+      function handleReset(record: Recordable) {
+        console.log('handleReset', record);
+      }
+      // function exportExcel() {
+      //   createConfirm({
+      //     iconType: 'warning',
+      //     title: () => h('span', '温馨提示'),
+      //     content: () => h('span', '确定当前标签下的订单记录?'),
+      //     onOk: async () => {
+      //       // await DownExport();
+      //     },
+      //   });
+      // }
+      return {
+        registerTable,
+        handleDelete,
+        handleMove,
+        handleDownload,
+        handleReset,
+        getCheckPerm,
+      };
+    },
+  });
+</script>