Browse Source

视频模块

asd26269546 2 years ago
parent
commit
b9a3484559

+ 2 - 0
.gitignore

@@ -25,3 +25,5 @@ yarn-error.log*
 *.lock
 /package-lock.json
 /vue.config.js
+/src/lang/en.js
+/src/lang/zh.js

+ 85 - 0
src/api/management/video-setting.js

@@ -0,0 +1,85 @@
+import request from '@/router/axios'
+
+// 视频说明书-分页
+export function videoInfoPage(data = {}) {
+    return request({
+        url: '/api/service-video/videoInfo/page',
+        method: 'post',
+        data: data,
+    })
+}
+
+// 视频说明书-添加
+export function videoInfoAdd(data = {}) {
+    return request({
+        url: '/api/service-video/videoInfo/add',
+        method: 'post',
+        data: data,
+    })
+}
+
+// 视频说明书-修改
+export function videoInfoEdit(data = {}) {
+    return request({
+        url: '/api/service-video/videoInfo/edit',
+        method: 'post',
+        data: data,
+    })
+}
+
+// 视频说明书-删除
+export function videoInfoDelete(data = {}) {
+    return request({
+        url: '/api/service-video/videoInfo/delete',
+        method: 'post',
+        data: data,
+    })
+}
+
+// 视频说明书-详情
+export function videoInfoDetails(data = {}) {
+    return request({
+        url: '/api/service-video/videoInfo/details',
+        method: 'post',
+        data: data,
+    })
+}
+
+
+// 视频说明书-分类树列表
+export function videoClassifyTree(data = {}) {
+    return request({
+        url: '/api/service-video/videoClassify/tree',
+        method: 'post',
+        data: data,
+    })
+}
+
+// 视频说明书-分类树添加
+export function videoClassifyAdd(data = {}) {
+    return request({
+        url: '/api/service-video/videoClassify/add',
+        method: 'post',
+        data: data,
+    })
+}
+
+
+// 视频说明书-分类树编辑
+export function videoClassifyEdit(data = {}) {
+    return request({
+        url: '/api/service-video/videoClassify/edit',
+        method: 'post',
+        data: data,
+    })
+}
+
+
+// 视频说明书-分类树删除
+export function videoClassifyDetele(data = {}) {
+    return request({
+        url: '/api/service-video/videoClassify/delete',
+        method: 'post',
+        data: data,
+    })
+}

+ 0 - 169
src/lang/en.js

