Browse Source

添加 DiskCam.vue 页面, 并更新了 views/disk 模块对移动端显示的适应

reghao 7 months ago
parent
commit
953119c9ba
4 changed files with 351 additions and 78 deletions
  1. 7 0
      src/router/disk.js
  2. 29 18
      src/views/disk/Disk.vue
  3. 246 0
      src/views/disk/DiskCam.vue
  4. 69 60
      src/views/disk/DiskFile.vue

+ 7 - 0
src/router/disk.js

@@ -3,6 +3,7 @@ const DiskDashboard = () => import('views/disk/DiskDashboard')
 const DiskFile = () => import('views/disk/DiskFile')
 const DiskShare = () => import('views/disk/DiskShare')
 const DiskRecycle = () => import('views/disk/DiskRecycle')
+const DiskCam = () => import('views/disk/DiskCam')
 
 export default {
   path: '/disk',
@@ -33,6 +34,12 @@ export default {
       name: 'DiskRecycle',
       component: DiskRecycle,
       meta: { needAuth: true }
+    },
+    {
+      path: '/disk/cam',
+      name: 'DiskCam',
+      component: DiskCam,
+      meta: { needAuth: true }
     }
   ]
 }

+ 29 - 18
src/views/disk/Disk.vue

@@ -1,18 +1,18 @@
 <template>
   <el-container>
-    <el-header>
-      <el-row type="flex" justify="center">
-        <el-col :span="4">
-          <ul class="el-menu--horizontal el-menu">
-            <li class="el-menu-item">
-              <a href="/disk" style="text-decoration-line: none">
-                <img src="@/assets/img/icon/logo.png" class="el-avatar--circle el-avatar--medium" alt="img">
+    <el-main>
+      <el-row class="el-menu-demo">
+        <el-col :md="2">
+          <ul role="menubar" class="el-menu--horizontal el-menu">
+            <li role="menuitem" class="el-menu-item">
+              <a href="/disk" style="color: #007bff;text-decoration-line: none">
+                <img src="@/assets/img/icon/logo.png" class="logo" alt="img">
                 disk
               </a>
             </li>
           </ul>
         </el-col>
-        <el-col :span="18">
+        <el-col :md="20">
           <el-menu
             class="el-menu--horizontal el-menu"
             :default-active="this.$route.path"
@@ -20,17 +20,28 @@
             mode="horizontal"
           >
             <el-menu-item index="/disk/file">
-              <template slot="title">文件</template>
+              <template slot="title">
+                <span style="color: #007bff">文件</span>
+              </template>
             </el-menu-item>
             <el-menu-item index="/disk/share">
-              <template slot="title">分享</template>
+              <template slot="title">
+                <span style="color: #007bff">分享</span>
+              </template>
             </el-menu-item>
             <el-menu-item index="/disk/recycle">
-              <template slot="title">回收站</template>
+              <template slot="title">
+                <span style="color: #007bff">回收站</span>
+              </template>
+            </el-menu-item>
+            <el-menu-item index="/disk/cam">
+              <template slot="title">
+                <span style="color: #007bff">监控</span>
+              </template>
             </el-menu-item>
           </el-menu>
         </el-col>
-        <el-col :span="2">
+        <el-col :md="2">
           <ul class="el-menu--horizontal el-menu">
             <li class="el-menu-item">
               <el-dropdown v-if="user">
@@ -61,12 +72,8 @@
           </ul>
         </el-col>
       </el-row>
-    </el-header>
-    <el-container>
-      <el-main>
-        <router-view />
-      </el-main>
-    </el-container>
+      <router-view />
+    </el-main>
   </el-container>
 </template>
 
