lvkun 2 anni fa
parent
commit
58a8eb424c

+ 33 - 0
src/api/cvs/video.ts

@@ -0,0 +1,33 @@
+
+import request from '@/service/request'
+
+export const getSpace = (params: COMMON.API.QueryParams) => {
+  return request<CVS.space[]>({
+    url: '/api/space',
+    method: 'GET',
+    params
+  })
+}
+
+export const addSpace = (data: Partial<CVS.space>) => {
+  return request<string>({
+    url: '/api/space',
+    method: 'POST',
+    data
+  })
+}
+
+export const updateSpace = (data: CVS.space) => {
+  return request<string>({
+    url: '/api/space',
+    method: 'PUT',
+    data
+  })
+}
+
+export const delSpace = (id: string) => {
+  return request<string>({
+    url: `/api/space?id=${id}`,
+    method: 'DELETE'
+  })
+}

+ 24 - 159
src/components/TableProV2/index.tsx

@@ -3,7 +3,7 @@ import {
   Button, DropdownButton, PaginationProps
 } from 'ant-design-vue'
 import { DownOutlined } from '@ant-design/icons-vue'
-import { PropType, computed, defineComponent, reactive, ref } from 'vue'
+import { PropType, computed, defineComponent, reactive, ref, defineEmits, FunctionalComponent } from 'vue'
 
 /**
  * @description Table Pro 超级table 将各种业务与操作融合起来
@@ -13,153 +13,21 @@ interface GenericListProps<T> {
   dataSource: T;
 }
 
-// export default /* #__PURE__ */ defineComponent<T>({
-//   name: 'table-pro-v2',
-//   props: {
-//     columns: {
-//       type: Array as PropType<TableColumnProps[]>,
-//       default: () => [],
-//       required: true
-//     },
-//     pagination: {
-//       type: Object as PropType<PaginationProps> || false,
-//       required: true,
-//       default: () => {
-//         return {
-//           page: 1,
-//           pageSize: 10,
-//           total: 0
-//         }
-//       }
-//     },
-//     request: {
-//       type: Object as PropType<{get: Function, params: Object}>,
-//       default: () => {
-//         return {
-//           params: {},
-//           get: () => {}
-//         }
-//       }
-//     }
-//   },
-//   emits: ['reload', 'add'],
-//   setup (props, ctx) {
-//     const { request, columns } = props
-
-//     const columnsPro = ref<TableColumnProps & {hidden: boolean} []>(columns.map(column => ({ ...column, hidden: false })))
-
-//     const rowCustomized = computed(() => props.columns.map(item => ({ title: item.title, key: item.key })))
-
-//     const loading = ref<Boolean>(false)
-
-//     const dataSource = ref([])
-
-//     const pagination = reactive<PaginationProps>(Object.assign({}, {
-//       current: 1,
-//       pageSize: 10,
-//       total: 0,
-//       onChange: (page: number, pageSize: number) => onChangePage(page, pageSize)
-//     }, { ...props.pagination }))
-
-//     const opraMeun = (
-//       <Menu>
-//         <Menu.item key={0} onClick={ctx.emit('add')} > 新增 </Menu.item>
-//         <Menu.item key={2} onClick={() => exportExcel()}> 导出 </Menu.item>
-//         <Menu.item key={3} onClick={() => pure()}> 纯净 </Menu.item>
-//       </Menu>
-//     )
-
-//     const exportExcel = () => {}
-
-//     const pure = () => {}
-
-//     const onChangePage = (page: number, pageSize: number) => {
-//       pagination.current = page
-//       pagination.pageSize = pageSize
-//       dispatchRequest()
-//     }
-
-//     const dispatchRequest = async () => {
-//       loading.value = true
-//       const { data, sum } = await request.get({
-//         ...request.params,
-//         page: pagination.current,
-//         pageSize: pagination.pageSize
-//       })
-//       loading.value = false
-//       pagination.total = sum
-//       dataSource.value = data
-//     }
-
-//     const init = () => {
-
-//     }
-
-//     init()
-
-//     return () => (
-//       <>
-//         <Row gutter={[8, 8]}>
-//           <Col>
-//             <solt name="search" ></solt>
-//           </Col>
-//           <Col>
-//             <Space>
-//               <Tooltip title='列表定制' >
-//                  {/*  @click.prevent */}
-//                  {/*  <a class="ant-dropdown-link"> <menu-outlined /> </a> */}
-//                 <Dropdown
-//                   trigger={['click']}
-//                   overlay={
-//                   <Menu>
-//                     {
-//                       rowCustomized.value.map(item => (
-//                         <Menu.item key={item.key}>
-//                           {item.title}
-//                         </Menu.item>
-//                       ))
-//                     }
-//                   </Menu>}
-//                 >
-//                 </Dropdown>
-//               </Tooltip>
-//                  {/*  @click.prevent */}
-//                  {/*  <a class="ant-dropdown-link"> <menu-outlined /> </a> */}
-//                 <DropdownButton
-//                   trigger={['click']}
-//                   overlay={opraMeun}
-//                   icon={<DownOutlined />}
-//                   onClick={dispatchRequest}
-//                 >
-//                   <Button>操作</Button>
-//                 </DropdownButton>
-//             </Space>
-//           </Col>
-//         </Row>
-//         <Table
-//           columns={columns}
-//           loading={loading}
-//           pagination={pagination}
-//           dataSource={dataSource}
-//         >
-//           <slot name='action'></slot>
-//         </Table>
-//       </>
-//     )
-//   }
-// })
-
-// export default
-
-const com = defineComponent((props: {
+interface Props {
   columns: TableColumnProps[],
   pagination: PaginationProps | false
   request: {
     get: (record: any) => {data, sum},
     params: any
   }
-}) => {
-  const { columns, request } = props
+}
+
+const TablePro: FunctionalComponent<Props> = (props) => {
+  const { request } = props
+
+  console.log('defineComponent:', props)
+
+  const columns = [{ title: '', key: 'ky' }]
 
   const emits = defineEmits(['add'])
 
@@ -219,13 +87,14 @@ const com = defineComponent((props: {
     columnsPro.value[index].hidden = !columnsPro.value[index].hidden
   }
 
-  return () => (
+  return (
       <>
+
         <Row gutter={[8, 8]}>
-          <Col>
-            <solt name="search" ></solt>
+          <Col span={12} >
+            {/* <solt name="search" ></solt> */}
           </Col>
-          <Col>
+          <Col span={12} >
             <Space>
               <Tooltip title='列表定制' >
                  {/*  @click.prevent */}
@@ -235,11 +104,11 @@ const com = defineComponent((props: {
                   overlay={
                   <Menu>
                     {
-                      rowCustomized.value.map((item, index) => (
-                        <Menu.item key={item.key} onClick={() => swicthColumn(index)} >
-                          {item.title}
-                        </Menu.item>
-                      ))
+                      // rowCustomized.value.map((item, index) => (
+                      //   <Menu.item key={item.key} onClick={() => swicthColumn(index)} >
+                      //     {item.title}
+                      //   </Menu.item>
+                      // ))
                     }
                   </Menu>}
                 >
@@ -259,20 +128,16 @@ const com = defineComponent((props: {
           </Col>
         </Row>
         {/*       dataSource={dataSource} */}
-        <Table
+        {/* <Table
           columns={columnsFilter.value}
           loading={loading.value}
           pagination={typeof props.pagination === 'boolean' ? false : pagination}
-
         >
           <slot></slot>
           <slot name='action'></slot>
-        </Table>
+        </Table> */}
       </>
   )
-})
-
-export {
-  com
-  // 这里直接导出ref有没有可能优雅一些
 }
+
+export default TablePro

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

@@ -0,0 +1,26 @@
+import { addSpace, delSpace, getSpace, updateSpace } from '@/api/cvs/video'
+import { message } from 'ant-design-vue'
+
+export class SpaceController {
+  static async page (params: COMMON.API.QueryParams) {
+    const { code, data } = await getSpace(params)
+    if (code === 200) {
+      return data
+    }
+  }
+
+  static async add (data: Partial<CVS.space>) {
+    const { code, msg } = await addSpace(data)
+    code === 200 ? message.success('新增成功') : message.error(msg)
+  }
+
+  static async update (data: CVS.space) {
+    const { code, msg } = await updateSpace(data)
+    code === 200 ? message.success('编辑成功') : message.error(msg)
+  }
+
+  static async del (id: string) {
+    const { code, msg } = await delSpace(id)
+    code === 200 ? message.success('删除成功') : message.error(msg)
+  }
+}

+ 11 - 0
src/enum/common.ts

@@ -81,3 +81,14 @@ export enum DataSourceTConnectTypeEnum {
   'ORACLE_SERVICE_NAME' = 'ORACLE_SERVICE_NAME',
   'ORACLE_SID' = 'ORACLE_SID'
 }
+
+// cvs下空间类型
+
+export enum SpaceTypeEnum {
+  'RTMP' = 'RTMP',
+  'GB28181' = 'GB28181',
+  'ONVIF' = 'ONVIF',
+  'BVCP' = 'BVCP',
+  'RTSP' = 'RTSP',
+  'JT808' = 'JT808',
+}

+ 1 - 1
src/pages/Iot/dashboard/deviceAccess/index.vue

@@ -31,7 +31,7 @@
     <a-card
       style="margin-top: 20px"
     >
-      <table-pro
+      <TablePro
         :request="CommonController.getTransport"
         :columns="columns"
       />

+ 49 - 1
src/pages/cvs/video/space.vue

@@ -2,8 +2,9 @@
 <a-card title="空间管理" >
   <a-row justify="space-between" >
     <a-col><a-space><InputTsx placeholder="请输入空间名称进行搜索" /> <a-button type="primary">搜索</a-button> </a-space></a-col>
-    <a-col><a-button type="primary" >创建空间</a-button></a-col>
+    <a-col><a-button type="primary"  @click="openModal">创建空间</a-button></a-col>
   </a-row>
+
   <StepModal
     :step="step"
     :steps="steps"
@@ -25,6 +26,53 @@ const step = ref(0)
 
 const visible = ref<boolean>(false)
 
+const columns = [
+  {
+    title: '空间ID',
+    dataIndex: 'spaceId',
+    key: 'spaceId'
+  },
+  {
+    title: '空间名称',
+    dataIndex: 'spaceName',
+    key: 'spaceName'
+  },
+  {
+    title: '空间类型',
+    dataIndex: 'type',
+    key: 'type'
+  },
+  {
+    title: '接入节点',
+    dataIndex: 'edgeName',
+    key: 'edgeName'
+  },
+  {
+    title: '设备数量',
+    dataIndex: 'deviceCount',
+    key: 'deviceCount'
+  },
+  {
+    title: '状态',
+    dataIndex: 'status',
+    key: 'status'
+  },
+  {
+    title: '描述',
+    dataIndex: 'description',
+    key: 'description'
+  },
+  {
+    title: '操作',
+    dataIndex: 'action',
+    key: 'action'
+  }
+]
+
+const openModal = () => visible.value = true
+
+const closeModal = () => visible.value = false
+
 </script>
 <style lang='less' scoped >
 </style>

+ 13 - 0
src/type/cvs.d.ts

@@ -0,0 +1,13 @@
+declare namespace CVS {
+  interface space {
+    description: string
+    deviceCount: number
+    deviceMode: string
+    edgeId: number
+    edgeName: string
+    serialId: string
+    spaceId: number
+    status: 'RUNNING' | 'STOPPED' | 'OPERATING'
+    type: 'RTMP' | 'GB28181' | 'ONVIF' | 'BVCP' | 'RTSP' | 'JT808'
+  }
+}

+ 2 - 2
src/utils/UsePro.ts

@@ -1,6 +1,6 @@
 import ModalPro from '@/components/ModalPro/index.vue'
 import SiderPro from '@/components/SiderPro/index.vue'
-import TablePro from '@/components/TablePro/index.vue'
+import TablePro from '@/components/TableProV2/index'
 import FormPro from '@/components/FormPro/index.vue'
 import RowPro from '@/components/RowPro/index.vue'
 import ColPro from '@/components/ColPro/index.vue'
@@ -11,7 +11,7 @@ import { App } from 'vue'
 export default function (app: App) {
   app.component('modal-pro', ModalPro)
   app.component('sider-pro', SiderPro)
-  app.component('table-pro', TablePro)
+  app.component('TablePro', TablePro)
   app.component('form-pro', FormPro) // 别问问什么是oo, 问就是这样比较帅
   app.component('l-row', RowPro)
   app.component('l-col', ColPro)