zhangyun 3 лет назад
Родитель
Сommit
fe561acdff

+ 2 - 1
pingpu_vue/build/webpack.prod.conf.js

@@ -35,7 +35,8 @@ const webpackConfig = merge(baseWebpackConfig, {
     new UglifyJsPlugin({
       uglifyOptions: {
         compress: {
-          warnings: false
+          warnings: false,
+          pure_funcs: ['console.log'] // 移除console
         }
       },
       sourceMap: config.build.productionSourceMap,

+ 2 - 2
pingpu_vue/config/index.js

@@ -11,8 +11,8 @@ module.exports = {
     assetsPublicPath: '/',
     proxyTable: {
       '/api': {
-        target: 'http://192.168.1.77:8003', //曹世祥本地服务
-        // target: ' http://106.119.196.18:10004', //线上
+        // target: 'http://192.168.1.77:8003', //曹世祥本地服务
+        target: ' http://106.119.196.18:10004', //线上
         // target: 'http://192.168.1.52:8005',
         changeOrigin: true,
         pathRewrite: {

+ 26 - 12
pingpu_vue/src/components/DateSearch/index.vue

@@ -52,6 +52,7 @@ export default {
     return {
       num: 1,
       btnSelected: "1",
+      btnSelected2:"1",
       timeScreen: "1",
       queryInfo: {
         begin: "",
@@ -125,6 +126,7 @@ export default {
       // console.log(day);
 
       this.btnSelected = i;
+      this.btnSelected2 = i
       this.timeRange = "";
       if (i == 1) {
         // 24小时
@@ -138,21 +140,12 @@ export default {
         this.queryInfo.end = parseInt((Date.now()) / 1000);
       } else if (i == 3) {
         // 近一个月
-        // this.queryInfo.begin = parseInt(
-        //   (Date.now() - 24 * 3600000 * 30 * 6) / 1000
-        // );
          this.queryInfo.begin = parseInt(
           (Date.now() - 24 * 3600000 * 30) / 1000
         );
-        // this.queryInfo.begin = parseInt(
-        //   (Date.now() - 24 * 3600000 * 30 * 6) / 1000
-        // );
         this.queryInfo.end = parseInt((Date.now()) / 1000);
       } else if (i == 4) {
         // 近三个月
-        // this.queryInfo.begin = parseInt(
-        //   (Date.now() - 24 * 3600000 * 30 * 12) / 1000
-        // );
         this.queryInfo.begin = parseInt(
           (Date.now() - 24 * 3600000 * 30 * 3) / 1000
         );
@@ -173,9 +166,30 @@ export default {
           new Date(this.timeRange[1]).getTime() / 1000
         );
       } else {
-        this.btnSelected = 1;
-        this.queryInfo.begin = parseInt(+Date.now()/ 1000)-24*60*60;
-        this.queryInfo.end = parseInt(+Date.now()/ 1000);
+        this.btnSelected = this.btnSelected2;
+        if (this.btnSelected == 1) {
+          // 24小时
+          this.queryInfo.begin = parseInt((Date.now() - 24 * 3600000) / 1000);
+          this.queryInfo.end = parseInt(Date.now() / 1000);
+        } else if (this.btnSelected == 2) {
+          // 近七天
+          this.queryInfo.begin = parseInt(
+            (Date.now() - 24 * 3600000 * 7) / 1000
+          );
+          this.queryInfo.end = parseInt(Date.now() / 1000);
+        } else if (this.btnSelected == 3) {
+          // 近一个月
+          this.queryInfo.begin = parseInt(
+            (Date.now() - 24 * 3600000 * 30) / 1000
+          );
+          this.queryInfo.end = parseInt(Date.now() / 1000);
+        } else if (this.btnSelected == 4) {
+          // 近三个月
+          this.queryInfo.begin = parseInt(
+            (Date.now() - 24 * 3600000 * 30 * 3) / 1000
+          );
+          this.queryInfo.end = parseInt(Date.now() / 1000);
+        }
       }
       this.$emit("dateChange", this.queryInfo);
       this.$emit("btnSelected", this.btnSelected);

+ 1 - 1
pingpu_vue/src/page/base/baselist.vue

@@ -250,7 +250,7 @@ export default {
         "/index/maofacility?lng=" +
           center[0] +
           "&lat=" +
-          this.center[1] +
+          center[1] +
           "&id=" +
           item.base_id
       );

+ 37 - 12
pingpu_vue/src/page/cbd/analyse.vue

@@ -12,7 +12,7 @@
       <p class="baselistbox_top_line"></p>
       <div class="baselistbox_top_caozuo">
         <div class="analytitlebox">
-          <div>
+          <div class="btnbox">
             <el-button
               :class="amend == 0 ? '' : 'nobackgound'"
               type="success"
@@ -27,6 +27,7 @@
               @click="tabs(1)"
               >人工识别</el-button
             >
+            <div class="timebtn timebtn3" @click="tosuggest">专家建议</div>
           </div>
           <div class="analytitlebox_item">
             <el-select
@@ -172,7 +173,12 @@
         </el-table-column>
         <el-table-column prop="index" label="图像">
           <template slot-scope="scope">
-            <p @click="opendia(scope.row)" style="color: #14a478;cursor: pointer;">查看</p>
+            <p
+              @click="opendia(scope.row)"
+              style="color: #14a478; cursor: pointer"
+            >
+              查看
+            </p>
           </template>
         </el-table-column>
       </el-table>
@@ -269,7 +275,7 @@ export default {
       page: 1,
       total: 10,
       page_size: 10,
-      pagekey:1,
+      pagekey: 1,
       currentPage: 1,
       dialogVisible: false,
       img_url: "",
@@ -285,7 +291,7 @@ export default {
       timeloading: false,
       d_idtf: true,
       length: 6,
-      pageloading:false
+      pageloading: false,
     };
   },
   //监听属性 类似于data概念
@@ -866,7 +872,7 @@ export default {
     search() {
       this.page = 1;
       this.total = 10;
-      this.pagekey = Math.random()*10+1;
+      this.pagekey = Math.random() * 10 + 1;
       this.currentPage = 1;
       if (this.acttableindex == 1) {
         this.getImagesource();
@@ -876,7 +882,7 @@ export default {
     },
     //图像溯源
     getImagesource() {
-      this.pageloading = false
+      this.pageloading = false;
       this.$axios({
         method: "post",
         url: "/api/api_gateway?method=forecast.worm_lamp.pest_image_source",
@@ -891,7 +897,7 @@ export default {
           page_size: this.page_size,
         }),
       }).then((res) => {
-        this.pageloading = true
+        this.pageloading = true;
         if (res.data.message == "") {
           if (res.data.data) {
             console.log(res.data.data.pest_image_data);
@@ -915,7 +921,7 @@ export default {
     },
     //图像溯源
     getworminfotable() {
-      this.pageloading = false
+      this.pageloading = false;
       this.$axios({
         method: "post",
         url: "/api/api_gateway?method=forecast.worm_lamp.pest_base_data",
@@ -930,7 +936,7 @@ export default {
           page_size: this.page_size,
         }),
       }).then((res) => {
-        this.pageloading = true
+        this.pageloading = true;
         if (res.data.message == "") {
           if (res.data.data) {
             console.log(res.data.data.pest_image_data);
@@ -954,7 +960,7 @@ export default {
     },
     handleSizeChange(e) {
       this.page = 1;
-      this.pagekey = Math.random()*10+1;
+      this.pagekey = Math.random() * 10 + 1;
       this.page_size = e;
       if (this.acttableindex == 1) {
         this.getImagesource();
@@ -966,7 +972,7 @@ export default {
       var myuid = sessionStorage.getItem("myuid");
       if (this.acttableindex == 1) {
         window.location.href =
-          this.$http+
+          this.$http +
           // "http://192.168.1.23:8000" +
           "/api/pest_image_source_export?d_ids=" +
           this.d_id +
@@ -983,7 +989,7 @@ export default {
           this.amend;
       } else if (this.acttableindex == 2) {
         window.location.href =
-          this.$http+
+          this.$http +
           // "http://192.168.1.23:8000" +
           "/api/pest_base_data_export?d_ids=" +
           this.d_id +
@@ -1055,6 +1061,9 @@ export default {
       this.leapyear(this.yservalue);
       this.basedialogVisible = false;
     },
+    tosuggest(){
+      this.$router.push("/index/suggest?type=3")
+    }
   },
   beforeCreate() {}, //生命周期 - 创建之前
   //生命周期 - 创建完成(可以访问当前this实例)
@@ -1131,6 +1140,22 @@ export default {
 .analytitlebox {
   display: flex;
   justify-content: space-between;
+  .btnbox {
+    display: flex;
+    .timebtn {
+      height: 30px;
+      border: 1px solid #4f71ff;
+      text-align: center;
+      border-radius: 3px;
+      font-size: 12px;
+      margin-left: 10px;
+      line-height: 30px;
+      cursor: pointer;
+      width: 80px;
+      background-color: #4f71ff;
+      color: #fff;
+    }
+  }
   .analytitlebox_item {
     width: 60%;
     display: flex;

+ 2 - 2
pingpu_vue/src/page/cbd/cbdDataPhotos.vue

@@ -103,7 +103,7 @@
                     class="imgListData"
                     style="
                       height: 245px;
-                      margin: 0 0 0 10px;
+                      margin: 0 0 10px 10px;
                       text-align: center;
                       background: #fff;
                       border-radius: 5px;
@@ -2296,7 +2296,7 @@ export default {
       let id = that.$route.params.id;
       let postData = that.qs.stringify({
         device_id: id,
-        page_number: 8,
+        page_number: 12,
         page: that.currentPage,
         ret: "list",
         time_begin: this.queryInfo.begin, //开始时间(时间戳)

+ 76 - 10
pingpu_vue/src/page/gis/gisshow.vue

@@ -50,11 +50,16 @@
                 ? 'listbox_facbox_item listbox_facbox_item2'
                 : 'listbox_facbox_item'
             "
-            
             v-for="(item, index) in faclist"
             :key="index"
             @click="selfac(index)"
-            :style="{backgroundColor:item.crop_colors+'50',border:selfacindex == index?'2px solid '+item.crop_colors:'2px solid '+item.crop_colors+'20'}"
+            :style="{
+              backgroundColor: item.crop_colors + '50',
+              border:
+                selfacindex == index
+                  ? '2px solid ' + item.crop_colors
+                  : '2px solid ' + item.crop_colors + '20',
+            }"
           >
             <p class="title">{{ item.massif_name }}</p>
             <p>{{ item.crop_name }}</p>
@@ -128,7 +133,7 @@
           style="display: block"
           v-model="devicenameoff"
           active-color="#4f71ff"
-          inactive-color="#ff4949"
+          inactive-color="#ddd"
           active-text="显示"
           inactive-text="隐藏"
         >
@@ -451,6 +456,7 @@ export default {
       devicenameoff: false,
       devilist: [],
       selfacindex: 0,
+      textlist:[]
     };
   },
   //监听属性 类似于data概念
@@ -581,8 +587,8 @@ export default {
       });
     },
     selbasechange() {
-      this.selfacindex = 0
-      this.devicenameoff = false
+      this.selfacindex = 0;
+      this.devicenameoff = false;
       this.getbaselistinfo();
       this.getbasepoltlist();
       this.getpoltlist();
@@ -626,6 +632,9 @@ export default {
       for (var i = 0; i < this.facpolylist.length; i++) {
         this.map.remove(this.facpolylist[i]);
       }
+      for (var i = 0; i < this.textlist.length; i++) {
+        this.map.remove(this.textlist[i]);
+      }
       this.$axios({
         method: "post",
         url: "api/api_gateway?method=basemanager.baseinfo.get_massif_list",
@@ -640,7 +649,8 @@ export default {
           var data = res.data.data.data;
           //   this.faclist = data;
           console.log(data);
-          this.polygons = [];
+          this.facpolylist = [];
+          this.textlist = []
           var ploritem = "";
           for (var i = 0; i < data.length; i++) {
             var polygonArr = JSON.parse(data[i].coordinates);
@@ -668,6 +678,30 @@ export default {
               });
             }
             this.facpolylist.push(ploritem);
+            var text = new AMap.Text({
+              text: data[i].crop_name,
+              anchor: "center", // 设置文本标记锚点
+              draggable: false,
+              cursor: "pointer",
+              angle: 0,
+              style: {
+                padding: "0",
+                "margin-bottom": "1rem",
+                "border-radius": ".25rem",
+                "background-color": "rgba(0,0,0,0)",
+                width: "15rem",
+                "border-width": 0,
+                "box-shadow": "0 2px 6px 0 rgba(114, 124, 245, 0)",
+                "text-align": "center",
+                "font-size": "14px",
+                color: "#fff",
+                "text-shadow": "2px 2px rgba(0,0,0,0.3)",
+              },
+              position: this.getPointsCenter(JSON.parse(data[i].coordinates)),
+            });
+            console.log(this.getPointsCenter(JSON.parse(data[i].coordinates)))
+            text.setMap(this.map);
+            this.textlist.push(text)
             ploritem.on("click", (e) => {
               // console.log(e.target._opts.data)
               this.baselistitem_id = e.target._opts.data;
@@ -679,6 +713,37 @@ export default {
         }
       });
     },
+    //参数数组points的每一项为每一个点的:纬度,精度
+    //返回中心点的数组[纬度,精度]
+    getPointsCenter(points) {
+      var point_num = points.length; //坐标点个数
+      var X = 0,
+        Y = 0,
+        Z = 0;
+      for (let i = 0; i < points.length; i++) {
+        if (points[i] == "") {
+          continue;
+        }
+        let point = points[i]
+        var lat, lng, x, y, z;
+        lat = (parseFloat(point[1]) * Math.PI) / 180;
+        lng = (parseFloat(point[0]) * Math.PI) / 180;
+        x = Math.cos(lat) * Math.cos(lng);
+        y = Math.cos(lat) * Math.sin(lng);
+        z = Math.sin(lat);
+        X += x;
+        Y += y;
+        Z += z;
+      }
+      X = X / point_num;
+      Y = Y / point_num;
+      Z = Z / point_num;
+
+      var tmp_lng = Math.atan2(Y, X);
+      var tmp_lat = Math.atan2(Z, Math.sqrt(X * X + Y * Y));
+
+      return [(tmp_lng * 180) / Math.PI,(tmp_lat * 180) / Math.PI];
+    },
     getdevlist() {
       for (var i = 0; i < this.equipmentpolylist.length; i++) {
         this.map.remove(this.equipmentpolylist[i]);
@@ -872,9 +937,9 @@ export default {
       });
     },
     selfac(index) {
-      this.selfacindex = index
+      this.selfacindex = index;
+      console.log(this.facpolylist);
       for (var i = 0; i < this.facpolylist.length; i++) {
-        console.log(this.facpolylist[i])
         if (i == index) {
           this.facpolylist[i].setOptions({
             strokeColor: this.facpolylist[i]._opts.strokeColor, //线颜色
@@ -987,6 +1052,7 @@ export default {
           box-sizing: border-box;
           margin-top: 14px;
           border-radius: 4px;
+          cursor: pointer;
           p {
             font-size: 14px;
             color: #262626;
@@ -1026,8 +1092,8 @@ export default {
           }
         }
         // .listbox_facbox_item2 {
-          // border: 1px solid rgba(79, 113, 255, 1);
-          // background-color: rgb(212, 233, 250);
+        // border: 1px solid rgba(79, 113, 255, 1);
+        // background-color: rgb(212, 233, 250);
         // }
       }
     }

+ 1 - 1
pingpu_vue/src/page/join/joincbd.vue

@@ -133,7 +133,7 @@ export default {
       end_time: "",
       start_time: "",
       page: "1",
-      page_size: "12",
+      page_size: 12,
       pagekey:1
     };
   },

+ 2 - 2
pingpu_vue/src/page/join/joinqxz.vue

@@ -3,7 +3,7 @@
   <div class="cbdbox">
     <div class="baselistbox_top">
       <div class="baselistbox_top_title">
-        <p>查看图片</p>
+        <p>查看数据</p>
       </div>
       <p class="baselistbox_top_line"></p>
       <div class="baselistbox_top_search">
@@ -128,7 +128,7 @@ export default {
       end_time: "",
       start_time: "",
       page: 1,
-      page_size: "10",
+      page_size: 10,
       fengobj: {},
       pagekey: 1,
     };

+ 1 - 6
pingpu_vue/src/page/monitor/PhotoView.vue

@@ -36,12 +36,7 @@
           <template slot-scope="scope">
             <el-col :span="6" v-for="(src, index) in scope.images" :key="index">
               <el-card style="height: 272px">
-                <!-- <img :src="src.addr" class="image" /> -->
-                <img v-lazy="src.addr" id="viewerDom" v-viewer class="image" />
-                <!-- <span
-                  class="del iconfont icon-shanchu"
-                  @click="delPhoto(src)"
-                ></span> -->
+                <img :src="src.addr" id="viewerDom" class="image" />
                 <div class="bottom">
                   {{ (src.addtime * 1000) | formatTime }}
                 </div>

+ 9 - 0
pingpu_vue/src/page/qxz/HistoryData.vue

@@ -26,6 +26,7 @@
           </div>
           <div class="timebtn timebtn1" @click="deriveData">导出</div>
           <div class="timebtn timebtn1" @click="refresh">刷新</div>
+          <div class="timebtn timebtn3" @click="tosuggest">专家建议</div>
         </div>
         <div class="search_right">
           <div
@@ -568,6 +569,9 @@ export default {
         },
       };
     },
+    tosuggest(){
+      this.$router.push("/index/suggest?type=5")
+    }
   },
   beforeCreate() {}, //生命周期 - 创建之前
   //生命周期 - 创建完成(可以访问当前this实例)
@@ -645,6 +649,11 @@ export default {
         .timebtn2 {
           color: #4f71ff;
         }
+        .timebtn3{
+          width: 80px;
+          background-color: #4f71ff;
+          color: #fff;
+        }
       }
       .search_right {
         display: flex;

+ 491 - 0
pingpu_vue/src/page/specialist/suggest.vue

@@ -0,0 +1,491 @@
+<!--  -->
+<template>
+  <div class="sugbox">
+    <div class="baselistbox_top">
+      <div class="baselistbox_top_title">
+        <p @click="backtrack" style="cursor: pointer">
+          <i class="el-icon-back"></i>
+          <span>返回</span>
+        </p>
+        <p>专家建议</p>
+      </div>
+      <p class="baselistbox_top_line"></p>
+      <div class="baselistbox_top_search" v-show="listoradd == 0">
+        <div class="left_search">
+          <div class="btnbox2" @click="listoradd = 1">新增建议</div>
+        </div>
+        <div class="right_search">
+          <el-date-picker
+            v-model="value1"
+            type="daterange"
+            range-separator="至"
+            start-placeholder="开始日期"
+            end-placeholder="结束日期"
+            size="mini"
+            @change="timechange"
+          >
+          </el-date-picker>
+          <div class="firstsearch">
+            <el-input
+              v-model="key_word"
+              size="mini"
+              placeholder="请输入关键字搜索"
+            ></el-input>
+          </div>
+          <div class="btnbox" @click="searchChange">查询</div>
+        </div>
+      </div>
+      <div class="baselistbox_top_search" v-show="listoradd == 1">
+        <div class="left_search">
+          <div class="btnbox2" @click="listoradd = 0">列 表</div>
+        </div>
+      </div>
+    </div>
+    <div class="baselistbox_table" v-show="listoradd == 0">
+      <div class="listbox">
+        <div
+          class="listbox_item"
+          v-for="(item, index) in suggestlist"
+          :key="index"
+        >
+          <div class="listbox_title">
+            <p>分析人员:{{ item.user_name }}</p>
+            <p>{{ item.create_time }}</p>
+          </div>
+          <div class="listbox_text">{{ item.foreword }}<span v-if="item.foreword.length==150">...</span></div>
+          <div class="listbox_btn">
+            <p @click="dellist(item)">删除</p>
+            <p @click="seeinfo(item)">查看详细</p>
+          </div>
+        </div>
+      </div>
+      <div class="none" v-if="!suggestlist.length">
+        <img src="../../../static/images/quexingye.png" alt="" />
+      </div>
+      <div class="pagination">
+        <el-pagination
+          background
+          layout="prev, pager, next,sizes,jumper"
+          :total="totalnum"
+          :page-sizes="[4, 8, 12, 16]"
+          :page-size="page_size"
+          @size-change="handleSizeChange"
+          @current-change="handleCurrentChange"
+          :current-size.sync="page"
+          :key="pagekey"
+        >
+        </el-pagination>
+      </div>
+    </div>
+    <div class="baselistbox_table" v-show="listoradd == 1">
+      <editor :tinymceHtml="sugaddinfo.content" @inp="inp($event)"></editor>
+      <div class="btnbigbox">
+        <div class="btnbox" @click="sugadd">提交</div>
+      </div>
+    </div>
+    <el-dialog
+      title="专家建议"
+      :visible.sync="dialogVisible"
+      width="766px"
+      :close-on-click-modal="false"
+    >
+      <div class="infobox">
+        <div v-html="infohtml"></div>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+//这里可以导入其他文件(比如:组件,工具js,第三方插件js,json文件,图片文件等等)
+import Editor from "@/components/editor/Editor";
+export default {
+  //import引入的组件需要注入到对象中才能使用
+  components: {
+    Editor,
+  },
+  data() {
+    //这里存放数据
+    return {
+      value1: "",
+      key_word: "",
+      totalnum: 10,
+      page: 1,
+      pagekey: 1,
+      page_size: 4,
+      suggestlist: [],
+      listoradd: 0,
+      prevention: "",
+      sugaddinfo: {
+        content: "",
+        foreword: "",
+      },
+      start_time: "",
+      end_time: "",
+      dialogVisible:false,
+      infohtml:"",
+      type:""
+    };
+  },
+  //监听属性 类似于data概念
+  computed: {},
+  //监控data中的数据变化
+  watch: {},
+  //方法集合
+  methods: {
+    backtrack() {
+      this.$router.go(-1);
+    },
+    handleSizeChange(e) {
+      this.page_size = e;
+      this.page = 1;
+      this.pagekey = Math.random() * 10 + 1;
+      this.getsuglist();
+    },
+    handleCurrentChange(e) {
+      this.page = e;
+      this.getsuglist();
+    },
+    timechange(e) {
+      console.log(e);
+      if (e) {
+        var time = new Date(e[0]);
+        var year1 = time.getFullYear();
+        var month1 = time.getMonth() + 1;
+        var date1 = time.getDate();
+        var time2 = new Date(e[1]);
+        var year2 = time2.getFullYear();
+        var month2 = time2.getMonth() + 1;
+        var date2 = time2.getDate();
+        this.start_time = year1 + "-" + month1 + "-" + date1;
+        this.end_time = year2 + "-" + month2 + "-" + date2;
+      } else {
+        this.start_time = "";
+        this.end_time = "";
+      }
+      this.page = 1;
+      this.pagekey = Math.random() * 10 + 1;
+      this.getsuglist();
+    },
+    inp(el) {
+      //   console.log(this.getHtmlPlainText(el.sunHtml));
+      this.sugaddinfo.content = el.sunHtml;
+      this.sugaddinfo.foreword = this.getHtmlPlainText(el.sunHtml);
+    },
+    getHtmlPlainText(str) {
+      str = str.replace(/(\n)/g, "");
+      str = str.replace(/(\t)/g, "");
+      str = str.replace(/(\r)/g, "");
+      str = str.replace(/(&nbsp;)/g, "");
+      str = str.replace(/<\/?[^>]*>/g, "");
+      str = str.replace(/\s*/g, "");
+      str = str.replace(/<[^>]*>/g, "");
+      //或
+      //var text = html_str.replace(/<[^<>]+>/g, "");
+      return str;
+    },
+    searchChange() {
+      this.page = 1;
+      this.pagekey = Math.random() * 10 + 1;
+      this.getsuglist();
+    },
+    getsuglist() {
+      this.$axios({
+        method: "post",
+        url: "api/api_gateway?method=article.article.list_article",
+        data: this.qs.stringify({
+          start_time: this.start_time,
+          end_time: this.end_time,
+          key_word: this.key_word,
+          article_type: this.type,
+          page: this.page,
+          page_size: this.page_size,
+        }),
+      }).then((res) => {
+        if (res.data.message == "") {
+          console.log(res.data.data);
+          this.suggestlist = res.data.data.data;
+          this.totalnum = res.data.data.total_num;
+        }
+      });
+    },
+    sugadd() {
+      console.log(this.sugaddinfo.foreword);
+      if (this.sugaddinfo.foreword == "") {
+        if (document.getElementsByClassName("el-message").length == 0) {
+          this.$message.error("请输入内容");
+        }
+      } else {
+        console.log(this.sugaddinfo.foreword.slice(0, 150));
+        this.$axios({
+          method: "post",
+          url: "api/api_gateway?method=article.article.add_article",
+          data: this.qs.stringify({
+            article_type: this.type,
+            foreword: this.sugaddinfo.foreword.slice(0, 150),
+            content: this.sugaddinfo.content,
+          }),
+        }).then((res) => {
+          if (res.data.message == "") {
+            if (document.getElementsByClassName("el-message").length == 0) {
+              this.$message.success("添加成功");
+            }
+            this.listoradd = 0;
+            this.sugaddinfo.content = "";
+            this.sugaddinfo.foreword = "";
+            this.getsuglist();
+          } else {
+            if (document.getElementsByClassName("el-message").length == 0) {
+              this.$message.error(res.data.message);
+            }
+          }
+        });
+      }
+    },
+    dellist(item) {
+      this.$confirm("此操作将删除该条建议, 是否继续?", "提示", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning",
+      })
+        .then(() => {
+          this.$axios({
+            method: "post",
+            url: "api/api_gateway?method=article.article.del_article",
+            data: this.qs.stringify({
+              ea_id: item.ea_id,
+            }),
+          }).then((res) => {
+            if (res.data.message == "") {
+              this.$message({
+                type: "success",
+                message: "删除成功!",
+              });
+              this.getsuglist();
+            } else {
+              this.$message({
+                type: "error",
+                message: res.data.message,
+              });
+            }
+          });
+        })
+        .catch(() => {
+          this.$message({
+            type: "info",
+            message: "已取消删除",
+          });
+        });
+    },
+    seeinfo(item){
+      this.infohtml = item.content
+      this.dialogVisible = true
+    }
+  },
+  beforeCreate() {}, //生命周期 - 创建之前
+  //生命周期 - 创建完成(可以访问当前this实例)
+  created() {
+    this.type = this.$route.query.type
+    console.log(this.$route)
+    this.getsuglist();
+  },
+  beforeMount() {}, //生命周期 - 挂载之前
+  //生命周期 - 挂载完成(可以访问DOM元素)
+  mounted() {},
+  beforeUpdate() {}, //生命周期 - 更新之前
+  updated() {}, //生命周期 - 更新之后
+  beforeDestroy() {}, //生命周期 - 销毁之前
+  destroyed() {}, //生命周期 - 销毁完成
+  activated() {}, //如果页面有keep-alive缓存功能,这个函数会触发
+};
+</script>
+<style lang="less" scoped>
+.sugbox {
+  width: 100%;
+  height: 100%;
+  .baselistbox_top {
+    width: 100%;
+    height: 130px;
+    background-color: #fff;
+    border-radius: 10px;
+    .baselistbox_top_title {
+      width: 100%;
+      height: 65px;
+      display: flex;
+      padding: 20px;
+      box-sizing: border-box;
+      line-height: 25px;
+      p:first-child {
+        font-size: 14px;
+      }
+      p:last-child {
+        font-size: 18px;
+        font-weight: 700;
+        margin-left: 20px;
+      }
+    }
+    .baselistbox_top_line {
+      width: 100%;
+      height: 1px;
+      background-color: #f2f2f2;
+    }
+    .baselistbox_top_search {
+      width: 100%;
+      height: 68px;
+      display: flex;
+      padding: 20px;
+      box-sizing: border-box;
+      line-height: 28px;
+      justify-content: space-between;
+      .left_search {
+        display: flex;
+        .btnbox,
+        .btnbox2 {
+          width: 80px;
+          height: 26px;
+          border: 1px solid #4f71ff;
+          text-align: center;
+          border-radius: 3px;
+          font-size: 14px;
+          cursor: pointer;
+          line-height: 26px;
+        }
+        .btnbox {
+          background-color: #4f71ff;
+          color: #fff;
+        }
+        .btnbox2 {
+          color: #4f71ff;
+        }
+      }
+      .right_search {
+        display: flex;
+        .firstsearch,
+        .secsearch {
+          display: flex;
+          margin-left: 20px;
+          /deep/.el-input {
+            width: 240px;
+          }
+          .biaoti {
+            font-size: 14px;
+            margin-right: 20px;
+          }
+        }
+        .btnbox,
+        .btnbox2 {
+          width: 68px;
+          height: 26px;
+          border: 1px solid #4f71ff;
+          text-align: center;
+          border-radius: 3px;
+          font-size: 14px;
+          margin-left: 20px;
+          cursor: pointer;
+          line-height: 26px;
+        }
+        .btnbox {
+          background-color: #4f71ff;
+          color: #fff;
+        }
+        .btnbox2 {
+          color: #4f71ff;
+        }
+      }
+    }
+  }
+  .baselistbox_table {
+    width: 100%;
+    background-color: #fff;
+    margin-top: 10px;
+    padding: 20px;
+    box-sizing: border-box;
+    position: relative;
+    border-radius: 10px;
+    .listbox {
+      width: 100%;
+      .listbox_item {
+        width: 100%;
+        border-bottom: 1px solid #f2f2f2;
+        margin-bottom: 20px;
+        .listbox_title {
+          display: flex;
+          justify-content: space-between;
+          p:first-child {
+            font-size: 18px;
+            color: #4f71ff;
+          }
+          p:last-child {
+            color: #8c8c8c;
+            font-size: 14px;
+          }
+        }
+        .listbox_text {
+          margin: 15px 0;
+          color: #595959;
+          font-size: 14px;
+          letter-spacing: 1px;
+          line-height: 22px;
+        }
+        .listbox_btn {
+          display: flex;
+          justify-content: flex-end;
+          margin-bottom: 10px;
+          p {
+            margin-left: 10px;
+            font-size: 14px;
+            color: #4f71ff;
+            cursor: pointer;
+          }
+        }
+      }
+    }
+    /deep/.tinymce {
+      .mce-container-body > .mce-first > .mce-container-body > .mce-menubar {
+        display: none;
+      }
+      .mce-flow-layout > .mce-btn-group:nth-child(8) {
+        display: none;
+      }
+    }
+    .btnbigbox {
+      display: flex;
+      justify-content: flex-end;
+    }
+    .btnbox {
+      width: 68px;
+      height: 26px;
+      border: 1px solid #4f71ff;
+      text-align: center;
+      border-radius: 3px;
+      font-size: 14px;
+      cursor: pointer;
+      line-height: 26px;
+      background-color: #4f71ff;
+      color: #fff;
+      margin-top: 15px;
+    }
+    .none {
+      width: 100%;
+      display: flex;
+      justify-content: space-around;
+    }
+    .pagination {
+      display: flex;
+      justify-content: flex-end;
+      margin-top: 20px;
+      /deep/.el-pager {
+        .active {
+          background-color: #4f71ff !important;
+        }
+      }
+      /deep/.el-input__inner:hover {
+        border-color: #4f71ff;
+      }
+    }
+  }
+}
+.infobox{
+  overflow: hidden;
+}
+</style>

+ 9 - 0
pingpu_vue/src/page/sqz/HistoryData.vue

@@ -26,6 +26,7 @@
           </div>
           <div class="timebtn timebtn1" @click="deriveData">导出</div>
           <div class="timebtn timebtn1" @click="refresh">刷新</div>
+          <div class="timebtn timebtn3" @click="tosuggest">专家建议</div>
         </div>
         <div class="search_right">
           <div
@@ -583,6 +584,9 @@ export default {
         },
       };
     },
+    tosuggest(){
+      this.$router.push("/index/suggest?type=8")
+    }
   },
   beforeCreate() {}, //生命周期 - 创建之前
   //生命周期 - 创建完成(可以访问当前this实例)
@@ -660,6 +664,11 @@ export default {
         .timebtn2 {
           color: #4f71ff;
         }
+        .timebtn3{
+          width: 80px;
+          background-color: #4f71ff;
+          color: #fff;
+        }
       }
       .search_right {
         display: flex;

+ 5 - 3
pingpu_vue/src/page/user/userlist.vue

@@ -68,7 +68,7 @@
           background
           layout="prev, pager, next,sizes,jumper"
           :total="totalnum"
-          :page-sizes="[1, 2, 3, 5]"
+          :page-sizes="[10, 20, 30, 50]"
           :page-size="page_size"
           @size-change="handleSizeChange"
           @current-change="handleCurrentChange"
@@ -502,12 +502,13 @@ export default {
         .btnbox,
         .btnbox2 {
           width: 68px;
-          height: 28px;
+          height: 26px;
           border: 1px solid #4f71ff;
           text-align: center;
           border-radius: 3px;
           font-size: 14px;
           cursor: pointer;
+          line-height: 26px;
         }
         .btnbox {
           background-color: #4f71ff;
@@ -534,13 +535,14 @@ export default {
         .btnbox,
         .btnbox2 {
           width: 68px;
-          height: 28px;
+          height: 26px;
           border: 1px solid #4f71ff;
           text-align: center;
           border-radius: 3px;
           font-size: 14px;
           margin-left: 20px;
           cursor: pointer;
+          line-height: 26px;
         }
         .btnbox {
           background-color: #4f71ff;

+ 5 - 4
pingpu_vue/src/router/index.js

@@ -53,6 +53,7 @@ import gisshow from '../../src/page/gis/gisshow.vue'
 import userlist from '../../src/page/user/userlist.vue'
 //专家
 import specialist from '../../src/page/specialist/specialist.vue'
+import suggest from '../../src/page/specialist/suggest.vue'//专家建议
 //接入设备
 import joincbd from '../../src/page/join/joincbd.vue'
 import joinqxz from '../../src/page/join/joinqxz.vue'
@@ -163,10 +164,7 @@ export default new Router({
           component: evildata
         }, {
           path: "baselist",
-          component: baselist,
-          meta: {
-            keepAlive: true, //留存数据
-          }
+          component: baselist
         }, {
           path: "plotlist",
           component: plotlist
@@ -195,6 +193,9 @@ export default new Router({
           path: "specialist",
           component: specialist
         }, {
+          path: "suggest",
+          component: suggest
+        }, {
           path: "joinqxz",
           component: joinqxz
         }, {