@@ -94,4 +101,8 @@ export default {
 </script>
 
 <style>
+.logo {
+  width: 30px;
+  position: relative;
+}
 </style>

+ 246 - 0
src/views/disk/DiskCam.vue

@@ -0,0 +1,246 @@
+<template>
+  <div>
+    <el-row style="padding: 5px">
+      <el-col :md="16" style="padding: 5px">
+        <el-card class="box-card">
+          <div slot="header" class="clearfix">
+            <span>摄像头</span>
+          </div>
+          <div class="text item">
+            <span>视频播放器</span>
+          </div>
+        </el-card>
+      </el-col>
+      <el-col :md="8" style="padding: 5px">
+        <el-card class="box-card">
+          <div slot="header" class="clearfix">
+            <el-select
+              style="margin: 5px;"
+              v-model="selectedOption"
+              clearable
+              placeholder="选择摄像头"
+              @change="onSelectChange"
+            >
+              <el-option label="cam201" value="1" />
+              <el-option label="cam204" value="2" />
+            </el-select>
+            <el-button type="plain" icon="el-icon-date" style="margin: 5px" @click="onSelectDate">选择日期</el-button>
+            <el-button type="plain" icon="el-icon-magic-stick" style="margin: 5px" @click="onButtonSubmit">提交</el-button>
+          </div>
+          <div class="text item">
+            <span style="color: red">
+              {{ getYearMonthDay(calendarDate) }} 的监控列表
+            </span>
+            <el-divider />
+            <el-table
+              :data="dataList"
+              :show-header="true"
+              style="width: 100%"
+            >
+              <el-table-column
+                prop="createAt"
+                label="名字"
+              />
+              <el-table-column label="操作">
+                <template slot-scope="scope">
+                  <el-button
+                    size="mini"
+                    @click="handlePlay(scope.$index, scope.row)"
+                  >播放</el-button>
+                </template>
+              </el-table-column>
+            </el-table>
+          </div>
+        </el-card>
+      </el-col>
+    </el-row>
+
+    <el-dialog
+      title="日历"
+      append-to-body
+      :visible.sync="showCalenderDialog"
+      width="50%"
+      center
+    >
+      <el-row style="padding-right: 5px; padding-left: 5px; padding-bottom: 5px; text-align: center">
+        <el-card class="box-card">
+          <div slot="header" class="clearfix">
+            <span style="color: green">绿色标记的日期表示当前有监控录像</span>
+          </div>
+          <div class="text item">
+            <el-calendar v-model="calendarDate">
+              <div
+                slot="dateCell"
+                slot-scope="{ date, data }"
+                @click="handleCellClick(date, data)"
+              >
+                <p>{{ data.day.split("-").slice(2).join() }}</p>
+                <p v-if="dealMyDate(data.day)" class="blue budge" />
+              </div>
+            </el-calendar>
+          </div>
+        </el-card>
+      </el-row>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+export default {
+  name: 'DiskCam',
+  data() {
+    return {
+      selectedOption: '1',
+      calendarDate: new Date(),
+      dateMap: new Map(),
+      form: {},
+      dataList: [],
+      showCalenderDialog: false
+    }
+  },
+  watch: {
+    $route() {
+      this.$router.go()
+    },
+    calendarDate: {
+      handler(newValue, oldValue) {
+        const oldMonth = this.getYearMonth(oldValue)
+        const newMonth = this.getYearMonth(newValue)
+        if (oldMonth !== newMonth) {
+          this.showCalender = false
+          this.form.yearMonth = this.getYearMonth(newValue)
+          this.getCamRecordByMonth(this.form).then(resp => {
+            if (resp.code === 0) {
+              this.dateMap.clear()
+              for (const item of resp.data) {
+                const date1 = new Date(item)
+                const dayStr = this.getYearMonthDay(date1)
+                this.dateMap.set(dayStr, date1)
+              }
+            }
+            this.showCalender = true
+          })
+        }
+      }
+    }
+  },
+  created() {
+    document.title = '监控'
+    this.getData()
+  },
+  methods: {
+    getData() {
+    },
+    onSelectChange() {
+      this.$message.info('select -> ' + this.selectedOption)
+    },
+    handleCellClick(date, data) {
+      this.form.yearMonthDay = this.getYearMonthDay(date)
+    },
+    dealMyDate(val) {
+      let res = ''
+      if (this.dateMap.get(val) != null) {
+        res = true
+      }
+      return res
+    },
+    getYearMonth(date) {
+      const year = date.getFullYear().toString().padStart(4, '0')
+      const month = (date.getMonth() + 1).toString().padStart(2, '0')
+      // const day = date.getDate().toString().padStart(2, '0')
+      // const hour = date.getHours().toString().padStart(2, '0')
+      // const minute = date.getMinutes().toString().padStart(2, '0')
+      // const second = date.getSeconds().toString().padStart(2, '0')
+      // 2023-02-16 08:25:05
+      // console.log(`${year}-${month}-${day} ${hour}:${minute}:${second}`)
+      return year + '-' + month
+    },
+    getYearMonthDay(date) {
+      const year = date.getFullYear().toString().padStart(4, '0')
+      const month = (date.getMonth() + 1).toString().padStart(2, '0')
+      const day = date.getDate().toString().padStart(2, '0')
+      return year + '-' + month + '-' + day
+    },
+    getCamRecordByMonth(val) {
+    },
+    handlePlay(index, row) {
+      this.$message.info('play cam video')
+    },
+    onSelectDate() {
+      this.showCalenderDialog = true
+    },
+    onButtonSubmit() {
+      this.$confirm('确认提交?', '提示', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        this.$message({
+          type: 'success',
+          message: '已提交'
+        })
+      }).catch(() => {
+        this.$message({
+          type: 'info',
+          message: '已取消'
+        })
+      })
+    }
+  }
+}
+</script>
+
+<style>
+.clearfix:before,
+.clearfix:after {
+  display: table;
+  content: "";
+}
+
+.clearfix:after {
+  clear: both;
+}
+
+.is-selected {
+  color: #1989FA;
+}
+
+::v-deep.el-calendar{
+  height: calc(100% - 35px);
+}
+::v-deep.el-calendar .el-calendar__body{
+  padding-bottom: 16px;
+  height: calc(100% - 80px);
+}
+::v-deep.el-calendar .el-calendar-table{
+  height: 100%;
+}
+.el-backtop, ::v-deep.el-calendar .el-calendar-table td.is-today .date{
+  background: #DCE9FF;
+  color: rgba(0,0,0,0.45);
+}
+.el-backtop, ::v-deep.el-calendar .el-calendar-table .date:hover{
+  background: #DCE9FF;
+  color: rgba(0,0,0,0.45);
+}
+::v-deep.el-calendar .el-calendar-table .el-calendar-day:hover{
+  background: none;
+}
+::v-deep.el-calendar .el-calendar-table td.is-selected{
+  background: none;
+}
+::v-deep.el-calendar .el-calendar-table td.is-selected .date{
+  background: #5E97F9;
+  box-shadow: 0px 4px 7px 0px rgba(113,208,255,0.5);
+  color: #fff;
+}
+::v-deep.el-calendar .el-calendar__button-group{
+  display: none;
+}
+::v-deep.el-calendar .el-calendar__title{
+  margin: 0 auto;
+}
+::v-deep.el-calendar .el-calendar-table .el-calendar-day{
+  position: relative;
+}
+</style>