@@ -1,169 +0,0 @@
-export default {
-  title: 'Avue is a framework',
-  tip: 'tip',
-  logoutTip: 'Exit the system, do you want to continue?',
-  submitText: 'submit',
-  cancelText: 'cancel',
-  search: 'Please input search content',
-  menuTip: 'none menu list',
-  operation: '操作',
-  toView: '查看',
-  delete: '删除',
-  loadingText: '删除',
-  addSuccess: '添加成功',
-  deleteSuccess: '删除成功',
-  askDeleteData: '请问是否删除该条数据',
-  wel: {
-    info: 'Good morning, Smallwei, Avuex is a framework',
-    dept: 'a certain technology department',
-    team: 'Team ranking',
-    project: 'Project access',
-    count: 'Item number',
-    data: {
-      subtitle: 'real time',
-      column1: 'Classified statistics',
-      column2: 'Annex statistics',
-      column3: 'Article statistics',
-      key1: 'C',
-      key2: 'A',
-      key3: 'A',
-      text1: 'Total Record Number of Classifications',
-      text2: 'Number of attachments Uploaded',
-      text3: 'Comment frequency',
-    },
-    data2: {
-      column1: 'Registration today',
-      column2: 'Login today',
-      column3: 'Subscription today',
-      column4: 'Todays review',
-    },
-    data3: {
-      column1: 'Conversion rate(Day 28%)',
-      column2: 'Attendance rate(Day 11%)',
-      column3: 'Attendance rate(Day 33%)',
-    },
-    data4: {
-      column1: 'Error log',
-      column2: 'Data display',
-      column3: 'Privilege management',
-      column4: 'user management',
-    },
-    table: {
-      rw: 'Work Tasks',
-      nr: 'Work content',
-      sj: 'Working hours',
-    },
-  },
-  route: {
-    info: 'info',
-    website: 'website',
-    avuexwebsite: 'avuex',
-    dashboard: 'dashboard',
-    more: 'more',
-    tags: 'tags',
-    store: 'store',
-    permission: 'permission',
-    api: 'api',
-    logs: 'logs',
-    table: 'table',
-    form: 'form',
-    top: 'backtop',
-    data: 'data',
-    error: 'error',
-    test: 'test',
-  },
-  login: {
-    title: 'Login ',
-    info: 'Enterprise Development Platform',
-    tenantId: 'Please input tenantId',
-    username: 'Please input username',
-    password: 'Please input a password',
-    wechat: 'Wechat',
-    qq: 'QQ',
-    github: 'github',
-    gitee: 'gitee',
-    phone: 'Please input a phone',
-    code: 'Please input a code',
-    submit: 'Login',
-    userLogin: 'userLogin',
-    phoneLogin: 'phoneLogin',
-    thirdLogin: 'thirdLogin',
-    msgText: 'send code',
-    msgSuccess: 'reissued code',
-  },
-  navbar: {
-    info: 'info',
-    logOut: 'logout',
-    userinfo: 'userinfo',
-    dashboard: 'dashboard',
-    lock: 'lock',
-    bug: 'none bug',
-    bugs: 'bug',
-    screenfullF: 'exit screenfull',
-    screenfull: 'screenfull',
-    language: 'language',
-    notice: 'notice',
-    theme: 'theme',
-    color: 'color',
-  },
-  tagsView: {
-    search: 'Search',
-    menu: 'menu',
-    clearCache: 'Clear Cache',
-    closeOthers: 'Close Others',
-    closeAll: 'Close All',
-  },
-  Internet_of_things: {
-    Industry: {
-      appName: '行业名称',
-      AppId: 'AppId',
-      createUserName: '创建人',
-      createTime: '创建时间',
-      newIndustry: '新建行业',
-      keyword: '关键字',
-      appName: '行业名称',
-      appNameRules: '请输入行业名称',
-      industryInformation: '行业信息',
-      overviewResources: '资源概览',
-      productNum: '产品数',
-      equipmentNum: '设备数',
-    },
-    product: {
-      appName: '所属行业',
-      name: '产品名称',
-      productId: '产品ID',
-      deviceType: '设备类型',
-      protocolType: '协议类型',
-      dataFormat: '数据格式',
-      manufacturerName: '厂商名称',
-      addProduct: '创建产品',
-      keyword: '关键字',
-      industry: '行业',
-      tdaApplicationIdRules: '请选择所属行业',
-      nameRules: '请输入产品名称',
-      protocolTypeRules: '请选择协议类型',
-      dataFormatRules: '请选择数据格式',
-      manufacturerNameRules: '请选择厂商名称',
-      deviceTypeRules: '请选择设备类型',
-    },
-    equipment: {
-      applicationName: '所属行业',
-      productName: '所属产品',
-      deviceName: '设备名称',
-      nodeId: '设备标识',
-      deviceId: '设备ID',
-      deviceStatus: '设备状态',
-      secret: '密钥',
-      applicationName: '所属行业',
-      keyword: '关键字',
-      tdaApplicationId: '行业',
-      tdaProductId: '产品',
-      addEquipment: '添加设备',
-      tdaApplicationIdRules: '请选择所属行业',
-      tdaProductIdRules: '请选择所属产品',
-      deviceNameRules: '请输入设备名称',
-      nodeIdRules: '请输入设备标识',
-      secretRules: '请输入密钥',
-    },
-  },
-}

