From 0b49de88ce30aafdd346c85637b0d97841979589 Mon Sep 17 00:00:00 2001
From: mark <mark18340872469@163.com>
Date: 星期五, 11 十一月 2022 10:36:22 +0800
Subject: [PATCH] 添加数据报表模块

---
 src/api/area.ts                                       |   66 +
 src/views/dataReport/components/reportDownload.vue    |  595 ++++++++++++++++++++++++
 src/views/hashrate/HashManage/components/HashCard.vue |  117 ++++
 src/views/dataReport/components/dataReport.vue        |  114 ++++
 src/views/manageCenter/index.vue                      |    8 
 src/scripts/httpRequest.ts                            |    1 
 src/views/dataReport/components/alarmPush.vue         |  401 ++++++++++++++++
 src/views/dataReport/index.vue                        |   71 ++
 src/router/index.js                                   |    8 
 9 files changed, 1,348 insertions(+), 33 deletions(-)

diff --git a/src/api/area.ts b/src/api/area.ts
index a8ce2ad..f09af66 100644
--- a/src/api/area.ts
+++ b/src/api/area.ts
@@ -1,84 +1,106 @@
-import request from "@/scripts/httpRequest";
-import qs from "qs";
+import request from "@/scripts/httpRequest"
+import qs from "qs"
 
 export const getLocalCameraTree = (data: any) => {
   return request({
     url: "/saas/api-s/area/localmenu",
     method: "post",
     data: data
-  });
-};
+  })
+}
 
 export const getGB28181CameraTree = (query: any) => {
   return request({
     url: "/saas/api-s/gb28181/tree",
     method: "post",
     data: query
-  });
-};
+  })
+}
 
 export const getClusterTree = (query: any) => {
   return request({
     url: "/data/api-v/camera/nodeCamera",
     method: "get",
     params: query
-  });
-};
+  })
+}
 
 export const addAreaTreeData = (query: any) => {
   return request({
     url: "/saas/api-s/area/add",
     method: "post",
     data: query
-  });
-};
+  })
+}
 
 export const delAreaTreeData = (query: any) => {
   return request({
     url: "/saas/api-s/area/del",
     method: "post",
     data: query
-  });
-};
+  })
+}
 
 export const updateAreaTreeData = (query: any) => {
   return request({
     url: "/saas/api-s/area/update",
     method: "post",
     data: query
-  });
-};
+  })
+}
 
 export const getCameraBaseImage = (data: any) => {
   return request({
     url: "/saas/api-s/gb28181/camera/capture",
     method: "post",
     data
-  });
-};
+  })
+}
 
 export const getGb28181Pool = (data) => {
   return request({
     url: "/saas/api-s/gb28181/treeSelected",
     method: "post",
     data
-  });
-};
+  })
+}
 
 export const refreshGB28181Tree = (data) => {
   return request({
     url: "/saas/api-s/gb28181/treeRefresh",
     method: "post",
     data
-  });
-};
+  })
+}
 
 export const updateCameraArea = (query: any) => {
   return request({
     url: "/data/api-v/camera/updateCameraArea",
     method: "post",
     data: qs.stringify(query)
-  });
-};
+  })
+}
 
+// 鏁版嵁鎶ヨ〃
+export const reportFormGetFormType = () => {
+  return request({
+    url: "/saas/api-s/reportForm/getFormTypeList",
+    method: "get"
+  })
+}
 