+ 69 - 60
src/views/disk/DiskFile.vue

@@ -1,64 +1,73 @@
 <template>
-  <div class="movie-list">
-    <el-dropdown style="padding-right: 5px">
-      <el-button size="small" type="primary" icon="el-icon-upload" round>上传</el-button>
-      <el-dropdown-menu slot="dropdown">
-        <el-dropdown-item
-          icon="el-icon-files"
-          @click.native="onUploadFile"
-        >上传文件</el-dropdown-item>
-        <el-dropdown-item
-          icon="el-icon-folder"
-          @click.native="onUploadFolder"
-        >上传文件夹</el-dropdown-item>
-      </el-dropdown-menu>
-    </el-dropdown>
-    <el-button size="small" type="primary" icon="el-icon-folder-add" round @click="onCreateFolder">新建文件夹</el-button>
-    <el-input
-      v-model="inputData"
-      placeholder="搜索我的文件"
-      size="small"
-      style="width: 30%; padding-left: 5px"
-      clearable
-      @keyup.enter.native="onSearchFile"
-    >
-      <el-button slot="append" icon="el-icon-search" @click="onSearchFile"/>
-    </el-input>
-    <el-divider />
-    <el-breadcrumb separator-class="el-icon-arrow-right">
-      <el-breadcrumb-item :to="{ path: '/disk/file' }">全部文件</el-breadcrumb-item>
-      <el-breadcrumb-item :to="{ path: '/disk/file' }">文件夹1</el-breadcrumb-item>
-      <el-breadcrumb-item :to="{ path: '/disk/file' }">文件夹2</el-breadcrumb-item>
-      <el-breadcrumb-item :to="{ path: '/disk/file' }">文件夹3</el-breadcrumb-item>
-    </el-breadcrumb>
-    <el-divider />
-    <el-table
-      :data="dataList"
-      :show-header="true"
-      style="width: 100%"
-      @selection-change="handleTableSectionChange"
-    >
-      <el-table-column
-        align="center"
-        type="selection"
-      />
-      <el-table-column
-        prop="createAt"
-        label="文件名"
-      />
-      <el-table-column
-        prop="title"
-        label="大小"
-      />
-      <el-table-column
-        prop="title"
-        label="类型"
-      />
-      <el-table-column
-        prop="title"
-        label="修改时间"
-      />
-    </el-table>
+  <div style="padding-right: 5px">
+    <el-row style="padding: 5px">
+      <el-dropdown style="padding-right: 5px">
+        <el-button size="small" type="primary" icon="el-icon-upload" round>上传</el-button>
+        <el-dropdown-menu slot="dropdown">
+          <el-dropdown-item
+            icon="el-icon-files"
+            @click.native="onUploadFile"
+          >上传文件</el-dropdown-item>
+          <el-dropdown-item
+            icon="el-icon-folder"
+            @click.native="onUploadFolder"
+          >上传文件夹</el-dropdown-item>
+        </el-dropdown-menu>
+      </el-dropdown>
+      <el-button size="small" type="primary" icon="el-icon-folder-add" round @click="onCreateFolder">新建文件夹</el-button>
+      <el-input
+        v-model="inputData"
+        placeholder="搜索我的文件"
+        size="small"
+        style="width: 30%; padding-left: 5px"
+        clearable
+        @keyup.enter.native="onSearchFile"
+      >
+        <el-button slot="append" icon="el-icon-search" @click="onSearchFile" />
+      </el-input>
+      <el-divider />
+      <el-breadcrumb separator-class="el-icon-arrow-right">
+        <el-breadcrumb-item style="padding: 1px" :to="{ path: '/disk/file' }">全部文件</el-breadcrumb-item>
+        <el-breadcrumb-item style="padding: 1px" :to="{ path: '/disk/file' }">文件夹1</el-breadcrumb-item>
+        <el-breadcrumb-item style="padding: 1px" :to="{ path: '/disk/file' }">文件夹2</el-breadcrumb-item>
+        <el-breadcrumb-item style="padding: 1px" :to="{ path: '/disk/file' }">文件夹3</el-breadcrumb-item>
+        <el-breadcrumb-item style="padding: 1px" :to="{ path: '/disk/file' }">文件夹4</el-breadcrumb-item>
+        <el-breadcrumb-item style="padding: 1px" :to="{ path: '/disk/file' }">文件夹5</el-breadcrumb-item>
+        <el-breadcrumb-item style="padding: 1px" :to="{ path: '/disk/file' }">文件夹6</el-breadcrumb-item>
+        <el-breadcrumb-item style="padding: 1px" :to="{ path: '/disk/file' }">文件夹7</el-breadcrumb-item>
+        <el-breadcrumb-item style="padding: 1px" :to="{ path: '/disk/file' }">文件夹8</el-breadcrumb-item>
+        <el-breadcrumb-item style="padding: 1px" :to="{ path: '/disk/file' }">文件夹9</el-breadcrumb-item>
+        <el-breadcrumb-item style="padding: 1px" :to="{ path: '/disk/file' }">文件夹10</el-breadcrumb-item>
+      </el-breadcrumb>
+      <el-divider />
+      <el-table
+        :data="dataList"
+        :show-header="true"
+        style="width: 100%"
+        @selection-change="handleTableSectionChange"
+      >
+        <el-table-column
+          align="center"
+          type="selection"
+        />
+        <el-table-column
+          prop="createAt"
+          label="文件名"
+        />
+        <el-table-column
+          prop="title"
+          label="大小"
+        />
+        <el-table-column
+          prop="title"
+          label="类型"
+        />
+        <el-table-column
+          prop="title"
+          label="修改时间"
+        />
+      </el-table>
+    </el-row>
   </div>
 </template>