lvkun996 2 年 前
コミット
c69c04d278

+ 9 - 3
src/components/TableProV2/index.tsx

@@ -171,14 +171,20 @@ const TablePro = defineComponent({
     pagination: {
       type: Object as PropType<{pageSize: number}>,
       default: () => ({ pageSize: 10 })
+    },
+    hiddenMeunKeys: {
+      type: Array as PropType<string[]>,
+      default: () => []
     }
   },
   emits: ['add'],
   setup (props, ctx) {
-    const { columns, service, pagination, serviceParams } = toRefs(props)
+    const { columns, service, pagination, serviceParams, hiddenMeunKeys } = toRefs(props)
 
     const loading = ref<boolean>(false)
 
+    // const hiddenOpraMenu = computed(() => hiddenMeunKeys.value.length)
+
     const paginationRef = ref({
       current: 1,
       pageSize: pagination.value.pageSize ? pagination.value.pageSize : 10,
@@ -236,9 +242,9 @@ const TablePro = defineComponent({
               <Space>
               <Dropdown
                   trigger={['click', 'hover']}
-                  overlay={opraMeun}
+                  overlay={ hiddenMeunKeys.value.length !== 1 ? opraMeun : null}
                 >
-                  <Button onClick={() => reload()} >刷新<DownOutlined /></Button>
+                  <Button onClick={() => reload()} type={ hiddenMeunKeys.value.length !== 1 ? 'default' : 'primary'} >刷新 { hiddenMeunKeys.value.length !== 1 ? <DownOutlined /> : null }</Button>
                 </Dropdown>
               </Space>
             </Col>

+ 3 - 0
src/controller/cvs/spaceController.ts

@@ -28,6 +28,9 @@ export class SpaceController {
     ['PULLING', { key: 'PULLING', label: '拉流中', color: 'yellow' }]
   ])
 
+  // 录像格式
+  static recordFormat = ['FLV', 'TS', 'MP4', 'RAW']
+
   static async page (params: COMMON.API.QueryParams) {
     return await getSpace(params)
   }

+ 29 - 3
src/pages/cvs/video/device.vue

@@ -12,7 +12,7 @@
           <a-select-option
             :key="item.spaceId"
             :value="item.spaceId"
-            v-for="(item, index) in state.spaceList "
+            v-for="(item, index) in state.spaceList"
           >
             {{item.spaceName}}
           </a-select-option>
@@ -35,7 +35,7 @@
 
       <template v-if="column.key === 'action'" >
         <a-space>
-          <a @click="recordParty(record)" >录像回放</a>
+          <a @click="recordParty(record)">录像回放</a>
           <a @click="thumbParty(record)">截图查看</a>
           <a @click="arAnalysis(record)">AI分析</a>
         </a-space>
@@ -78,6 +78,7 @@
 </a-card>
 
 <modal-pro
+  width="1000px"
   :label="deviceState.deviceName"
   :open="state.activeVisible"
   @cancel="state.activeVisible = false"
@@ -86,8 +87,20 @@
   <a-card
     :tab-list="deviceTabs"
     :active-tab-key="activeTabKey"
+    @tabChange="key => onTabChange(key)"
   >
-
+    <table-pro
+      :service="deviceActionMap.get(activeTabKey)"
+      :serviceParams="deviceActionParams"
+      :hiddenMeunKeys="['add']"
+    >
+      <a-range-picker v-model:value="deviceActionParams.times" />
+      <a-select  v-model:value="deviceActionParams.recordFormat" >
+        <a-select-options v-for="item in SpaceController.recordFormat" :key="item" :value="item" >
+          {{item}}
+        </a-select-options>
+      </a-select>
+    </table-pro>
   </a-card>
 </modal-pro>
 </template>
@@ -147,6 +160,12 @@ const deviceTabs = [
   { key: 'ai', tab: 'AI分析' }
 ]
 
+const deviceActionMap = new Map([
+  ['record', { get: SpaceController.deviceRecordById }],
+  ['thumb', { get: SpaceController.deviceThumbById }],
+  ['ai', { get: SpaceController.deviceAiRetById }]
+])
+
 const state = reactive<{
   visible: boolean,
   activeVisible: boolean,
@@ -157,6 +176,11 @@ const state = reactive<{
   spaceList: []
 })
 
+const deviceActionParams = reactive({
+  times: [],
+  recordFormat: ''
+})
+
 const deviceState = reactive({
   spaceId: undefined,
   deviceName: '',
@@ -176,6 +200,8 @@ const { resetFields, validate, validateInfos } = useForm(deviceState, {
   stream: [{ required: true, message: '请填写stream名称' }]
 })
 
+const onTabChange = (key: 'record' | 'thumb' | 'ai') => activeTabKey.value = key
+
 const ok = () => {
   validate().then(async () => {
     deviceState.deviceStreamId = deviceState.app + '/' + deviceState.stream