+ 0 - 168
src/lang/zh.js

@@ -1,168 +0,0 @@
-export default {
-  tip: '提示',
-  title: 'Saber企业级开发平台',
-  logoutTip: '退出系统, 是否继续?',
-  submitText: '确定',
-  cancelText: '取消',
-  search: '请输入搜索内容',
-  menuTip: '没有发现菜单',
-  operation: '操作',
-  toView: '查看',
-  delete: '删除',
-  loadingText: '删除',
-  addSuccess: '添加成功',
-  deleteSuccess: '删除成功',
-  askDeleteData: '请问是否删除该条数据',
-  wel: {
-    info: '早安,Smallwei,Avuex一款超乎你想象的框架!',
-    dept: '我是avue团队下的一个部门-哈皮部门-哈皮职位',
-    team: '团队内排名',
-    project: '项目访问',
-    count: '项目数',
-    data: {
-      subtitle: '实时',
-      column1: '分类统计',
-      column2: '附件统计',
-      column3: '文章统计',
-      key1: '分',
-      key2: '附',
-      key3: '评',
-      text1: '当前分类总记录数',
-      text2: '当前上传的附件数',
-      text3: '评论次数',
-    },
-    data2: {
-      column1: '今日注册',
-      column2: '今日登录',
-      column3: '今日订阅',
-      column4: '今日评论',
-    },
-    data3: {
-      column1: '转化率(日同比 28%)',
-      column2: '签到率(日同比 11%)',
-      column3: '签到率(日同比 11%)',
-    },
-    data4: {
-      column1: '错误日志',
-      column2: '数据展示',
-      column3: '权限管理',
-      column4: '用户管理',
-    },
-    table: {
-      rw: '工作任务',
-      nr: '工作内容',
-      sj: '工作时间',
-    },
-  },
-  route: {
-    info: '个人信息',
-    website: 'bladex官网',
-    avuexwebsite: 'avuex官网',
-    dashboard: '首页',
-    more: '更多',
-    tags: '标签',
-    store: '本地存储',
-    api: '全局函数',
-    logs: '日志监控',
-    table: '表格',
-    form: '表单',
-    top: '返回顶部',
-    data: '数据展示',
-    permission: '权限',
-    error: '异常页面',
-    test: '测试页面',
-  },
-  login: {
-    title: '登录 ',
-    info: 'BladeX 企业级开发平台',
-    tenantId: '请输入租户ID',
-    username: '请输入账号',
-    password: '请输入密码',
-    wechat: '微信',
-    qq: 'QQ',
-    github: 'github',
-    gitee: '码云',
-    phone: '请输入手机号',
-    code: '请输入验证码',
-    submit: '登录',
-    userLogin: '账号密码登录',
-    phoneLogin: '手机号登录',
-    thirdLogin: '第三方系统登录',
-    msgText: '发送验证码',
-    msgSuccess: '秒后重发',
-  },
-  navbar: {
-    logOut: '退出登录',
-    userinfo: '个人信息',
-    dashboard: '首页',
-    lock: '锁屏',
-    bug: '没有错误日志',
-    bugs: '条错误日志',
-    screenfullF: '退出全屏',
-    screenfull: '全屏',
-    language: '中英文',
-    notice: '消息通知',
-    theme: '主题',
-    color: '换色',
-  },
-  tagsView: {
-    search: '搜索',
-    menu: '更多',
-    clearCache: '清除缓存',
-    closeOthers: '关闭其它',
-    closeAll: '关闭所有',
-  },
-  Internet_of_things: {
-    Industry: {
-      appName: '行业名称',
-      AppId: 'AppId',
-      createUserName: '创建人',
-      createTime: '创建时间',
-      newIndustry: '新建行业',
-      keyword: '关键字',
-      appName: '行业名称',
-      appNameRules: '请输入行业名称',
-      industryInformation: '行业信息',
-      overviewResources: '资源概览',
-      productNum: '产品数',
-      equipmentNum: '设备数',
-    },
-    product: {
-      appName: '所属行业',
-      name: '产品名称',
-      productId: '产品ID',
-      deviceType: '设备类型',
-      protocolType: '协议类型',
-      dataFormat: '数据格式',
-      manufacturerName: '厂商名称',
-      addProduct: '创建产品',
-      keyword: '关键字',
-      industry: '行业',
-      tdaApplicationIdRules: '请选择所属行业',
-      nameRules: '请输入产品名称',
-      protocolTypeRules: '请选择协议类型',
-      dataFormatRules: '请选择数据格式',
-      manufacturerNameRules: '请选择厂商名称',
-      deviceTypeRules: '请选择设备类型',
-    },
-    equipment: {
-      applicationName: '所属行业',
-      productName: '所属产品',
-      deviceName: '设备名称',
-      nodeId: '设备标识',
-      deviceId: '设备ID',
-      deviceStatus: '设备状态',
-      secret: '密钥',
-      applicationName: '所属行业',
-      keyword: '关键字',
-      tdaApplicationId: '行业',
-      tdaProductId: '产品',
-      addEquipment: '添加设备',
-      tdaApplicationIdRules: '请选择所属行业',
-      tdaProductIdRules: '请选择所属产品',
-      deviceNameRules: '请输入设备名称',
-      nodeIdRules: '请输入设备标识',
-      secretRules: '请输入密钥',
-    },
-  },
-}

