From 3b256e6746661117724e7222fb509284ec9affde Mon Sep 17 00:00:00 2001
From: zhanghua <314079846@qq.com>
Date: 星期二, 01 十一月 2022 17:50:19 +0800
Subject: [PATCH] 智能巡查页面

---
 src/api/intelligentPatrol/statistics.js                         |   19 +
 src/store/index.js                                              |    4 
 src/store/intelligentPatrol/statistics.js                       |   12 +
 src/views/intelligentPatrol/statistics/unlawful/time/index.vue  |   13 +
 src/views/intelligentPatrol/studyJudge/index.vue                |   13 +
 src/views/intelligentPatrol/statistics/unlawful/shop/index.vue  |   13 +
 src/views/intelligentPatrol/illegalSearch/index.vue             |   13 +
 src/views/intelligentPatrol/statistics/unlawful/type/index.vue  |  356 +++++++++++++++++++++++++++++++++++
 src/views/intelligentPatrol/trendAnalysis/index.vue             |   13 +
 src/router/index.js                                             |   95 ++++++---
 src/views/intelligentPatrol/statistics/unlawful/area/index.vue  |   13 +
 src/views/intelligentPatrol/statistics/unlawful/point/index.vue |   13 +
 12 files changed, 544 insertions(+), 33 deletions(-)

diff --git a/src/api/intelligentPatrol/statistics.js b/src/api/intelligentPatrol/statistics.js
new file mode 100644
index 0000000..fe0261a
--- /dev/null
+++ b/src/api/intelligentPatrol/statistics.js
@@ -0,0 +1,19 @@
+import axios from "axios";
+import {
+    getToken
+} from '@/utils/helper'
+const baseUrl = '/sccg/intelligentPatrol/statistics'
+const token = {
+    'Authorization': getToken()
+}
+export default {
+    // 鎸夎繚瑙勭被鍨嬬粺璁�
+    searchByType: (data) => axios({
+        method: 'get',
+        url: baseUrl + '/unlawful/type',
+        headers: {
+            ...token
+        },
+        params: data
+    }),
+};
\ No newline at end of file
diff --git a/src/router/index.js b/src/router/index.js
index 156daa2..a36d7c7 100644
--- a/src/router/index.js
+++ b/src/router/index.js
@@ -1,8 +1,7 @@
 import Vue from 'vue'
 import VueRouter from 'vue-router'
 Vue.use(VueRouter)