+export const reportFormGetExport = (data) => {
+  return request({
+    url: "/saas/api-s/reportForm/getExportList",
+    method: "post",
+    data
+  })
+}
+
+export const reportFormExportForm = (data) => {
+  return request({
+    url: "/saas/api-s/reportForm/exportForm",
+    method: "post",
+    data
+  })
+}
diff --git a/src/router/index.js b/src/router/index.js
index 8a736cd..2449678 100644
--- a/src/router/index.js
+++ b/src/router/index.js
@@ -139,6 +139,14 @@
     }
   },
   {
+    path: "/dataReport",
+    name: "dataReport",
+    component: () => import(/* webpackChunkName: "about" */ "../views/dataReport"),
+    meta: {
+      title: "鏁版嵁鎶ヨ〃"
+    }
+  },
+  {
     // 瀹炴椂鐩戞帶
     path: "/video",
     name: "video",
diff --git a/src/scripts/httpRequest.ts b/src/scripts/httpRequest.ts
index fad0a95..d13b461 100644
--- a/src/scripts/httpRequest.ts
+++ b/src/scripts/httpRequest.ts
@@ -12,6 +12,7 @@
 /* //POST浼犲弬搴忓垪鍖�(娣诲姞璇锋眰鎷︽埅鍣�) */
 Axios.interceptors.request.use(
   (config) => {
+    console.log(config, "config")
     if ((config.method === "post" && sessionStorage.getItem("clusterId")) || sessionStorage.getItem("devId")) {
       if (!config.data) {
         config.data = {}
diff --git a/src/views/dataReport/components/alarmPush.vue b/src/views/dataReport/components/alarmPush.vue
new file mode 100644
index 0000000..006450a
--- /dev/null
+++ b/src/views/dataReport/components/alarmPush.vue
@@ -0,0 +1,401 @@
+<template>
+  <div class="sub-account">
+    <div class="table-area">
+      <el-table
+        id="multipleTable"
+        ref="multipleTable"
+        :data="dataList"
+        :fit="true"
+        :default-sort="{ prop: 'createTime', order: 'descending' }"
+      >
+        <el-table-column prop="alarmDate" label="鎶ヨ鏃ユ湡" show-overflow-tooltip></el-table-column>
+        <el-table-column prop="channelName" label="閫氶亾鍚嶇О" show-overflow-tooltip></el-table-column>
+        <el-table-column prop="alarmType" label="鎶ヨ绫诲瀷" show-overflow-tooltip></el-table-column>
+        <el-table-column prop="alarmAction" label="鎶ヨ鍔ㄤ綔" show-overflow-tooltip></el-table-column>
+        <el-table-column prop="channelCode" label="閫氶亾缂栫爜" show-overflow-tooltip></el-table-column>
+        <el-table-column prop="alarmImage" label="鍥剧墖鍦板潃" show-overflow-tooltip></el-table-column>
+        <el-table-column prop="state" label="涓婃姤缁撴灉" show-overflow-tooltip>
+          <template slot-scope="scope">
+            <div v-if="scope.row.state == 0" class="status green">澶辫触</div>
+            <div v-else class="status">鎴愬姛</div>
+          </template>
+        </el-table-column>
+        <el-table-column prop="resultMsg" label="涓婃姤杩斿洖淇℃伅" show-overflow-tooltip></el-table-column>
+
+        <!-- <el-table-column label="鎿嶄綔" align="center" width="100px">
+          <template slot-scope="scope">
+            <span class="iconfont option" @click="editUser(scope.row)">缂栬緫</span>
+            <span class="iconfont option" style="color:red" @click="delUser(scope.row)">鍒犻櫎</span>
+          </template>
+        </el-table-column> -->
+      </el-table>
+      <div>
+        <el-pagination
+          @current-change="refrash"
+          @size-change="handleSizeChange"
+          :current-page="page"
+          :page-size="size"
+          layout="total, sizes, prev, pager, next, jumper"
+          :page-sizes="[5, 10, 15, 20, 25]"
+          :total="total"
+          background
+        ></el-pagination>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import { camerasReportLog } from "@/api/report"
+
+export default {
+  data() {
+    return {
+      dataList: [],
+      page: 1,
+      size: 10, //鍒嗛〉鐩稿叧
+      total: 0 //鎬绘暟,
+    }
+  },
+  async created() {
+    this.lookUp()
+    //     GET    /api-a/v1/cameras/reportLog
+    // 鍒嗛〉鏌ヨ涓婃姤鏃ュ織
+    // alarmDate   string // 鎶ヨ鏃ユ湡
+    // channelName string // 璁惧鐨勭湡瀹炴姤璀﹂�氶亾鍚嶇О
+    // alarmType   string // 鎶ヨ绫诲瀷
+    // alarmAction string // 鎶ヨ鍔ㄤ綔
+    // channelCode string // 璁惧鐨勭湡瀹炴姤璀﹂�氶亾缂栫爜
+    // alarmImage  string // 鎶ヨ/閿�璀﹀浘鐗噓rl  A閾炬帴
+    // state       int    // 涓婃姤缁撴灉, 0 澶辫触 1 鎴愬姛
+    // resultMsg   string // 涓婃姤杩斿洖淇℃伅
+  },
+  mounted() {},
+  methods: {
+    handleSizeChange(size) {
+      this.size = size
+      this.lookUp()
+    },
+    //鍒嗛〉鍔熻兘
+    refrash(page) {
+      this.page = page
+      this.lookUp()
+    },
+
+    async lookUp() {
+      let res = await camerasReportLog({ pageIndex: this.page, pageSize: this.size })
+      this.dataList = res.data
+      this.total = res.total
+    }
+  }
+}
+</script>
+
+<style scoped lang="scss">
+.sub-account {
+  padding: 20px;
+  .head-name {
+    font-weight: 700;
+    font-size: 16px;
+    line-height: 22px;
+    color: #3d3d3d;
+    border-left: 4px solid #0065ff;
+    padding-left: 10px;
+  }
+  .add-title {
+    font-weight: 700;
+    font-size: 16px;
+    cursor: pointer;
+    line-height: 22px;
+    color: #3d3d3d;
+    margin-bottom: 30px;
+    .iconfont {
+      margin-right: 10px;
+    }
+  }
+  .add-ruleForm::v-deep {
+    .el-input__inner {
+      color: #3d3d3d;
+      border-radius: 4px;
+      border-color: #c0c5cc;
+      height: 32px;
+      line-height: 32px;
+      border-color: #c0c5cc;
+    }
+    .user-tree {
+      .el-form-item__label:before {
+        content: "*";
+        color: #f52323;
+        margin-right: 4px;
+      }
+      .el-form-item__content {
+        display: flex;
+        .tree-box {
+          .t {
+            height: 32px;
+            background: #f0f5fa;
+            border-radius: 3px 3px 0px 0px;
+            line-height: 32px;
+            text-align: center;
+            border-bottom: 1px solid #c0c5cc;
+          }
+          width: 336px;
+          height: 480px;
+          border: 1px solid #c0c5cc;
+          margin-right: 20px;
+          box-sizing: border-box;
+        }
+      }
+    }
+  }
+  .searchBtn {
+    width: 50px;
+    height: 25px;
+    line-height: 25px;
+    font-size: 14px;
+    text-align: center;
+    color: #fff;
+    background: #0065ff;
+    margin-right: 20px;
+  }
+  .right {
+    display: flex;
+  }
+  .resetBtn {
+    width: 50px;
+    height: 25px;
+    line-height: 25px;
+    font-size: 14px;
+    text-align: center;
+    color: #0065ff;
+    box-sizing: border-box;
+    border: 1px solid #0065ff;
+  }
+  .search {
+    display: flex;
+    font-size: 14px;
+    border-bottom: 1px solid #e9ebee;
+    margin-top: 30px;
+    padding-bottom: 20px;
+    .left,
+    .right,
+    .id,
+    .time,
+    .cluster {
+      display: flex;
+      align-items: center;
+      .el-select {
+        width: auto;
+      }
+    }
+
+    .id .el-input ::v-deep {
+      width: 200px;
+    }
+
+    .cluster::v-deep .el-input {
+      width: 300px;
+
+      margin-left: 10px;
+      margin-right: 20px;
+      .el-input__icon {
+        line-height: 32px;
+      }
+      input {
+        border-radius: 0;
+
+        &::-webkit-input-placeholder {
+          color: #999;
+        }
+
+        &:focus {
+          border-color: #0065ff;
+        }
+      }
+    }
+
+    .el-input ::v-deep {
+      width: 200px;
+      margin-left: 10px;
+      margin-right: 20px;
+      height: 32px;
+      line-height: 32px;
+      input {
+        border-radius: 0;
+        height: 32px;
+        line-height: 32px;
+        &::-webkit-input-placeholder {
+          color: #999;
+        }
+
+        &:focus {
+          border-color: #0065ff;
+        }
+      }
+    }
+
+    .el-date-editor {
+      width: 318px;
+      height: 40px;
+      margin-left: 10px;
+      margin-right: 20px;
+      border-radius: 0;
+
+      &::-webkit-input-placeholder {
+        color: #999;
+      }
+
+      &.is-active {
+        border-color: #0065ff;
+      }
+    }
+  }
+
+  .btns {
+    display: flex;
+    margin: 20px 0;
+    text-align: center;
+    .add {
+      margin-right: 20px;
+      width: 126px;
+      height: 32px;
+      background: #0065ff;
+      color: #fff;
+      span {
+        margin-right: 5px;
+        line-height: 32px;
+        font-size: 14px;
+      }
+    }
+
+    .export {
+      width: 126px;
+      height: 32px;
+      border: 1px solid #0065ff;
+      color: #0065ff;
+      box-sizing: border-box;
+      span {
+        margin-right: 5px;
+        line-height: 32px;
+        font-size: 14px;
+      }
+    }
+  }
+
+  .el-table ::v-deep {
+    background-color: rgb(233, 235, 238);
+    padding: 1px;
+
+    &::after {
+      display: none;
+    }
+
+    td.index .cell {
+      padding-left: 16px;
+      padding-right: 4px;
+    }
+
+    .has-gutter tr th {
+      background: #f0f3f5;
+      font-size: 16px;
+      color: #3d3d3d;
+      font-weight: 700;
+    }
+
+    td .cell {
+      color: #3d3d3d;
+    }
+
+    tr:hover > td.el-table__cell {
+      background-color: #fff;
+    }
+
+    .el-table__row--striped .el-table__cell {
+      background-color: #f0f5fa !important;
+    }
+    tr:hover > td.el-table__cell {
+      background-color: #fff;
+    }
+
+    .el-table__row--striped .el-table__cell {
+      background-color: #f0f5fa !important;
+    }
+
+    .status {
+      color: #ff4b33;
+
+      &.green {
+        color: #36b24a;
+      }
+    }
+
+    .option {
+      margin-right: 10px;
+      font-size: 14px;
+      color: rgb(0, 101, 255);
+      cursor: pointer;
+    }
+  }
+
+  .el-pagination ::v-deep {
+    margin-top: 30px;
+    text-align: center;
+    height: 24px;
+    .el-pagination__sizes {
+      margin-right: 0;
+    }
+
+    button {
+      margin: 0;
+      background-color: #fff;
+      border: 1px solid #c0c5cc;
+      border-radius: 2px;
+    }
+
+    .number {
+      background-color: #fff;
+
+      &:not(.disabled):hover {
+        color: #0065ff;
+      }
+
+      &:not(.disabled).active {
+        background-color: #0065ff;
+        color: #fff;
+      }
+    }
+
+    .el-input .el-input__inner {
+      padding-left: 0;
+
+      &:hover,
+      &:focus {
+        border-color: #0065ff;
+      }
+    }
+  }
+
+  .el-select ::v-deep {
+    .el-select__tags-text {
+      color: #3d3d3d;
+    }
+  }
+}
+</style>
+
+<style>
+.el-date-table td.start-date span,
+.el-date-table td.end-date span {
+  background-color: #0065ff;
+}
+
+.el-button--text span {
+  color: #0065ff;
+}
+
+.el-button.is-plain:hover,
+.el-button.is-plain:focus {
+  color: #0065ff;
+  border-color: #0065ff;
+}
+</style>
diff --git a/src/views/dataReport/components/dataReport.vue b/src/views/dataReport/components/dataReport.vue
new file mode 100644
index 0000000..ef3d96c
--- /dev/null
+++ b/src/views/dataReport/components/dataReport.vue
@@ -0,0 +1,114 @@
+<template>
+  <div style="padding: 20px;">
+    <el-tabs v-model="activeName">
+      <el-tab-pane name="reportDownload">
+        <span slot="label"><i class="el-icon-s-home"></i> 鑷畾涔夋姤琛�</span>
+        <reportDownload :activeName.sync="activeName" @aaa="aaa" :tableData.sync="tableData"></reportDownload>
+      </el-tab-pane>
+      <el-tab-pane name="point">
+        <span slot="label"><i class="el-icon-s-platform"></i> 鎶ヨ〃涓嬭浇</span>
+        <div>
+          <el-table :data="tableData" stripe style="width: 100%">
+            <el-table-column prop="formName" label="鎶ヨ〃鍚嶇О" width="180"> </el-table-column>
+            <el-table-column prop="formType" label="鎶ヨ〃绫诲瀷" width="180"> </el-table-column>
+            <el-table-column prop="createTime" label="鍒涘缓鏃堕棿" width="280"> </el-table-column>
+            <!-- <el-table-column prop="createTime" label="鍒涘缓鏃堕棿"> </el-table-column> -->
+            <el-table-column label="鎿嶄綔">
+              <template slot-scope="scope">
+                <a :href="scope.row.url">{{ scope.row.url }}</a>
+              </template>
+            </el-table-column>
+          </el-table>
+        </div>
+        <div>
+          <el-pagination
+            @current-change="refrash"
+            @size-change="handleSizeChange"
+            :current-page="page"
+            :page-size="size"
+            layout="total, sizes, prev, pager, next, jumper"
+            :page-sizes="[5, 10, 15, 20, 25]"
+            :total="total"
+            background
+          ></el-pagination>
+        </div>
+      </el-tab-pane>
+      <!-- <el-tab-pane name="alarmPush">
+        <span slot="label"><i class="el-icon-phone"></i> 鎶ヨ涓婃姤鏃ュ織</span>
+        <alarmPush></alarmPush>
+      </el-tab-pane> -->
+    </el-tabs>
+  </div>
+</template>
+
+<script>
+import reportDownload from "./reportDownload.vue"
+// import point from "./point.vue"
+// import alarmPush from "./alarmPush.vue"
+import { addAreaTreeData, reportFormGetExport } from "@/api/area"
+
+export default {
+  components: {
+    reportDownload
+    // point,
+    // alarmPush
+  },
+  data() {
+    return {
+      page: 1,
+      size: 10, //鍒嗛〉鐩稿叧
+      total: 0, //鎬绘暟,
+
+      activeName: "reportDownload",
+      tableData: [],
+      titles: []
+    }
+  },
+  created() {},
+  mounted() {},
+  methods: {
+    refrash(page) {
+      this.page = page
+      this.lookUp()
+    },
+    handleSizeChange(size) {
+      this.size = size
+      this.lookUp()
+    },
+
+    async aaa() {
+      // console.log(row, "|row")
+      let query = {
+        FormType: "",
+        KeyWords: "",
+        StartTime: "",
+        EndTime: "",
+        Page: 10,
+        Size: 1
+      }
+      let res = await reportFormGetExport(query)
+      this.tableData = res.data.list
+      this.total = res.data.total
+
+      console.log(res, "r22222222222es")
+    }
+    // handleClick(row) {
+    //   console.log(row, "row")
+    // }
+  }
+}
+</script>
+
+<style scoped lang="scss">
+.el-pagination ::v-deep {
+  margin-top: 30px;
+  margin-bottom: 30px;
+  text-align: center;
+  height: 24px;
+  .el-pagination__sizes {
+    margin-right: 0;
+  }
+}
+</style>
+
+<style></style>
diff --git a/src/views/dataReport/components/reportDownload.vue b/src/views/dataReport/components/reportDownload.vue
new file mode 100644
index 0000000..cb44b3f
--- /dev/null
+++ b/src/views/dataReport/components/reportDownload.vue
@@ -0,0 +1,595 @@
+<template>
+  <div class="sub-account">
+    <!-- <div class="add-title" @click="isShowAdd = false">
+      <span class="iconfont">&#xe614;</span>
+      <span>瀛愯处鎴风鐞�</span>
+    </div> -->
+    <div class="head-name" style="margin-bottom:20px">鑷畾涔夋暟鎹姤琛�</div>
+    <el-form
+      :model="ruleForm"
+      :rules="rules"
+      :label-position="'left'"
+      ref="ruleForm"
+      label-width="120px"
+      class="add-ruleForm"
+    >
+      <el-form-item label="鎶ヨ〃鍚嶇О" prop="FileName">
+        <el-input
+          maxlength="15"
+          show-word-limit
+          v-model="ruleForm.FileName"
+          placeholder="璇疯緭鍏ユ姤琛ㄥ悕绉�"
+          style="width: 350px"
+        ></el-input>
+      </el-form-item>
+      <el-form-item label="鎶ヨ〃绫诲瀷" prop="FormType">
+        <el-select @change="changeFormType" style="width: 350px" v-model="ruleForm.FormType" placeholder="璇烽�夋嫨">
+          <el-option v-for="item in formTypeOptions" :key="item.formType" :label="item.formName" :value="item.formType">
+          </el-option>
+        </el-select>
+        <!-- <el-input v-model="ruleForm.formType" placeholder="璇疯緭鍏ユ姤琛ㄧ被鍨�" style="width: 350px"></el-input> -->
+      </el-form-item>
+      <el-form-item label="鎶ヨ〃瀛楁閫夋嫨" prop="titles">
+        <el-select style="width: 350px" v-model="ruleForm.titles" multiple placeholder="">
+          <el-option v-for="(item, index) in titlesOptions" :key="index" :label="item" :value="item"> </el-option>
+        </el-select>
+      </el-form-item>
+    </el-form>
+    <!-- <div class="right">
+      <div class="button searchBtn" @click="saveUser">淇濆瓨</div>
+      <div class="button resetBtn" @click="resetUser">閲嶇疆</div>
+      <div class="button resetBtn" style="margin-left:20px" @click="goback">杩斿洖</div>
+    </div> -->
+    <div style="margin-left: 100px;">
+      <el-button @click="changeActive()" type="primary">鐢熸垚鎶ヨ〃</el-button>
+    </div>
+  </div>
+</template>
+
+<script>
+import { reportFormGetFormType, reportFormExportForm } from "@/api/area"
+import { getClusterDevList } from "@/api/clusterManage"
+
+export default {
+  props: {
+    activeName: String,
+    tableData: Array
+  },
+  data() {
+    return {
+      cluster_id: "",
+      titlesOptions: [],
+      formTypeOptions: [],
+      options: [],
+      value1: ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"],
+      ruleForm: {
+        //y
+        FileName: "",
+        FormType: "",
+        titles: []
+      },
+      rules: {
+        FileName: [{ required: true, message: "璇疯緭鍏ユ姤琛ㄥ悕绉�", trigger: "blur" }],
+        FormType: [{ required: true, message: "璇烽�夋嫨鎶ヨ〃绫诲瀷", trigger: "change" }],
+        titles: [{ type: "array", required: true, message: "璇疯嚦灏戦�夋嫨涓�涓姤琛ㄥ瓧娈甸�夋嫨", trigger: "change" }]
+        // devCode: [{ required: true, message: "璇疯緭鍏ヨ澶囩紪鐮�", trigger: "blur" }],
+        // companyCode: [{ required: true, message: "璇疯緭鍏ヤ紒涓氱紪鐮�", trigger: "blur" }]
+      }
+    }
+  },
+  async created() {
+    const res = await getClusterDevList()
+    console.log(res, "res")
+    // sessionStorage.setItem("clusterId", res.data.clusterList[0].cluster_id)
+    this.cluster_id = res.data.clusterList[0].cluster_id
+    // let query = { pageIndex: this.page, pageSize: this.size, keyword: this.inputText }
+    // this.query = query
+
+    this.report()
+    // this.dataList = res.data
+    // this.total = res.total
+  },
+  mounted() {},
+  methods: {
+    submitForm(formName) {
+      this.$refs[formName].validate((valid) => {
+        if (valid) {
+          alert("submit!")
+        } else {
+          console.log("error submit!!")
+          return false
+        }
+      })
+    },
+    changeFormType(val) {
+      console.log(val, "val")
+      let obj = this.formTypeOptions.find((item) => item.formType === val)
+      console.log(obj, "obj")
+      this.titlesOptions = obj.titles
+      this.ruleForm.titles = obj.titles
+    },
+    async report() {
+      let res = await reportFormGetFormType()
+      // console.log(res, "resres")
+      this.formTypeOptions = res.data.list
+      // this.ruleForm.formName = res.data.list[0].formName
+      // this.ruleForm.formType = res.data.list[0].formType
+      // this.options = res.data.list[0].titles
+      // this.ruleForm.titles = res.data.list[0].titles
+
+      // console.log(this.options, "this.options")
+    },
+    async changeActive() {
+      this.$refs["ruleForm"].validate((valid) => {
+        if (valid) {
+          // console.log(this.ruleForm.titles, "ruleForm.titles")
+          let query = {
+            ClusterId: this.cluster_id,
+            // DevId: row.id,
+            // ParentId: row.id,
+            FileName: this.ruleForm.FileName,
+            FormType: this.ruleForm.FormType,
+            Titles: this.ruleForm.titles
+          }
+          reportFormExportForm(query).then((res) => {
+            console.log(res, "res")
+            this.$emit("update:tableData", res.data.list)
+            this.$emit("aaa")
+            this.$emit("update:activeName", "point")
+          })
+          // let res = await reportFormExportForm(query)
+
+          // console.log(this.activeName, "activeName")
+          // this.$emit("update:titles", this.ruleForm.titles)
+          // console.log(this.activeName, "activeName")
+        } else {
+          console.log("error submit!!")
+          return false
+        }
+      })
+    }
+    // async fetchDevicesList(val) {
+    //   this.tbLoading = true
+    //   if (val === 1) {
+    //     let query = { pageIndex: this.page, pageSize: this.size, keyword: this.inputText }
+    //     this.query = query
+    //     let res = await getDevicesList(query)
+    //     this.dataList = res.data
+    //     this.total = res.total
+    //   } else {
+    //     let res = await getDevicesList(this.query)
+    //     this.dataList = res.data
+    //     this.total = res.total
+    //   }
+    //   setTimeout(() => {
+    //     this.tbLoading = false
+    //   }, 200)
+    // },
+    // delUser(row) {
+    //   console.log(row, "row")
+    //   this.$confirm("纭瑕佸垹闄よ澶囧悧, 鏄惁缁х画?", "鎻愮ず", {
+    //     confirmButtonText: "纭畾",
+    //     cancelButtonText: "鍙栨秷",
+    //     type: "warning"
+    //   }).then(async () => {
+    //     let rsp = await devicesDelete({ id: row.id })
+    //     if (rsp && rsp.success) {
+    //       this.$message({
+    //         type: "success",
+    //         message: "鍒犻櫎鎴愬姛!"
+    //       })
+    //     }
+    //     this.fetchDevicesList()
+    //   })
+    // },
+    // //鍒嗛〉鍔熻兘
+    // handleSizeChange(size) {
+    //   this.size = size
+    //   this.fetchDevicesList(1)
+    // },
+    // //鍒嗛〉鍔熻兘
+    // refrash(page) {
+    //   this.page = page
+    //   this.fetchDevicesList(1)
+    // },
+    // addDevice() {
+    //   this.isShowAdd = true
+    //   this.tip = 1
+    //   this.resetUser()
+    // }, //y
+    // resetUser() {
+    //   //devName , devId , devIp, devCode, companyCode
+    //   this.ruleForm = {
+    //     devName: "",
+    //     devId: "",
+    //     devIp: "",
+    //     devCode: "",
+    //     companyCode: ""
+    //   }
+    // },
+    // saveUser() {
+    //   this.$refs["ruleForm"].validate((valid) => {
+    //     if (valid) {
+    //       if (this.tip === 1) {
+    //         let params = {
+    //           devName: this.ruleForm.devName,
+    //           devId: this.ruleForm.devId,
+    //           devIp: this.ruleForm.devIp,
+    //           devCode: this.ruleForm.devCode,
+    //           companyCode: this.ruleForm.companyCode
+    //         }
+    //         // console.log(params, "params")
+    //         devicesCreate(params).then((res) => {
+    //           // console.log(res, "res")
+    //           if (res && res.success) {
+    //             // Notification({
+    //             //   title: "鎴愬姛",
+    //             //   showClose: true,
+    //             //   message: res.data,
+    //             //   type: "success"
+    //             // })
+    //             this.$message({
+    //               type: "success",
+    //               message: res.data
+    //             })
+    //             this.goback()
+    //             this.fetchDevicesList()
+    //           }
+    //         })
+    //       } else if (this.tip === 2) {
+    //         let params = {
+    //           devName: this.ruleForm.devName,
+    //           devId: this.ruleForm.devId,
+    //           devIp: this.ruleForm.devIp,
+    //           devCode: this.ruleForm.devCode,
+    //           companyCode: this.ruleForm.companyCode,
+    //           id: this.ruleForm.id,
+    //           createdAt: this.ruleForm.createdAt,
+    //           state: this.ruleForm.state,
+    //           updatedAt: this.ruleForm.updatedAt
+    //         }
+    //         devicesUpdate(params).then((res) => {
+    //           console.log(res, "res")
+    //           if (res && res.success) {
+    //             this.$message({
+    //               type: "success",
+    //               message: res.msg
+    //             })
+    //             this.goback()
+    //             this.fetchDevicesList()
+    //           }
+    //         })
+    //       }
+    //     } else {
+    //       return false
+    //     }
+    //   })
+    // },
+    // goback() {
+    //   this.isShowAdd = false
+    // },
+    // editUser(row) {
+    //   this.tip = 2
+    //   this.isShowAdd = true
+    //   this.ruleForm.devName = row.devName
+    //   this.ruleForm.devId = row.devId
+    //   this.ruleForm.devIp = row.devIp
+    //   this.ruleForm.devCode = row.devCode
+    //   this.ruleForm.companyCode = row.companyCode
+    //   this.ruleForm.id = row.id
+    //   this.ruleForm.createdAt = row.createdAt
+    //   this.ruleForm.state = row.state
+    //   this.ruleForm.updatedAt = row.updatedAt
+    // }
+  }
+}
+</script>
+
+<style scoped lang="scss">
+.sub-account {
+  padding: 20px;
+  .head-name {
+    font-weight: 700;
+    font-size: 16px;
+    line-height: 22px;
+    color: #3d3d3d;
+    border-left: 4px solid #0065ff;
+    padding-left: 10px;
+  }
+  .add-title {
+    font-weight: 700;
+    font-size: 16px;
+    cursor: pointer;
+    line-height: 22px;
+    color: #3d3d3d;
+    margin-bottom: 30px;
+    .iconfont {
+      margin-right: 10px;
+    }
+  }
+  .add-ruleForm::v-deep {
+    .el-input__inner {
+      color: #3d3d3d;
+      border-radius: 4px;
+      border-color: #c0c5cc;
+      height: 32px;
+      line-height: 32px;
+      border-color: #c0c5cc;
+    }
+    .user-tree {
+      .el-form-item__label:before {
+        content: "*";
+        color: #f52323;
+        margin-right: 4px;
+      }
+      .el-form-item__content {
+        display: flex;
+        .tree-box {
+          .t {
+            height: 32px;
+            background: #f0f5fa;
+            border-radius: 3px 3px 0px 0px;
+            line-height: 32px;
+            text-align: center;
+            border-bottom: 1px solid #c0c5cc;
+          }
+          width: 336px;
+          height: 480px;
+          border: 1px solid #c0c5cc;
+          margin-right: 20px;
+          box-sizing: border-box;
+        }
+      }
+    }
+  }
+  .searchBtn {
+    width: 50px;
+    height: 25px;
+    line-height: 25px;
+    font-size: 14px;
+    text-align: center;
+    color: #fff;
+    background: #0065ff;
+    margin-right: 20px;
+  }
+  .right {
+    display: flex;
+  }
+  .resetBtn {
+    width: 50px;
+    height: 25px;
+    line-height: 25px;
+    font-size: 14px;
+    text-align: center;
+    color: #0065ff;
+    box-sizing: border-box;
+    border: 1px solid #0065ff;
+  }
+  .search {
+    display: flex;
+    font-size: 14px;
+    border-bottom: 1px solid #e9ebee;
+    margin-top: 30px;
+    padding-bottom: 20px;
+    .left,
+    .right,
+    .id,
+    .time,
+    .cluster {
+      display: flex;
+      align-items: center;
+      .el-select {
+        width: auto;
+      }
+    }
+
+    .id .el-input ::v-deep {
+      width: 200px;
+    }
+
+    .cluster::v-deep .el-input {
+      width: 300px;
+
+      margin-left: 10px;
+      margin-right: 20px;
+      .el-input__icon {
+        line-height: 32px;
+      }
+      input {
+        border-radius: 0;
+
+        &::-webkit-input-placeholder {
+          color: #999;
+        }
+
+        &:focus {
+          border-color: #0065ff;
+        }
+      }
+    }
+
+    .el-input ::v-deep {
+      width: 200px;
+      margin-left: 10px;
+      margin-right: 20px;
+      height: 32px;
+      line-height: 32px;
+      input {
+        border-radius: 0;
+        height: 32px;
+        line-height: 32px;
+        &::-webkit-input-placeholder {
+          color: #999;
+        }
+
+        &:focus {
+          border-color: #0065ff;
+        }
+      }
+    }
+
+    .el-date-editor {
+      width: 318px;
+      height: 40px;
+      margin-left: 10px;
+      margin-right: 20px;
+      border-radius: 0;
+
+      &::-webkit-input-placeholder {
+        color: #999;
+      }
+
+      &.is-active {
+        border-color: #0065ff;
+      }
+    }
+  }
+
+  .btns {
+    display: flex;
+    margin: 20px 0;
+    text-align: center;
+    .add {
+      margin-right: 20px;
+      width: 126px;
+      height: 32px;
+      background: #0065ff;
+      color: #fff;
+      span {
+        margin-right: 5px;
+        line-height: 32px;
+        font-size: 14px;
+      }
+    }
+
+    .export {
+      width: 126px;
+      height: 32px;
+      border: 1px solid #0065ff;
+      color: #0065ff;
+      box-sizing: border-box;
+      span {
+        margin-right: 5px;
+        line-height: 32px;
+        font-size: 14px;
+      }
+    }
+  }
+
+  .el-table ::v-deep {
+    background-color: rgb(233, 235, 238);
+    padding: 1px;
+
+    &::after {
+      display: none;
+    }
+
+    td.index .cell {
+      padding-left: 16px;
+      padding-right: 4px;
+    }
+
+    .has-gutter tr th {
+      background: #f0f3f5;
+      font-size: 16px;
+      color: #3d3d3d;
+      font-weight: 700;
+    }
+
+    td .cell {
+      color: #3d3d3d;
+    }
+
+    tr:hover > td.el-table__cell {
+      background-color: #fff;
+    }
+
+    .el-table__row--striped .el-table__cell {
+      background-color: #f0f5fa !important;
+    }
+    tr:hover > td.el-table__cell {
+      background-color: #fff;
+    }
+
+    .el-table__row--striped .el-table__cell {
+      background-color: #f0f5fa !important;
+    }
+
+    .status {
+      color: #ff4b33;
+
+      &.green {
+        color: #36b24a;
+      }
+    }
+
+    .option {
+      margin-right: 10px;
+      font-size: 14px;
+      color: rgb(0, 101, 255);
+      cursor: pointer;
+    }
+  }
+
+  .el-pagination ::v-deep {
+    margin-top: 30px;
+    text-align: center;
+    height: 24px;
+    .el-pagination__sizes {
+      margin-right: 0;
+    }
+
+    button {
+      margin: 0;
+      background-color: #fff;
+      border: 1px solid #c0c5cc;
+      border-radius: 2px;
+    }
+
+    .number {
+      background-color: #fff;
+
+      &:not(.disabled):hover {
+        color: #0065ff;
+      }
+
+      &:not(.disabled).active {
+        background-color: #0065ff;
+        color: #fff;
+      }
+    }
+
+    .el-input .el-input__inner {
+      padding-left: 0;
+
+      &:hover,
+      &:focus {
+        border-color: #0065ff;
+      }
+    }
+  }
+
+  .el-select ::v-deep {
+    .el-select__tags-text {
+      color: #3d3d3d;
+    }
+  }
+}
+</style>
+
+<style>
+.el-date-table td.start-date span,
+.el-date-table td.end-date span {
+  background-color: #0065ff;
+}
+
+.el-button--text span {
+  color: #0065ff;
+}
+
+.el-button.is-plain:hover,
+.el-button.is-plain:focus {
+  color: #0065ff;
+  border-color: #0065ff;
+}
+</style>
diff --git a/src/views/dataReport/index.vue b/src/views/dataReport/index.vue
new file mode 100644
index 0000000..f6b7ae8
--- /dev/null
+++ b/src/views/dataReport/index.vue
@@ -0,0 +1,71 @@
+<template>
+  <div class="data-report">
+    <!-- 椤靛ご -->
+    <IndexHeader :opacity="false"></IndexHeader>
+    <!-- 闈㈠寘灞� -->
+    <div class="breadcrumb">
+      <!-- <el-breadcrumb separator=">">
+        <el-breadcrumb-item :to="{ path: '/manageCenter' }">绠$悊涓績</el-breadcrumb-item>
+        <el-breadcrumb-item>鎺ㄩ�佺鐞�</el-breadcrumb-item>
+      </el-breadcrumb> -->
+    </div>
+
+    <!-- 涓昏鍐呭 -->
+    <div class="content">
+      <dataReport></dataReport>
+    </div>
+
+    <!-- 椤靛熬 -->
+    <!-- <Footer :isBlack="true"></Footer> -->
+  </div>
+</template>
+
+<script>
+import IndexHeader from "@/components/IndexHeader"
+// import DevList from "@/views/report/components/DevList"
+import dataReport from "./components/dataReport.vue"
+// import SettingBox from "@ /views/report/components/SettingBox"
+import Footer from "@/components/Footer"
+
+export default {
+  components: {
+    IndexHeader,
+    dataReport
+    // SettingBox,
+    // Footer
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.data-report {
+  background-color: rgb(243, 245, 248);
+  position: relative;
+  min-height: 50vh;
+
+  .breadcrumb {
+    height: 10px;
+  }
+  .el-breadcrumb {
+    margin-top: 48px;
+    margin-bottom: 24px;
+
+    ::v-deep span {
+      color: #666;
+    }
+  }
+  .content {
+    min-height: 856px;
+    box-sizing: border-box;
+    background-color: #fff;
+    width: 1036px;
+    margin: 0 auto;
+  }
+  .Footer {
+    position: absolute;
+    left: 0;
+    right: 0;
+    bottom: 0;
+  }
+}
+</style>
diff --git a/src/views/hashrate/HashManage/components/HashCard.vue b/src/views/hashrate/HashManage/components/HashCard.vue
index 5a54f1f..c512a86 100644
--- a/src/views/hashrate/HashManage/components/HashCard.vue
+++ b/src/views/hashrate/HashManage/components/HashCard.vue
@@ -16,9 +16,7 @@
     </div>
     <div class="detail">
       <div class="detailItem">
-        <div class="label">
-          <span class="iconfont">&#xe62f;</span>鎵撳紑鍒嗘瀽寮�鍏�
-        </div>
+        <div class="label"><span class="iconfont">&#xe62f;</span>鎵撳紑鍒嗘瀽寮�鍏�</div>
         <div class="data">
           <span class="number">{{ hashrate.valid }}</span
           >璺�
@@ -38,16 +36,56 @@
           >璺�
         </div>
       </div>
-      <div class="detailItem">
-        <div class="label" title="鍥犳湭鐭ュ師鍥犳湭澶勭悊">
-          <span class="iconfont">&#xe631;</span>鍥犳湭鐭ュ師鍥犳湭澶勭悊
-        </div>
+      <div class="detailItem" @click="dialogVisible = true">
+        <div class="label" title="鍥犳湭鐭ュ師鍥犳湭澶勭悊"><span class="iconfont">&#xe631;</span>鍥犳湭鐭ュ師鍥犳湭澶勭悊</div>
         <div class="data">
           <span class="number">{{ hashrate.noDeal }}</span
           >璺�
         </div>
       </div>
     </div>
+    <el-dialog
+      title="寮傚父鏁版嵁鏌ヨ"
+      destroy-on-close
+      :visible.sync="dialogVisible"
+      width="40%"
+      :before-close="handleClose"
+    >
+      <!-- <div style="width: 600px">
+        v-if="dialogVisible"
+      </div> -->
+      <el-row :gutter="50">
+        <el-col :span="15">
+          <el-form label-width="140px">
+            <el-form-item label="鎽勫儚鏈哄悕绉�/閫氶亾鍙�">
+              <el-input placeholder="璇疯緭鍑烘憚鍍忔満鍚嶇О/閫氶亾鍙�" v-model="id"></el-input>
+            </el-form-item>
+          </el-form>
+        </el-col>
+        <el-col :span="9"><el-button type="primary">鏌ヨ</el-button></el-col>
+      </el-row>
+      <el-table :data="tableData" stripe style="width: 100%">
+        <el-table-column prop="date" label="鏃ユ湡" width="180"> </el-table-column>
+        <el-table-column prop="name" label="濮撳悕" width="180"> </el-table-column>
+        <el-table-column prop="address" label="鍦板潃"> </el-table-column>
+      </el-table>
+      <div>
+        <el-pagination
+          @current-change="refrash"
+          @size-change="handleSizeChange"
+          :current-page="page"
+          :page-size="size"
+          layout="total, sizes, prev, pager, next, jumper"
+          :page-sizes="[5, 10, 15, 20, 25]"
+          :total="total"
+          background
+        ></el-pagination>
+      </div>
+      <!-- <span slot="footer" class="dialog-footer">
+        <el-button @click="dialogVisible = false">鍙� 娑�</el-button>
+        <el-button type="primary" @click="dialogVisible = false">纭� 瀹�</el-button>
+      </span> -->
+    </el-dialog>
   </div>
 </template>
 
@@ -55,12 +93,60 @@
 export default {
   props: {
     type: {},
-    hashrate: {},
+    hashrate: {}
   },
   data() {
-    return {};
+    return {
+      page: 1,
+      size: 10, //鍒嗛〉鐩稿叧
+      total: 0, //鎬绘暟,
+
+      id: "",
+      dialogVisible: false,
+      tableData: [
+        {
+          date: "2016-05-02",
+          name: "鐜嬪皬铏�",
+          address: "涓婃捣甯傛櫘闄�鍖洪噾娌欐睙璺� 1518 寮�"
+        },
+        {
+          date: "2016-05-04",
+          name: "鐜嬪皬铏�",
+          address: "涓婃捣甯傛櫘闄�鍖洪噾娌欐睙璺� 1517 寮�"
+        },
+        {
+          date: "2016-05-01",
+          name: "鐜嬪皬铏�",
+          address: "涓婃捣甯傛櫘闄�鍖洪噾娌欐睙璺� 1519 寮�"
+        },
+        {
+          date: "2016-05-03",
+          name: "鐜嬪皬铏�",
+          address: "涓婃捣甯傛櫘闄�鍖洪噾娌欐睙璺� 1516 寮�"
+        }
+      ]
+    }
   },
-};
+  methods: {
+    refrash(page) {
+      this.page = page
+      this.lookUp()
+    },
+    handleSizeChange(size) {
+      this.size = size
+      this.lookUp()
+    },
+
+    handleClose(done) {
+      // this.dialogVisible = false
+      // this.$confirm("纭鍏抽棴锛�")
+      //   .then((_) => {
+      done()
+      // })
+      // .catch((_) => {})
+    }
+  }
+}
 </script>
 
 <style lang="scss" scoped>
@@ -152,4 +238,13 @@
     }
   }
 }
-</style>
\ No newline at end of file
+.el-pagination ::v-deep {
+  margin-top: 30px;
+
+  text-align: center;
+  height: 24px;
+  .el-pagination__sizes {
+    margin-right: 0;
+  }
+}
+</style>
diff --git a/src/views/manageCenter/index.vue b/src/views/manageCenter/index.vue
index 2681a49..97b7298 100644
--- a/src/views/manageCenter/index.vue
+++ b/src/views/manageCenter/index.vue
@@ -330,6 +330,14 @@
         },
 
         {
+          name: "鏁版嵁鎶ヨ〃",
+          icon: "/images/manageCenter/push.png",
+          openPath: "/dataReport",
+          path: "/dataReport",
+          permission: ""
+        },
+
+        {
           name: "瀹炴椂鐩戞帶",
           icon: "/images/manageCenter/video.png",
           openPath: "/video",

--
Gitblit v1.8.0