+ 0 - 7
src/main.js

@@ -163,10 +163,3 @@ export async function unmount() {
 	// router = null;
 }
 Vue.config.productionTip = false
-
-// new Vue({
-//   router,
-//   store,
-//   i18n,
-//   render: h => h(App)
-// }).$mount('#fjhxCloudVue');

+ 1 - 1
src/page/index/index.vue

@@ -4,7 +4,7 @@
       顶部导航栏
       <top ref="top"/>
     </div> -->
-    <div style="height: 64px"></div>
+    <!-- <div style="height: 64px"></div> -->
     <div class="avue-layout">
       <div class="avue-left">
         <!-- 左侧导航栏 -->

+ 6 - 0
src/router/page/index.js

@@ -62,6 +62,12 @@ export default [
     redirect: '/myiframe',
     children: [
       {
+        path: '/video-setting',
+        name: '设备管理',
+        component: () => import(/* webpackChunkName: "page" */ '@/views/management/video-setting/index'),
+        props: true,
+      },
+      {
         path: ':routerPath',
         name: 'iframe',
         component: () => import(/* webpackChunkName: "page" */ '@/components/iframe/main'),

+ 258 - 0
src/views/management/video-setting/index.vue

@@ -0,0 +1,258 @@
+  <template>
+    <div class="video-setting">
+      <el-row>
+        <el-col :span="8">
+          <tree></tree>
+        </el-col>
+        <el-col :span="16">
+          <el-card class="box-card">
+            <test v-model="queryParams" :form-config="queryForm"></test>
+        
+            <el-table :data="tableList" v-loading="loading">
+              <el-table-column :label="$t('management.video_setting.videoUrl')" align="center" prop="videoUrl" />
+              <el-table-column :label="$t('management.video_setting.title')" align="center" prop="title" />
+              <el-table-column :label="$t('management.video_setting.status')" align="center" prop="status" />
+              <el-table-column :label="$t('management.video_setting.duration')" align="center" prop="duration" width="120" />
+              <el-table-column :label="$t('management.video_setting.size')" align="center" prop="size" width="120" />
+              <el-table-column :label="$t('create_time')" align="center" prop="create_time" />
+              <el-table-column :label="$t('update_time')" align="center" prop="update_time" width="120" />
+              <el-table-column :label="$t('operation')" align="center" width="80">
+                <template slot-scope="scope">
+                  <el-button type="text" @click="handleDelete(scope.row)">{{ $t('delete') }} </el-button>
+                </template>
+              </el-table-column>
+            </el-table>
+        
+            <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getList" />
+        
+            <el-dialog title="添加设备" v-if="open" :visible.sync="open" width="30%">
+              <test ref="test" v-model="dialogParams" :form-config="dialogForm" :insideRules="dialogRules"></test>
+            </el-dialog>
+          </el-card>
+        </el-col>
+      </el-row>
+      
+    </div>
+    
+  </template>
+  
+  <script>
+  import * as API from '@/api/management/video-setting.js'
+  import * as APISelect from '@/api/Internet-of-things/select.js'
+  import test from '@/components/form-test/index.vue'
+  import tree from './tree.vue'
+  export default {
+    name: 'equipment-management',
+    components: { test,tree },
+    data() {
+      return {
+        
+        queryParams: {
+          pageNum: 1,
+          pageSize: 10,
+          keyword: '',
+          tdaApplicationId: '',
+          tdaProductId: '',
+        },
+        
+        queryForm: {
+          keyword: {
+            label: this.$t('management.video_setting.keyword'),
+            span: 6,
+          },
+          tdaApplicationId: {
+            label: this.$t('management.video_setting.tdaApplicationId'),
+            span: 6,
+            type: 'select',
+            data: [],
+            keyName: 'id',
+            labelName: 'appName',
+          },
+          tdaProductId: {
+            label: this.$t('management.video_setting.tdaProductId'),
+            span: 6,
+            type: 'select',
+            data: [],
+            keyName: 'id',
+            labelName: 'name',
+          },
+          operation: {
+            // 搜索按钮操作
+            query: () => {
+              this.queryParams.pageNum = 1
+              this.getList()
+            },
+            // 重置按钮操作
+            reset: () => {
+              this.queryParams = { pageNum: 1, pageSize: 10, keyword: '', tdaApplicationId: '', name: '' }
+              this.queryParams.pageNum = 1
+              this.getList()
+            },
+          },
+          otherButton: {
+            list: [
+              {
+                name: this.$t('management.video_setting.addEquipment'),
+                methodsText: 'add',
+                type: 'primary',
+                add: () => {
+                  this.handleAdd()
+                },
+              },
+            ],
+          },
+        },
+        tableList: [],
+        total: 0,
+        loading: false,
+        open: false,
+        title: '',
+        dialogParams: {
+          tdaApplicationId: '',
+          tdaProductId: '',
+          nodeId: '',
+          deviceName: '',
+          secret: 'Fjhx@2012#',
+        },
+        dialogForm: {
+          loadingStatus: false,
+          tdaApplicationId: {
+            label: this.$t('management.video_setting.applicationName'),
+            type: 'select',
+            data: [],
+            keyName: 'id',
+            labelName: 'appName',
+          },
+          tdaProductId: {
+            label: this.$t('management.video_setting.productName'),
+            type: 'select',
+            data: [],
+            keyName: 'id',
+            labelName: 'name',
+          },
+          deviceName: {
+            label: this.$t('management.video_setting.deviceName'),
+          },
+          nodeId: {
+            label: this.$t('management.video_setting.nodeId'),
+            span: 2,
+          },
+          secret: {
+            label: this.$t('management.video_setting.secret'),
+            disabled: true,
+            span: 2,
+          },
+          otherButton: {
+            align: 'center',
+            list: [
+              {
+                name: this.$t('cancelText'),
+                methodsText: 'cancel',
+                cancel: () => {
+                  this.open = false
+                },
+              },
+              {
+                name: this.$t('submitText'),
+                methodsText: 'submit',
+                type: 'primary',
+                submit: () => {
+                  this.handleSubmit()
+                },
+              },
+            ],
+          },
+        },
+        dialogRules: {
+          tdaApplicationId: [{ required: true, message: this.$t('management.video_setting.tdaApplicationIdRules'), trigger: 'change' }],
+          tdaProductId: [{ required: true, message: this.$t('management.video_setting.tdaProductIdRules'), trigger: 'change' }],
+          deviceName: [{ required: true, message: this.$t('management.video_setting.deviceNameRules'), trigger: 'blur' }],
+          nodeId: [{ required: true, message: this.$t('management.video_setting.nodeIdRules'), trigger: 'blur' }],
+          secret: [{ required: true, message: this.$t('management.video_setting.secretRules'), trigger: 'blur' }],
+        },
+      }
+    },
+    created() {
+      //this.getSelectList()
+    },
+    mounted() {
+      this.getList()
+      this.getTree()
+    },
+    watch: {
+      
+    },
+    methods: {
+      
+      getList() {
+        this.loading = true
+        API.videoInfoPage(this.queryParams).then(
+          (res) => {
+            this.total = res.data.data.total
+            this.tableList = res.data.data.records
+            this.loading = false
+          },
+          (err) => {
+            console.log('tdaDevicePage: ' + err)
+            this.loading = false
+          },
+        )
+      },
+      handleAdd() {
+        this.dialogParams = {
+          tdaApplicationId: '',
+          tdaProductId: '',
+          nodeId: '',
+          deviceName: '',
+          secret: 'Fjhx@2012#',
+        }
+        this.open = true
+      },
+      handleSubmit() {
+        this.$refs.test.$refs['form'].validate((valid) => {
+          if (valid) {
+            this.dialogForm.loadingStatus = true
+            API.videoInfoAdd(this.dialogParams).then(
+              () => {
+                this.msgSuccess(this.$t('addSuccess'))
+                this.open = false
+                this.dialogForm.loadingStatus = false
+                this.getList()
+              },
+              (err) => {
+                console.log('tdaDeviceAdd: ' + err)
+                this.dialogForm.loadingStatus = false
+              },
+            )
+            // } else {
+            //   setTimeout(() => {
+            //     const errorDiv = document.getElementsByClassName('is-error')
+            //     errorDiv[0].scrollIntoView()
+            //   }, 0)
+          }
+        })
+      },
+      handleDelete(row) {
+        this.$confirm(this.$t('askDeleteData'), {
+          confirmButtonText: this.$t('submitText'),
+          cancelButtonText: this.$t('cancelText'),
+          type: 'warning',
+        }).then(() => {
+          API.videoInfoDelete({ id: row.id }).then(() => {
+            this.msgSuccess(this.$t('deleteSuccess'))
+            this.getList()
+          })
+        })
+      },
+    },
+  }
+  </script>
+  
+  <style lang="scss" scoped>
+
+  .box-card {
+    height: calc(100vh - 110px);
+    overflow-y: auto;
+  }
+  </style>
+  

+ 197 - 0
src/views/management/video-setting/tree.vue

@@ -0,0 +1,197 @@
+<template>
+	<el-card shadow="always" :body-style="{ padding: '20px' }">
+		<el-tree
+			:data="treeData"
+			:props="defaultProps"
+			@node-click="handleNodeClick"
+		>
+			<span class="custom-tree-node" slot-scope="{ node, data }">
+				<span>{{ node.label }}</span>
+				<span>
+					<el-button type="text" size="mini" @click="() => add(data)">
+						{{ $t('add') }}
+					</el-button>
+					<el-button
+						type="text"
+						size="mini"
+						@click="() => treeDelete(node, data)"
+					>
+						{{ $t('delete') }}
+					</el-button>
+				</span>
+			</span>
+		</el-tree>
+		<el-dialog
+			:title="
+				treeModalType == 'add'
+					? $t('management.video_setting.treeModalAdd')
+					: $t('management.video_setting.treeModalEdit')
+			"
+			v-if="treeModal"
+			:visible.sync="treeModal"
+			width="30%"
+		>
+			<test
+				ref="form"
+				v-model="treeParams"
+				:form-config="treeForm"
+				:insideRules="treeRules"
+			></test>
+		</el-dialog>
+	</el-card>
+</template>
+
+<script>
+import * as API from '@/api/management/video-setting.js'
+import test from '@/components/form-test/index.vue'
+export default {
+	components: { test },
+	name: 'tree',
+	data() {
+		return {
+			treeParams: {
+				type: null,
+				parentId: null,
+				name: null,
+			},
+			treeForm: {
+				loadingStatus: false,
+				type: {
+					label: this.$t('management.video_setting.type'),
+					type: 'select',
+					data: [
+						{
+							label: this.$t(
+								'management.video_setting.treeAddType1'
+							),
+							type: 1,
+						},
+						{
+							label: this.$t(
+								'management.video_setting.treeAddType2'
+							),
+							type: 2,
+						},
+					],
+					keyName: 'type',
+					labelName: 'label',
+				},
+				name: {
+					label: this.$t('management.video_setting.treeName'),
+					type: 'input',
+				},
+				otherButton: {
+					align: 'center',
+					list: [
+						{
+							name: this.$t('cancelText'),
+							methodsText: 'cancel',
+							cancel: () => {
+								this.open = false
+							},
+						},
+						{
+							name: this.$t('submitText'),
+							methodsText: 'submit',
+							type: 'primary',
+							submit: () => {
+								this.treehandleSubmit()
+							},
+						},
+					],
+				},
+			},
+			treeRules: {
+				type: [
+					{
+						required: true,
+						message: this.$t('management.video_setting.typeRules'),
+						trigger: 'change',
+					},
+				],
+				name: [
+					{
+						required: true,
+						message: this.$t('management.video_setting.nameRules'),
+						trigger: 'change',
+					},
+				],
+			},
+			treeModalType: 'add',
+			treeModal: false,
+			defaultProps: {
+				children: 'children',
+				label: 'name',
+			},
+			treeData: [],
+			treeQuery: {
+				type: null,
+				name: null,
+			},
+		}
+	},
+	created() {
+		this.getTree()
+	},
+	methods: {
+		treehandleSubmit() {
+			this.$refs.form.$refs['form'].validate((valid) => {
+				if (valid) {
+					this.treeForm.loadingStatus = true
+					API.videoClassifyAdd(this.treeParams).then(
+						() => {
+							this.msgSuccess(this.$t('addSuccess'))
+							this.treeModal = false
+							this.treeForm.loadingStatus = false
+							this.getTree()
+						},
+						(err) => {
+							console.log('tdaDeviceAdd: ' + err)
+							this.treeForm.loadingStatus = false
+						}
+					)
+				}
+			})
+		},
+		handleNodeClick() {},
+		getTree() {
+			this.loading = true
+			API.videoClassifyTree(this.treeQuery).then(
+				(res) => {
+					console.log(res)
+					this.treeData = res.data.data
+					this.loading = false
+				},
+				(err) => {
+					console.log('tdaDevicePage: ' + err)
+					this.loading = false
+				}
+			)
+		},
+		add() {},
+		treeDelete(row) {
+			this.$confirm(this.$t('askDeleteData'), {
+				confirmButtonText: this.$t('submitText'),
+				cancelButtonText: this.$t('cancelText'),
+				type: 'warning',
+			}).then(() => {
+				API.videoClassifyDetele({ id: row.id }).then(() => {
+					this.msgSuccess(this.$t('deleteSuccess'))
+					this.getTree()
+				})
+			})
+		},
+	},
+}
+</script>
+
+<style lang="scss" scoped>
+.custom-tree-node {
+	flex: 1;
+	display: flex;
+	align-items: center;
+	justify-content: space-between;
+	font-size: 14px;
+	padding-right: 8px;
+}
+</style>