-const routes = [
-  {
+const routes = [{
     path: "/",
     name: 'index',
     redirect: '/home'
@@ -14,18 +13,15 @@
     meta: {
       needLogin: true,
     },
-    children: [
-      {
+    children: [{
         path: 'system',
         name: 'system',
         component: () => import('@/views/systemSetting'),
-        children: [
-          {
+        children: [{
             path: 'userSetting',
             name: 'userSetting',
             component: () => import('@/views/systemSetting/baseSetting'),
-            children: [
-              {
+            children: [{
                 path: "user",
                 name: "user",
                 component: () => import('@/views/systemSetting/baseSetting/user')
@@ -47,8 +43,7 @@
             path: 'platform',
             name: 'platform',
             component: () => import('@/views/systemSetting/platform'),
-            children: [
-              {
+            children: [{
                 path: 'portalSetting',
                 name: 'portalSetting',
                 component: () => import('@/views/systemSetting/platform/portalSetting')
@@ -69,8 +64,7 @@
             path: 'device',
             name: 'device',
             component: () => import('@/views/systemSetting/device'),
-            children: [
-              {
+            children: [{
                 path: 'bayonet',
                 name: 'bayonet',
                 component: () => import('@/views/systemSetting/device/bayonet')
@@ -89,8 +83,7 @@
                 path: 'handheldTerminal',
                 name: 'handheldTerminal',
                 component: () => import('@/views/systemSetting/device/handheldTerminal'),
-              }
-              ,
+              },
               {
                 path: 'loudspeaker',
                 name: 'loudspeaker',
@@ -104,13 +97,11 @@
         path: "operate",
         name: 'operate',
         component: () => import('@/views/operate'),
-        children: [
-          {
+        children: [{
             path: 'baseSetting',
             name: 'baseSetting',
             component: () => import('@/views/operate/baseSetting'),
-            children: [
-              {
+            children: [{
                 path: "violation",
                 name: 'violation',
                 component: () => import('@/views/operate/baseSetting/violation'),
@@ -126,8 +117,7 @@
             path: 'casepool',
             name: 'casepool',
             component: () => import('@/views/operate/disposal'),
-            children: [
-              {
+            children: [{
                 path: 'pool',
                 name: 'pool',
                 component: () => import('@/views/operate/disposal/casepool/pool'),
@@ -158,8 +148,7 @@
             path: "fivepack",
             name: 'fivepack',
             component: () => import('@/views/operate/fivepack'),
-            children: [
-              {
+            children: [{
                 path: "shop",
                 name: 'shop',
                 component: () => import('@/views/operate/fivepack/shop'),
@@ -180,8 +169,7 @@
             path: 'rectification',
             name: 'rectification',
             component: () => import('@/views/operate/rectification'),
-            children: [
-              {
+            children: [{
                 path: "taskList",
                 name: 'taskList',
                 component: () => import('@/views/operate/rectification/taskList'),
@@ -208,8 +196,7 @@
             name: 'management',
             component: () => import('@/views/operate/management'),
             redirect: '/home/operate/management/myIndex',
-            children: [
-              {
+            children: [{
                 path: 'myIndex',
                 name: 'myIndex',
                 component: () => import('@/views/operate/management/myIndex'),
@@ -225,8 +212,7 @@
             path: 'car',
             name: 'car',
             component: () => import('@/views/operate/car'),
-            children: [
-              {
+            children: [{
                 path: 'carIndex',
                 name: 'carIndex',
                 component: () => import('@/views/operate/car/myIndex'),
@@ -247,8 +233,7 @@
             path: 'message',
             name: 'message',
             component: () => import('@/views/operate/message'),
-            children: [
-              {
+            children: [{
                 path: 'messageIndex',
                 name: 'messageIndex',
                 component: () => import('@/views/operate/message/myIndex'),
@@ -292,6 +277,49 @@
         name: 'info',
         component: () => import('@/views/info')
       },
+
+      //  鏅鸿兘宸℃煡
+      {
+        path: 'studyJudge', // 棰勮鐮斿垽
+        name: 'studyJudge',
+        component: () => import('@/views/intelligentPatrol/studyJudge'),
+      },
+      {
+        path: 'illegalSearch', // 杩濊妫�绱�
+        name: 'illegalSearch',
+        component: () => import('@/views/intelligentPatrol/illegalSearch'),
+      },
+      {
+        path: 'trendAnalysis', // 瓒嬪娍鍒嗘瀽
+        name: 'trendAnalysis',
+        component: () => import('@/views/intelligentPatrol/trendAnalysis'),
+      },
+      // 杩濇硶缁熻
+      {
+        path: 'typeStatistics', // 鎸夎繚瑙勭被鍨嬬粺璁�
+        name: 'typeStatistics',
+        component: () => import('@/views/intelligentPatrol/statistics/unlawful/type'),
+      },
+      {
+        path: 'pointStatistics', //鎸夌偣浣嶇粺璁�
+        name: 'pointStatistics',
+        component: () => import('@/views/intelligentPatrol/statistics/unlawful/point'),
+      },
+      {
+        path: 'timeStatistics', //鎸夋椂闂寸粺璁�
+        name: 'timeStatistics',
+        component: () => import('@/views/intelligentPatrol/statistics/unlawful/time'),
+      },
+      {
+        path: 'areaStatistics', //鎸夊尯鍩熺粺璁�
+        name: 'areaStatistics',
+        component: () => import('@/views/intelligentPatrol/statistics/unlawful/area'),
+      },
+      {
+        path: 'shopStatistics', //闂ㄥ墠涓夊寘缁熻
+        name: 'shopStatistics',
+        component: () => import('@/views/intelligentPatrol/statistics/unlawful/shop'),
+      }
     ]
   },
   {
@@ -319,7 +347,10 @@
     name: "/success",
     component: () => import('@/views/info/Success'),
   },
-  { path: '*', redirect: '/404' }
+  {
+    path: '*',
+    redirect: '/404'
+  }
 ]
 
 const router = new VueRouter({
@@ -331,4 +362,4 @@
 router.push = function push(location) {
   return originalPush.call(this, location).catch(err => err);
 }
-export default router
+export default router
\ No newline at end of file
diff --git a/src/store/index.js b/src/store/index.js
index c271a66..84a64f1 100644
--- a/src/store/index.js
+++ b/src/store/index.js
@@ -6,6 +6,7 @@
 import loudspeaker from './system/loudspeaker'
 import handheldTerminal from './system/handheldTerminal'
 import shortMessage from './operate/managenment/shortMessage'
+import statistics from './intelligentPatrol/statistics'
 Vue.use(Vuex)
 
 export default new Vuex.Store({
@@ -19,6 +20,7 @@
     bayonet,
     shortMessage,
     loudspeaker,
-    handheldTerminal
+    handheldTerminal,
+    statistics
   }
 })
\ No newline at end of file
diff --git a/src/store/intelligentPatrol/statistics.js b/src/store/intelligentPatrol/statistics.js
new file mode 100644
index 0000000..b22147a
--- /dev/null
+++ b/src/store/intelligentPatrol/statistics.js
@@ -0,0 +1,12 @@
+import api from "@/api/intelligentPatrol/statistics";
+export default {
+    namespaced: true,
+    state: {
+        userInfo: {},
+    },
+    actions: {
+        searchByType(context, params) {
+            return api.searchByType(params);
+        }
+    },
+};
\ No newline at end of file
diff --git a/src/views/intelligentPatrol/illegalSearch/index.vue b/src/views/intelligentPatrol/illegalSearch/index.vue
new file mode 100644
index 0000000..83fe1d5
--- /dev/null
+++ b/src/views/intelligentPatrol/illegalSearch/index.vue
@@ -0,0 +1,13 @@
+<template>
+  <div>杩濊妫�绱�</div>
+</template>
+
+<script>
+export default {
+
+}
+</script>
+
+<style>
+
+</style>
\ No newline at end of file
diff --git a/src/views/intelligentPatrol/statistics/unlawful/area/index.vue b/src/views/intelligentPatrol/statistics/unlawful/area/index.vue
new file mode 100644
index 0000000..3e73bbc
--- /dev/null
+++ b/src/views/intelligentPatrol/statistics/unlawful/area/index.vue
@@ -0,0 +1,13 @@
+<template>
+  <div>鎸夊尯鍩熺粺璁�</div>
+</template>
+
+<script>
+export default {
+
+}
+</script>
+
+<style>
+
+</style>
\ No newline at end of file
diff --git a/src/views/intelligentPatrol/statistics/unlawful/point/index.vue b/src/views/intelligentPatrol/statistics/unlawful/point/index.vue
new file mode 100644
index 0000000..b8057e0
--- /dev/null
+++ b/src/views/intelligentPatrol/statistics/unlawful/point/index.vue
@@ -0,0 +1,13 @@
+<template>
+  <div>鎸夌偣浣嶇粺璁�</div>
+</template>
+
+<script>
+export default {
+
+}
+</script>
+
+<style>
+
+</style>
\ No newline at end of file
diff --git a/src/views/intelligentPatrol/statistics/unlawful/shop/index.vue b/src/views/intelligentPatrol/statistics/unlawful/shop/index.vue
new file mode 100644
index 0000000..110ca53
--- /dev/null
+++ b/src/views/intelligentPatrol/statistics/unlawful/shop/index.vue
@@ -0,0 +1,13 @@
+<template>
+  <div>闂ㄥ墠涓夊寘缁熻</div>
+</template>
+
+<script>
+export default {
+
+}
+</script>
+
+<style>
+
+</style>
\ No newline at end of file
diff --git a/src/views/intelligentPatrol/statistics/unlawful/time/index.vue b/src/views/intelligentPatrol/statistics/unlawful/time/index.vue
new file mode 100644
index 0000000..000f533
--- /dev/null
+++ b/src/views/intelligentPatrol/statistics/unlawful/time/index.vue
@@ -0,0 +1,13 @@
+<template>
+  <div>鎸夋椂闂寸粺璁�</div>
+</template>
+
+<script>
+export default {
+
+}
+</script>
+
+<style>
+
+</style>
\ No newline at end of file
diff --git a/src/views/intelligentPatrol/statistics/unlawful/type/index.vue b/src/views/intelligentPatrol/statistics/unlawful/type/index.vue
new file mode 100644
index 0000000..adbf32a
--- /dev/null
+++ b/src/views/intelligentPatrol/statistics/unlawful/type/index.vue
@@ -0,0 +1,356 @@
+<template>
+  <div class="list">
+    <header>
+      <div class="header-content">
+        <div class="search">
+          <span style="padding-right: 20px">鏃堕棿鑼冨洿:</span>
+          <el-date-picker
+            v-model="value2"
+            type="daterange"
+            align="right"
+            unlink-panels
+            range-separator="鑷�"
+            start-placeholder="寮�濮嬫棩鏈�"
+            end-placeholder="缁撴潫鏃ユ湡"
+            :picker-options="pickerOptions"
+          >
+          </el-date-picker>
+        </div>
+
+        <div class="find">
+          <el-button
+            type="primary"
+            icon="el-icon-search"
+            @click="setTableDataHandle"
+            >鏌ヨ</el-button
+          >
+          <el-button icon="el-icon-delete-solid" @click="resetTableData"
+            >閲嶇疆</el-button
+          >
+        </div>
+
+        <div class="main-nav-right">
+          <el-button type="primary" icon="el-icon-upload2" @click="handleExport"
+            >瀵煎嚭</el-button
+          >
+        </div>
+      </div>
+    </header>
+    <main>
+      <div class="main-content">
+        <!-- 鏁版嵁灞曠ず -->
+        <el-table
+          ref="multipleTable"
+          :header-cell-style="{
+            background: '#06122c',
+            'font-size': '12px',
+            color: '#4b9bb7',
+            'font-weight': '650',
+            'line-height': '45px',
+          }"
+          :row-class-name="tableRowClassName"
+          :data="list"
+          style="width: 100%"
+        >
+          <el-table-column type="selection" min-width="5"> </el-table-column>
+          <el-table-column prop="name" label="绫诲瀷鍚嶇О" min-width="10">
+          </el-table-column>
+          <el-table-column prop="count" label="浜嬩欢鎬绘暟" min-width="5">
+          </el-table-column>
+          <el-table-column prop="ratio" label="鍗犳瘮" min-width="5">
+          </el-table-column>
+          <el-table-column prop="register" label="绔嬫" min-width="5">
+          </el-table-column>
+          <el-table-column prop="notRegister" label="鏆備笉绔嬫" min-width="5">
+          </el-table-column>
+          <el-table-column prop="closing" label="缁撴" min-width="5">
+          </el-table-column>
+          <el-table-column prop="relearn" label="鍐嶅涔�" min-width="5">
+          </el-table-column>
+          <el-table-column prop="checked" label="宸插鏍�" min-width="5">
+          </el-table-column>
+          <el-table-column prop="checkedRatio" label="瀹℃牳鐜�" min-width="5">
+          </el-table-column>
+          <el-table-column prop="registerRatio" label="绔嬫鐜�" min-width="5">
+          </el-table-column>
+        </el-table>
+      </div>
+
+      <!-- tools -->
+      <div class="tools">
+        <div class="funs"></div>
+        <div class="pagination">
+          <el-pagination
+            background
+            :current-page="currentPage"
+            layout="prev, pager, next"
+            :total="totalNum"
+            :page-size="pageSize"
+            @current-change="changeCurrentPage"
+            @prev-click="handlePrev"
+            @next-click="handleNext"
+          >
+          </el-pagination>
+        </div>
+      </div>
+    </main>
+  </div>
+</template>
+  <script>
+import { createNamespacedHelpers } from "vuex";
+const { mapActions } = createNamespacedHelpers("statistics");
+
+export default {
+  data() {
+    return {
+      pickerOptions: {
+        shortcuts: [
+          {
+            text: "鏈�杩戜竴鍛�",
+            onClick(picker) {
+              const end = new Date();
+              const start = new Date();
+              start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
+              picker.$emit("pick", [start, end]);
+            },
+          },
+          {
+            text: "鏈�杩戜竴涓湀",
+            onClick(picker) {
+              const end = new Date();
+              const start = new Date();
+              start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
+              picker.$emit("pick", [start, end]);
+            },
+          },
+          {
+            text: "鏈�杩戜笁涓湀",
+            onClick(picker) {
+              const end = new Date();
+              const start = new Date();
+              start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
+              picker.$emit("pick", [start, end]);
+            },
+          },
+        ],
+      },
+      value1: "",
+      value2: "",
+      list: [],
+      totalNum: 0,
+      pageSize: 10,
+      currentPage: 1,
+    };
+  },
+  created() {
+    this.setTableData();
+  },
+  methods: {
+    ...mapActions(["searchByType"]),
+
+    handleExport(e) {},
+    setTableDataHandle(e) {},
+    resetTableData(e) {},
+    // 璁剧疆琛ㄦ牸鏂戦┈绾�
+    tableRowClassName({ row, rowIndex }) {
+      if ((rowIndex + 1) % 2 == 0) {
+        return "warning-row";
+      } else {
+        return "success-row";
+      }
+      return "";
+    },
+    // 璁剧疆tableData
+    setTableData() {
+      const { currentPage, pageSize, context } = this;
+      this.searchByType({
+        currentPage,
+        pageSize,
+        beginTime:'2022-05-01 00:00:00',
+        endTime:'2022-09-01 00:00:00'
+      }).then((res) => {
+        if (res.data.code == 200) {
+          this.list = res.data.data.records;
+          this.totalNum = res.data.data.total;
+        }
+      });
+    },
+    // 褰撳墠椤垫敼鍙樿Е鍙戜簨浠�
+    changeCurrentPage(page) {
+      this.currentPage = page;
+      this.setTableData();
+    },
+    // 涓婁竴椤电偣鍑讳簨浠�
+    handlePrev(page) {
+      this.currentPage = page;
+      this.setTableData();
+    },
+    // 涓嬩竴椤电偣鍑讳簨浠�
+    handleNext(page) {
+      this.currentPage = page;
+      this.setTableData();
+    },
+  },
+};
+</script>
+  <style lang="scss" scoped>
+.list {
+  text-align: left;
+  margin: 10px 20px;
+  color: #4b9bb7;
+
+  header {
+    background-color: #09152f;
+    border: 1pox solid #fff;
+
+    .header-content {
+      padding: 0 40px;
+      display: flex;
+      line-height: 100px;
+      justify-content: space-between;
+      align-items: center;
+
+      .search {
+        // display: flex;
+        justify-content: flex-start;
+
+        span {
+          flex: 1;
+        }
+
+        .el-input {
+          flex: 2;
+          color: #1d3f57;
+
+          &::v-deep .el-input__inner {
+            background-color: #09152f;
+            border: 1px solid #17324c;
+          }
+        }
+        .el-select {
+          flex: 1;
+        }
+        .el-date-editor {
+          flex: 1;
+        }
+        :deep(.el-range-input) {
+          background-color: #09152f;
+        }
+      }
+      .find {
+        margin-right: auto;
+        margin-left: 30px;
+      }
+    }
+  }
+
+  :deep(.el-range-separator) {
+    padding: 0px !important;
+  }
+  main {
+    background-color: #09152f;
+    margin-top: 20px;
+    padding-bottom: 50px;
+    border: 1pox solid #fff;
+
+    .main-title {
+      line-height: 60px;
+      padding: 10px 20px;
+    }
+
+    .tools {
+      display: flex;
+      justify-content: space-between;
+      align-items: center;
+      padding: 0 20px;
+
+      .funs {
+        display: flex;
+
+        .funsItem {
+          line-height: 28px;
+          display: flex;
+          align-items: center;
+          border: 1px solid #17324c;
+          border-radius: 4px;
+          font-size: 12px;
+          margin-left: 10px;
+
+          .el-checkbox {
+            width: 80px;
+            padding: 0 10px;
+          }
+
+          .el-select {
+            width: 120px;
+          }
+
+          &::v-deep .el-input__inner {
+            border: none;
+            background-color: #09152f;
+          }
+
+          &:hover {
+            border: 1px solid #4b9bb7;
+          }
+
+          &:hover .el-checkbox {
+            color: #4b9bb7;
+          }
+        }
+      }
+
+      .pagination {
+        margin-top: 50px;
+        display: flex;
+        line-height: 50px;
+        justify-content: center;
+
+        .el-pagination {
+          &::v-deep li,
+          &::v-deep .btn-prev,
+          &::v-deep .btn-next {
+            background-color: #071f39;
+            color: #4b9bb7;
+          }
+
+          &::v-deep .active {
+            background-color: #409eff;
+            color: #fff;
+          }
+        }
+      }
+    }
+    &::v-deep .warning-row {
+      background-color: #06122c;
+    }
+
+    &::v-deep .success-row {
+      background-color: #071f39;
+    }
+
+    .operationBox {
+      display: flex;
+    }
+
+    .el-divider {
+      background-color: #4b9bb7;
+    }
+    .el-table {
+      color: #4b9bb7;
+      font-size: 10px;
+      .operation {
+        display: flex;
+
+        .line {
+          padding: 0 5px;
+        }
+
+        span:hover {
+          cursor: pointer;
+        }
+      }
+    }
+  }
+}
+</style>
\ No newline at end of file
diff --git a/src/views/intelligentPatrol/studyJudge/index.vue b/src/views/intelligentPatrol/studyJudge/index.vue
new file mode 100644
index 0000000..9278ea7
--- /dev/null
+++ b/src/views/intelligentPatrol/studyJudge/index.vue
@@ -0,0 +1,13 @@
+<template>
+  <div>棰勮鐮斿垽</div>
+</template>
+
+<script>
+export default {
+
+}
+</script>
+
+<style>
+
+</style>
\ No newline at end of file
diff --git a/src/views/intelligentPatrol/trendAnalysis/index.vue b/src/views/intelligentPatrol/trendAnalysis/index.vue
new file mode 100644
index 0000000..da3bee6
--- /dev/null
+++ b/src/views/intelligentPatrol/trendAnalysis/index.vue
@@ -0,0 +1,13 @@
+<template>
+  <div>瓒嬪娍鍒嗘瀽</div>
+</template>
+
+<script>
+export default {
+
+}
+</script>
+
+<style>
+
+</style>
\ No newline at end of file

--
Gitblit v1.8.0