From 514ae596e1a03b48386082ab82d7d814c7564a7e Mon Sep 17 00:00:00 2001
From: ZhangXianQiang <1135831638@qq.com>
Date: 星期三, 10 四月 2024 17:30:43 +0800
Subject: [PATCH] Merge branch 'master' of http://42.193.1.25:9521/r/zgyw-ui

---
 /dev/null                                   |  471 ------------------
 src/api/platform/platform.js                |   44 +
 src/views/system/data-manage/index.vue      |   28 +
 src/views/system/platform/index.vue         |  412 +++++++++++++++
 src/views/system/equipment/index.vue        |  437 ++++++++++++++++
 src/router/index.js                         |   13 
 src/views/system/calculate/record/index.vue |   50 +
 src/views/system/rule/index.vue             |    0 
 src/views/system/calculate/report/index.vue |   52 +
 src/views/system/template/index.vue         |    0 
 10 files changed, 1,005 insertions(+), 502 deletions(-)

diff --git a/src/api/platform/platform.js b/src/api/platform/platform.js
new file mode 100644
index 0000000..5fe4eb7
--- /dev/null
+++ b/src/api/platform/platform.js
@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 鏌ヨ骞冲彴杩愯鐩戞帶鍒楄〃
+export function listPlatform(query) {
+  return request({
+    url: '/platform/platformMonitor/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 鏌ヨ骞冲彴杩愯鐩戞帶璇︾粏
+export function getPlatform(id) {
+  return request({
+    url: '/platform/platformMonitor/' + id,
+    method: 'get'
+  })
+}
+
+// 鏂板骞冲彴杩愯鐩戞帶
+export function addPlatform(data) {
+  return request({
+    url: '/platform/platformMonitor',
+    method: 'post',
+    data: data
+  })
+}
+
+// 淇敼骞冲彴杩愯鐩戞帶
+export function updatePlatform(data) {
+  return request({
+    url: '/platform/platformMonitor',
+    method: 'put',
+    data: data
+  })
+}
+
+// 鍒犻櫎骞冲彴杩愯鐩戞帶
+export function delPlatform(id) {
+  return request({
+    url: '/platform/platformMonitor/' + id,
+    method: 'delete'
+  })
+}
diff --git a/src/router/index.js b/src/router/index.js
index 8d1943d..10a22fb 100644
--- a/src/router/index.js
+++ b/src/router/index.js
@@ -60,6 +60,19 @@
     ]
   },
   {
+    path: '/car/equipment',
+    component: Layout,
+    hidden: true,
+    children: [
+      {
+        path: 'index',
+        name: 'equipment',
+        component: () => import('@/views/system/equipment/index'),
+        meta: { title: '璧勪骇绠$悊', activeMenu: '/system/equipment' }
+      }
+    ]
+  },
+  {
     path: '/check-result/contract',
     component: Layout,
     hidden: true,
diff --git a/src/views/system/calculate/record/index.vue b/src/views/system/calculate/record/index.vue
index e132a74..b321768 100644
--- a/src/views/system/calculate/record/index.vue
+++ b/src/views/system/calculate/record/index.vue
@@ -2,14 +2,12 @@
   <div class="app-container">
     <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
       <el-form-item label="鍗曚綅鍚�" prop="checkUnitId">
-        <el-select v-model="queryParams.checkUnitId" clearable @clear="handleQuery" placeholder="璇烽�夋嫨鍗曚綅">
+        <el-select v-model="form.unitId" placeholder="璇烽�夋嫨">
           <el-option
-            label="鎴愰兘x杩愮淮"
-            value="1">
-          </el-option>
-          <el-option
-            label="鎴愰兘a杩愮淮"
-            value="2">
+            v-for="item in unitList"
+            :key="item.id"
+            :label="item.value"
+            :value="item.id">
           </el-option>
         </el-select>
       </el-form-item>
@@ -90,8 +88,8 @@
           <div v-if="scope.row.unitId == 2">鎴愰兘x杩愮淮</div>
         </template>
       </el-table-column>
-      <el-table-column label="鎬绘湇鍔¤垂" align="center" prop="totalAmount" />
-      <el-table-column label="鎵e噺鏈嶅姟璐�" align="center" prop="deductAmount" />
+      <!-- <el-table-column label="鎬绘湇鍔¤垂" align="center" prop="totalAmount" /> -->
+      <!-- <el-table-column label="鎵e噺鏈嶅姟璐�" align="center" prop="deductAmount" /> -->
       <el-table-column label="鑰冩牳鍒嗘暟" align="center" prop="score" />
       <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
         <template slot-scope="scope">
@@ -125,15 +123,18 @@
     <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
       <el-form ref="form" :model="form" :rules="rules" label-width="100px">
         <el-form-item label="鏍哥畻瀵硅薄" prop="checkUnitId">
-          <el-select v-model="queryParams.checkUnitId" clearable @clear="handleQuery" placeholder="鏍哥畻瀵硅薄">
+          <el-select v-model="form.unitId" placeholder="璇烽�夋嫨">
             <el-option
-              label="鎴愰兘x杩愮淮"
-              value="1">
+              v-for="item in unitList"
+              :key="item.id"
+              :label="item.value"
+              :value="item.id">
             </el-option>
-            <el-option
-              label="鎴愰兘a杩愮淮"
-              value="2">
-            </el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="鏍哥畻瑙勫垯" prop="ruleId">
+          <el-select v-model="form.ruleId" placeholder="璇烽�夋嫨">
+            <el-option label="鎴愰兘x杩愮淮鑰冩牳缁撴灉搴旂敤瑙勫垯" value="1">鎴愰兘x杩愮淮鑰冩牳缁撴灉搴旂敤瑙勫垯</el-option>
           </el-select>
         </el-form-item>
         <el-form-item label="鏍哥畻璁板綍鏃ユ湡" prop="date" >
@@ -144,12 +145,12 @@
             placeholder="璇烽�夋嫨鏍哥畻璁板綍鏃ユ湡">
           </el-date-picker>
         </el-form-item>
-        <el-form-item label="鎬绘湇鍔¤垂" prop="totalAmount">
+        <!-- <el-form-item label="鎬绘湇鍔¤垂" prop="totalAmount">
           <el-input v-model="form.totalAmount" placeholder="璇疯緭鍏ユ�绘湇鍔¤垂" />
-        </el-form-item>
-        <el-form-item label="鎵e噺鏈嶅姟璐�" prop="deductAmount">
+        </el-form-item> -->
+        <!-- <el-form-item label="鎵e噺鏈嶅姟璐�" prop="deductAmount">
           <el-input v-model="form.deductAmount" placeholder="璇疯緭鍏ユ墸鍑忔湇鍔¤垂" />
-        </el-form-item>
+        </el-form-item> -->
         <el-form-item label="鑰冩牳鍒嗘暟" prop="score">
           <el-input v-model="form.score" placeholder="璇疯緭鍏ヨ�冩牳鍒嗘暟" />
         </el-form-item>
@@ -164,7 +165,7 @@
 
 <script>
 import { listRecord, getRecord, delRecord, addRecord, updateRecord } from "@/api/platform/calculate-record";
-
+import {unitSelect} from "@/api/platform/unit";
 export default {
   name: "Record",
   data() {
@@ -210,8 +211,15 @@
   },
   created() {
     this.getList();
+    this.selectUnit();
   },
   methods: {
+    // 杩愮淮鍏徃涓嬫媺鏁版嵁
+    selectUnit() {
+      unitSelect().then(res => {
+        this.unitList = res.data;
+      })
+    },
     /** 鏌ヨ鏍哥畻璁板綍鍒楄〃 */
     getList() {
       this.loading = true;
diff --git a/src/views/system/calculate/report/index.vue b/src/views/system/calculate/report/index.vue
index 25100df..6dea7bd 100644
--- a/src/views/system/calculate/report/index.vue
+++ b/src/views/system/calculate/report/index.vue
@@ -64,7 +64,7 @@
     <el-card class="box-card" v-for="(item) in checkResultList">
       <div slot="header" class="clearfix">
         <span>{{ checkUnitName }}</span>
-        <el-button style="float: right; padding: 3px 0" type="text" @click="handleDetail(item)">璇︽儏</el-button>
+        <el-button style="float: right; padding: 3px 0" type="text" @click="handleDetail(item)">鏍哥畻</el-button>
       </div>
       <div class="text item">鍚堝悓<span class="time">{{ checkUnitName }}</span></div>
       <div class="text item">鎬婚噾棰�<span class="time">{{ "1000鍏�" }}</span></div>
@@ -85,7 +85,7 @@
       @pagination="getList"
     />
 
-    <el-dialog :title="detailTitle" :visible.sync="detailOpen" width="700px" append-to-body>
+    <el-dialog :title="detailTitle" :visible.sync="detailOpen" width="760px" append-to-body>
       <el-descriptions class="margin-top" :column="3" border>
 <!--        <template slot="extra">-->
 <!--          <el-button type="primary" size="small">鎿嶄綔</el-button>-->
@@ -109,7 +109,7 @@
           :data="tableData"
           show-summary
           :summary-method="getSummaries"
-          style="width: 100%">
+          style="width: 100%;text-align:center">
           <el-table-column
             prop="time"
             label="鏍哥畻鏃ユ湡"
@@ -121,11 +121,34 @@
             width="180"
             doNotSum>
           </el-table-column>
-          <el-table-column
+          <el-table-column  
+            prop="score"  
+            label="鎵e垎绯绘暟"  
+            width="180">  
+            <template slot-scope="scope">  
+              <el-tooltip class="item" effect="dark" :content="'鑰冩牳瑙勫垯锛�' + scope.row.description" placement="top">  
+                <span>{{ scope.row.value }}</span>  
+              </el-tooltip>  
+            </template>  
+          </el-table-column>  
+          <el-table-column  
+            label="鎵e噺閲戦(鍏�)" 
             prop="money"
-            label="鎵e噺閲戦(鍏�)">
-          </el-table-column>
+            width="180">  
+            <template slot-scope="scope">  
+              <el-input type="number"
+                :precision="2" :step="0.1"
+                :min="0" :max="1000000"
+                v-model="scope.row.money"
+                placeholder="璇疯緭鍏ユ墸鍑忛噾棰�">  
+              </el-input>  
+            </template>  
+          </el-table-column> 
         </el-table>
+        <div slot="footer" class="dialog-footer">
+          <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
+          <el-button @click="cancel">鍙� 娑�</el-button>
+        </div>
     </el-dialog>
 
     <!-- 娣诲姞鎴栦慨鏀硅�冩牳缁撴灉瀵硅瘽妗� -->
@@ -156,11 +179,15 @@
       tableData: [{
         time: '2024-03-03',
         score: '94',
-        money: '10',
+        value: '0.01',
+        money: '',
+        description: '姣忓皯1鍒嗘墸褰撴湀鎬绘湇鍔¤垂鐨�1%銆備緥濡傦細褰撴湀鑰冩牳寰楀垎91.5鍒嗭紝鎵i櫎褰撴湀鏈嶅姟璐�3.5%鐨勯噾棰�',
       }, {
         time: '2024-04-03',
         score: '95',
-        money: '0',
+        value: '0',
+        money: '',
+        description: '姣忓皯1鍒嗘墸褰撴湀鎬绘湇鍔¤垂鐨�1%銆備緥濡傦細褰撴湀鑰冩牳寰楀垎91.5鍒嗭紝鎵i櫎褰撴湀鏈嶅姟璐�3.5%鐨勯噾棰�',
       }, ],
       manualScoreOpen: false,
       manualScoreForm: {},
@@ -234,7 +261,7 @@
     },
     // 鍙栨秷鎸夐挳
     cancel() {
-      this.open = false;
+      this.detailOpen = false;
       this.reset();
     },
     // 琛ㄥ崟閲嶇疆
@@ -270,9 +297,10 @@
       })
     },
     handleDetail(row) {
+      console.log("row", row)
       this.detail = row;
       this.detail.carOnlineRate =  '97%';
-      this.detailTitle = row.checkUnitName + '鑰冩牳缁撴灉';
+      this.detailTitle = this.checkUnitName + '鑰冩牳缁撴灉';
       this.detailOpen = true;
 
     },
@@ -322,6 +350,7 @@
     },
     /** 鎻愪氦鎸夐挳 */
     submitForm() {
+      this.detailOpen = false;
       this.$refs["form"].validate(valid => {
         if (valid) {
           if (this.form.id != null) {
@@ -378,6 +407,9 @@
           if (column.property === 'score') {
             sums[index] = '-'; // 鎴栬�呭叾浠栦綘鎯宠鏄剧ず鐨勫唴瀹�
           }
+          if (column.property === 'value') {
+            sums[index] = '-'; // 鎴栬�呭叾浠栦綘鎯宠鏄剧ず鐨勫唴瀹�
+          }
         } else {
           sums[index] = 'N/A';
         }
diff --git a/src/views/system/data-manage/index.vue b/src/views/system/data-manage/index.vue
index 103baba..c4268bc 100644
--- a/src/views/system/data-manage/index.vue
+++ b/src/views/system/data-manage/index.vue
@@ -89,6 +89,26 @@
         </el-col>
       </el-row>
     </div>
+    
+    <div class="container">
+      <el-row type="flex" justify="center">
+        <el-col :span="24">
+          <h3 style="color: rgb(104,104,103);padding-top: 20px;padding-bottom: 20px;">璧勪骇绠$悊</h3>
+        </el-col>
+      </el-row>
+
+      <el-row type="flex" justify="center">
+        <el-col :span="6" v-for="(item, index) in equipment" :key="index">
+          <el-link @click="handleDetail(item)" :style="item.name == '' ? 'display:none' : ''">
+            <el-card style="width:150px;height: 150px;text-align: center;">
+              <i style="font-size: 40px;padding: 15px;" :class="item.icon"></i>
+              <div>{{ item.name }}</div>
+            </el-card>
+          </el-link>
+        </el-col>
+      </el-row>
+      <br/>
+    </div>
     <br/><br/><br/><br/>
   </div>
 </template>
@@ -144,6 +164,14 @@
         { name: '', icon: 'el-icon-timer', description: '鎻忚堪淇℃伅', routerUrl: '/car/vehicle-data-monitor/index' },
         { name: '', icon: 'el-icon-money', description: '鎻忚堪淇℃伅', routerUrl: '/car/vehicle-data-monitor/index' },
         { name: '', icon: 'el-icon-data-analysis', description: '鎻忚堪淇℃伅', routerUrl: '/car/vehicle-data-monitor/index' },
+      ],
+      equipment: [
+        { name: '璧勪骇绠$悊', icon: 'el-icon-wallet', description: '鎻忚堪淇℃伅', routerUrl: '/car/equipment/index' },
+        { name: '', icon: 'el-icon-pie-chart', description: '鎻忚堪淇℃伅', routerUrl: '/car/vehicle-data-monitor/index' },
+        { name: '', icon: 'el-icon-data-line', description: '鎻忚堪淇℃伅', routerUrl: '/car/vehicle-data-monitor/index' },
+        { name: '', icon: 'el-icon-timer', description: '鎻忚堪淇℃伅', routerUrl: '/car/vehicle-data-monitor/index' },
+        { name: '', icon: 'el-icon-money', description: '鎻忚堪淇℃伅', routerUrl: '/car/vehicle-data-monitor/index' },
+        { name: '', icon: 'el-icon-data-analysis', description: '鎻忚堪淇℃伅', routerUrl: '/car/vehicle-data-monitor/index' },
       ]
     }
   },
diff --git a/src/views/system/equipment/index.vue b/src/views/system/equipment/index.vue
new file mode 100644
index 0000000..ada2e73
--- /dev/null
+++ b/src/views/system/equipment/index.vue
@@ -0,0 +1,437 @@
+<template>
+
+  <div class="app-container">
+
+    <el-card class="box-card" >
+      <el-row type="flex" align="middle" justify="space-between">
+        <el-col :xl="8" :lg="8" :md="10" :sm="8" :xs="6">
+        <div class="icon-container" style="background-color: #5599F7">
+          <i class="el-icon-wallet"></i>
+        </div>
+        </el-col>
+        <el-col :xl="14" :lg="14" :md="12" :sm="14" :xs="16">
+          <div class="dashboard">
+            <div class="dashboard-item">
+              <h3 style="color: #5C9BF8">{{ count.totalPosts }}</h3>
+              <p>璁惧鎬绘暟</p >
+            </div>
+            <div class="dashboard-item">
+              <h3 style="color: #3eba45">{{ count.totalMembers }}</h3>
+              <p>姝e父鏁�</p >
+            </div>
+            <div class="dashboard-item">
+              <h3 style="color: #fe640d">{{ count.postsPercentage }}</h3>
+              <p>寮傚父鏁�</p >
+            </div>
+            <div class="dashboard-item">
+              <h3>{{ count.totalViews }}</h3>
+              <p>鐢熸垚寮傚父宸ュ崟鏁�</p >
+            </div>
+            <div class="dashboard-item">
+              <h3>{{ count.noStore }}</h3>
+              <p>鏃犲瓨鍌�</p >
+            </div>
+            <div class="dashboard-item">
+              <h3>{{ count.partStore }}</h3>
+              <p>閮ㄥ垎瀛樺偍</p >
+            </div>
+            <div class="dashboard-item">
+              <h3>{{ count.viewsPercentage }}%</h3>
+              <p>璁惧杩愯鐜�</p >
+            </div>
+          </div>
+        </el-col>
+      </el-row>
+    </el-card>
+
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch">
+      <el-form-item label="鍏抽敭瀛�" prop="name">
+        <el-input
+          v-model="queryParams.name"
+          placeholder="璇疯緭鍏ュ叧閿瓧"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="鍖哄煙" prop="onState">
+        <el-select
+          v-model="queryParams.address"
+          placeholder="璇烽�夋嫨鍖哄煙"
+          clearable
+        >
+          <el-option label="鑷础甯�" value="鑷础甯�"/>
+          <el-option label="娌挎哗鍖�" value="娌挎哗鍖�"/>
+          <el-option label="澶у畨鍖�" value="澶у畨鍖�"/>
+          <el-option label="璐′簳鍖�" value="璐′簳鍖�"/>
+          <el-option label="鑷祦浜曞尯" value="鑷祦浜曞尯"/>
+          <el-option label="楂樻柊鍖�" value="楂樻柊鍖�"/>
+          <el-option label="鑽e幙" value="鑽e幙"/>
+          <el-option label="瀵岄『鍘�" value="瀵岄『鍘�"/>
+        </el-select>
+      </el-form-item>
+      <el-form-item label="璁惧鐘舵��" prop="onState">
+        <el-select
+          v-model="queryParams.onState"
+          placeholder="璁惧鐘舵��"
+          clearable
+          style="width: 100px"
+        >
+        <el-option
+          v-for="dict in dict.type.camera_state"
+          :key="dict.value"
+          :label="dict.label"
+          :value="dict.value"
+        />
+        </el-select>
+      </el-form-item>
+       <el-form-item label="鏄惁鐢熸垚寮傚父宸ュ崟" prop="defaultOrder" label-width="130px">
+         <el-select
+           v-model="queryParams.defaultOrder"
+           placeholder="鏄惁鐢熸垚寮傚父宸ュ崟"
+           clearable
+           style="width: 170px"
+         >
+         <el-option
+           v-for="dict in dict.type.platform_yes_no"
+           :key="dict.value"
+           :label="dict.label"
+           :value="dict.value"
+         />
+         </el-select>
+        </el-form-item>
+
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+        >瀵煎嚭</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList" :columns="columns"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="monitorList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" align="center" />
+      <el-table-column label="璁惧鍚嶇О" align="center" prop="name" width="280" fixed/>
+      <el-table-column label="璁惧缂栫爜" align="center" prop="serialNumber" width="180"/>
+      <el-table-column label="鏍囩" align="center" prop="publicSecurity" width="180" v-if="columns[0].visible"/>
+      <el-table-column label="鍖哄煙" align="center" prop="address" width="180" v-if="columns[1].visible"/>
+      <el-table-column label="璁惧鐘舵��" align="center" prop="onState" v-if="columns[2].visible">
+      <template slot-scope="scope">
+        <dict-tag :options="dict.type.camera_state" :value="scope.row.onState"/>
+      </template>
+      </el-table-column>
+      <el-table-column label="鏄惁鐢熸垚寮傚父宸ュ崟" align="center" prop="defaultOrder" width="180" v-if="columns[3].visible">
+      <template slot-scope="scope">
+        <dict-tag :options="dict.type.platform_yes_no" :value="scope.row.defaultOrder"/>
+      </template>
+      </el-table-column>
+      <el-table-column label="鏁版嵁鏃堕棿" align="center" prop="installedTime" width="180" v-if="columns[4].visible"/>
+      <el-table-column label="绠$悊鍗曚綅" align="center" prop="managementUnit" width="180" v-if="columns[5].visible"/>
+      <el-table-column label="淇′护鏃跺欢(ms)" align="center" prop="sipDelay" width="180" v-if="columns[6].visible"/>
+      <el-table-column label="瑙嗛鏃跺欢(ms)" align="center" prop="videoDelay" width="180" v-if="columns[7].visible"/>
+      <el-table-column label="鍏抽敭甯ф椂寤�(ms)" align="center" prop="iframeDelay" width="180" v-if="columns[8].visible"/>
+      <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width"  fixed="right">
+          <template slot-scope="scope">
+            <el-button
+              size="mini"
+              type="text"
+              icon="el-icon-view"
+              @click="handleView(scope.row,scope.index)"
+            >璇︾粏</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="鎿嶄綔鏃ュ織璇︾粏" :visible.sync="open" width="800px" append-to-body>
+      <el-form ref="form" :model="form" label-width="150px" size="mini">
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="璁惧缂栫爜锛�">{{ form.serialNumber }}</el-form-item>
+            <el-form-item label="璁惧鍚嶇О锛�">{{ form.name }} </el-form-item>
+            <el-form-item label="鍦板尯锛�">{{ form.address }} </el-form-item>
+            <el-form-item label="涓婃姤閮ㄩ棬锛�">{{ form.deptName }} </el-form-item>
+            <el-form-item label="璁惧鐘舵�侊細">
+              <div v-if="form.onState === 1">鍙敤</div>
+              <div v-else-if="form.onState === 2">涓嶅彲鐢�</div>
+            </el-form-item>
+          </el-col>
+          <el-col :span="24">
+            <el-form-item label="鍦板潃锛�">{{ form.address }}</el-form-item>
+            <el-form-item label="鏄惁鐢熸垚寮傚父宸ュ崟锛�">
+              <div v-if="form.defaultOrder === 1">鏄�</div>
+              <div v-else-if="form.defaultOrder === 2">鍚�</div>
+            </el-form-item>
+          </el-col>
+          <el-col :span="24">
+            <el-form-item label="瀹夎鏃堕棿锛�">{{ form.installedTime }}</el-form-item>
+          </el-col>
+          <el-col :span="24">
+            <el-form-item label="绠$悊鍗曚綅锛�">{{ form.managementUnit }}</el-form-item>
+          </el-col>
+          <el-col :span="24">
+            <el-form-item label="淇′护鏃跺欢(ms)锛�"></el-form-item>
+          </el-col>
+          <el-col :span="24">
+            <el-form-item label="瑙嗛鏃跺欢(ms)锛�"></el-form-item>
+          </el-col>
+          <el-col :span="24">
+            <el-form-item label="鍏抽敭甯ф椂寤�(ms)锛�"></el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="open = false">鍏� 闂�</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { videoCount, listMonitor, getMonitor, delMonitor, addMonitor, updateMonitor } from "@/api/platform/monitor";
+export default {
+  name: "Monitor",
+  dicts: ['sys_normal_disable', 'platform_yes_no','camera_state'],
+  data() {
+    return {
+      // 鍒椾俊鎭�
+      columns: [
+        { key: 0, label: `鏍囩`, visible: true },
+        { key: 1, label: `鍖哄煙`, visible: true },
+        { key: 2, label: `璁惧鐘舵�乣, visible: true },
+        { key: 3, label: `鏄惁鐢熸垚寮傚父宸ュ崟`, visible: true },
+        { key: 4, label: `鏁版嵁鏃堕棿`, visible: true },
+        { key: 5, label: `绠$悊鍗曚綅`, visible: true },
+        { key: 6, label: `淇′护鏃跺欢`, visible: true },
+        { key: 7, label: `瑙嗛鏃跺欢`, visible: true },
+        { key: 8, label: `鍏抽敭甯ф椂寤禶, visible: true }
+      ],
+      count: {
+        totalPosts: 0,
+        totalMembers: 0,
+        postsPercentage: 0,
+        totalViews: 0,
+        noStore: 0,
+        partStore: 0,
+        viewsPercentage: 0
+      },
+      // 閬僵灞�
+      loading: true,
+      // 閫変腑鏁扮粍
+      ids: [],
+      // 闈炲崟涓鐢�
+      single: true,
+      // 闈炲涓鐢�
+      multiple: true,
+      // 鏄剧ず鎼滅储鏉′欢
+      showSearch: true,
+      // 鎬绘潯鏁�
+      total: 0,
+      // 璁惧璧勪骇琛ㄦ牸鏁版嵁
+      monitorList: [],
+      // 寮瑰嚭灞傛爣棰�
+      title: "",
+      // 鏄惁鏄剧ず寮瑰嚭灞�
+      open: false,
+      // 鏌ヨ鍙傛暟
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        serialNumber: null,
+        name: null,
+        onState: null,
+        address: null,
+        installedTime: null,
+        managementUnit: null,
+        defaultOrder: null,
+        cameraFunType: 1,
+      },
+      // 琛ㄥ崟鍙傛暟
+      form: {},
+      // 琛ㄥ崟鏍¢獙
+      rules: {
+        serialNumber: [
+          { required: true, message: "璁惧缂栫爜涓嶈兘涓虹┖", trigger: "blur" }
+        ],
+        name: [
+          { required: true, message: "璁惧鍚嶇О涓嶈兘涓虹┖", trigger: "blur" }
+        ],
+        onState: [
+          { required: true, message: "璁惧鐘舵��", trigger: "blur" }
+        ],
+        address: [
+          { required: true, message: "鍦板潃涓嶈兘涓虹┖", trigger: "blur" }
+        ],
+      }
+    };
+  },
+  created() {
+    this.getVideoCount();
+    this.getList();
+    this.getCountyList();
+  },
+  methods: {
+    /** 鏌ヨ璁惧璧勪骇鍒楄〃 */
+    getList() {
+      this.loading = true;
+      listMonitor(this.queryParams).then(response => {
+        this.monitorList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+     /** 鏌ヨ璁惧璧勪骇缁熻鏁� */
+     getVideoCount() {
+      videoCount('1').then(response => {
+        this.count = response.data;
+      });
+    },
+    // 鍙栨秷鎸夐挳
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 琛ㄥ崟閲嶇疆
+    reset() {
+      this.form = {
+        id: null,
+        serialNumber: null,
+        name: null,
+        onState: null,
+        address: null,
+        installedTime: null,
+        managementUnit: null,
+        defaultOrder: null,
+      };
+      this.resetForm("form");
+    },
+    /** 鎼滅储鎸夐挳鎿嶄綔 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.queryParams.cameraFunType = 1;
+      this.getList();
+      this.getVideoCount();
+    },
+    /** 閲嶇疆鎸夐挳鎿嶄綔 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+
+    // 澶氶�夋閫変腑鏁版嵁
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 鏂板鎸夐挳鎿嶄綔 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "娣诲姞璁惧璧勪骇";
+    },
+    /** 璇︾粏鎸夐挳鎿嶄綔 */
+    handleView(row) {
+      this.open = true;
+      this.form = row;
+    },
+    /** 淇敼鎸夐挳鎿嶄綔 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getMonitor(id).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "淇敼璁惧璧勪骇";
+      });
+    },
+    /** 鎻愪氦鎸夐挳 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != null) {
+            updateMonitor(this.form).then(response => {
+              this.$modal.msgSuccess("淇敼鎴愬姛");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addMonitor(this.form).then(response => {
+              this.$modal.msgSuccess("鏂板鎴愬姛");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$modal.confirm('鏄惁纭鍒犻櫎璁惧璧勪骇缂栧彿涓�"' + ids + '"鐨勬暟鎹」锛�').then(function() {
+        return delMonitor(ids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("鍒犻櫎鎴愬姛");
+      }).catch(() => {});
+    },
+    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
+    handleExport() {
+      this.download('system/monitor/export', {
+        ...this.queryParams
+      }, `monitor_${new Date().getTime()}.xlsx`)
+    }
+  }
+};
+</script>
+<style lang="scss" scoped>
+
+.box-card {
+  background-color: #F5F9FE;
+  width: 100%;
+  margin-bottom: 20px;
+  height: 120px
+}
+.icon-container {
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  border-radius: 20px;
+  width: 20%;
+  height: 80px;
+  margin-left: 5%;
+}
+.el-icon-wallet {
+  font-size: 50px;
+  color: #FFFFFF;
+}
+
+.dashboard {
+  display: flex;
+  gap: 10%;
+  align-items: center;
+  margin-left: -50%;
+}
+
+.dashboard-item {
+  text-align: center;
+}
+</style>
diff --git a/src/views/system/platform/index.vue b/src/views/system/platform/index.vue
new file mode 100644
index 0000000..34d5f02
--- /dev/null
+++ b/src/views/system/platform/index.vue
@@ -0,0 +1,412 @@
+<template>
+  <div class="app-container">
+    <el-card class="box-card" >
+      <el-row type="flex" align="middle" justify="space-between">
+        <el-col :xl="8" :lg="8" :md="10" :sm="8" :xs="6">
+        <div class="icon-container" style="background-color: #5599F7">
+          <i class="el-icon-connection"></i>
+        </div>
+        </el-col>
+        <el-col :xl="14" :lg="14" :md="12" :sm="14" :xs="16">
+          <div class="dashboard">
+            <div class="dashboard-item">
+              <h3 style="color: #5C9BF8">{{ count.totalPosts }}</h3>
+              <p>璁惧鎬绘暟</p >
+            </div>
+            <div class="dashboard-item">
+              <h3 style="color: #3eba45">{{ count.totalMembers }}</h3>
+              <p>姝e父鏁�</p >
+            </div>
+            <div class="dashboard-item">
+              <h3 style="color: #fe640d">{{ count.postsPercentage }}</h3>
+              <p>寮傚父鏁�</p >
+            </div>
+            <div class="dashboard-item">
+              <h3>{{ count.totalViews }}</h3>
+              <p>鐢熸垚寮傚父宸ュ崟鏁�</p >
+            </div>
+          </div>
+        </el-col>
+      </el-row>
+    </el-card>
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="骞冲彴缂栫爜" prop="platformCode">
+        <el-input
+          v-model="queryParams.platformCode"
+          placeholder="璇疯緭鍏ュ钩鍙扮紪鐮�"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="骞冲彴鍚嶇О" prop="platformName">
+        <el-input
+          v-model="queryParams.platformName"
+          placeholder="璇疯緭鍏ュ钩鍙板悕绉�"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="璁惧鐘舵��" prop="onState">
+        <el-select
+          v-model="queryParams.status"
+          placeholder="璁惧鐘舵��"
+          clearable
+          style="width: 100px"
+        >
+        <el-option
+          v-for="dict in dict.type.camera_state"
+          :key="dict.value"
+          :label="dict.label"
+          :value="dict.value"
+        />
+        </el-select>
+      </el-form-item>
+       <el-form-item label="鏄惁鐢熸垚寮傚父宸ュ崟" prop="defaultOrder" label-width="130px">
+         <el-select
+           v-model="queryParams.status"
+           placeholder="鏄惁鐢熸垚寮傚父宸ュ崟"
+           clearable
+           style="width: 170px"
+         >
+         <el-option
+           v-for="dict in dict.type.platform_yes_no"
+           :key="dict.value"
+           :label="dict.label"
+           :value="dict.value"
+         />
+         </el-select>
+        </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <!-- <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['platform:platform:add']"
+        >鏂板</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['platform:platform:edit']"
+        >淇敼</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['platform:platform:remove']"
+        >鍒犻櫎</el-button>
+      </el-col> -->
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['platform:platform:export']"
+        >瀵煎嚭</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="platformList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="骞冲彴缂栫爜" align="center" prop="platformCode" />
+      <el-table-column label="骞冲彴鍚嶇О" align="center" prop="platformName" />
+      <!-- <el-table-column label="骞冲彴鑱旂郴浜�" align="center" prop="platformContact" />
+      <el-table-column label="骞冲彴鑱旂郴浜虹數璇�" align="center" prop="platformContactPhone" /> -->
+      <el-table-column label="鐘舵��" align="center" prop="status">
+        <template slot-scope="scope">
+          <dict-tag :options="dict.type.camera_state" :value="scope.row.status"/>
+        </template>
+      </el-table-column>
+      <el-table-column label="鏄惁鐢熸垚寮傚父宸ュ崟" align="center" prop="defaultOrder" width="180">
+        <template slot-scope="scope">
+          <dict-tag :options="dict.type.platform_yes_no" :value="scope.row.status"/>
+        </template>
+      </el-table-column>
+      <!-- <el-table-column label="澶囨敞" align="center" prop="remark" /> -->
+      <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['platform:platform:edit']"
+          >淇敼</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['platform:platform:remove']"
+          >鍒犻櫎</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="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="骞冲彴缂栫爜" prop="platformCode">
+          <el-input v-model="form.platformCode" placeholder="璇疯緭鍏ュ钩鍙扮紪鐮�" />
+        </el-form-item>
+        <el-form-item label="骞冲彴鍚嶇О" prop="platformName">
+          <el-input v-model="form.platformName" placeholder="璇疯緭鍏ュ钩鍙板悕绉�" />
+        </el-form-item>
+        <el-form-item label="骞冲彴鑱旂郴浜�" prop="platformContact">
+          <el-input v-model="form.platformContact" placeholder="璇疯緭鍏ュ钩鍙拌仈绯讳汉" />
+        </el-form-item>
+        <el-form-item label="骞冲彴鑱旂郴浜虹數璇�" prop="platformContactPhone">
+          <el-input v-model="form.platformContactPhone" placeholder="璇疯緭鍏ュ钩鍙拌仈绯讳汉鐢佃瘽" />
+        </el-form-item>
+        <el-form-item label="澶囨敞" prop="remark">
+          <el-input v-model="form.remark" placeholder="璇疯緭鍏ュ娉�" />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
+        <el-button @click="cancel">鍙� 娑�</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listPlatform, getPlatform, delPlatform, addPlatform, updatePlatform } from "@/api/platform/platform";
+import { videoCount } from "@/api/platform/monitor";
+export default {
+  name: "Platform",
+  dicts: ['sys_normal_disable', 'platform_yes_no','camera_state'],
+  data() {
+    return {
+      count: {
+        totalPosts: 0,
+        totalMembers: 0,
+        postsPercentage: 0,
+        totalViews: 0,
+        noStore: 0,
+        partStore: 0,
+        viewsPercentage: 0
+      },
+      // 閬僵灞�
+      loading: true,
+      // 閫変腑鏁扮粍
+      ids: [],
+      // 闈炲崟涓鐢�
+      single: true,
+      // 闈炲涓鐢�
+      multiple: true,
+      // 鏄剧ず鎼滅储鏉′欢
+      showSearch: true,
+      // 鎬绘潯鏁�
+      total: 0,
+      // 骞冲彴杩愯鐩戞帶琛ㄦ牸鏁版嵁
+      platformList: [],
+      // 寮瑰嚭灞傛爣棰�
+      title: "",
+      // 鏄惁鏄剧ず寮瑰嚭灞�
+      open: false,
+      // 鏌ヨ鍙傛暟
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        platformCode: null,
+        platformName: null,
+        platformContact: null,
+        platformContactPhone: null,
+        status: null,
+        remark: null,
+      },
+      // 琛ㄥ崟鍙傛暟
+      form: {},
+      // 琛ㄥ崟鏍¢獙
+      rules: {
+        platformCode: [
+          { required: true, message: "骞冲彴缂栫爜涓嶈兘涓虹┖", trigger: "blur" }
+        ],
+        platformName: [
+          { required: true, message: "骞冲彴鍚嶇О涓嶈兘涓虹┖", trigger: "blur" }
+        ],
+        platformContact: [
+          { required: true, message: "骞冲彴鑱旂郴浜轰笉鑳戒负绌�", trigger: "blur" }
+        ],
+        platformContactPhone: [
+          { required: true, message: "骞冲彴鑱旂郴浜虹數璇濅笉鑳戒负绌�", trigger: "blur" }
+        ],
+      }
+    };
+  },
+  created() {
+    this.getList();
+    this.getVideoCount();
+  },
+  methods: {
+    /** 鏌ヨ骞冲彴杩愯鐩戞帶鍒楄〃 */
+    getList() {
+      this.loading = true;
+      listPlatform(this.queryParams).then(response => {
+        this.platformList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    /** 鏌ヨ璁惧璧勪骇缁熻鏁� */
+    getVideoCount() {
+      videoCount('1').then(response => {
+        this.count = response.data;
+      });
+    },
+    // 鍙栨秷鎸夐挳
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 琛ㄥ崟閲嶇疆
+    reset() {
+      this.form = {
+        id: null,
+        platformCode: null,
+        platformName: null,
+        platformContact: null,
+        platformContactPhone: null,
+        status: null,
+        remark: null,
+        createTime: null,
+        updateTime: null,
+        deleted: null
+      };
+      this.resetForm("form");
+    },
+    /** 鎼滅储鎸夐挳鎿嶄綔 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 閲嶇疆鎸夐挳鎿嶄綔 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 澶氶�夋閫変腑鏁版嵁
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 鏂板鎸夐挳鎿嶄綔 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "娣诲姞骞冲彴杩愯鐩戞帶";
+    },
+    /** 淇敼鎸夐挳鎿嶄綔 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getPlatform(id).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "淇敼骞冲彴杩愯鐩戞帶";
+      });
+    },
+    /** 鎻愪氦鎸夐挳 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != null) {
+            updatePlatform(this.form).then(response => {
+              this.$modal.msgSuccess("淇敼鎴愬姛");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addPlatform(this.form).then(response => {
+              this.$modal.msgSuccess("鏂板鎴愬姛");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$modal.confirm('鏄惁纭鍒犻櫎骞冲彴杩愯鐩戞帶缂栧彿涓�"' + ids + '"鐨勬暟鎹」锛�').then(function() {
+        return delPlatform(ids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("鍒犻櫎鎴愬姛");
+      }).catch(() => {});
+    },
+    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
+    handleExport() {
+      this.download('platform/platform/export', {
+        ...this.queryParams
+      }, `platform_${new Date().getTime()}.xlsx`)
+    }
+  }
+};
+</script>
+<style lang="scss" scoped>
+
+.box-card {
+  background-color: #F5F9FE;
+  width: 100%;
+  margin-bottom: 20px;
+  height: 120px
+}
+.icon-container {
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  border-radius: 20px;
+  width: 20%;
+  height: 80px;
+  margin-left: 5%;
+}
+.el-icon-connection {
+  font-size: 50px;
+  color: #FFFFFF;
+}
+
+.dashboard {
+  display: flex;
+  gap: 10%;
+  align-items: center;
+  margin-left: -50%;
+}
+
+.dashboard-item {
+  text-align: center;
+}
+</style>
\ No newline at end of file
diff --git a/src/views/system/rule/city/index.vue b/src/views/system/rule/index.vue
similarity index 100%
rename from src/views/system/rule/city/index.vue
rename to src/views/system/rule/index.vue
diff --git a/src/views/system/template/city/index.vue b/src/views/system/template/index.vue
similarity index 100%
rename from src/views/system/template/city/index.vue
rename to src/views/system/template/index.vue
diff --git a/src/views/system/template/province/index.vue b/src/views/system/template/province/index.vue
deleted file mode 100644
index 2ed927d..0000000
--- a/src/views/system/template/province/index.vue
+++ /dev/null
@@ -1,471 +0,0 @@
-<template>
-  <div class="app-container">
-    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
-      <el-form-item label="鐘舵��" prop="status">
-        <el-input
-          v-model="queryParams.status"
-          placeholder="璇疯緭鍏ョ姸鎬�"
-          clearable
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="鑰冩牳瀵硅薄" prop="unitName">
-        <el-input
-          v-model="queryParams.status"
-          placeholder="璇疯緭鍏ヨ�冩牳瀵硅薄"
-          clearable
-          @keyup.enter.native="handleQuery"
-        />
-      </el-form-item>
-      <el-form-item label="鍒涘缓鏃堕棿">
-        <el-date-picker
-          v-model="daterangeCreateTime"
-          style="width: 240px"
-          value-format="yyyy-MM-dd"
-          type="daterange"
-          range-separator="-"
-          start-placeholder="寮�濮嬫棩鏈�"
-          end-placeholder="缁撴潫鏃ユ湡"
-        ></el-date-picker>
-      </el-form-item>
-      <el-form-item>
-        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">鎼滅储</el-button>
-        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button>
-      </el-form-item>
-    </el-form>
-
-    <el-row :gutter="10" class="mb8">
-      <el-col :span="1.5">
-        <el-button
-          type="primary"
-          plain
-          icon="el-icon-plus"
-          size="mini"
-          @click="handleAdd"
-        >鏂板</el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="success"
-          plain
-          icon="el-icon-edit"
-          size="mini"
-          :disabled="single"
-          @click="handleUpdate"
-        >淇敼</el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="danger"
-          plain
-          icon="el-icon-delete"
-          size="mini"
-          :disabled="multiple"
-          @click="handleDelete"
-        >鍒犻櫎</el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button
-          type="warning"
-          plain
-          icon="el-icon-download"
-          size="mini"
-          @click="handleExport"
-        >瀵煎嚭</el-button>
-      </el-col>
-      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
-    </el-row>
-
-    <el-table v-loading="loading" :data="checkTemplateList" @selection-change="handleSelectionChange">
-      <el-table-column type="selection" width="55" align="center" />
-      <el-table-column label="妯℃澘鍚嶇О" align="center" prop="templateName" width="220px"/>
-      <el-table-column label="鑰冩牳绫诲瀷" align="center" prop="examineCategory" />
-      <el-table-column label="鑰冩牳瀵硅薄" align="center" prop="unitId" width="400px" >
-        <template slot-scope="scope">
-          <div v-if="scope.row.unitId === 2">鎴愰兘x杩愮淮</div>
-          <div v-else-if="scope.row.unitId === 3">瀵岄『鍘�,鑽e幙,楂樻柊鍖�,鑷祦浜曞尯,璐′簳鍖�,澶у畨鍖�,娌挎哗鍖�</div>
-        </template>
-      </el-table-column>
-      <el-table-column label="璋冩暣绯绘暟" align="center" prop="adjustCoefficient" />
-      <el-table-column label="璋冩暣绯绘暟璁$畻鏂瑰紡" align="center" prop="adjustWay"/>
-      <el-table-column label="鐘舵��" align="center" prop="status" />
-      <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
-        <template slot-scope="scope">
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-edit"
-            @click="handleUpdate(scope.row)"
-          >淇敼</el-button>
-          <el-button
-            size="mini"
-            type="text"
-            icon="el-icon-delete"
-            @click="handleDelete(scope.row)"
-          >鍒犻櫎</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="title" :visible.sync="open" width="700px" append-to-body>
-      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
-        <el-form-item label="妯℃澘鍚嶇О" prop="templateName">
-          <el-input v-model="form.templateName" placeholder="璇疯緭鍏ユā鏉垮悕绉�" />
-        </el-form-item>
-        <el-form-item label="鑰冩牳绫诲瀷" prop="examineCategory">
-          <el-select v-model="form.examineCategory"  placeholder="璇烽�夋嫨鑰冩牳绫诲瀷">
-            <el-option label="鐪佸巺鑰冩牳" value="鐪佸巺鑰冩牳"/>
-            <el-option label="鍖哄幙鑰冩牳" value="鍖哄幙鑰冩牳"/>
-            <el-option label="杩愮淮鑰冩牳" value="鍏徃鑰冩牳"/>
-          </el-select>
-        </el-form-item>
-        <el-form-item label="鑰冩牳瀵硅薄" prop="unitName">
-          <div class="block">
-            <span class="demonstration"></span>
-            <el-cascader
-              v-model="value"
-              :options="options"
-              :props = "props"
-              @change="handleChange"></el-cascader>
-          </div>
-
-        </el-form-item>
-        <el-form-item label="鑰冩牳瑙勫垯" prop="tempRuleFormList">
-          <div class="row-warp">
-            <div class="row" v-for="(form) in tempRuleFormList">
-              <div class="row-left">
-                  <div>瑙勫垯</div>
-                  <div class="margin-5">
-                    <el-select v-model="form.ruleId" placeholder="璇烽�夋嫨">
-                      <el-option
-                        v-for="item in ruleList"
-                        :key="item.id"
-                        :label="item.value"
-                        :value="item.id">
-                      </el-option>
-                    </el-select>
-                </div>
-              </div>
-              <div class="row-right">
-                  <div>鏉冮噸</div>
-                  <div class="margin-5">
-                    <el-input type="number" v-model="form.weight"/>
-                  </div>
-              </div>
-              <div class="item-op">
-                <el-button @click="removeRule(form)" type="danger" icon="el-icon-delete" circle></el-button>
-              </div>
-            </div>
-            <div style="margin-top: 25px">
-              <el-button type="success" @click="nextAdd" size="mini" plain>娣诲姞</el-button>
-            </div>
-          </div>
-        </el-form-item>
-        <el-form-item label="璋冩暣绯绘暟" prop="adjustCoefficient">
-          <el-input v-model="form.adjustCoefficient" placeholder="璇疯緭鍏ョ郴鏁板��" />
-        </el-form-item>
-        <el-form-item label="璋冩暣鏂瑰紡" prop="adjustWay">
-          <el-select v-model="form.adjustWay" placeholder="璇烽�夋嫨璋冩暣绯绘暟璁$畻鏂瑰紡">
-            <el-option
-              label="涔�"
-              value="*">
-            </el-option>
-            <el-option
-              label="闄�"
-              value="/">
-            </el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item label="鐘舵��" prop="status">
-          <el-radio v-model="form.status" label="use">鍚敤</el-radio>
-          <el-radio v-model="form.status" label="stop">鍋滅敤</el-radio>
-        </el-form-item>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="submitForm">纭� 瀹�</el-button>
-        <el-button @click="cancel">鍙� 娑�</el-button>
-      </div>
-    </el-dialog>
-  </div>
-</template>
-
-<script>
-import { listCheckTemplate, getCheckTemplate, delCheckTemplate, addCheckTemplate, updateCheckTemplate } from "@/api/platform/check-template";
-// import { ruleSelect } from '@/api/platform/check-rule'
-import { unitSelect } from '@/api/platform/unit'
-
-export default {
-  name: "CheckTemplate",
-  data() {
-    return {
-      props: { multiple: true },
-      value: [],
-      options: [{
-        value: 'city',
-        label: '鍖哄幙',
-        children: [{
-          value: 'fushun',
-          label: '瀵岄『鍘�',
-        }, {
-          value: 'rong',
-          label: '鑽e幙',
-        },{
-          value: 'gaoxin',
-          label: '楂樻柊鍖�',
-        },{
-          value: 'ziliujing',
-          label: '鑷祦浜曞尯',
-        },{
-          value: 'gongjing',
-          label: '璐′簳鍖�',
-        },{
-          value: 'daan',
-          label: '澶у畨鍖�',
-        },{
-          value: 'yantan',
-          label: '娌挎哗鍖�',
-        },
-        ]
-      }, {
-        value: 'company',
-        label: '鍏徃',
-        children: [{
-          value: 'yunwei',
-          label: '鎴愰兘x杩愮淮',
-        }, {
-          value: 'yunwei2',
-          label: '鑷础x杩愮淮',
-        }, ]
-      },
-      ],
-      ruleList: [],
-      unitList: [],
-      // 涓存椂瑙勫垯琛ㄥ崟
-      tempRuleForm: {},
-      // 涓存椂瑙勫垯琛ㄥ崟鍒楄〃
-      tempRuleFormList: [{"ruleId": null, "adjustCoefficient": null}],
-      // 鏈�缁�
-      ruleFormList: [],
-      // 閬僵灞�
-      loading: true,
-      // 閫変腑鏁扮粍
-      ids: [],
-      // 闈炲崟涓鐢�
-      single: true,
-      // 闈炲涓鐢�
-      multiple: true,
-      // 鏄剧ず鎼滅储鏉′欢
-      showSearch: true,
-      // 鎬绘潯鏁�
-      total: 0,
-      // 鑰冩牳妯℃澘琛ㄦ牸鏁版嵁
-      checkTemplateList: [],
-      // 寮瑰嚭灞傛爣棰�
-      title: "",
-      // 鏄惁鏄剧ず寮瑰嚭灞�
-      open: false,
-      // 鐘舵�佹椂闂磋寖鍥�
-      daterangeCreateTime: [],
-      // 鏌ヨ鍙傛暟
-      queryParams: {
-        pageNum: 1,
-        pageSize: 10,
-        status: null,
-        createTime: null,
-      },
-      // 琛ㄥ崟鍙傛暟
-      form: {},
-      // 琛ㄥ崟鏍¢獙
-      rules: {
-        templateName: [
-          { required: true, message: "妯℃澘鍚嶇О涓嶈兘涓虹┖", trigger: "blur" }
-        ],
-        adjustCoefficient: [
-          { required: true, message: "璋冩暣绯绘暟涓嶈兘涓虹┖", trigger: "blur" }
-        ],
-        adjustWay: [
-          { required: true, message: "璋冩暣鏂瑰紡锛氫箻闄や笉鑳戒负绌�", trigger: "blur" }
-        ],
-      }
-    };
-  },
-  created() {
-    this.getList();
-    this.selectCheckRule();
-    this.selectUnit();
-  },
-  methods: {
-    handleChange(value) {
-      console.log(value);
-    },
-    removeRule(form) {
-      console.log(form)
-      this.ruleFormList = this.ruleFormList.filter(item => item !== form);
-      this.tempRuleFormList = this.tempRuleFormList.filter(item => item !== form)
-    },
-    nextAdd() {
-      // if (this.tempRuleFormList.length === 0) {
-      //   this.tempRuleFormList.push({"ruleId": null, "weight": null})
-      // } else {
-      //   this.ruleFormList.push(this.tempRuleForm);
-      //   this.tempRuleFormList.push(this.tempRuleForm);
-      //   this.tempRuleForm = {};
-      // }
-      this.tempRuleFormList.push({"ruleId": null, "weight": null})
-    },
-    // 鑰冩牳瑙勫垯涓嬫媺鏁版嵁
-    // selectCheckRule() {
-    //   ruleSelect().then(res => {
-    //     this.ruleList = res.data;
-    //   })
-    // },
-    // 杩愮淮鍏徃涓嬫媺鏁版嵁
-    selectUnit() {
-      unitSelect().then(res => {
-        this.unitList = res.data;
-      })
-    },
-    /** 鏌ヨ鑰冩牳妯℃澘鍒楄〃 */
-    getList() {
-      this.loading = true;
-      if (null != this.daterangeCreateTime && '' != this.daterangeCreateTime) {
-        this.queryParams["start"] = this.daterangeCreateTime[0];
-        this.queryParams["end"] = this.daterangeCreateTime[1];
-      }
-      listCheckTemplate(this.queryParams).then(response => {
-        this.checkTemplateList = response.data;
-        this.total = response.total;
-        this.loading = false;
-      });
-    },
-    // 鍙栨秷鎸夐挳
-    cancel() {
-      this.open = false;
-      this.reset();
-    },
-    // 琛ㄥ崟閲嶇疆
-    reset() {
-      this.form = {
-        id: null,
-        adjustCoefficient: null,
-        adjustWay: null,
-        status: null,
-        createTime: null,
-        updateTime: null,
-        deleted: null
-      };
-      this.resetForm("form");
-    },
-    /** 鎼滅储鎸夐挳鎿嶄綔 */
-    handleQuery() {
-      this.queryParams.pageNum = 1;
-      this.getList();
-    },
-    /** 閲嶇疆鎸夐挳鎿嶄綔 */
-    resetQuery() {
-      this.daterangeCreateTime = [];
-      this.resetForm("queryForm");
-      this.handleQuery();
-    },
-    // 澶氶�夋閫変腑鏁版嵁
-    handleSelectionChange(selection) {
-      this.ids = selection.map(item => item.id)
-      this.single = selection.length!==1
-      this.multiple = !selection.length
-    },
-    /** 鏂板鎸夐挳鎿嶄綔 */
-    handleAdd() {
-      this.reset();
-      this.open = true;
-      this.title = "娣诲姞鑰冩牳妯℃澘";
-    },
-    /** 淇敼鎸夐挳鎿嶄綔 */
-    handleUpdate(row) {
-      this.reset();
-      const id = row.id || this.ids
-      getCheckTemplate(id).then(response => {
-        this.form = response.data;
-        this.tempRuleFormList = this.form.ruleFormList;
-        this.ruleFormList = this.form.ruleFormList;
-        this.open = true;
-        this.title = "淇敼鑰冩牳妯℃澘";
-      });
-    },
-    /** 鎻愪氦鎸夐挳 */
-    submitForm() {
-      this.$refs["form"].validate(valid => {
-        if (valid) {
-          this.form.ruleFormList = this.tempRuleFormList;
-          if (this.form.id != null) {
-            updateCheckTemplate(this.form).then(response => {
-              this.$modal.msgSuccess("淇敼鎴愬姛");
-              this.open = false;
-              this.tempRuleFormList = [];
-              this.form = {};
-              this.getList();
-            });
-          } else {
-            addCheckTemplate(this.form).then(response => {
-              this.$modal.msgSuccess("鏂板鎴愬姛");
-              this.open = false;
-              this.getList();
-            });
-          }
-        }
-      });
-    },
-    /** 鍒犻櫎鎸夐挳鎿嶄綔 */
-    handleDelete(row) {
-      const ids = row.id || this.ids;
-      this.$modal.confirm('鏄惁纭鍒犻櫎鑰冩牳妯℃澘缂栧彿涓�"' + ids + '"鐨勬暟鎹」锛�').then(function() {
-        return delCheckTemplate(ids);
-      }).then(() => {
-        this.getList();
-        this.$modal.msgSuccess("鍒犻櫎鎴愬姛");
-      }).catch(() => {});
-    },
-    /** 瀵煎嚭鎸夐挳鎿嶄綔 */
-    handleExport() {
-      this.download('system/checkTemplate/export', {
-        ...this.queryParams
-      }, `checkTemplate_${new Date().getTime()}.xlsx`)
-    }
-  }
-};
-</script>
-
-<style scoped>
-.margin-5 {
-  margin-left: 5px;
-}
-.row-warp {
-  display: flex;
-  flex-direction: column;
-}
-.row {
-  display: flex;
-  flex-direction: row;
-  align-items: center;
-  justify-content: center;
-  margin: 5px 0;
-}
-.row-left {
-  flex: 1;
-  display: flex;
-  flex-direction: row;
-}
-.row-right {
-  flex: 1;
-  display: flex;
-  flex-direction: row;
-}
-</style>

--
Gitblit v1.8.0