guhongwei 4 سال پیش
والد
کامیت
61bc74f40b
63فایلهای تغییر یافته به همراه2922 افزوده شده و 2649 حذف شده
  1. 1 1
      public/home.html
  2. BIN
      src/assets/center/cgxx.png
  3. BIN
      src/assets/center/gqxx.png
  4. BIN
      src/assets/center/jlhd.png
  5. BIN
      src/assets/center/sjdt.png
  6. BIN
      src/assets/center/xqxx.png
  7. BIN
      src/assets/dynamic5.png
  8. BIN
      src/assets/dynamic6.png
  9. BIN
      src/assets/dynamic7.png
  10. BIN
      src/assets/dynamic8.png
  11. BIN
      src/assets/fmzl.jpg
  12. BIN
      src/assets/live/main2.png
  13. BIN
      src/assets/live/main3.png
  14. 1 1
      src/layout/adminCenter/menuInfo.vue
  15. 77 0
      src/layout/common/topColumn.vue
  16. 1 1
      src/layout/live/head.vue
  17. 1 1
      src/layout/vipCenter/menuInfo.vue
  18. 6 6
      src/router/index.js
  19. 1 1
      src/views/adminCenter/dynamicInfo/index.vue
  20. 1 1
      src/views/adminCenter/index.vue
  21. 74 134
      src/views/dynamic/index.vue
  22. 153 0
      src/views/dynamic/parts/achieveCom.vue
  23. 141 0
      src/views/dynamic/parts/achieveFiled.vue
  24. 0 156
      src/views/dynamic/parts/down-pie.vue
  25. 149 0
      src/views/dynamic/parts/expertCom.vue
  26. 5 4
      src/views/dynamic/parts/userTwo.vue
  27. 1 1
      src/views/exporthall/index.vue
  28. 2 2
      src/views/hallList/index.vue
  29. 3 3
      src/views/hallList/parts/export.vue
  30. 109 0
      src/views/market/detail/patentDetail.vue
  31. 9 9
      src/views/technical/detail/roadetail.vue
  32. 127 1144
      src/views/market/index.vue
  33. 196 0
      src/views/market/index/achieve.vue
  34. 119 0
      src/views/market/index/business.vue
  35. 127 0
      src/views/market/index/expert.vue
  36. 97 0
      src/views/market/index/patent.vue
  37. 119 0
      src/views/market/index/roadshow.vue
  38. 104 0
      src/views/market/index/technology.vue
  39. 186 0
      src/views/market/list/patent.vue
  40. 177 0
      src/views/market/list/roadshow.vue
  41. 167 119
      src/views/market/marketlists.vue
  42. 0 75
      src/views/market/re.vue
  43. 33 177
      src/views/superAdminCenter/technical/index.vue
  44. 146 0
      src/views/superAdminCenter/technical/parts/column.vue
  45. 212 0
      src/views/superAdminCenter/technical/parts/news.vue
  46. 0 94
      src/views/technical/detail/guidetail.vue
  47. 0 0
      src/views/technical/gzcy/chat.vue
  48. 0 0
      src/views/technical/gzcy/jbyx.vue
  49. 0 0
      src/views/technical/gzcy/jyxc.vue
  50. 0 0
      src/views/technical/gzcy/wsdc.vue
  51. 0 0
      src/views/technical/gzcy/zhfw.vue
  52. 1 1
      src/views/dynamic/downparts/zxzx.vue
  53. 135 354
      src/views/technical/index.vue
  54. 118 0
      src/views/technical/index/question.vue
  55. 110 0
      src/views/technical/index/work.vue
  56. 10 72
      src/views/technical/list.vue
  57. 1 1
      src/views/technical/list/export.vue
  58. 0 133
      src/views/technical/list/guidance.vue
  59. 0 156
      src/views/technical/list/roadshow.vue
  60. 0 0
      src/views/technical/parts/gzcy.vue
  61. 0 0
      src/views/technical/product.vue
  62. 1 1
      src/views/vipCenter/dynamicInfo/index.vue
  63. 1 1
      src/views/vipCenter/index.vue

+ 1 - 1
public/home.html

@@ -83,7 +83,7 @@
       <p>直播大厅</p>
     </a>
     <a class="list fn_3 moveUpDownFla1" target="_blank" href="dynamic/index">
-      <p>动态监测</p>
+      <p>数据动态</p>
     </a>
     <a class="list fn_4 moveUpDownFla2" target="_blank" href="live/service">
       <p>新闻资讯</p>

BIN
src/assets/center/cgxx.png


BIN
src/assets/center/gqxx.png


BIN
src/assets/center/jlhd.png


BIN
src/assets/center/sjdt.png


BIN
src/assets/center/xqxx.png


BIN
src/assets/dynamic5.png


BIN
src/assets/dynamic6.png


BIN
src/assets/dynamic7.png


BIN
src/assets/dynamic8.png


BIN
src/assets/fmzl.jpg


BIN
src/assets/live/main2.png


BIN
src/assets/live/main3.png


+ 1 - 1
src/layout/adminCenter/menuInfo.vue

@@ -71,7 +71,7 @@
             <el-menu-item index="9">
               <template slot="title">
                 <i class="el-icon-pie-chart"></i>
-                <span>动态监测</span>
+                <span>数据动态</span>
               </template>
             </el-menu-item>
             <!-- <el-menu-item index="10">

+ 77 - 0
src/layout/common/topColumn.vue

@@ -0,0 +1,77 @@
+<template>
+  <div id="topColumn">
+    <el-row>
+      <el-col :span="24" class="top">
+        <el-col :span="2" class="topImg">
+          <el-image :src="iconImage"></el-image>
+        </el-col>
+        <el-col :span="22" class="topTxt">
+          <span>{{ topInfo.title }}</span>
+          <span>{{ topInfo.engTitle }}</span>
+          <span @click="moreBtn">更多</span>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  name: 'topColumn',
+  props: {
+    topInfo: { typs: Object },
+  },
+  components: {},
+  data: function() {
+    return {
+      iconImage: require('@/assets/live/square_big.png'),
+    };
+  },
+  created() {},
+  methods: {
+    moreBtn() {
+      this.$emit('moreBtn');
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+  },
+  watch: {},
+};
+</script>
+
+<style lang="less" scoped>
+.top {
+  height: 50px;
+  .topTxt {
+    height: 45px;
+    border-bottom: 3px solid #044b79;
+    line-height: 45px;
+    padding: 0 5px;
+    span:nth-child(1) {
+      font-size: 24px;
+      font-weight: 700;
+    }
+    span:nth-child(2) {
+      padding: 0 10px;
+      text-transform: Capitalize;
+      font-size: 18px;
+      color: #92959a;
+      font-weight: 700;
+    }
+    span:nth-child(3) {
+      float: right;
+      font-size: 16px;
+      font-weight: bold;
+    }
+    span:nth-child(3):hover {
+      cursor: pointer;
+      color: #409eff;
+    }
+  }
+}
+</style>

+ 1 - 1
src/layout/live/head.vue

@@ -72,7 +72,7 @@
                 <span></span>
               </li>
               <li :class="isTab('dynamic') ? 'active' : ''">
-                <a @click="turnTo('dynamic')" target="">动态监测</a>
+                <a @click="turnTo('dynamic')" target="">数据动态</a>
                 <span></span>
               </li>
               <li :class="isTab('technical') ? 'active' : ''">

+ 1 - 1
src/layout/vipCenter/menuInfo.vue

@@ -29,7 +29,7 @@
             <el-menu-item index="3">
               <template slot="title">
                 <i class="el-icon-video-camera"></i>
-                <span>动态监测</span>
+                <span>数据动态</span>
               </template>
             </el-menu-item>
             <el-menu-item index="4">

+ 6 - 6
src/router/index.js

@@ -39,18 +39,18 @@ const live = [
         name: 'live_service_newslist',
         component: () => import('../views/service/newslist.vue'),
       },
-      // 动态监测
+      // 数据动态
       {
         path: '/dynamic/index',
         name: 'dynamic_index',
-        meta: { title: '动态监测列表', subSite: true },
+        meta: { title: '数据动态列表', subSite: true },
         component: () => import('../views/dynamic/index.vue'),
       },
       {
-        path: '/dynamic/product',
+        path: '/technical/product',
         name: 'product',
         meta: { title: '发布产品', subSite: true },
-        component: () => import('../views/dynamic/product.vue'),
+        component: () => import('../views/technical/product.vue'),
       },
       // 技术交流
       {
@@ -113,11 +113,11 @@ const live = [
     meta: { title: '人才招聘展会' },
     component: () => import('../views/personalhall/index.vue'),
   },
-  // 专家培训在线
+  // 培训问诊在线
   {
     path: '/exporthall/index',
     name: 'exporthall',
-    meta: { title: '专家培训在线展会' },
+    meta: { title: '培训问诊在线展会' },
     component: () => import('../views/exporthall/index.vue'),
   },
   // 科技在线频道

+ 1 - 1
src/views/adminCenter/dynamicInfo/index.vue

@@ -2,7 +2,7 @@
   <div id="index">
     <el-row>
       <el-col :span="24">
-        <el-col :span="24" class="leftTop"> <span>|</span> <span>动态监测</span> </el-col>
+        <el-col :span="24" class="leftTop"> <span>|</span> <span>数据动态</span> </el-col>
         <el-col :span="24" class="info">
           <el-tabs v-model="activeName" type="card">
             <el-tab-pane label="正在洽谈" name="first">

+ 1 - 1
src/views/adminCenter/index.vue

@@ -84,7 +84,7 @@ export default {
     vipInfo, //VIP用户
     transaction, //交易确定
     statisInfo, //统计报表
-    dynamicInfo, //动态监测
+    dynamicInfo, //数据动态
     zxzd, //嘉宾访谈
     xmly, //项目路演
     foot,

+ 74 - 134
src/views/dynamic/index.vue

@@ -3,176 +3,116 @@
     <el-row>
       <el-col :span="24" class="main">
         <div class="w_1200">
-          <el-col :span="24" class="dataShow">
+          <el-col :span="24" class="one">
             <el-col :span="12" class="left">
               <userTwo></userTwo>
             </el-col>
-            <el-col :span="12" class="center">
-              <maps></maps>
+            <el-col :span="12" class="right">
+              <expertCom></expertCom>
             </el-col>
           </el-col>
           <el-col :span="24" class="two">
             <el-image :src="centerImage"></el-image>
           </el-col>
-          <el-col :span="24" class="three">
-            <gzcy :list="gzcyList" @show="show"></gzcy>
+          <el-col :span="24" class="thr">
+            <el-col :span="12" class="left">
+              <achieveFiled></achieveFiled>
+            </el-col>
+            <el-col :span="12" class="right">
+              <achieveCom></achieveCom>
+            </el-col>
           </el-col>
         </div>
       </el-col>
     </el-row>
-    <el-dialog title="展会服务" :visible.sync="zhfwdialog" width="50%" :before-close="handleClose">
-      <zhfw></zhfw>
-    </el-dialog>
-    <el-dialog title="在线咨询" :visible.sync="zxzxdialog" width="30%" :before-close="handleClose">
-      <zxzx></zxzx>
-    </el-dialog>
-    <el-dialog title="建言献策" :visible.sync="jyxcdialog" width="30%" :before-close="handleClose">
-      <jyxc @handleClose="handleClose"></jyxc>
-    </el-dialog>
-    <el-dialog title="网上调查" :visible.sync="wsdcdialog" width="30%" :before-close="handleClose">
-      <wsdc @handleClose="handleClose"></wsdc>
-    </el-dialog>
-    <el-dialog title="举报邮箱" :visible.sync="jbyxdialog" width="30%" :before-close="handleClose">
-      <jbyx></jbyx>
-    </el-dialog>
   </div>
 </template>
 
 <script>
+// 数据整理
 import userTwo from './parts/userTwo.vue';
-import pie from './parts/down-pie.vue';
-import maps from './parts/map.vue';
-// 公众参与
-import gzcy from './parts/gzcy.vue';
-//展会服务
-import zhfw from './downparts/zhfw.vue';
-//在线咨询
-import zxzx from './downparts/zxzx.vue';
-// 建言献策
-import jyxc from './downparts/jyxc.vue';
-// 网上调查
-import wsdc from './downparts/wsdc.vue';
-// 举报邮箱
-import jbyx from './downparts/jbyx.vue';
+// 专家一览
+import expertCom from './parts/expertCom.vue';
+// 成果领域
+import achieveFiled from './parts/achieveFiled.vue';
+// 成果单位
+import achieveCom from './parts/achieveCom.vue';
 
+import { mapState, createNamespacedHelpers } from 'vuex';
 export default {
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
   name: 'index',
   props: {},
-  components: { userTwo, gzcy, maps, zhfw, zxzx, jyxc, wsdc, jbyx },
-  data: () => ({
-    centerImage: require('@/assets/dynamic5.png'),
-    // 公众参与
-    gzcyList: [
-      {
-        url: require('@a/zhfw.png'),
-        title: '展会服务',
-      },
-      {
-        url: require('@a/fb.png'),
-        title: '我要发布',
-      },
-      {
-        url: require('@a/zxzx.png'),
-        title: '在线咨询',
-      },
-      {
-        url: require('@a/jy.png'),
-        title: '建言献策',
-      },
-      {
-        url: require('@a/wsdc.png'),
-        title: '网上调查',
-      },
-      {
-        url: require('@a/lbyx.png'),
-        title: '举报邮箱',
-      },
-    ],
-    // 展会服务
-    zhfwdialog: false,
-    // 在线咨询
-    zxzxdialog: false,
-    // 建言献策
-    jyxcdialog: false,
-    // 网上调查
-    wsdcdialog: false,
-    // 举报邮箱
-    jbyxdialog: false,
-  }),
+  components: {
+    userTwo,
+    expertCom,
+    achieveFiled,
+    achieveCom,
+  },
+  data: function() {
+    return {
+      centerImage: require('@/assets/center/sjdt.png'),
+    };
+  },
   created() {},
-  computed: {},
-  methods: {
-    show(data) {
-      if (data.title == '展会服务') {
-        this.zhfwdialog = true;
-      } else if (data.title == '我要发布') {
-        this.$router.push({ path: '/dynamic/product' });
-      } else if (data.title == '建言献策') {
-        this.jyxcdialog = true;
-      } else if (data.title == '在线咨询') {
-        this.zxzxdialog = true;
-      } else if (data.title == '网上调查') {
-        this.wsdcdialog = true;
-      } else if (data.title == '举报邮箱') {
-        this.jbyxdialog = true;
-      }
-    },
-    // 公共关闭
-    handleClose() {
-      // 展会服务
-      this.zhfwdialog = false;
-      // 在线咨询
-      this.zxzxdialog = false;
-      // 建言献策
-      this.jyxcdialog = false;
-      // 网上调查
-      this.wsdcdialog = false;
-      // 举报邮箱
-      this.jbyxdialog = false;
-    },
+  methods: {},
+  computed: {
+    ...mapState(['user']),
   },
+  watch: {},
 };
 </script>
 
 <style lang="less" scoped>
-.w_1200 {
-  width: 1200px;
-  margin: 0 auto;
-}
 .main {
-  float: left;
-  width: 100%;
-  margin: 20px 0;
-  min-height: 600px;
-  .dataShow {
-    width: 100%;
-    height: 505px;
-    margin: 0 0 30px 0;
+  min-height: 500px;
+  padding: 10px 0;
+  .one {
+    margin: 0 0 10px 0;
     .left {
-      height: 500px;
-      box-shadow: 0 0 5px #0370af;
-      border-radius: 10px;
-      margin: 0 15px 0 0;
-      width: 48%;
+      width: 49%;
+      height: 530px;
+      background: #ffffff;
+      padding: 15px;
+      border-radius: 20px;
+      margin: 0 24px 0 0;
+      box-shadow: 0 0 5px #409eff;
     }
-    .center {
-      height: 500px;
-      box-shadow: 0 0 5px #0370af;
-      border-radius: 10px;
+    .right {
+      width: 49%;
+      height: 530px;
+      background: #ffffff;
+      border-radius: 20px;
+      padding: 15px;
+      box-shadow: 0 0 5px #409eff;
     }
   }
   .two {
-    float: left;
-    width: 100%;
     height: 140px;
     overflow: hidden;
+    margin: 0 0 10px 0;
   }
-  .three {
-    overflow: hidden;
-    height: 255px;
-    box-shadow: 0 0 10px #2d64b3;
-    border-radius: 10px;
-    margin: 15px 0 0 0;
+  .thr {
+    margin: 0 0 10px 0;
+    .left {
+      width: 49%;
+      height: 530px;
+      background: #ffffff;
+      padding: 15px;
+      border-radius: 20px;
+      margin: 0 24px 0 0;
+      box-shadow: 0 0 5px #409eff;
+    }
+    .right {
+      width: 49%;
+      height: 530px;
+      background: #ffffff;
+      border-radius: 20px;
+      padding: 15px;
+      box-shadow: 0 0 5px #409eff;
+    }
   }
 }
 </style>

+ 153 - 0
src/views/dynamic/parts/achieveCom.vue

@@ -0,0 +1,153 @@
+<template>
+  <div id="top-right">
+    <el-row>
+      <el-col :span="24" class="main" v-loading="loading" element-loading-text="拼命加载中" element-loading-spinner="el-icon-loading">
+        <el-col :span="24" class="one">
+          技术成果
+        </el-col>
+        <el-col :span="24" class="two">
+          <div id="achieveCom" class="style"></div>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import echarts from 'echarts/lib/echarts';
+import 'echarts/lib/chart/bar';
+import 'echarts/lib/chart/pie';
+import 'echarts/lib/chart/line';
+import 'echarts/lib/component/title';
+import 'echarts/lib/component/legend';
+import 'echarts/lib/component/toolbox';
+import 'echarts/lib/component/markPoint';
+import 'echarts/lib/component/tooltip';
+import { mapState, createNamespacedHelpers } from 'vuex';
+const { mapActions: product } = createNamespacedHelpers('marketproduct');
+export default {
+  name: 'top-right',
+  props: {},
+  components: {},
+  data: () => {
+    return {
+      myChart: null,
+      loading: true,
+    };
+  },
+  created() {
+    this.init();
+  },
+  methods: {
+    ...product(['query']),
+    async init() {
+      let res = await this.query();
+      if (this.$checkRes(res)) {
+        // 中科院长春分院
+        let s1 = res.data.filter(f => f.company.includes('中科院长春分院'));
+        // 中国科学院东北地理与农业生态研究所
+        let s2 = res.data.filter(f => f.company.includes('中国科学院东北地理与农业生态研究所'));
+        // 中国科学院长春应用化学研究所
+        let s3 = res.data.filter(f => f.company.includes('中国科学院长春应用化学研究所'));
+        // 中科院长春光学精密机械与物理研究所
+        let s4 = res.data.filter(f => f.company.includes('中科院长春光学精密机械与物理研究所'));
+        // 吉林大学
+        let s5 = res.data.filter(f => f.company.includes('吉林大学'));
+        // 长春工业大学
+        let s6 = res.data.filter(f => f.company.includes('长春工业大学'));
+        // 长春工程学院
+        let s7 = res.data.filter(f => f.company.includes('长春工程学院'));
+        // 其他
+        let s8 = res.data.filter(
+          i =>
+            i.company != '中科院长春分院' &&
+            i.company != '中国科学院东北地理与农业生态研究所' &&
+            i.company != '中国科学院长春应用化学研究所' &&
+            i.company != '中科院长春光学精密机械与物理研究所' &&
+            i.company != '吉林大学' &&
+            i.company != '长春工业大学' &&
+            i.company != '长春工程学院'
+        );
+        this.myChart = echarts.init(document.getElementById('achieveCom'));
+        const option = {
+          title: {},
+          tooltip: { trigger: 'axis' },
+          grid: {
+            y2: 140,
+          },
+          xAxis: {
+            type: 'category',
+            boundaryGap: [0, 0.01],
+            name: '单位',
+            data: ['长春分院', '地理所', '应化所', '光机所', '吉林大学', '长春工业大学', '长春工程学院', '其他'],
+            axisLabel: {
+              interval: 0, //横轴信息全部显示
+              rotate: -30, //-30度角倾斜显示
+            },
+            axisTick: {
+              // 坐标轴 刻度
+              show: true, // 是否显示
+              inside: true, // 是否朝内
+              length: 3, // 长度
+              lineStyle: {
+                // 默认取轴线的样式
+                color: 'red',
+                width: 1,
+                type: 'solid',
+              },
+            },
+          },
+          yAxis: {},
+          series: [
+            {
+              name: '技术成果',
+              label: {
+                show: true,
+                position: 'top',
+              },
+              type: 'bar',
+              data: [
+                { name: '中科院长春分院', value: s1.length, itemStyle: { color: '#800000' } },
+                { name: '地理所', value: s2.length, itemStyle: { color: '#F08080' } },
+                { name: '应化所', value: s3.length, itemStyle: { color: '#8B4513' } },
+                { name: '光机所', value: s4.length, itemStyle: { color: '#D2B48C' } },
+                { name: '吉林大学', value: s5.length, itemStyle: { color: '#FFD700' } },
+                { name: '长春工业大学', value: s6.length, itemStyle: { color: '#7CFC00' } },
+                { name: '长春工程学院', value: s7.length, itemStyle: { color: '#40E0D0' } },
+                { name: '其他', value: s8.length, itemStyle: { color: '#00FFFF' } },
+              ],
+            },
+          ],
+        };
+        this.myChart.setOption(option);
+        this.loading = false;
+      }
+    },
+  },
+  computed: {
+    ...mapState(['top-right']),
+    pageTitle() {
+      return `${this.$route.meta.title}`;
+    },
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.main {
+  .one {
+    padding: 15px 0 30px 0;
+    text-align: center;
+    font-size: 18px;
+    font-weight: bold;
+  }
+  .two {
+    .style {
+      height: 430px;
+    }
+  }
+}
+</style>

+ 141 - 0
src/views/dynamic/parts/achieveFiled.vue

@@ -0,0 +1,141 @@
+<template>
+  <div id="achieveFiled">
+    <el-row>
+      <el-col :span="24" class="main" v-loading="loading" element-loading-text="拼命加载中" element-loading-spinner="el-icon-loading">
+        <el-col :span="24" class="one">
+          技术成果
+        </el-col>
+        <el-col :span="24" class="two">
+          <div id="chartPie" style="height:400px;"></div>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { mapState, createNamespacedHelpers } from 'vuex';
+const { mapActions: expertsuser } = createNamespacedHelpers('expertsuser');
+const { mapActions: product } = createNamespacedHelpers('marketproduct');
+const { mapActions: markettype } = createNamespacedHelpers('markettype');
+import echarts from 'echarts/lib/echarts';
+import 'echarts/lib/chart/pie';
+import 'echarts/lib/chart/pie';
+import 'echarts/lib/chart/line';
+import 'echarts/lib/component/title';
+import 'echarts/lib/component/legend';
+import 'echarts/lib/component/toolbox';
+import 'echarts/lib/component/markPoint';
+import 'echarts/lib/component/tooltip';
+export default {
+  name: 'achieveFiled',
+  props: {},
+  components: {},
+  data: () => {
+    return {
+      myChart: null,
+      type: 'pie',
+      // 成果领域
+      fieldList: [],
+      loading: true,
+    };
+  },
+  created() {
+    this.searchType();
+    this.init();
+  },
+  methods: {
+    ...markettype({ typeQuery: 'query' }),
+    ...product({ productList: 'newquery' }),
+    ...expertsuser(['query']),
+    async init() {
+      let res = await this.productList({ type: '1', status: '1' });
+      if (this.$checkRes(res)) {
+        let dataList = this.fieldList.map(i => ({ seriesId: i.code, name: i.name }));
+        for (const val of dataList) {
+          val.value = res.data.filter(i => i.field == val.name).length;
+        }
+        this.myChart = echarts.init(document.getElementById('chartPie'));
+        const option = {
+          title: {},
+          grid: {
+            x: 25,
+            y: 45,
+            x2: 5,
+            y2: 20,
+            borderWidth: 1,
+          },
+          tooltip: { trigger: 'item', formatter: '{a} <br/>{b} : {c} ({d}%)' },
+          legend: {
+            // orient: 'vertical',
+            // x: 'left', //可设定图例在左、右、居中
+            // y: 'top', //可设定图例在上、下、居中
+            // padding: [0, 0, 0, 0],
+          },
+          series: [
+            {
+              name: '技术成果',
+              // 大小
+              radius: '45%',
+              // 位置
+              center: ['50%', '60%'],
+              label: {
+                show: true,
+                position: 'top',
+              },
+              type: 'pie',
+              data: dataList,
+              animationType: 'scale',
+              // 显示名称,数目,百分比
+              itemStyle: {
+                normal: {
+                  label: {
+                    show: true,
+                    formatter: '{b} : {c} ({d}%)',
+                  },
+                  labelLine: { show: true },
+                },
+              },
+            },
+          ],
+          toolbox: {
+            show: true,
+            feature: {
+              dataView: { readOnly: false },
+              saveAsImage: {},
+            },
+          },
+        };
+        this.myChart.setOption(option);
+        this.loading = false;
+      }
+    },
+    async searchType() {
+      let res = await this.typeQuery({ category: '01' });
+      if (this.$checkRes(res)) {
+        this.$set(this, `fieldList`, res.data);
+      }
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+    pageTitle() {
+      return `${this.$route.meta.title}`;
+    },
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.main {
+  .one {
+    padding: 15px 0 30px 0;
+    text-align: center;
+    font-size: 18px;
+    font-weight: bold;
+  }
+}
+</style>

+ 0 - 156
src/views/dynamic/parts/down-pie.vue

@@ -1,156 +0,0 @@
-<template>
-  <div id="down-pie">
-    <el-row>
-      <el-col :span="24">
-        <el-col :span="10">
-          <div id="chartPie" class="" style="height:300px;width300px"></div>
-        </el-col>
-        <el-col :span="13" class="rightData">
-          <el-table :data="tableData" border style="width: 100%">
-            <el-table-column prop="name" label="产品名称" align="center" show-overflow-tooltip> </el-table-column>
-            <el-table-column label="产品类型" align="center">
-              <template slot-scope="scoped">
-                {{ scoped.row.type === '0' ? '科技需求' : scoped.row.type === '1' ? '技术成果' : scoped.row.type === '2' ? '商务服务' : '暂无' }}
-              </template>
-            </el-table-column>
-            <el-table-column prop="field" label="所属领域" align="center" show-overflow-tooltip> </el-table-column>
-            <el-table-column prop="cooperation" label="合作方式" align="center" show-overflow-tooltip> </el-table-column>
-            <el-table-column label="操作" width="100" align="center" fixed="right">
-              <template slot-scope="scoped">
-                <el-tooltip class="item" effect="dark" content="交易情况" placement="bottom">
-                  <el-button type="text" size="mini" @click="$router.push({ path: '/dynamic/dealDetail', query: { id: scoped.row.id } })"
-                    ><i class="el-icon-view"></i
-                  ></el-button>
-                </el-tooltip>
-              </template>
-            </el-table-column>
-          </el-table>
-        </el-col>
-      </el-col>
-    </el-row>
-  </div>
-</template>
-
-<script>
-import { mapState, createNamespacedHelpers } from 'vuex';
-const { mapActions } = createNamespacedHelpers('transaction');
-const { mapActions: personalRoom } = createNamespacedHelpers('personalroom');
-const { mapActions: marketproduct } = createNamespacedHelpers('marketproduct');
-import echarts from 'echarts/lib/echarts';
-import 'echarts/lib/chart/pie';
-import 'echarts/lib/chart/pie';
-import 'echarts/lib/chart/line';
-import 'echarts/lib/component/title';
-import 'echarts/lib/component/legend';
-import 'echarts/lib/component/toolbox';
-import 'echarts/lib/component/markPoint';
-import 'echarts/lib/component/tooltip';
-export default {
-  name: 'downPie',
-  props: {},
-  components: {},
-  data: () => {
-    return {
-      myChart: null,
-      type: 'pie',
-      tableData: [],
-    };
-  },
-  created() {
-    this.init();
-    this.searchInfo();
-  },
-  methods: {
-    ...mapActions(['query']),
-    ...personalRoom(['countRoom']),
-    ...marketproduct(['newquery']),
-    async init() {
-      let res = await this.query();
-      let rooms = await this.countRoom();
-      if (this.$checkRes(res)) {
-        let arr = res.data.filter(f => f.status != '3');
-        let newArr = _.chunk(arr, 6);
-        let s3 = res.data.filter(f => f.status == '0'); //正在洽谈
-        let s1 = res.data.filter(f => f.status == '1'); //达成意向
-        let s2 = res.data.filter(f => f.status == '2'); //对接完成
-        this.myChart = echarts.init(document.getElementById('chartPie'));
-        const option = {
-          title: {},
-          grid: {
-            x: 25,
-            y: 45,
-            x2: 5,
-            y2: 20,
-            borderWidth: 1,
-          },
-          tooltip: { trigger: 'item', formatter: '{a} <br/>{b} : {c} ({d}%)' },
-          legend: {
-            data: ['正在洽谈', '达成意向', '对接完成', '未达成意向'],
-          },
-          series: [
-            {
-              name: '统计',
-              label: {
-                show: true,
-                position: 'top',
-              },
-              type: this.type,
-              data: [
-                { seriesId: 's3', name: '正在洽谈', value: s3.length, itemStyle: { color: '#7cb5ec' } },
-                { seriesId: 's1', name: '达成意向', value: s1.length, itemStyle: { color: '#ffa94b' } },
-                { seriesId: 's2', name: '对接完成', value: s2.length, itemStyle: { color: '#346da4' } },
-              ],
-              animationType: 'scale',
-            },
-          ],
-          toolbox: {
-            show: true,
-            feature: {
-              dataView: { readOnly: false },
-              saveAsImage: {},
-            },
-          },
-        };
-        this.myChart.setOption(option);
-        // this.myChart.on('click', params => {
-        //   if (params.dataIndex === 0) {
-        //     this.$set(this, `tableData`, s3);
-        //   } else if (params.dataIndex === 1) {
-        //     this.$set(this, `tableData`, s1);
-        //   } else {
-        //     this.$set(this, `tableData`, s2);
-        //   }
-        // });
-      }
-    },
-    async searchInfo() {
-      let res = await this.newquery({ status: 1 });
-      console.log(res);
-      this.$set(this, `tableData`, res.data);
-    },
-  },
-  computed: {
-    ...mapState(['user']),
-    pageTitle() {
-      return `${this.$route.meta.title}`;
-    },
-  },
-  metaInfo() {
-    return { title: this.$route.meta.title };
-  },
-};
-</script>
-
-<style lang="less" scoped>
-.rightData {
-  padding: 0 30px;
-  height: 391px;
-  // overflow: hidden;
-}
-/deep/.el-table td {
-  padding: 8px 0;
-}
-/deep/.el-table th {
-  padding: 8px 0;
-}
-</style>

+ 149 - 0
src/views/dynamic/parts/expertCom.vue

@@ -0,0 +1,149 @@
+<template>
+  <div id="down-pie">
+    <el-row>
+      <el-col :span="24" class="main" v-loading="loading" element-loading-text="拼命加载中" element-loading-spinner="el-icon-loading">
+        <el-col :span="24" class="one">
+          专家一览
+        </el-col>
+        <el-col :span="24" class="two">
+          <div id="chatCom" style="height:400px;"></div>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { mapState, createNamespacedHelpers } from 'vuex';
+const { mapActions: expertsuser } = createNamespacedHelpers('expertsuser');
+import echarts from 'echarts/lib/echarts';
+import 'echarts/lib/chart/pie';
+import 'echarts/lib/chart/pie';
+import 'echarts/lib/chart/line';
+import 'echarts/lib/component/title';
+import 'echarts/lib/component/legend';
+import 'echarts/lib/component/toolbox';
+import 'echarts/lib/component/markPoint';
+import 'echarts/lib/component/tooltip';
+export default {
+  name: 'downPie',
+  props: {},
+  components: {},
+  data: () => {
+    return {
+      myChart: null,
+      type: 'pie',
+      loading: true,
+    };
+  },
+  created() {
+    this.init();
+  },
+  methods: {
+    ...expertsuser(['query']),
+
+    async init() {
+      let res = await this.query();
+      if (this.$checkRes(res)) {
+        // 光机所
+        let s1 = res.data.filter(i => i.company == '中科院长春光学精密机械与物理研究所');
+        // 应化所
+        let s2 = res.data.filter(i => i.company == '中国科学院长春应用化学研究所');
+        // 地理所
+        let s3 = res.data.filter(i => i.company == '中国科学院东北地理与农业生态研究所');
+        // 吉林大学
+        let s4 = res.data.filter(f => f.company == '吉林大学');
+        // 长春工业大学
+        let s5 = res.data.filter(f => f.company == '长春工业大学');
+        // 其他
+        let s6 = res.data.filter(
+          i =>
+            i.company != '中科院长春光学精密机械与物理研究所' &&
+            i.company != '中国科学院长春应用化学研究所' &&
+            i.company != '中国科学院东北地理与农业生态研究所' &&
+            i.company != '吉林大学' &&
+            i.company != '长春工业大学'
+        );
+        this.myChart = echarts.init(document.getElementById('chatCom'));
+        const option = {
+          title: {},
+          grid: {
+            x: 25,
+            y: 45,
+            x2: 5,
+            y2: 20,
+            borderWidth: 1,
+          },
+          tooltip: { trigger: 'item', formatter: '{a} <br/>{b} : {c} ({d}%)' },
+          legend: {
+            // orient: 'vertical',
+            // data: ['光机所', '应化所', '地理所', '吉林大学', '长春工业大学', '其他'],
+          },
+          series: [
+            {
+              name: '专家一览',
+              // 大小
+              radius: '60%',
+              // 位置
+              center: ['50%', '60%'],
+              label: {
+                show: true,
+                position: 'top',
+              },
+              type: 'pie',
+              data: [
+                { seriesId: 's1', name: '光机所', value: s1.length, itemStyle: { color: '#4169E1' } },
+                { seriesId: 's2', name: '应化所', value: s2.length, itemStyle: { color: '#00FFFF' } },
+                { seriesId: 's3', name: '地理所', value: s3.length, itemStyle: { color: '#00FF7F' } },
+                { seriesId: 's4', name: '吉林大学', value: s4.length, itemStyle: { color: '#FFFF00' } },
+                { seriesId: 's5', name: '长春工业大学', value: s5.length, itemStyle: { color: '#FF8C00' } },
+                { seriesId: 's6', name: '其他', value: s6.length, itemStyle: { color: '#FF7F50' } },
+              ],
+              animationType: 'scale',
+              // 显示名称,数目,百分比
+              itemStyle: {
+                normal: {
+                  label: {
+                    show: true,
+                    formatter: '{b} : {c} ({d}%)',
+                  },
+                  labelLine: { show: true },
+                },
+              },
+            },
+          ],
+          toolbox: {
+            show: true,
+            feature: {
+              dataView: { readOnly: false },
+              saveAsImage: {},
+            },
+          },
+        };
+        this.myChart.setOption(option);
+        this.loading = false;
+      }
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+    pageTitle() {
+      return `${this.$route.meta.title}`;
+    },
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.main {
+  .one {
+    padding: 15px 0 30px 0;
+    text-align: center;
+    font-size: 18px;
+    font-weight: bold;
+  }
+}
+</style>

+ 5 - 4
src/views/dynamic/parts/userTwo.vue

@@ -1,6 +1,6 @@
 <template>
   <div id="userTwo">
-    <el-row>
+    <el-row v-loading="loading" element-loading-text="拼命加载中" element-loading-spinner="el-icon-loading">
       <el-col :span="24" class="userTwo">
         <el-col :psan="24" class="userTwoTop">
           统计数据
@@ -86,6 +86,7 @@ export default {
       num4: 0,
       num5: 0,
     },
+    loading: true,
   }),
   created() {
     this.searchInfo();
@@ -116,6 +117,7 @@ export default {
       this.$set(this, `transaction1`, transaction1.total);
       this.$set(this, `transaction2`, transaction2.total);
       this.$set(this, `transaction3`, transaction3.total);
+      this.loading = false;
     },
   },
   computed: {
@@ -136,11 +138,10 @@ export default {
   width: 100%;
 }
 .userTwo .userTwoTop {
-  padding: 40px 0 0 0;
-  font-size: 17px;
+  padding: 20px 0 10px 0;
+  font-size: 18px;
   font-weight: bold;
   text-align: center;
-  color: #333;
 }
 .left {
   float: left;

+ 1 - 1
src/views/exporthall/index.vue

@@ -5,7 +5,7 @@
         <div class="w_1200">
           <el-col :span="24" class="one">
             <el-col :span="24" class="top">
-              <p>专家培训在线展会模板</p>
+              <p>培训问诊在线展会模板</p>
               <p>主办方:吉林省计算中心</p>
             </el-col>
           </el-col>

+ 2 - 2
src/views/hallList/index.vue

@@ -10,10 +10,10 @@
             <el-tab-pane label="人才对接在线">
               <personal :province="province" :place="place"></personal>
             </el-tab-pane>
-            <el-tab-pane label="专家培训在线">
+            <el-tab-pane label="培训问诊在线">
               <exports :province="province" :place="place"></exports>
             </el-tab-pane>
-            <el-tab-pane label="科技在线频道">
+            <el-tab-pane label="科技频道在线">
               <kjpd></kjpd>
             </el-tab-pane>
           </el-tabs>

+ 3 - 3
src/views/hallList/parts/export.vue

@@ -46,7 +46,7 @@ export default {
           province: '220000',
           start_time: '2020-10-16 10:00',
           status: '1',
-          title: '专家培训在线模板',
+          title: '培训问诊在线模板',
         },
       ],
       preTotal: 0,
@@ -58,7 +58,7 @@ export default {
           province: '220000',
           start_time: '2020-10-16 10:00',
           status: '1',
-          title: '专家培训在线模板',
+          title: '培训问诊在线模板',
         },
       ],
       nowTotal: 0,
@@ -70,7 +70,7 @@ export default {
           province: '220000',
           start_time: '2020-10-16 10:00',
           status: '1',
-          title: '专家培训在线模板',
+          title: '培训问诊在线模板',
         },
       ],
       pastTotal: 0,

+ 109 - 0
src/views/market/detail/patentDetail.vue

@@ -0,0 +1,109 @@
+<template>
+  <div id="patentDetail">
+    <el-row>
+      <el-col :span="24">
+        <el-col :span="24" class="image">
+          <el-image :src="detailInfo.url"></el-image>
+        </el-col>
+        <el-col :span="24" class="type"> {{ detailInfo.type }}专利证书 </el-col>
+        <el-col :span="24" class="otherInfo">
+          <p>
+            <span>名称:</span>
+            <span>{{ detailInfo.title }}</span>
+          </p>
+          <p>
+            <span>发明人:</span>
+            <span>{{ detailInfo.name }}</span>
+          </p>
+          <p>
+            <span>专利号:</span>
+            <span>{{ detailInfo.num }}</span>
+          </p>
+          <p>
+            <span>专利申请日:</span>
+            <span>{{ detailInfo.create_date }}</span>
+          </p>
+          <p>
+            <span>专利授人:</span>
+            <span>{{ detailInfo.pubilc }}</span>
+          </p>
+          <p>
+            <span>授权公告日:</span>
+            <span>{{ detailInfo.release_date }}</span>
+          </p>
+          <p>
+            <span>专利详情:</span>
+            {{ detailInfo.brief }}
+          </p>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  name: 'patentDetail',
+  props: {},
+  components: {},
+  data: function() {
+    return {
+      detailInfo: {
+        url: require('@a/fmzl.jpg'),
+        type: '实用类型',
+        title: '计算机发明',
+        name: '发明人',
+        num: '123456789',
+        create_date: '2020-01-06',
+        pubilc: '授权人',
+        release_date: '2020-01-06',
+        brief: '信息简介信息简介信息简介信息简介信息简介信息简介信息简介',
+      },
+    };
+  },
+  created() {},
+  methods: {},
+  computed: {
+    ...mapState(['user']),
+  },
+  watch: {},
+};
+</script>
+
+<style lang="less" scoped>
+.main {
+  .image {
+    text-align: center;
+    .el-image {
+      width: 150px;
+      height: 150px;
+    }
+  }
+  .type {
+    font-size: 20px;
+    font-weight: bold;
+    text-align: center;
+    padding: 15px 0;
+  }
+  .otherInfo {
+    p {
+      padding: 10px 0;
+      font-size: 18px;
+      font-weight: bold;
+      span {
+        font-size: 18px;
+      }
+      span:nth-child(1) {
+        color: #666;
+      }
+      span:nth-child(2) {
+        font-weight: bold;
+      }
+    }
+  }
+}
+</style>

+ 9 - 9
src/views/technical/detail/roadetail.vue

@@ -1,23 +1,23 @@
 <template>
-  <div id="inddetail">
+  <div id="roadDetail">
     <el-row>
       <el-col :span="24" class="main">
         <div class="detailtop">
-          <span>{{ detailinfo.title }}</span>
+          <span>{{ detailInfo.title }}</span>
         </div>
         <div class="detailtopleft">
-          <span>时间:{{ detailinfo.publish_time }}&nbsp;&nbsp;&nbsp;&nbsp;来源:{{ detailinfo.orgin }}</span>
+          <span>时间:{{ detailInfo.publish_time }}&nbsp;&nbsp;&nbsp;&nbsp;来源:{{ detailInfo.orgin }}</span>
         </div>
-        <div class="detailimage" v-if="detailinfo.picture">
-          <img :src="detailinfo.picture" class="detailimg" />
+        <div class="detailimage" v-if="detailInfo.picture">
+          <img :src="detailInfo.picture" class="detailimg" />
         </div>
         <div class="detailVideo">
-          <video :src="detailinfo.filepath" controls="controls">
+          <video :src="detailInfo.filepath" controls="controls">
             您的浏览器不支持 video 标签。
           </video>
         </div>
         <div class="detailcontext">
-          <p v-html="detailinfo.content"></p>
+          <p v-html="detailInfo.content"></p>
         </div>
       </el-col>
     </el-row>
@@ -27,9 +27,9 @@
 <script>
 import { mapState, createNamespacedHelpers } from 'vuex';
 export default {
-  name: 'inddetail',
+  name: 'roadDetail',
   props: {
-    detailinfo: { type: Object },
+    detailInfo: { type: Object },
   },
   components: {},
   data: function() {

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 127 - 1144
src/views/market/index.vue


+ 196 - 0
src/views/market/index/achieve.vue

@@ -0,0 +1,196 @@
+<template>
+  <div id="achieve">
+    <el-row>
+      <el-col :span="24" class="style">
+        <el-col :span="24" class="top">
+          <top :topInfo="topInfo" @moreBtn="moreBtn"></top>
+        </el-col>
+        <el-col :span="24" class="down">
+          <el-col
+            :span="8"
+            class="achieveList"
+            v-for="(item, index) in achieveList"
+            :key="index"
+            @click.native="$router.push({ path: '/market/marketlists', query: { type: '1', column_name: '技术成果', id: item._id } })"
+          >
+            <el-col :span="24" class="text">
+              <p class="name textOver">{{ item.name }}</p>
+              <p class="brief">{{ item.achievebrief }}</p>
+              <p class="other">
+                <span class="textOver">领域:{{ item.field }}</span>
+                <span class="textOver">联系人:{{ item.contacts }}</span>
+              </p>
+            </el-col>
+          </el-col>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import top from '@/layout/common/topColumn.vue';
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  name: 'achieve',
+  props: {
+    achieveList: { type: Array },
+  },
+  components: {
+    top,
+  },
+  data: function() {
+    return {
+      topInfo: {
+        title: '技术成果',
+        engTitle: 'achieve',
+      },
+    };
+  },
+  created() {},
+  methods: {
+    // 更多
+    moreBtn() {
+      this.$router.push({ path: '/market/marketlists', query: { type: '1', column_name: '技术成果' } });
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+  },
+  watch: {},
+};
+</script>
+
+<style lang="less" scoped>
+.style {
+  .top {
+    height: 50px;
+  }
+  .down {
+    height: 450px;
+    position: relative;
+    .achieveList {
+      position: relative;
+      overflow: hidden;
+      height: 220px;
+      margin: 0 10px 10px 0;
+      width: 32%;
+      .image {
+        height: 220px;
+        overflow: hidden;
+        .el-image {
+          width: 100%;
+          height: 220px;
+        }
+      }
+      .text {
+        width: 100%;
+        height: 220px;
+        background: url('~@/assets/技术成果1.png');
+        background-size: 100% 100%;
+        background-repeat: no-repeat;
+        // 图片1样式
+        padding: 25px 19px;
+        // 图片2样式,图片3样式
+        // padding: 15px 10px;
+        // 图片1样式
+        .name {
+          font-size: 16px;
+          font-weight: bold;
+          margin: 0 0 5px 0;
+        }
+        .brief {
+          font-size: 12px;
+          overflow: hidden;
+          text-overflow: ellipsis;
+          -webkit-line-clamp: 7;
+          word-break: break-all;
+          display: -webkit-box;
+          -webkit-box-orient: vertical;
+          padding: 0 5px;
+        }
+        .other {
+          padding: 5px 0 0 0;
+          position: absolute;
+          bottom: 10px;
+          width: 83%;
+          span {
+            padding: 3px 0 0 0;
+            float: left;
+            width: 100%;
+            font-size: 12px;
+          }
+        }
+        // 图片2样式
+        // .name {
+        //   font-size: 14px;
+        //   font-weight: bold;
+        //   margin: 0 0 5px 0;
+        //   text-align: right;
+        // }
+        // .brief {
+        //   font-size: 12px;
+        //   overflow: hidden;
+        //   text-overflow: ellipsis;
+        //   -webkit-line-clamp: 7;
+        //   word-break: break-all;
+        //   display: -webkit-box;
+        //   -webkit-box-orient: vertical;
+        //   text-indent: 2rem;
+        //   text-align: right;
+        //   padding: 0 0 0 10px;
+        // }
+        // .other {
+        //   padding: 5px 0 0 0;
+        //   span {
+        //     padding: 5px 0 0 0;
+        //     float: left;
+        //     width: 100%;
+        //     font-size: 12px;
+        //   }
+        // }
+        // 图片3样式
+        // .name {
+        //   font-size: 14px;
+        //   font-weight: bold;
+        //   padding: 20px 0 0 0;
+        // }
+        // .brief {
+        //   font-size: 12px;
+        //   overflow: hidden;
+        //   text-overflow: ellipsis;
+        //   -webkit-line-clamp: 6;
+        //   word-break: break-all;
+        //   display: -webkit-box;
+        //   -webkit-box-orient: vertical;
+        //   text-indent: 1rem;
+        //   padding: 10px 0 0 0;
+        // }
+        // .other {
+        //   padding: 10px 0 0 0;
+        //   span {
+        //     padding: 4px 0 0 0;
+        //     float: left;
+        //     width: 100%;
+        //     font-size: 12px;
+        //   }
+        // }
+      }
+    }
+    .achieveList:nth-child(3n) {
+      margin: 0 0 10px 0;
+    }
+    .achieveList:hover {
+      cursor: pointer;
+      .text {
+        .name {
+          color: #409eff;
+        }
+      }
+    }
+  }
+}
+</style>

+ 119 - 0
src/views/market/index/business.vue

@@ -0,0 +1,119 @@
+<template>
+  <div id="businessList">
+    <el-row>
+      <el-col :span="24" class="style">
+        <el-col :span="24" class="top">
+          <top :topInfo="topInfo" @moreBtn="moreBtn"></top>
+        </el-col>
+        <el-col :span="24" class="down">
+          <el-col
+            :span="24"
+            class="businessList"
+            v-for="(item, index) in businessList"
+            :key="index"
+            @click.native="$router.push({ path: '/market/marketlists', query: { type: '2', column_name: '商务服务', id: item._id } })"
+          >
+            <el-col :span="10" class="name textOver">
+              {{ item.name }}
+            </el-col>
+            <el-col :span="10" class="messbute"> 信息属性:{{ item.messattribute }} </el-col>
+            <el-col :span="4" class="date">
+              {{ getDate(item.meta.createdAt) }}
+            </el-col>
+            <el-col :span="24" class="info">
+              {{ item.informationdesc }}
+            </el-col>
+          </el-col>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import top from '@/layout/common/topColumn.vue';
+import { mapState, createNamespacedHelpers } from 'vuex';
+var moment = require('moment');
+export default {
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  name: 'business',
+  props: {
+    businessList: { type: Array },
+  },
+  components: {
+    top,
+  },
+  data: function() {
+    return {
+      topInfo: {
+        title: '商务服务',
+        engTitle: 'Business',
+      },
+    };
+  },
+  created() {},
+  methods: {
+    // 更多
+    moreBtn() {
+      this.$router.push({ path: '/market/marketlists', query: { type: '2', column_name: '商务服务' } });
+    },
+    getDate(data) {
+      return moment(data).format('yyyy-MM-DD');
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+  },
+  watch: {},
+};
+</script>
+
+<style lang="less" scoped>
+.style {
+  .top {
+    height: 50px;
+  }
+  .down {
+    height: 450px;
+    position: relative;
+    .businessList {
+      padding: 11px 0;
+      border-bottom: 1px dashed #044b79;
+      .name {
+        font-size: 18px;
+        font-weight: bold;
+      }
+      .messbute {
+        font-size: 16px;
+      }
+      .date {
+        font-size: 16px;
+        text-align: center;
+      }
+      .info {
+        padding: 5px 0 0 0;
+        height: 45px;
+        font-size: 14px;
+        overflow: hidden;
+        text-overflow: ellipsis;
+        -webkit-line-clamp: 2;
+        word-break: break-all;
+        display: -webkit-box;
+        -webkit-box-orient: vertical;
+      }
+    }
+    .businessList:last-child {
+      border-bottom: none;
+    }
+    .businessList:hover {
+      cursor: pointer;
+      .name {
+        color: #0085d2;
+        font-weight: bold;
+      }
+    }
+  }
+}
+</style>

+ 127 - 0
src/views/market/index/expert.vue

@@ -0,0 +1,127 @@
+<template>
+  <div id="technology">
+    <el-row>
+      <el-col :span="24" class="style">
+        <el-col :span="24" class="top">
+          <top :topInfo="topInfo" @moreBtn="moreBtn"></top>
+        </el-col>
+        <el-col :span="24" class="down">
+          <el-col
+            :span="12"
+            class="expertList"
+            v-for="(item, index) in expertList"
+            :key="index"
+            @click.native="$router.push({ path: '/market/marketlists', query: { type: '3', column_name: '专家智库', id: item._id } })"
+          >
+            <el-col :span="8" class="expertimage">
+              <el-image v-if="item.expertimage != null || undefined" :src="item.expertimage"></el-image>
+              <el-image :src="expertimage" v-else></el-image>
+            </el-col>
+            <el-col :span="16" class="rightInfo">
+              <el-col :span="24" class="name textOver">
+                {{ item.name }}
+              </el-col>
+              <el-col :span="24" class="school textOver"> {{ item.zwzc }} </el-col>
+              <el-col :span="24" class="company textOver">{{ item.company }} </el-col>
+            </el-col>
+          </el-col>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import top from '@/layout/common/topColumn.vue';
+import { mapState, createNamespacedHelpers } from 'vuex';
+var moment = require('moment');
+export default {
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  name: 'technology',
+  props: {
+    expertList: { type: Array },
+  },
+  components: {
+    top,
+  },
+  data: function() {
+    return {
+      topInfo: {
+        title: '专家智库',
+        engTitle: 'Expert',
+      },
+      expertimage: require('@/assets/live/222.png'),
+    };
+  },
+  created() {},
+  methods: {
+    // 更多
+    moreBtn() {
+      this.$router.push({ path: '/market/marketlists', query: { type: '3', column_name: '专家智库' } });
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+  },
+  watch: {},
+};
+</script>
+
+<style lang="less" scoped>
+.style {
+  .top {
+    height: 50px;
+  }
+  .down {
+    height: 450px;
+    position: relative;
+    .expertList {
+      // margin: 20px 0 10px 0;
+      padding: 10px 0;
+      border-bottom: 1px dashed #044b79;
+      .expertimage {
+        .el-image {
+          width: 90px;
+          height: 90px;
+          border-radius: 90px;
+        }
+      }
+      .rightInfo {
+        padding: 0 10px;
+        .name {
+          font-size: 18px;
+          padding: 7px 0 0 0;
+          font-weight: bold;
+        }
+        .school {
+          font-size: 16px;
+          padding: 7px 0 0 0;
+        }
+        .edu {
+          font-size: 16px;
+          padding: 7px 0 0 0;
+        }
+        .company {
+          font-size: 16px;
+          padding: 7px 0 0 0;
+        }
+      }
+    }
+    .expertList:nth-child(7) {
+      border-bottom: none;
+    }
+    .expertList:nth-child(8) {
+      border-bottom: none;
+    }
+    .expertList:hover {
+      cursor: pointer;
+      .name {
+        color: #0085d2;
+        font-weight: bold;
+      }
+    }
+  }
+}
+</style>

+ 97 - 0
src/views/market/index/patent.vue

@@ -0,0 +1,97 @@
+<template>
+  <div id="patent">
+    <el-row>
+      <el-col :span="24" class="style">
+        <el-col :span="24" class="top">
+          <top :topInfo="topInfo" @moreBtn="moreBtn"></top>
+        </el-col>
+        <el-col :span="24" class="down">
+          <el-col
+            :span="8"
+            class="patentList"
+            v-for="(item, index) in patentList"
+            :key="index"
+            @click.native="$router.push({ path: '/market/marketlists', query: { type: '5', column_name: 'e专利', id: item.id } })"
+          >
+            <el-image :src="item.url"></el-image>
+            <p class="textOver">{{ item.title }}</p>
+          </el-col>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import top from '@/layout/common/topColumn.vue';
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  name: 'patent',
+  props: {
+    patentList: { type: Array },
+  },
+  components: {
+    top,
+  },
+  data: function() {
+    return {
+      topInfo: {
+        title: 'e专利',
+        engTitle: 'Patent',
+      },
+    };
+  },
+  created() {},
+  methods: {
+    // 更多
+    moreBtn() {
+      this.$router.push({ path: '/market/marketlists', query: { type: '5', column_name: 'e专利' } });
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+  },
+  watch: {},
+};
+</script>
+
+<style lang="less" scoped>
+.style {
+  .top {
+    height: 50px;
+  }
+  .down {
+    height: 450px;
+    position: relative;
+    .patentList {
+      width: 32%;
+      height: 220px;
+      margin: 0 10px 10px 0;
+      box-shadow: 0 0 5px #ccc;
+      border-radius: 5px;
+      padding: 5px;
+      .el-image {
+        width: 100%;
+        height: 185px;
+      }
+      p {
+        font-size: 16px;
+        font-weight: bold;
+        text-align: center;
+      }
+    }
+    .patentList:nth-child(3n) {
+      margin: 0 0 10px 0;
+    }
+    .patentList:hover {
+      cursor: pointer;
+      p {
+        color: #409eff;
+      }
+    }
+  }
+}
+</style>

+ 119 - 0
src/views/market/index/roadshow.vue

@@ -0,0 +1,119 @@
+<template>
+  <div id="roadshow">
+    <el-row>
+      <el-col :span="24" class="style">
+        <el-col :span="24" class="top">
+          <top :topInfo="topInfo" @moreBtn="moreBtn"></top>
+        </el-col>
+        <el-col :span="24" class="down">
+          <el-col
+            :span="24"
+            class="roadshowList"
+            v-for="(item, index) in roadshowList"
+            :key="index"
+            @click.native="$router.push({ path: '/market/marketlists', query: { type: '4', column_name: '项目路演', id: item._id } })"
+          >
+            <el-col :span="4" class="date">
+              <span>{{ item.publish_time || '暂无' }}</span>
+            </el-col>
+            <el-col :span="20" class="title textOver">
+              {{ item.title }}
+            </el-col>
+            <el-col :span="24" class="brief">
+              {{ item.titlejj || '暂无' }}
+            </el-col>
+          </el-col>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import top from '@/layout/common/topColumn.vue';
+import { mapState, createNamespacedHelpers } from 'vuex';
+var moment = require('moment');
+export default {
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  name: 'roadshow',
+  props: {
+    roadshowList: { type: Array },
+  },
+  components: {
+    top,
+  },
+  data: function() {
+    return {
+      topInfo: {
+        title: '项目路演',
+        engTitle: 'Roadshow',
+      },
+    };
+  },
+  created() {},
+  methods: {
+    // 更多
+    moreBtn() {
+      this.$router.push({ path: '/market/marketlists', query: { type: '4', column_name: '项目路演' } });
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+  },
+  watch: {},
+};
+</script>
+
+<style lang="less" scoped>
+.style {
+  .top {
+    height: 50px;
+  }
+  .down {
+    height: 450px;
+    position: relative;
+    .roadshowList {
+      border-bottom: 1px dashed #000;
+      padding: 10px 0;
+      .date {
+        text-align: center;
+        span {
+          background: #044b79;
+          padding: 2px 5px 4px 5px;
+          font-size: 14px;
+          border-radius: 5px;
+          font-weight: bold;
+          color: #fff;
+        }
+      }
+      .title {
+        font-size: 16px;
+        font-weight: bold;
+        padding: 0 0 0 5px;
+      }
+      .brief {
+        font-size: 14px;
+        overflow: hidden;
+        text-overflow: ellipsis;
+        -webkit-line-clamp: 2;
+        word-break: break-all;
+        display: -webkit-box;
+        -webkit-box-orient: vertical;
+        padding: 5px 0 0 0;
+        height: 43px;
+      }
+    }
+    .roadshowList:last-child {
+      border-bottom: none;
+    }
+    .roadshowList:hover {
+      cursor: pointer;
+      .title {
+        color: #409eff;
+      }
+    }
+  }
+}
+</style>

+ 104 - 0
src/views/market/index/technology.vue

@@ -0,0 +1,104 @@
+<template>
+  <div id="technology">
+    <el-row>
+      <el-col :span="24" class="style">
+        <el-col :span="24" class="top">
+          <top :topInfo="topInfo" @moreBtn="moreBtn"></top>
+        </el-col>
+        <el-col :span="24" class="down">
+          <el-col
+            :span="24"
+            class="technologyList"
+            v-for="(item, index) in technologyList"
+            :key="index"
+            @click.native="$router.push({ path: '/market/marketlists', query: { type: '0', column_name: '科技需求', id: item._id } })"
+          >
+            <el-col :span="19" class="name textOver">
+              {{ item.name }}
+            </el-col>
+            <el-col :span="5" class="date">
+              {{ getDate(item.meta.createdAt) }}
+            </el-col>
+            <el-col :span="12" class="field"> 所属领域:{{ item.field }} </el-col>
+            <el-col :span="12" class="field"> 合作方式:{{ item.cooperation }} </el-col>
+          </el-col>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import top from '@/layout/common/topColumn.vue';
+import { mapState, createNamespacedHelpers } from 'vuex';
+var moment = require('moment');
+export default {
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  name: 'technology',
+  props: {
+    technologyList: { type: Array },
+  },
+  components: {
+    top,
+  },
+  data: function() {
+    return {
+      topInfo: {
+        title: '科技需求',
+        engTitle: 'Technology',
+      },
+    };
+  },
+  created() {},
+  methods: {
+    // 更多
+    moreBtn() {
+      this.$router.push({ path: '/market/marketlists', query: { type: '0', column_name: '科技需求' } });
+    },
+    getDate(data) {
+      return moment(data).format('yyyy-MM-DD');
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+  },
+  watch: {},
+};
+</script>
+
+<style lang="less" scoped>
+.style {
+  .top {
+    height: 50px;
+  }
+  .down {
+    height: 450px;
+    position: relative;
+    .technologyList {
+      padding: 10px 0;
+      border-bottom: 1px dashed #ccc;
+      .name {
+        font-size: 18px;
+        font-weight: bold;
+      }
+      .date {
+        text-align: center;
+        font-size: 16px;
+      }
+      .field {
+        padding: 10px 0 0 0;
+        font-size: 15px;
+      }
+    }
+    .technologyList:hover {
+      cursor: pointer;
+      .name {
+        color: #0085d2;
+        font-weight: bold;
+      }
+    }
+  }
+}
+</style>

+ 186 - 0
src/views/market/list/patent.vue

@@ -0,0 +1,186 @@
+<template>
+  <div id="roadshow">
+    <el-row>
+      <el-col :span="24" class="main">
+        <el-col :span="24" class="listTop">
+          <el-col :span="12" class="columnname">
+            <span>|</span> <span>{{ column_name }}</span>
+          </el-col>
+          <el-col :span="12" class="search">
+            <el-input placeholder="请输入名称" v-model="infoName" class="input-with-select">
+              <el-button slot="append" icon="el-icon-search" @click="searchData()"></el-button>
+            </el-input>
+          </el-col>
+        </el-col>
+        <el-col :span="24" class="list" v-for="(item, index) in list" :key="index">
+          <el-col :span="15" class="name textOver" @click.native="clickDetail('1')">{{ item.name }} </el-col>
+          <el-col :span="6" class="type textOver"> 行业分类:{{ item.type }} </el-col>
+          <el-col :span="3" class="date"> {{ item.date }} </el-col>
+          <el-col :span="24" class="brief">
+            {{ item.brief }}
+          </el-col>
+        </el-col>
+      </el-col>
+      <el-col :span="24" class="page">
+        <el-pagination
+          @current-change="handleCurrentChange"
+          :current-page="currentPage"
+          layout="total, prev, pager, next, jumper"
+          :total="total"
+          :page-size="pageSize"
+        >
+        </el-pagination>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  name: 'roadshow',
+  props: {
+    patentList: { type: Array },
+    total: { type: Number },
+    column_name: null,
+  },
+  components: {},
+  data: function() {
+    return {
+      infoName: '',
+      list: [
+        {
+          name: 'e专利',
+          type: '计算机行业',
+          date: '2020-01-06',
+          brief: '信息简介',
+        },
+        {
+          name: 'e专利',
+          type: '计算机行业',
+          date: '2020-01-06',
+          brief: '信息简介',
+        },
+        {
+          name: 'e专利',
+          type: '计算机行业',
+          date: '2020-01-06',
+          brief: '信息简介',
+        },
+        {
+          name: 'e专利',
+          type: '计算机行业',
+          date: '2020-01-06',
+          brief: '信息简介',
+        },
+        {
+          name: 'e专利',
+          type: '计算机行业',
+          date: '2020-01-06',
+          brief: '信息简介',
+        },
+        {
+          name: 'e专利',
+          type: '计算机行业',
+          date: '2020-01-06',
+          brief: '信息简介',
+        },
+      ],
+      currentPage: 1, //默认数据1
+      pageSize: 6, //每页显示数据数量
+      origin: [], //分割数据
+    };
+  },
+  created() {},
+  methods: {
+    searchPage(page = 1) {
+      this.$set(this, `list`, this.origin[page - 1]);
+    },
+    handleCurrentChange(currentPage) {
+      this.searchPage(currentPage);
+    },
+    // 详情
+    clickDetail(id) {
+      this.$emit('clickDetail', { column_name: 'e专利', id: id });
+    },
+    // 查询
+    searchData() {
+      this.$emit('searchData', { name: this.infoName, columnName: 'e专利' });
+    },
+  },
+  watch: {},
+  computed: {
+    ...mapState(['user']),
+    pageTitle() {
+      return `${this.$route.meta.title}`;
+    },
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.main {
+  min-height: 620px;
+  padding: 0 10px;
+  .listTop {
+    height: 49px;
+    line-height: 49px;
+    border-bottom: 1px solid #ccc;
+    .columnname {
+      span:first-child {
+        color: #22529a;
+        font-weight: bold;
+        font-size: 25px;
+      }
+      span:last-child {
+        color: #22529a;
+        font-size: 20px;
+        font-weight: bold;
+      }
+    }
+  }
+  .list {
+    border-bottom: 1px dashed #ccc;
+    padding: 10px 0;
+    .name {
+      font-size: 18px;
+      font-weight: bold;
+      padding: 0 0 5px 0;
+    }
+    .type {
+      font-size: 16px;
+      text-align: left;
+      padding: 0 0 5px 0;
+    }
+    .date {
+      font-size: 16px;
+      text-align: right;
+      padding: 0 0 5px 0;
+    }
+    .brief {
+      font-size: 16px;
+      overflow: hidden;
+      text-overflow: ellipsis;
+      -webkit-line-clamp: 2;
+      word-break: break-all;
+      display: -webkit-box;
+      -webkit-box-orient: vertical;
+      height: 40px;
+    }
+  }
+  .list:hover {
+    cursor: pointer;
+    .name {
+      color: #409eff;
+    }
+  }
+}
+.page {
+  text-align: center;
+  height: 40px;
+  padding: 5px 0;
+}
+</style>

+ 177 - 0
src/views/market/list/roadshow.vue

@@ -0,0 +1,177 @@
+<template>
+  <div id="roadshow">
+    <el-row>
+      <el-col :span="24" class="main">
+        <el-col :span="24" class="listTop">
+          <el-col :span="12" class="columnname">
+            <span>|</span> <span>{{ column_name }}</span>
+          </el-col>
+          <el-col :span="12" class="search">
+            <el-input placeholder="请输入名称" v-model="infoName" class="input-with-select">
+              <el-button slot="append" icon="el-icon-search" @click="searchData()"></el-button>
+            </el-input>
+          </el-col>
+        </el-col>
+        <el-col :span="24" class="infoLeftList" v-for="(item, index) in list" :key="index">
+          <el-col :span="4" class="date">
+            <span>{{ item.publish_time || '暂无' }}</span>
+          </el-col>
+          <el-col :span="20" class="info">
+            <el-col :span="24" class="title textOver" @click.native="clickDetail(item.id)">
+              {{ item.title }}
+            </el-col>
+            <el-col :span="24" class="brief">
+              {{ item.titlejj || '暂无' }}
+            </el-col>
+          </el-col>
+        </el-col>
+      </el-col>
+      <el-col :span="24" class="page">
+        <el-pagination
+          @current-change="handleCurrentChange"
+          :current-page="currentPage"
+          layout="total, prev, pager, next, jumper"
+          :total="total"
+          :page-size="pageSize"
+        >
+        </el-pagination>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  name: 'roadshow',
+  props: {
+    roadshowList: { type: Array },
+    total: { type: Number },
+    column_name: null,
+  },
+  components: {},
+  data: function() {
+    return {
+      currentPage: 1, //默认数据1
+      pageSize: 6, //每页显示数据数量
+      origin: [], //分割数据
+      list: [], //显示数据列表
+      infoName: '',
+    };
+  },
+  created() {},
+  methods: {
+    searchPage(page = 1) {
+      this.$set(this, `list`, this.origin[page - 1]);
+    },
+    handleCurrentChange(currentPage) {
+      this.searchPage(currentPage);
+    },
+    // 详情
+    clickDetail(id) {
+      this.$emit('clickDetail', { column_name: '项目路演', id: id });
+    },
+    // 查询
+    searchData() {
+      this.$emit('searchData', { name: this.infoName, columnName: '项目路演' });
+    },
+  },
+  watch: {
+    roadshowList: {
+      immediate: true,
+      deep: true,
+      handler(val) {
+        if (val && val.length > 0) {
+          this.$set(this, `origin`, _.chunk(val, this.pageSize));
+          this.searchPage();
+        } else {
+          this.$set(this, `list`, []);
+        }
+      },
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+    pageTitle() {
+      return `${this.$route.meta.title}`;
+    },
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.main {
+  min-height: 620px;
+  padding: 0 10px;
+  .listTop {
+    height: 49px;
+    line-height: 49px;
+    border-bottom: 1px solid #ccc;
+    .columnname {
+      span:first-child {
+        color: #22529a;
+        font-weight: bold;
+        font-size: 25px;
+      }
+      span:last-child {
+        color: #22529a;
+        font-size: 20px;
+        font-weight: bold;
+      }
+    }
+  }
+  .infoLeftList {
+    width: 97%;
+    padding: 9px 0;
+    border-bottom: 1px dashed #ccc;
+    .date {
+      text-align: center;
+      margin: 6px 0 0 0;
+      span {
+        background-color: #22529a;
+        color: #fff;
+        font-size: 18px;
+        border-radius: 5px;
+        padding: 3px 7px;
+      }
+    }
+    .info {
+      .title {
+        font-size: 18px;
+        font-weight: bold;
+        padding: 5px 0 0 0;
+      }
+      .brief {
+        font-size: 14px;
+        overflow: hidden;
+        text-overflow: ellipsis;
+        -webkit-line-clamp: 2;
+        word-break: break-all;
+        display: -webkit-box;
+        -webkit-box-orient: vertical;
+        padding: 5px 0 0 0;
+        height: 43px;
+      }
+    }
+  }
+  .infoLeftList:last-child {
+    border-bottom: none;
+  }
+  .infoLeftList:hover {
+    cursor: pointer;
+    .info {
+      .title {
+        color: #409eff;
+      }
+    }
+  }
+}
+.page {
+  text-align: center;
+  height: 40px;
+  padding: 5px 0;
+}
+</style>

+ 167 - 119
src/views/market/marketlists.vue

@@ -10,19 +10,10 @@
               <p @click="changeMenu(item.name, index)" :style="`color:${menuIndex == index ? menuColor : ''}`">{{ item.name }}</p>
             </el-col>
           </el-col>
-          <el-col :span="18" class="listInfo">
+          <el-col :span="19" class="listInfo">
             <span v-if="display == 'list'">
-              <el-col :span="24" class="listDown">
-                <span v-if="column_name == '科技需求'">
-                  <technology
-                    :technologyList="technologyList"
-                    :column_name="column_name"
-                    :total="technologyTotal"
-                    @clickDetail="clickDetail"
-                    @searchData="searchData"
-                  ></technology>
-                </span>
-                <span v-else-if="column_name == '技术成果'">
+              <el-col :span="24">
+                <span v-if="column_name == '技术成果'">
                   <achieve
                     :achieveList="achieveList"
                     :column_name="column_name"
@@ -33,6 +24,9 @@
                     :dropList="dropList"
                   ></achieve>
                 </span>
+                <span v-else-if="column_name == 'e专利'">
+                  <patent :patentList="patentList" :column_name="column_name" :total="patentTotal" @clickDetail="clickDetail" @searchData="searchData"></patent>
+                </span>
                 <span v-else-if="column_name == '商务服务'">
                   <business
                     :businessList="businessList"
@@ -53,23 +47,41 @@
                     :dropList="expertdropList"
                   ></expert>
                 </span>
+                <span v-else-if="column_name == '科技需求'">
+                  <technology
+                    :technologyList="technologyList"
+                    :column_name="column_name"
+                    :total="technologyTotal"
+                    @clickDetail="clickDetail"
+                    @searchData="searchData"
+                  ></technology>
+                </span>
+                <span v-else-if="column_name == '项目路演'">
+                  <roadshow
+                    :roadshowList="roadshowList"
+                    :column_name="column_name"
+                    :total="roadshowTotal"
+                    @clickDetail="clickDetail"
+                    @searchData="searchData"
+                  ></roadshow>
+                </span>
               </el-col>
             </span>
             <span v-else>
-              <span v-if="column_name == '科技需求'">
+              <span v-if="column_name == '技术成果'">
                 <el-col :span="24" style="text-align:right;">
                   <el-button type="primary" size="mini" @click="display = 'list'">返回</el-button>
                 </el-col>
                 <el-col :span="24">
-                  <techDetail :detailInfo="techDetail" @onSubmit="techSubmit" :displayBtn="displayBtn"></techDetail>
+                  <achiDetail :detailInfo="achiDetail" @onSubmit="techSubmit" :displayBtn="displayBtn"></achiDetail>
                 </el-col>
               </span>
-              <span v-else-if="column_name == '技术成果'">
+              <span v-else-if="column_name == 'e专利'">
                 <el-col :span="24" style="text-align:right;">
                   <el-button type="primary" size="mini" @click="display = 'list'">返回</el-button>
                 </el-col>
                 <el-col :span="24">
-                  <achiDetail :detailInfo="achiDetail" @onSubmit="techSubmit" :displayBtn="displayBtn"></achiDetail>
+                  <patentDetail></patentDetail>
                 </el-col>
               </span>
               <span v-else-if="column_name == '商务服务'">
@@ -88,6 +100,22 @@
                   <expeDetail :detailInfo="expeDetail" @onSubmit="expertSuubmit" :displayBtn="displayBtn"></expeDetail>
                 </el-col>
               </span>
+              <span v-else-if="column_name == '科技需求'">
+                <el-col :span="24" style="text-align:right;">
+                  <el-button type="primary" size="mini" @click="display = 'list'">返回</el-button>
+                </el-col>
+                <el-col :span="24">
+                  <techDetail :detailInfo="techDetail" @onSubmit="techSubmit" :displayBtn="displayBtn"></techDetail>
+                </el-col>
+              </span>
+              <span v-else-if="column_name == '项目路演'">
+                <el-col :span="24" style="text-align:right;">
+                  <el-button type="primary" size="mini" @click="display = 'list'">返回</el-button>
+                </el-col>
+                <el-col :span="24">
+                  <roadDetail :detailInfo="roadDetail"></roadDetail>
+                </el-col>
+              </span>
             </span>
           </el-col>
         </div>
@@ -98,57 +126,64 @@
 
 <script>
 // 列表
-import technology from './list/technology.vue';
 import achieve from './list/achieve.vue';
+import patent from './list/patent.vue';
 import business from './list/business.vue';
 import expert from './list/expert.vue';
+import technology from './list/technology.vue';
+import roadshow from './list/roadshow.vue';
 // 详情
-import techDetail from './detail/techDetail.vue';
 import achiDetail from './detail/achiDetail.vue';
+import patentDetail from './detail/patentDetail.vue';
 import busiDetail from './detail/busiDetail.vue';
 import expeDetail from './detail/expeDetail.vue';
+import techDetail from './detail/techDetail.vue';
+import roadDetail from './detail/roadDetail.vue';
 import { mapState, createNamespacedHelpers } from 'vuex';
 const { mapActions: product } = createNamespacedHelpers('marketproduct');
 const { mapActions: expertsuser } = createNamespacedHelpers('expertsuser');
 const { mapActions: transaction } = createNamespacedHelpers('transaction');
 const { mapActions: markettype } = createNamespacedHelpers('markettype');
+const { mapActions: newsroadshow } = createNamespacedHelpers('newsroadshow');
 import _ from 'lodash';
 export default {
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
   name: 'marketlists',
   props: {},
   components: {
-    // 科技需求
-    technology,
-    techDetail,
     // 技术成果
     achieve,
     achiDetail,
+    // e专利
+    patent,
+    patentDetail,
     // 商务服务
     business,
     busiDetail,
     // 专家智库
     expert,
     expeDetail,
+    // 科技需求
+    technology,
+    techDetail,
+    // 项目路演
+    roadshow,
+    roadDetail,
   },
   data: function() {
     return {
       squareImage: require('@/assets/live/square_big.png'),
       // 菜单
-      menuList: [{ name: '科技需求' }, { name: '技术成果' }, { name: '商务服务' }, { name: '专家智库' }],
+      menuList: [{ name: '技术成果' }, { name: 'e专利' }, { name: '商务服务' }, { name: '专家智库' }, { name: '科技需求' }, { name: '项目路演' }],
       menuIndex: '0',
       menuColor: 'rgb(254, 149, 14)',
-      // 右侧显示
-      // list:列表,detail:详情
       display: 'list',
       // 右侧头部栏目
-      column_name: '科技需求',
+      column_name: '技术成果',
       // 搜索
       infoName: '',
-      // 列表&詳情
-      // 科技需求
-      technologyList: [],
-      technologyTotal: 0,
-      techDetail: {},
       // 技术成果
       // 原数组
       priAchieve: [],
@@ -159,6 +194,9 @@ export default {
       achiDetail: {},
       // 其他单位列表
       dropList: [],
+      // e专利
+      patentList: [],
+      patentTotal: 0,
       // 商务服务
       businessList: [],
       businessTotal: 0,
@@ -174,33 +212,40 @@ export default {
       expertdropList: [],
       // 显示按钮
       displayBtn: true,
+      // 科技需求
+      technologyList: [],
+      technologyTotal: 0,
+      techDetail: {},
+      // 项目路演
+      roadshowList: [],
+      roadshowTotal: 0,
+      roadDetail: {},
     };
   },
   async created() {
     await this.searchColumn();
     await this.searchCom();
-    this.$nextTick(() => {
-      // 禁用右键
-      document.oncontextmenu = new Function('event.returnValue=false');
-      // 禁用选择
-      document.onselectstart = new Function('event.returnValue=false');
-    });
   },
   methods: {
     ...product({ productList: 'newquery', productFetch: 'newfetch' }),
     ...expertsuser({ expertsuserList: 'query', expertsuserFetch: 'fetch' }),
     ...transaction({ transactioncreate: 'create', transactionfetch: 'fetch' }),
     ...markettype({ markettypeList: 'query' }),
+    ...newsroadshow({ adshowQuery: 'query', adshowFetch: 'fetch' }),
     // 查询栏目,列表,详情
     async searchColumn() {
-      if (this.type == 0) {
-        this.changeMenu(this.columnName, this.type);
-      } else if (this.type == 1) {
-        this.changeMenu(this.columnName, this.type);
+      if (this.type == 1) {
+        this.changeMenu(this.columnName, 0);
+      } else if (this.type == 5) {
+        this.changeMenu(this.columnName, 1);
       } else if (this.type == 2) {
-        this.changeMenu(this.columnName, this.type);
+        this.changeMenu(this.columnName, 2);
       } else if (this.type == 3) {
-        this.changeMenu(this.columnName, this.type);
+        this.changeMenu(this.columnName, 3);
+      } else if (this.type == 0) {
+        this.changeMenu(this.columnName, 4);
+      } else if (this.type == 4) {
+        this.changeMenu(this.columnName, 5);
       }
       if (this.id) {
         this.display = 'detail';
@@ -221,16 +266,14 @@ export default {
     // 查看列表
     async searchInfo({ skip = 0, limit = 10, columnName, name, ...info } = {}) {
       if (name) info.name = name;
-      if (columnName == '科技需求') {
-        let res = await this.productList({ skip, type: '0', status: '1', ...info });
-        if (this.$checkRes(res)) this.$set(this, `technologyList`, res.data);
-        this.$set(this, `technologyTotal`, res.total);
-      } else if (columnName == '技术成果') {
-        let res = await this.productList({ skip, type: '1', status: '1', ...info });
+      if (columnName == '技术成果') {
+        let res = await this.productList({ skip, limit, type: '1', status: '1', ...info });
         if (this.$checkRes(res)) this.$set(this, `priAchieve`, res.data);
         this.$set(this, `priAchieveTotal`, res.total);
         this.$set(this, `achieveList`, res.data);
         this.$set(this, `achieveTotal`, res.total);
+      } else if (columnName == 'e专利') {
+        console.log('e专利');
       } else if (columnName == '商务服务') {
         let res = await this.productList({ skip, type: '2', status: '1', ...info });
         if (this.$checkRes(res)) this.$set(this, `businessList`, res.data);
@@ -241,76 +284,42 @@ export default {
         this.$set(this, `priExpertTotal`, res.total);
         this.$set(this, `expertList`, res.data);
         this.$set(this, `expertTotal`, res.total);
+      } else if (columnName == '科技需求') {
+        let res = await this.productList({ skip, type: '0', status: '1', ...info });
+        if (this.$checkRes(res)) this.$set(this, `technologyList`, res.data);
+        this.$set(this, `technologyTotal`, res.total);
+      } else if (columnName == '项目路演') {
+        let res = await this.adshowQuery({ skip: 0, ...info });
+        if (this.$checkRes(res)) this.$set(this, `roadshowList`, res.data);
+        this.$set(this, `roadshowTotal`, res.total);
       }
     },
+    // 点击查看详情
+    clickDetail({ column_name, id }) {
+      this.$set(this, `column_name`, column_name);
+      this.display = 'detail';
+      this.searchDetail(column_name, id);
+    },
     // 查看详情
     async searchDetail(columnName, id) {
-      if (columnName == '科技需求') {
-        let res = await this.productFetch(id);
-        if (this.$checkRes(res)) this.$set(this, `techDetail`, res.data);
-      } else if (columnName == '技术成果') {
+      if (columnName == '技术成果') {
         let res = await this.productFetch(id);
         if (this.$checkRes(res)) this.$set(this, `achiDetail`, res.data);
+      } else if (columnName == 'e专利') {
+        console.log('e专利');
       } else if (columnName == '商务服务') {
         let res = await this.productFetch(id);
         if (this.$checkRes(res)) this.$set(this, `busiDetail`, res.data);
-      } else {
+      } else if (columnName == '专家智库') {
         let res = await this.expertsuserFetch(id);
         if (this.$checkRes(res)) this.$set(this, `expeDetail`, res.data);
-      }
-    },
-    // 点击查看详情
-    clickDetail({ column_name, id }) {
-      this.$set(this, `column_name`, column_name);
-      this.display = 'detail';
-      this.searchDetail(column_name, id);
-    },
-    // 科技需求,技术成果,商务服务洽谈
-    async techSubmit({ data }) {
-      let form = {
-        userid: this.user.uid,
-        username: this.user.name,
-        product_id: data.id,
-        product_name: data.name,
-        market_userid: data.userid,
-        market_username: data.contacts,
-        status: '0',
-      };
-      if (!this.user.uid) {
-        this.$message({
-          dangerouslyUseHTMLString: true,
-          message: '<strong><a href="http://broadcast.waityou24.cn/platlive/webLogin" style="color:red;">游客身份无法与卖家对话,请先注册</a></strong>',
-          type: 'error',
-        });
-        return;
-      } else {
-        let res = await this.transactioncreate(form);
-        this.$checkRes(res, '购买申请成功', res.errmsg || '购买申请失败');
-      }
-    },
-    // 专家智库
-    async expertSuubmit({ data }) {
-      let form = {
-        userid: this.user.uid,
-        username: this.user.name,
-        product_id: data.id,
-        product_name: data.name,
-        market_userid: data.id,
-        market_username: data.name,
-        status: '0',
-        type: '1',
-      };
-      if (!this.user.uid) {
-        // this.$message.error('游客身份无法与卖家对话,请先注册');
-        this.$message({
-          dangerouslyUseHTMLString: true,
-          message: '<strong><a href="http://broadcast.waityou24.cn/platlive/webLogin" style="color:red;">游客身份无法与卖家对话,请先注册</a></strong>',
-          type: 'error',
-        });
-        return;
-      } else {
-        let res = await this.transactioncreate(form);
-        this.$checkRes(res, '购买申请成功', res.errmsg || '购买申请失败');
+      } else if (columnName == '科技需求') {
+        let res = await this.productFetch(id);
+        if (this.$checkRes(res)) this.$set(this, `techDetail`, res.data);
+      } else if (columnName == '项目路演') {
+        let res = await this.adshowFetch(id);
+        console.log(res);
+        if (this.$checkRes(res)) this.$set(this, `roadDetail`, res.data);
       }
     },
     // 名字查询
@@ -409,6 +418,54 @@ export default {
         this.$set(this, `expertTotal`, this.priExpert.legnth);
       }
     },
+    // 科技需求,技术成果,商务服务洽谈
+    async techSubmit({ data }) {
+      let form = {
+        userid: this.user.uid,
+        username: this.user.name,
+        product_id: data.id,
+        product_name: data.name,
+        market_userid: data.userid,
+        market_username: data.contacts,
+        status: '0',
+      };
+      if (!this.user.uid) {
+        this.$message({
+          dangerouslyUseHTMLString: true,
+          message: '<strong><a href="http://broadcast.waityou24.cn/platlive/webLogin" style="color:red;">游客身份无法与卖家对话,请先注册</a></strong>',
+          type: 'error',
+        });
+        return;
+      } else {
+        let res = await this.transactioncreate(form);
+        this.$checkRes(res, '购买申请成功', res.errmsg || '购买申请失败');
+      }
+    },
+    // 专家智库
+    async expertSuubmit({ data }) {
+      let form = {
+        userid: this.user.uid,
+        username: this.user.name,
+        product_id: data.id,
+        product_name: data.name,
+        market_userid: data.id,
+        market_username: data.name,
+        status: '0',
+        type: '1',
+      };
+      if (!this.user.uid) {
+        // this.$message.error('游客身份无法与卖家对话,请先注册');
+        this.$message({
+          dangerouslyUseHTMLString: true,
+          message: '<strong><a href="http://broadcast.waityou24.cn/platlive/webLogin" style="color:red;">游客身份无法与卖家对话,请先注册</a></strong>',
+          type: 'error',
+        });
+        return;
+      } else {
+        let res = await this.transactioncreate(form);
+        this.$checkRes(res, '购买申请成功', res.errmsg || '购买申请失败');
+      }
+    },
   },
   computed: {
     ...mapState(['user']),
@@ -421,24 +478,15 @@ export default {
     id() {
       return this.$route.query.id;
     },
-    pageTitle() {
-      return `${this.$route.meta.title}`;
-    },
-  },
-  metaInfo() {
-    return { title: this.$route.meta.title };
   },
+  watch: {},
 };
 </script>
 
 <style lang="less" scoped>
-.w_1200 {
-  // width: 80%;
-  width: 1200px;
-  margin: 0 auto;
-}
 .main {
-  margin: 15px 0;
+  min-height: 500px;
+  padding: 10px 0;
   .menu {
     height: 600px;
     overflow: hidden;

+ 0 - 75
src/views/market/re.vue

@@ -1,75 +0,0 @@
-<template>
-  <div id="re">
-    <el-row>
-      <el-col :span="24">
-        <el-col
-          :span="12"
-          class="achieveList"
-          v-for="(item, index) in achieveList"
-          :key="index"
-          @click.native="$router.push({ path: '/market/marketlists', query: { type: '1', column_name: '技术成果', id: item.id } })"
-        >
-          <el-col :span="24" class="achieveImage">
-            <el-image v-if="item.image && item.image.length > 0" :src="item.image[0].url"></el-image>
-            <el-image v-else :src="achievezb"></el-image>
-          </el-col>
-          <el-col :span="24" class="name textOver">
-            {{ item.name }}
-          </el-col>
-        </el-col>
-      </el-col>
-    </el-row>
-  </div>
-</template>
-
-<script>
-import { mapState, createNamespacedHelpers } from 'vuex';
-export default {
-  metaInfo: { title: 're' },
-  name: 're',
-  props: {},
-  components: {},
-  data: function() {
-    return {};
-  },
-  created() {},
-  methods: {},
-  computed: {
-    ...mapState(['user']),
-  },
-};
-</script>
-
-<style lang="less" scoped>
-.achieveList {
-  position: relative;
-  height: 220px;
-  margin: 0 0 5px 0;
-  border: 1px dashed #ccc;
-  padding: 5px;
-  .achieveImage .el-image {
-    width: 100%;
-    height: 210px;
-    overflow: hidden;
-    border-radius: 5px;
-  }
-  .name {
-    position: absolute;
-    bottom: 0;
-    width: 97%;
-    height: 40px;
-    line-height: 40px;
-    background: #0085d25f;
-    font-size: 16px;
-    padding: 0 10px;
-    color: #333;
-  }
-}
-.achieveList:hover {
-  cursor: pointer;
-  .name {
-    color: #0085d2;
-    font-weight: bold;
-  }
-}
-</style>

+ 33 - 177
src/views/superAdminCenter/technical/index.vue

@@ -1,204 +1,60 @@
 <template>
   <div id="index">
     <el-row>
-      <el-col :span="24">
-        <el-col :span="24" class="add" style="text-align:right;padding: 10px 20px;">
-          <el-button size="mini" type="primary" @click="toAdd" icon="el-icon-plus">添加{{ theme }}</el-button>
+      <el-col :span="24" class="main">
+        <el-col :span="8" class="column">
+          <column @setCategory="data => (columnid = data)" @setList="data => (categoryList = data)"></column>
         </el-col>
-        <el-col :span="24" class="main">
-          <el-tabs v-model="activeName" type="card">
-            <el-tab-pane label="专家问诊" name="first">
-              <data-table :fields="fields" :opera="opera" @edit="toEdit" :data="list" :total="total" @delete="toDelete" @query="search"></data-table>
-            </el-tab-pane>
-            <el-tab-pane label="行业研究" name="second">
-              <data-table :fields="fields" :opera="opera" @edit="toEdit" :data="oneList" :total="oneTotal" @delete="toDelete" @query="search"></data-table>
-            </el-tab-pane>
-          </el-tabs>
+        <el-col :span="16" class="news">
+          <news :columnid="columnid" :categoryList="categoryList"></news>
         </el-col>
-        <el-dialog :title="theme" width="60%" :visible.sync="dialog" @closed="handleClose" :destroy-on-close="true">
-          <el-form ref="form" :rules="rules" :model="form" label-width="80px">
-            <el-form-item label="信息标题" prop="title">
-              <el-input v-model="form.title" placeholder="请输入信息标题"></el-input>
-            </el-form-item>
-            <el-form-item label="来源">
-              <el-input v-model="form.orgin" placeholder="请输入信息来源"></el-input>
-            </el-form-item>
-            <el-form-item label="所属栏目" placeholder="请选择所属栏目">
-              <el-select v-model="form.column_id" filterable @change="selectChild">
-                <el-option v-for="(item, index) in columnList" :key="index" :value="item.id" :label="item.name"></el-option>
-              </el-select>
-            </el-form-item>
-            <el-form-item label="标题简介">
-              <el-input type="textarea" v-model="form.titlejj" placeholder="请输入标题简介"></el-input>
-            </el-form-item>
-            <el-form-item label="信息图片" prop="picture">
-              <uploadone :limit="1" :data="form.picture" type="picture" :url="'/files/imgpath/upload'" @upload="uploadSuccess"></uploadone>
-            </el-form-item>
-            <el-form-item label="视频" prop="filepath">
-              <upload :limit="1" :data="form.filepath" type="filepath" listType="" :url="'/files/imgpath/upload'" @upload="uploadSuccess"></upload>
-            </el-form-item>
-            <el-form-item label="信息内容">
-              <wang-editor v-model="form.content" placeholder="请输入信息内容"></wang-editor>
-            </el-form-item>
-            <el-form-item label="发布时间">
-              <el-col :span="11">
-                <el-date-picker type="date" placeholder="发布时间" value-format="yyyy-MM-dd" v-model="form.publish_time" style="width: 100%;"></el-date-picker>
-              </el-col>
-            </el-form-item>
-            <el-form-item>
-              <el-button type="primary" @click="onSubmit()">提交</el-button>
-            </el-form-item>
-          </el-form>
-        </el-dialog>
       </el-col>
     </el-row>
   </div>
 </template>
 
 <script>
-import uploadone from '@/components/uploadone.vue';
-import upload from '@/components/upload.vue';
-import WangEditor from '@/components/wang-editor.vue';
-import dataTable from '@/components/data-table.vue';
+import column from './parts/column.vue';
+import news from './parts/news.vue';
 import { mapState, createNamespacedHelpers } from 'vuex';
-const { mapActions: liveTechnicalColumn } = createNamespacedHelpers('liveTechnicalColumn');
-const { mapActions: liveTechnicalNews } = createNamespacedHelpers('liveTechnicalNews');
 export default {
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
   name: 'index',
   props: {},
   components: {
-    dataTable,
-    uploadone,
-    upload,
-    WangEditor,
+    column,
+    news,
   },
   data: function() {
     return {
-      theme: '技术交流信息',
-      activeName: 'first',
-      opera: [
-        {
-          label: '编辑',
-          icon: 'el-icon-edit',
-          method: 'edit',
-        },
-        {
-          label: '删除',
-          icon: 'el-icon-delete',
-          method: 'delete',
-          confirm: true,
-        },
-      ],
-      fields: [
-        { label: '标题', prop: 'title', filter: 'input' },
-        { label: '所属栏目', prop: 'column_name' },
-        { label: '來源', prop: 'orgin' },
-        { label: '簡介', prop: 'titlejj' },
-      ],
-      list: [],
-      total: 0,
-      oneList: [],
-      oneTotal: 0,
-      dialog: false,
-      form: {},
-      rules: {},
-      columnList: [],
+      columnid: undefined,
+      categoryList: [],
     };
   },
-  created() {
-    this.search();
-    this.searchColumn();
-  },
-  methods: {
-    ...liveTechnicalColumn(['query', 'delete', 'fetch']),
-    ...liveTechnicalNews({ queryList: 'query', createList: 'create', updateList: 'update', deleteList: 'delete' }),
-    async search({ skip = 0, limit = 10, ...info } = {}) {
-      const res = await this.queryList({ skip, limit, column_name: '专家问诊' });
-      if (this.$checkRes(res)) {
-        this.$set(this, `list`, res.data);
-        this.$set(this, `total`, res.total);
-      }
-      const arr = await this.queryList({ skip, limit, column_name: '行业研究' });
-      if (this.$checkRes(arr)) {
-        this.$set(this, `oneList`, arr.data);
-        this.$set(this, `oneTotal`, arr.total);
-      }
-    },
-    // 栏目
-    async searchColumn({ ...info } = {}) {
-      const res = await this.query({ ...info });
-      if (this.$checkRes(res)) {
-        this.$set(this, `columnList`, res.data);
-      }
-    },
-    // 添加信息
-    toAdd() {
-      this.dialog = true;
-    },
-    // 提交
-    async onSubmit() {
-      if (this.form.id) {
-        let res = await this.updateList(this.form);
-        if (this.$checkRes(res)) {
-          this.$message({
-            message: '修改信息成功',
-            type: 'success',
-          });
-          this.handleClose();
-        }
-      } else {
-        let res = await this.createList(this.form);
-        if (this.$checkRes(res)) {
-          this.$message({
-            message: '添加信息成功',
-            type: 'success',
-          });
-          this.handleClose();
-        }
-      }
-    },
-    // 修改
-    toEdit({ data }) {
-      this.$set(this, 'form', data);
-      this.dialog = true;
-    },
-    // 刪除
-    async toDelete({ data }) {
-      const res = await this.deleteList(data.id);
-      if (this.$checkRes(res)) {
-        this.$message({
-          message: '删除信息成功',
-          type: 'success',
-        });
-        this.search();
-      }
-    },
-    // 取消
-    handleClose() {
-      this.form = {};
-      this.dialog = false;
-    },
-    selectChild(column_id) {
-      let res = this.columnList.filter(fil => fil.id === column_id);
-      if (res.length > 0) {
-        this.$set(this.form, `column_name`, res[0].name);
-      }
-      this.$forceUpdate();
-    },
-    uploadSuccess({ type, data }) {
-      this.$set(this.form, `${type}`, data.uri);
-    },
-  },
+  created() {},
+  methods: {},
   computed: {
     ...mapState(['user']),
-    pageTitle() {
-      return `${this.$route.meta.title}`;
-    },
-  },
-  metaInfo() {
-    return { title: this.$route.meta.title };
   },
+  watch: {},
 };
 </script>
 
-<style lang="less" scoped></style>
+<style lang="less" scoped>
+.main {
+  min-height: 750px;
+  padding: 0 15px 0 0;
+  .column {
+    min-height: 750px;
+    border: 1px solid #ccc;
+    margin: 0 10px 0 0;
+  }
+  .news {
+    width: 65%;
+    min-height: 750px;
+    border: 1px solid #ccc;
+  }
+}
+</style>

+ 146 - 0
src/views/superAdminCenter/technical/parts/column.vue

@@ -0,0 +1,146 @@
+<template>
+  <div id="column">
+    <el-row>
+      <el-col :span="24" class="column">
+        <el-col :span="24" class="top">
+          <el-col :span="12" class="title">
+            栏目管理
+          </el-col>
+          <el-col :span="12" class="btn">
+            <el-button type="primary" size="mini" @click="drawer = true">添加</el-button>
+          </el-col>
+        </el-col>
+        <el-col :span="24" class="list">
+          <data-table :fields="fields" :data="list" :opera="opera" @edit="toEdit" @delete="toDelete" @rowClick="rowClick" :usePage="false"></data-table>
+        </el-col>
+      </el-col>
+    </el-row>
+    <el-drawer title="栏目管理" :visible.sync="drawer" direction="rtl" @closed="handleClose" :destroy-on-close="true">
+      <data-form :fields="fields" :data="form" :rules="{}" @save="drawerSave" :isNew="drawerIsNew">
+        <template #options="{item}">
+          <template v-if="item.model === 'site'">
+            <el-option v-for="(i, index) in siteList" :key="index" :label="i.name" :value="i.site"></el-option>
+          </template>
+        </template>
+      </data-form>
+    </el-drawer>
+  </div>
+</template>
+
+<script>
+import dataForm from '@/components/form.vue';
+import dataTable from '@/components/data-table.vue';
+import { mapActions, mapState, createNamespacedHelpers } from 'vuex';
+const { mapActions: liveTechnicalColumn } = createNamespacedHelpers('liveTechnicalColumn');
+export default {
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  name: 'column',
+  props: {},
+  components: {
+    dataTable,
+    dataForm,
+  },
+  data: function() {
+    return {
+      opera: [
+        {
+          label: '编辑',
+          method: 'edit',
+        },
+        {
+          label: '删除',
+          method: 'delete',
+          confirm: true,
+        },
+      ],
+      fields: [
+        { label: '名称', prop: 'name', model: 'name' },
+        { label: '位置', prop: 'site', model: 'site', type: 'select' },
+      ],
+      list: [],
+      total: 0,
+      drawerIsNew: true,
+      drawer: false,
+      form: {},
+      // 栏目位置列表
+      siteList: [
+        { name: '行业研究', site: 'hyyj' },
+        { name: '专家问诊', site: 'zjwz' },
+        { name: '调查问卷', site: 'dcwj' },
+      ],
+    };
+  },
+  created() {
+    this.search();
+  },
+  methods: {
+    ...liveTechnicalColumn(['query', 'create', 'update', 'delete']),
+    async search() {
+      const res = await this.query();
+      if (this.$checkRes(res)) {
+        this.$set(this, `list`, res.data);
+        this.$set(this, `total`, res.total);
+        this.$emit('setList', res.data);
+      }
+    },
+    toEdit({ data }) {
+      this.$set(this, 'form', data);
+      this.drawer = true;
+      this.drawerIsNew = false;
+    },
+    async toDelete({ data }) {
+      const res = await this.delete(data.id);
+      if (this.$checkRes(res, '删除成功', res.errmsg || '删除失败')) this.search();
+    },
+    // 提交
+    async drawerSave({ data, isNew }) {
+      let res;
+      let msg;
+      if (isNew) {
+        res = await this.create(data);
+        msg = '栏目创建成功';
+      } else {
+        res = await this.update(data);
+        msg = '栏目修改成功';
+      }
+      if (this.$checkRes(res, msg, res.errmsg)) {
+        this.handleClose();
+        this.search();
+      }
+    },
+    // 取消
+    handleClose() {
+      this.drawer = false;
+      this.form = {};
+      this.drawerIsNew = true;
+    },
+    // 选择栏目
+    rowClick(row) {
+      this.$emit('setCategory', row.id);
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+  },
+  watch: {},
+};
+</script>
+
+<style lang="less" scoped>
+.column {
+  .top {
+    padding: 10px 0;
+    .title {
+      padding: 2px 10px;
+      font-size: 18px;
+      font-weight: bold;
+    }
+    .btn {
+      text-align: right;
+      padding: 0 10px 0 0;
+    }
+  }
+}
+</style>

+ 212 - 0
src/views/superAdminCenter/technical/parts/news.vue

@@ -0,0 +1,212 @@
+<template>
+  <div id="news">
+    <el-row>
+      <el-col :span="24" class="column">
+        <el-col :span="24" class="top">
+          <el-col :span="12" class="title">
+            {{ column_name || '信息管理' }}
+          </el-col>
+          <el-col :span="12" class="btn">
+            <el-button type="primary" size="mini" @click="add()">添加</el-button>
+          </el-col>
+        </el-col>
+        <el-col :span="24" class="list">
+          <data-table :fields="fields" :data="list" :total="total" :opera="opera" @edit="toEdit" @delete="toDelete" @query="search"></data-table>
+        </el-col>
+      </el-col>
+    </el-row>
+    <el-dialog title="信息管理" :visible.sync="drawer" @closed="handleClose">
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="信息标题" prop="title">
+          <el-input v-model="form.title" placeholder="请输入信息标题"></el-input>
+        </el-form-item>
+        <el-form-item label="来源">
+          <el-input v-model="form.orgin" placeholder="请输入信息来源"></el-input>
+        </el-form-item>
+        <el-form-item label="所属栏目" placeholder="请选择所属栏目">
+          <el-select v-model="form.column_id" filterable @change="selectChild">
+            <el-option v-for="(item, index) in column" :key="index" :value="item.id" :label="item.name"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="标题简介">
+          <el-input type="textarea" v-model="form.titlejj" placeholder="请输入标题简介"></el-input>
+        </el-form-item>
+        <el-form-item label="信息图片" prop="picture">
+          <uploadone :limit="1" :data="form.picture" type="picture" :url="'/files/imgpath/upload'" @upload="uploadSuccess"></uploadone>
+        </el-form-item>
+        <el-form-item label="视频" prop="filepath">
+          <upload :limit="1" :data="form.filepath" type="filepath" listType="" :url="'/files/imgpath/upload'" @upload="uploadSuccess"></upload>
+        </el-form-item>
+        <el-form-item label="信息内容">
+          <wang-editor v-model="form.content" placeholder="请输入信息内容"></wang-editor>
+        </el-form-item>
+        <el-form-item label="发布时间">
+          <el-col :span="11">
+            <el-date-picker type="date" placeholder="发布时间" value-format="yyyy-MM-dd" v-model="form.publish_time" style="width: 100%;"></el-date-picker>
+          </el-col>
+        </el-form-item>
+        <el-form-item>
+          <el-button type="primary" @click="onSubmit()">提交</el-button>
+        </el-form-item>
+      </el-form>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import uploadone from '@/components/uploadone.vue';
+import upload from '@/components/upload.vue';
+import WangEditor from '@/components/wang-editor.vue';
+import dataTable from '@/components/data-table.vue';
+import { mapActions, mapState, createNamespacedHelpers } from 'vuex';
+const { mapActions: liveTechnicalColumn } = createNamespacedHelpers('liveTechnicalColumn');
+const { mapActions: liveTechnicalNews } = createNamespacedHelpers('liveTechnicalNews');
+export default {
+  name: 'news',
+  props: {
+    columnid: String,
+    categoryList: Array,
+  },
+  components: {
+    dataTable,
+    uploadone,
+    upload,
+    WangEditor,
+  },
+  data: function() {
+    return {
+      // 列表
+      opera: [
+        {
+          label: '编辑',
+          method: 'edit',
+        },
+        {
+          label: '删除',
+          method: 'delete',
+          confirm: true,
+        },
+      ],
+      fields: [
+        { label: '所属栏目', prop: 'column_name' },
+        { label: '标题', prop: 'title' },
+        { label: '来源', prop: 'orgin' },
+        { label: '时间', prop: 'publish_time' },
+      ],
+      list: [],
+      total: 0,
+      drawer: false,
+      form: {},
+      rules: {
+        column_id: [{ required: true, message: '请选择活动区域', trigger: 'change' }],
+        title: [{ required: true, message: '请输入信息名称', trigger: 'blur' }],
+      },
+      // 栏目列表
+      column: [],
+      // 位置
+      site: '',
+      column_name: '',
+    };
+  },
+  async created() {
+    await this.searchcol();
+    await this.search();
+  },
+  methods: {
+    ...liveTechnicalColumn({ journcolumnQuery: 'query' }),
+    ...liveTechnicalNews(['query', 'create', 'update', 'delete']),
+    // 查询列表
+    async search({ skip = 0, limit = 10, ...info } = {}) {
+      if (this.columnid) {
+        info.column_id = this.columnid;
+      }
+      const arr = await this.query({ skip, limit, ...info });
+      if (this.$checkRes(arr)) {
+        this.$set(this, `list`, arr.data);
+        this.$set(this, `total`, arr.total);
+      }
+    },
+    // 查询栏目
+    async searchcol() {
+      let res = await this.journcolumnQuery();
+      if (this.$checkRes(res)) {
+        this.$set(this, `column`, res.data);
+      }
+    },
+    // 添加
+    add() {
+      this.form = {};
+      this.drawer = true;
+    },
+    // 修改
+    toEdit({ data }) {
+      this.$set(this, 'form', data);
+      this.drawer = true;
+    },
+    // 删除
+    async toDelete({ data }) {
+      const res = await this.delete(data.id);
+      if (this.$checkRes(res, '删除成功', res.errmsg || '删除失败')) this.search();
+    },
+    // 提交
+    async onSubmit() {
+      let data = this.form;
+      if (data.id) {
+        let res = await this.update(data);
+        if (this.$checkRes(res)) {
+          this.$message({
+            message: '修改信息成功',
+            type: 'success',
+          });
+          this.handleClose();
+        }
+      } else {
+        let res = await this.create(data);
+        if (this.$checkRes(res)) {
+          this.$message({
+            message: '添加信息成功',
+            type: 'success',
+          });
+          this.handleClose();
+        }
+      }
+    },
+    // 取消
+    handleClose() {
+      this.form = {};
+      this.drawer = false;
+      this.search();
+    },
+    selectChild(column_id) {
+      let res = this.column.filter(fil => fil.id === column_id);
+      if (res.length > 0) {
+        this.$set(this.form, `column_name`, res[0].name);
+      }
+      this.$forceUpdate();
+    },
+    uploadSuccess({ type, data }) {
+      this.$set(this.form, `${type}`, data.uri);
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.column {
+  .top {
+    padding: 10px 0;
+    .title {
+      padding: 2px 10px;
+      font-size: 18px;
+      font-weight: bold;
+    }
+    .btn {
+      text-align: right;
+      padding: 0 10px 0 0;
+    }
+  }
+}
+</style>

+ 0 - 94
src/views/technical/detail/guidetail.vue

@@ -1,94 +0,0 @@
-<template>
-  <div id="guidetail">
-    <el-row>
-      <el-col :span="24" class="main">
-        <div class="detailtop">
-          <span>{{ detailinfo.title }}</span>
-        </div>
-        <div class="detailtopleft">
-          <span>时间:{{ detailinfo.publish_time }}&nbsp;&nbsp;&nbsp;&nbsp;来源:{{ detailinfo.orgin }}</span>
-        </div>
-        <div class="detailimage" v-if="detailinfo.picture">
-          <img :src="detailinfo.picture" class="detailimg" />
-        </div>
-        <div class="detailcontext">
-          <p v-html="detailinfo.content"></p>
-        </div>
-      </el-col>
-    </el-row>
-  </div>
-</template>
-
-<script>
-import { mapState, createNamespacedHelpers } from 'vuex';
-export default {
-  name: 'guidetail',
-  props: {
-    detailinfo: { type: Object },
-  },
-  components: {},
-  data: function() {
-    return {};
-  },
-  created() {},
-  methods: {},
-  computed: {
-    ...mapState(['user']),
-  },
-  metaInfo() {
-    return { title: this.$route.meta.title };
-  },
-};
-</script>
-
-<style lang="less" scoped>
-.main {
-  .detailtop {
-    padding: 20px 0px;
-    font-size: 18px;
-    line-height: 40px;
-    font-weight: normal;
-    text-align: left;
-    margin: 0;
-    text-align: center;
-    color: #005293;
-  }
-  .detailtopleft {
-    text-align: center;
-    padding: 0 0 10px 0;
-    border-bottom: 1px solid #ccc;
-    font-size: 16px;
-    color: #666666;
-  }
-  .detailimage {
-    text-align: center;
-    padding: 20px 0 0 0;
-  }
-  .detailimg {
-    width: 500px;
-    height: 300px;
-  }
-  .detailcontext {
-    padding: 20px 0;
-    min-height: 370px;
-  }
-  .development {
-    height: 50px;
-    border: 1px dashed red;
-    padding: 0 30px;
-    p:first-child {
-      text-align: center;
-      font-size: 18px;
-      color: red;
-      font-weight: bold;
-    }
-    p:last-child {
-      text-align: center;
-      height: 25px;
-      line-height: 25px;
-      font-size: 16px;
-      font-weight: bold;
-    }
-  }
-}
-</style>

src/views/dynamic/downparts/chat.vue → src/views/technical/gzcy/chat.vue


src/views/dynamic/downparts/jbyx.vue → src/views/technical/gzcy/jbyx.vue


src/views/dynamic/downparts/jyxc.vue → src/views/technical/gzcy/jyxc.vue


src/views/dynamic/downparts/wsdc.vue → src/views/technical/gzcy/wsdc.vue


src/views/dynamic/downparts/zhfw.vue → src/views/technical/gzcy/zhfw.vue


+ 1 - 1
src/views/dynamic/downparts/zxzx.vue

@@ -9,7 +9,7 @@
 </template>
 
 <script>
-import chat from '../downparts/chat.vue';
+import chat from '../gzcy/chat.vue';
 import { mapState, createNamespacedHelpers } from 'vuex';
 export default {
   metaInfo() {

+ 135 - 354
src/views/technical/index.vue

@@ -3,173 +3,112 @@
     <el-row>
       <el-col :span="24" class="main">
         <div class="w_1200">
-          <el-col :span="24" class="one common">
+          <el-col :span="24" class="one">
             <el-col :span="12" class="left">
-              <el-col :span="24" class="top">
-                <el-col :span="2" class="topImg">
-                  <el-image :src="txtImg"></el-image>
-                </el-col>
-                <el-col :span="22" class="topTxt">
-                  <span>专家问诊</span>
-                  <span>expert</span>
-                  <span @click="$router.push({ path: '/technical/list', query: { type: '1', column_name: '专家问诊' } })">更多</span>
-                </el-col>
-              </el-col>
-              <el-col :span="24" class="down">
-                <el-col
-                  :span="24"
-                  class="expertList"
-                  v-for="(item, index) in expertList"
-                  :key="index"
-                  @click.native="$router.push({ path: '/technical/list', query: { type: '1', column_name: '专家问诊', id: item._id } })"
-                >
-                  <el-col :span="4" class="date">
-                    <span>{{ item.publish_time || '暂无' }}</span>
-                  </el-col>
-                  <el-col :span="20" class="title textOver">
-                    {{ item.title }}
-                  </el-col>
-                  <el-col :span="24" class="brief">
-                    {{ item.titlejj || '暂无' }}
-                  </el-col>
-                </el-col>
-              </el-col>
+              <question :questionList="questionList"></question>
             </el-col>
-            <el-col :span="12" class="left right">
-              <el-col :span="24" class="top">
-                <el-col :span="2" class="topImg">
-                  <el-image :src="txtImg"></el-image>
-                </el-col>
-                <el-col :span="22" class="topTxt">
-                  <span>行业研究</span>
-                  <span>industry</span>
-                  <span @click="$router.push({ path: '/technical/list', query: { type: '2', column_name: '行业研究' } })">更多</span>
-                </el-col>
-              </el-col>
-              <el-col :span="24" class="down">
-                <el-col
-                  :span="24"
-                  class="industryList"
-                  v-for="(item, index) in industryList"
-                  :key="index"
-                  @click.native="$router.push({ path: '/technical/list', query: { type: '2', column_name: '行业研究', id: item._id } })"
-                >
-                  <el-col :span="20" class="title textOver">
-                    {{ item.title }}
-                  </el-col>
-                  <el-col :span="4" class="date">
-                    {{ item.publish_time || '暂无' }}
-                  </el-col>
-                  <el-col :span="24" class="brief">
-                    {{ item.titlejj || '暂无' }}
-                  </el-col>
-                </el-col>
-              </el-col>
+            <el-col :span="12" class="right">
+              <work :workList="workList"></work>
             </el-col>
           </el-col>
           <el-col :span="24" class="two">
-            <el-image :src="cenImg"></el-image>
+            <el-image :src="jlhd"></el-image>
           </el-col>
-          <el-col :span="24" class="three common">
-            <el-col :span="12" class="left">
-              <el-col :span="24" class="top">
-                <el-col :span="2" class="topImg">
-                  <el-image :src="txtImg"></el-image>
-                </el-col>
-                <el-col :span="22" class="topTxt">
-                  <span>嘉宾访谈</span>
-                  <span>guidance</span>
-                  <span @click="$router.push({ path: '/technical/list', query: { type: '3', column_name: '嘉宾访谈' } })">更多</span>
-                </el-col>
-              </el-col>
-              <el-col :span="24" class="down">
-                <el-col
-                  :span="24"
-                  class="guidanceList"
-                  v-for="(item, index) in guidanceList"
-                  :key="index"
-                  @click.native="$router.push({ path: '/technical/list', query: { type: '3', column_name: '嘉宾访谈', id: item._id } })"
-                >
-                  <el-col :span="20" class="title textOver">
-                    {{ item.title }}
-                  </el-col>
-                  <el-col :span="4" class="date">
-                    {{ item.publish_time || '暂无' }}
-                  </el-col>
-                  <el-col :span="24" class="brief">
-                    {{ item.titlejj || '暂无' }}
-                  </el-col>
-                </el-col>
-              </el-col>
-            </el-col>
-            <el-col :span="12" class="left right">
-              <el-col :span="24" class="top">
-                <el-col :span="2" class="topImg">
-                  <el-image :src="txtImg"></el-image>
-                </el-col>
-                <el-col :span="22" class="topTxt">
-                  <span>项目路演</span>
-                  <span>roadshow</span>
-                  <span @click="$router.push({ path: '/technical/list', query: { type: '4', column_name: '项目路演' } })">更多</span>
-                </el-col>
-              </el-col>
-              <el-col :span="24" class="down">
-                <el-col
-                  :span="24"
-                  class="roadshowList"
-                  v-for="(item, index) in roadshowList"
-                  :key="index"
-                  @click.native="$router.push({ path: '/technical/list', query: { type: '4', column_name: '项目路演', id: item._id } })"
-                >
-                  <el-col :span="4" class="date">
-                    <span>{{ item.publish_time || '暂无' }}</span>
-                  </el-col>
-                  <el-col :span="20" class="title textOver">
-                    {{ item.title }}
-                  </el-col>
-                  <el-col :span="24" class="brief">
-                    {{ item.titlejj || '暂无' }}
-                  </el-col>
-                </el-col>
-              </el-col>
-            </el-col>
+          <el-col :span="24" class="thr">
+            <gzcy :list="gzcyList" @show="show"></gzcy>
           </el-col>
         </div>
       </el-col>
     </el-row>
+    <el-dialog title="展会服务" :visible.sync="zhfwdialog" width="50%" :before-close="handleClose">
+      <zhfw></zhfw>
+    </el-dialog>
+    <el-dialog title="在线咨询" :visible.sync="zxzxdialog" width="30%" :before-close="handleClose">
+      <zxzx></zxzx>
+    </el-dialog>
+    <el-dialog title="建言献策" :visible.sync="jyxcdialog" width="30%" :before-close="handleClose">
+      <jyxc @handleClose="handleClose"></jyxc>
+    </el-dialog>
+    <el-dialog title="网上调查" :visible.sync="wsdcdialog" width="30%" :before-close="handleClose">
+      <wsdc @handleClose="handleClose"></wsdc>
+    </el-dialog>
+    <el-dialog title="举报邮箱" :visible.sync="jbyxdialog" width="30%" :before-close="handleClose">
+      <jbyx></jbyx>
+    </el-dialog>
   </div>
 </template>
 
 <script>
+import question from './index/question.vue';
+import work from './index/work.vue';
+// 公众参与
+import gzcy from './parts/gzcy.vue';
+//展会服务
+import zhfw from './gzcy/zhfw.vue';
+//在线咨询
+import zxzx from './gzcy/zxzx.vue';
+// 建言献策
+import jyxc from './gzcy/jyxc.vue';
+// 网上调查
+import wsdc from './gzcy/wsdc.vue';
+// 举报邮箱
+import jbyx from './gzcy/jbyx.vue';
 import { mapState, createNamespacedHelpers } from 'vuex';
 const { mapActions: column } = createNamespacedHelpers('column');
 const { mapActions: news } = createNamespacedHelpers('news');
-const { mapActions: newsguidance } = createNamespacedHelpers('newsguidance');
-const { mapActions: newsroadshow } = createNamespacedHelpers('newsroadshow');
-import _ from 'lodash';
 export default {
   metaInfo() {
     return { title: this.$route.meta.title };
   },
   name: 'index',
   props: {},
-  components: {},
+  components: { question, work, gzcy, zhfw, zxzx, jyxc, wsdc, jbyx },
   data: function() {
     return {
-      // 中间图片
-      cenImg: require('@/assets/live/main3.png'),
-      // 模块头部图片
-      txtImg: require('@/assets/live/square_big.png'),
-      // 专家问诊
-      expertList: [],
-      // 行业研究
-      industryList: [],
-      // 嘉宾访谈
-      guidanceList: [],
-      // 项目路演
-      roadshowList: [],
+      jlhd: require('@a/center/jlhd.png'),
+      // 公众参与
+      gzcyList: [
+        {
+          url: require('@a/zhfw.png'),
+          title: '展会服务',
+        },
+        {
+          url: require('@a/fb.png'),
+          title: '我要发布',
+        },
+        {
+          url: require('@a/zxzx.png'),
+          title: '在线咨询',
+        },
+        {
+          url: require('@a/jy.png'),
+          title: '建言献策',
+        },
+        {
+          url: require('@a/wsdc.png'),
+          title: '网上调查',
+        },
+        {
+          url: require('@a/lbyx.png'),
+          title: '举报邮箱',
+        },
+      ],
+      // 展会服务
+      zhfwdialog: false,
+      // 在线咨询
+      zxzxdialog: false,
+      // 建言献策
+      jyxcdialog: false,
+      // 网上调查
+      wsdcdialog: false,
+      // 举报邮箱
+      jbyxdialog: false,
       // 栏目列表
       columnList: [],
+      // 调查问卷
+      questionList: [],
+      // 行业研究
+      workList: [],
     };
   },
   async created() {
@@ -178,8 +117,6 @@ export default {
   methods: {
     ...column({ columnQuery: 'query' }),
     ...news({ newsQuery: 'query' }),
-    ...newsguidance({ danceQuery: 'query' }),
-    ...newsroadshow({ adshowQuery: 'query' }),
     async search({ skip = 0, limit = 5, ...info } = {}) {
       //查询栏目
       let res = await this.columnQuery({ ...info });
@@ -187,33 +124,51 @@ export default {
         this.$set(this, `columnList`, res.data);
         this.searchList();
       }
-      // 嘉宾访谈
-      res = await this.danceQuery({ skip, limit, ...info });
-      if (this.$checkRes(res)) {
-        this.$set(this, `guidanceList`, res.data);
-      }
-      // 项目路演
-      res = await this.adshowQuery({ skip, limit, ...info });
-      if (this.$checkRes(res)) {
-        this.$set(this, `roadshowList`, res.data);
-      }
     },
     //查询列表
     async searchList({ skip = 0, limit = 5, ...info } = {}) {
       for (const i of this.columnList) {
-        if (i.name == '专家问诊') {
+        if (i.name == '调查问卷') {
           const res = await this.newsQuery({ skip, limit, column_id: i._id });
           if (this.$checkRes(res)) {
-            this.$set(this, `expertList`, res.data);
+            this.$set(this, `questionList`, res.data);
           }
         } else if (i.name == '行业研究') {
           const res = await this.newsQuery({ skip, limit, column_id: i._id });
           if (this.$checkRes(res)) {
-            this.$set(this, `industryList`, res.data);
+            this.$set(this, `workList`, res.data);
           }
         }
       }
     },
+    show(data) {
+      if (data.title == '展会服务') {
+        this.zhfwdialog = true;
+      } else if (data.title == '我要发布') {
+        this.$router.push({ path: '/technical/product' });
+      } else if (data.title == '建言献策') {
+        this.jyxcdialog = true;
+      } else if (data.title == '在线咨询') {
+        this.zxzxdialog = true;
+      } else if (data.title == '网上调查') {
+        this.wsdcdialog = true;
+      } else if (data.title == '举报邮箱') {
+        this.jbyxdialog = true;
+      }
+    },
+    // 公共关闭
+    handleClose() {
+      // 展会服务
+      this.zhfwdialog = false;
+      // 在线咨询
+      this.zxzxdialog = false;
+      // 建言献策
+      this.jyxcdialog = false;
+      // 网上调查
+      this.wsdcdialog = false;
+      // 举报邮箱
+      this.jbyxdialog = false;
+    },
   },
   computed: {
     ...mapState(['user']),
@@ -224,212 +179,38 @@ export default {
 
 <style lang="less" scoped>
 .main {
-  background: #f9f9f98f;
   padding: 15px 0;
   .one {
-    margin: 0 0 15px 0;
-    .expertList {
-      border-bottom: 1px dashed #000;
-      padding: 10px 0;
-      .date {
-        text-align: center;
-        span {
-          background: #044b79;
-          padding: 2px 5px 4px 5px;
-          font-size: 14px;
-          border-radius: 5px;
-          font-weight: bold;
-          color: #fff;
-        }
-      }
-      .title {
-        font-size: 16px;
-        font-weight: bold;
-        padding: 0 0 0 5px;
-      }
-      .brief {
-        font-size: 14px;
-        overflow: hidden;
-        text-overflow: ellipsis;
-        -webkit-line-clamp: 2;
-        word-break: break-all;
-        display: -webkit-box;
-        -webkit-box-orient: vertical;
-        padding: 5px 0 0 0;
-        height: 43px;
-      }
-    }
-    .expertList:last-child {
-      border-bottom: none;
-    }
-    .expertList:hover {
-      cursor: pointer;
-      .title {
-        color: #409eff;
-      }
-    }
-    .industryList {
-      padding: 10px 0;
-      border-bottom: 1px dashed #000;
-      .title {
-        font-size: 16px;
-        font-weight: bold;
-      }
-      .date {
-        font-size: 16px;
-        text-align: right;
-      }
-      .brief {
-        font-size: 14px;
-        overflow: hidden;
-        text-overflow: ellipsis;
-        -webkit-line-clamp: 2;
-        word-break: break-all;
-        display: -webkit-box;
-        -webkit-box-orient: vertical;
-        padding: 5px 0 0 0;
-        height: 43px;
-      }
-    }
-    .industryList:last-child {
-      border-bottom: none;
-    }
-    .industryList:hover {
-      cursor: pointer;
-      .title {
-        color: #409eff;
-      }
-    }
-  }
-  .two {
-    height: 130px;
-    margin: 0 0 15px 0;
-    .el-image {
-      width: 100%;
-      height: 130px;
-    }
-  }
-  .three {
-    .roadshowList {
-      border-bottom: 1px dashed #000;
-      padding: 10px 0;
-      .date {
-        text-align: center;
-        span {
-          background: #044b79;
-          padding: 2px 5px 4px 5px;
-          font-size: 14px;
-          border-radius: 5px;
-          font-weight: bold;
-          color: #fff;
-        }
-      }
-      .title {
-        font-size: 16px;
-        font-weight: bold;
-        padding: 0 0 0 5px;
-      }
-      .brief {
-        font-size: 14px;
-        overflow: hidden;
-        text-overflow: ellipsis;
-        -webkit-line-clamp: 2;
-        word-break: break-all;
-        display: -webkit-box;
-        -webkit-box-orient: vertical;
-        padding: 5px 0 0 0;
-        height: 43px;
-      }
-    }
-    .roadshowList:last-child {
-      border-bottom: none;
-    }
-    .roadshowList:hover {
-      cursor: pointer;
-      .title {
-        color: #409eff;
-      }
-    }
-    .guidanceList {
-      padding: 10px 0;
-      border-bottom: 1px dashed #000;
-      .title {
-        font-size: 16px;
-        font-weight: bold;
-      }
-      .date {
-        font-size: 16px;
-        text-align: right;
-      }
-      .brief {
-        font-size: 14px;
-        overflow: hidden;
-        text-overflow: ellipsis;
-        -webkit-line-clamp: 2;
-        word-break: break-all;
-        display: -webkit-box;
-        -webkit-box-orient: vertical;
-        padding: 5px 0 0 0;
-        height: 43px;
-      }
-    }
-    .guidanceList:last-child {
-      border-bottom: none;
-    }
-    .guidanceList:hover {
-      cursor: pointer;
-      .title {
-        color: #409eff;
-      }
-    }
-  }
-  .common {
+    margin: 0 0 10px 0;
     .left {
       width: 49%;
-      height: 500px;
-      margin: 0 20px 0 0;
-      background: #fff;
-      box-shadow: 0 0 5px #0370af;
-      border-radius: 10px;
+      min-height: 530px;
+      background: #ffffff;
+      padding: 15px;
+      border-radius: 20px;
+      margin: 0 24px 0 0;
+      box-shadow: 0 0 5px #409eff;
     }
     .right {
-      margin: 0;
-    }
-    .top {
-      height: 50px;
-      padding: 5px 10px;
-      .topTxt {
-        height: 45px;
-        border-bottom: 3px solid #044b79;
-        line-height: 45px;
-        padding: 0 5px;
-        span:nth-child(1) {
-          font-size: 24px;
-          font-weight: 700;
-        }
-        span:nth-child(2) {
-          padding: 0 10px;
-          text-transform: Capitalize;
-          font-size: 18px;
-          color: #92959a;
-          font-weight: 700;
-        }
-        span:nth-child(3) {
-          float: right;
-          font-size: 16px;
-          font-weight: bold;
-        }
-        span:nth-child(3):hover {
-          cursor: pointer;
-          color: #409eff;
-        }
-      }
-    }
-    .down {
-      height: 450px;
-      overflow: hidden;
-      padding: 5px 10px;
+      width: 49%;
+      min-height: 530px;
+      background: #ffffff;
+      border-radius: 20px;
+      padding: 15px;
+      box-shadow: 0 0 5px #409eff;
     }
   }
+  .two {
+    height: 140px;
+    overflow: hidden;
+    margin: 0 0 10px 0;
+  }
+  .thr {
+    overflow: hidden;
+    height: 255px;
+    box-shadow: 0 0 10px #2d64b3;
+    border-radius: 10px;
+    margin: 15px 0 0 0;
+  }
 }
 </style>

+ 118 - 0
src/views/technical/index/question.vue

@@ -0,0 +1,118 @@
+<template>
+  <div id="question">
+    <el-row>
+      <el-col :span="24" class="style">
+        <el-col :span="24" class="top">
+          <top :topInfo="topInfo" @moreBtn="moreBtn"></top>
+        </el-col>
+        <el-col :span="24" class="down">
+          <el-col
+            :span="24"
+            class="expertList"
+            v-for="(item, index) in questionList"
+            :key="index"
+            @click.native="$router.push({ path: '/technical/list', query: { type: '1', column_name: '调查问卷', id: item._id } })"
+          >
+            <el-col :span="4" class="date">
+              <span>{{ item.publish_time || '暂无' }}</span>
+            </el-col>
+            <el-col :span="20" class="title textOver">
+              {{ item.title }}
+            </el-col>
+            <el-col :span="24" class="brief">
+              {{ item.titlejj || '暂无' }}
+            </el-col>
+          </el-col>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import top from '@/layout/common/topColumn.vue';
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  name: 'question',
+  props: {
+    questionList: { type: Array },
+  },
+  components: {
+    top,
+  },
+  data: function() {
+    return {
+      topInfo: {
+        title: '调查问卷',
+        engTitle: 'question',
+      },
+    };
+  },
+  created() {},
+  methods: {
+    // 更多
+    moreBtn() {
+      this.$router.push({ path: '/technical/list', query: { type: '1', column_name: '调查问卷' } });
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+  },
+  watch: {},
+};
+</script>
+
+<style lang="less" scoped>
+.style {
+  .top {
+    height: 50px;
+  }
+  .down {
+    height: 450px;
+    position: relative;
+    .expertList {
+      border-bottom: 1px dashed #000;
+      padding: 10px 0;
+      .date {
+        text-align: center;
+        span {
+          background: #044b79;
+          padding: 2px 5px 4px 5px;
+          font-size: 14px;
+          border-radius: 5px;
+          font-weight: bold;
+          color: #fff;
+        }
+      }
+      .title {
+        font-size: 16px;
+        font-weight: bold;
+        padding: 0 0 0 5px;
+      }
+      .brief {
+        font-size: 14px;
+        overflow: hidden;
+        text-overflow: ellipsis;
+        -webkit-line-clamp: 2;
+        word-break: break-all;
+        display: -webkit-box;
+        -webkit-box-orient: vertical;
+        padding: 5px 0 0 0;
+        height: 43px;
+      }
+    }
+    .expertList:last-child {
+      border-bottom: none;
+    }
+    .expertList:hover {
+      cursor: pointer;
+      .title {
+        color: #409eff;
+      }
+    }
+  }
+}
+</style>

+ 110 - 0
src/views/technical/index/work.vue

@@ -0,0 +1,110 @@
+<template>
+  <div id="work">
+    <el-row>
+      <el-col :span="24" class="style">
+        <el-col :span="24" class="top">
+          <top :topInfo="topInfo" @moreBtn="moreBtn"></top>
+        </el-col>
+        <el-col :span="24" class="down">
+          <el-col
+            :span="24"
+            class="industryList"
+            v-for="(item, index) in workList"
+            :key="index"
+            @click.native="$router.push({ path: '/technical/list', query: { type: '2', column_name: '行业研究', id: item._id } })"
+          >
+            <el-col :span="20" class="title textOver">
+              {{ item.title }}
+            </el-col>
+            <el-col :span="4" class="date">
+              {{ item.publish_time || '暂无' }}
+            </el-col>
+            <el-col :span="24" class="brief">
+              {{ item.titlejj || '暂无' }}
+            </el-col>
+          </el-col>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import top from '@/layout/common/topColumn.vue';
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  name: 'work',
+  props: {
+    workList: { type: Array },
+  },
+  components: {
+    top,
+  },
+  data: function() {
+    return {
+      topInfo: {
+        title: '行业研究',
+        engTitle: 'work',
+      },
+    };
+  },
+  created() {},
+  methods: {
+    // 更多
+    moreBtn() {
+      this.$router.push({ path: '/technical/list', query: { type: '2', column_name: '行业研究' } });
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+  },
+  watch: {},
+};
+</script>
+
+<style lang="less" scoped>
+.style {
+  .top {
+    height: 50px;
+  }
+  .down {
+    height: 450px;
+    position: relative;
+    .industryList {
+      padding: 10px 0;
+      border-bottom: 1px dashed #000;
+      .title {
+        font-size: 16px;
+        font-weight: bold;
+      }
+      .date {
+        font-size: 16px;
+        text-align: right;
+      }
+      .brief {
+        font-size: 14px;
+        overflow: hidden;
+        text-overflow: ellipsis;
+        -webkit-line-clamp: 2;
+        word-break: break-all;
+        display: -webkit-box;
+        -webkit-box-orient: vertical;
+        padding: 5px 0 0 0;
+        height: 43px;
+      }
+    }
+    .industryList:last-child {
+      border-bottom: none;
+    }
+    .industryList:hover {
+      cursor: pointer;
+      .title {
+        color: #409eff;
+      }
+    }
+  }
+}
+</style>

+ 10 - 72
src/views/technical/list.vue

@@ -12,21 +12,15 @@
           </el-col>
           <el-col :span="18" class="listInfo">
             <span v-if="display == 'list'">
-              <span v-if="column_name == '专家问诊'">
+              <span v-if="column_name == '调查问卷'">
                 <exports :zhuantiList="zhuantiList" :total="zhuantiTotal" :menuName="column_name" @clickDetail="clickDetail"></exports>
               </span>
               <span v-else-if="column_name == '行业研究'">
                 <industry :industryList="industryList" :total="industryTotal" :menuName="column_name" @clickDetail="clickDetail"></industry>
               </span>
-              <span v-else-if="column_name == '嘉宾访谈'">
-                <guidance :guidanceList="guidanceList" :total="guidanceTotal" :menuName="column_name" @clickDetail="clickDetail"></guidance>
-              </span>
-              <span v-else-if="column_name == '项目路演'">
-                <roadshow :roadshowList="roadshowList" :total="roadshowTotal" :menuName="column_name" @clickDetail="clickDetail"></roadshow>
-              </span>
             </span>
             <span v-else>
-              <span v-if="column_name == '专家问诊'">
+              <span v-if="column_name == '调查问卷'">
                 <el-col :span="24" style="text-align:right;">
                   <el-button type="primary" size="mini" @click="display = 'list'">返回</el-button>
                 </el-col>
@@ -42,22 +36,6 @@
                   <inddetail :detailinfo="inddetail"></inddetail>
                 </el-col>
               </span>
-              <span v-else-if="column_name == '嘉宾访谈'">
-                <el-col :span="24" style="text-align:right;">
-                  <el-button type="primary" size="mini" @click="display = 'list'">返回</el-button>
-                </el-col>
-                <el-col :span="24">
-                  <guidetail :detailinfo="guidetail"></guidetail>
-                </el-col>
-              </span>
-              <span v-else-if="column_name == '项目路演'">
-                <el-col :span="24" style="text-align:right;">
-                  <el-button type="primary" size="mini" @click="display = 'list'">返回</el-button>
-                </el-col>
-                <el-col :span="24">
-                  <roadetail :detailinfo="roadetail"></roadetail>
-                </el-col>
-              </span>
             </span>
           </el-col>
         </div>
@@ -71,13 +49,9 @@ import _ from 'lodash';
 // 列表
 import exports from './list/export.vue';
 import industry from './list/industry.vue';
-import guidance from './list/guidance.vue';
-import roadshow from './list/roadshow.vue';
 // 详情
 import expdetail from './detail/expdetail.vue';
 import inddetail from './detail/inddetail.vue';
-import guidetail from './detail/guidetail.vue';
-import roadetail from './detail/roadetail.vue';
 
 import { mapState, createNamespacedHelpers } from 'vuex';
 const { mapActions: column } = createNamespacedHelpers('column');
@@ -90,47 +64,33 @@ export default {
   components: {
     exports,
     industry,
-    guidance,
-    roadshow,
     expdetail,
     inddetail,
-    guidetail,
-    roadetail,
   },
   data: function() {
     return {
       squareImage: require('@/assets/live/square_big.png'),
       // 菜单
-      menuList: [{ name: '专家问诊' }, { name: '行业研究' }, { name: '嘉宾访谈' }, { name: '项目路演' }],
+      menuList: [{ name: '调查问卷' }, { name: '行业研究' }],
       menuIndex: '0',
       menuColor: 'rgb(254, 149, 14)',
       // 右侧显示
       // list:列表,detail:详情
       display: 'list',
       // 右侧头部栏目
-      column_name: '专家问诊',
-      // 专家问诊,行业研究栏目
+      column_name: '调查问卷',
+      // 调查问卷,行业研究栏目
       columnLists: [],
-      // 专家列表
+      // 调查问卷
       zhuantiList: [],
       zhuantiTotal: 0,
       // 行业研究
       industryList: [],
       industryTotal: 0,
-      // 嘉宾访谈
-      guidanceList: [],
-      guidanceTotal: 0,
-      // 项目路演
-      roadshowList: [],
-      roadshowTotal: 0,
-      // 专家详情
+      // 调查问卷
       expdetail: {},
       // 行业研究
       inddetail: {},
-      // 嘉宾访谈
-      guidetail: {},
-      // 项目路演
-      roadetail: {},
     };
   },
   async created() {
@@ -171,8 +131,8 @@ export default {
     },
     // 查看列表
     async searchInfo({ skip = 0, columnName, name, ...info } = {}) {
-      if (columnName == '专家问诊') {
-        let column = this.columnLists.find(i => i.name == '专家问诊');
+      if (columnName == '调查问卷') {
+        let column = this.columnLists.find(i => i.name == '调查问卷');
         const res = await this.newsList({ column_id: column._id });
         if (this.$checkRes(res)) {
           this.$set(this, `zhuantiList`, res.data);
@@ -185,23 +145,11 @@ export default {
           this.$set(this, `industryList`, res.data);
           this.$set(this, `industryTotal`, res.total);
         }
-      } else if (columnName == '嘉宾访谈') {
-        let res = await this.danceQuery({ column_name: '嘉宾访谈' });
-        if (this.$checkRes(res)) {
-          this.$set(this, `guidanceList`, res.data);
-          this.$set(this, `guidanceTotal`, res.total);
-        }
-      } else if (columnName == '项目路演') {
-        let res = await this.adshowQuery({ column_name: '项目路演' });
-        if (this.$checkRes(res)) {
-          this.$set(this, `roadshowList`, res.data);
-          this.$set(this, `roadshowTotal`, res.total);
-        }
       }
     },
     // 查看详情
     async searchDetail(columnName, id) {
-      if (columnName == '专家问诊') {
+      if (columnName == '调查问卷') {
         let res = await this.newsFetch(id);
         if (this.$checkRes(res)) {
           this.$set(this, `expdetail`, res.data);
@@ -211,16 +159,6 @@ export default {
         if (this.$checkRes(res)) {
           this.$set(this, `inddetail`, res.data);
         }
-      } else if (columnName == '嘉宾访谈') {
-        let res = await this.danceFetch(id);
-        if (this.$checkRes(res)) {
-          this.$set(this, `guidetail`, res.data);
-        }
-      } else if (columnName == '项目路演') {
-        let res = await this.adshowFetch(id);
-        if (this.$checkRes(res)) {
-          this.$set(this, `roadetail`, res.data);
-        }
       }
     },
     // 点击查看详情

+ 1 - 1
src/views/technical/list/export.vue

@@ -63,7 +63,7 @@ export default {
     },
     // 详情
     clickDetail(id) {
-      this.$emit('clickDetail', { columnName: '专家问诊', id: id });
+      this.$emit('clickDetail', { columnName: '调查问卷', id: id });
     },
   },
   watch: {

+ 0 - 133
src/views/technical/list/guidance.vue

@@ -1,133 +0,0 @@
-<template>
-  <div id="guidance">
-    <el-row>
-      <el-col :span="24" class="main">
-        <el-col :span="24" class="leftTop">
-          <span>|</span> <span>{{ menuName }}</span>
-        </el-col>
-        <el-col :span="24" class="list">
-          <el-col class="infoRightList" :span="24" v-for="(item, index) in list" :key="index" @click.native="clickDetail(item.id)">
-            <el-col :span="20" class="title textOver">
-              {{ item.title }}
-            </el-col>
-            <el-col :span="4" class="date">
-              {{ item.publish_time || '暂无' }}
-            </el-col>
-          </el-col>
-        </el-col>
-        <el-col :span="24" class="page">
-          <el-pagination
-            @current-change="handleCurrentChange"
-            :current-page="currentPage"
-            layout="total, prev, pager, next, jumper"
-            :total="total"
-            :page-size="pageSize"
-          >
-          </el-pagination>
-        </el-col>
-      </el-col>
-    </el-row>
-  </div>
-</template>
-
-<script>
-import { mapState, createNamespacedHelpers } from 'vuex';
-export default {
-  name: 'guidance',
-  props: {
-    guidanceList: { type: Array },
-    total: { type: Number },
-    menuName: null,
-  },
-  components: {},
-  data: function() {
-    return {
-      currentPage: 1, //默认数据1
-      pageSize: 10, //每页显示数据数量
-      origin: [], //分割数据
-      list: [], //显示数据列表
-    };
-  },
-  created() {},
-  methods: {
-    searchPage(page = 1) {
-      this.$set(this, `list`, this.origin[page - 1]);
-    },
-    handleCurrentChange(currentPage) {
-      this.searchPage(currentPage);
-    },
-    // 详情
-    clickDetail(id) {
-      this.$emit('clickDetail', { columnName: '嘉宾访谈', id: id });
-    },
-  },
-  watch: {
-    guidanceList: {
-      immediate: true,
-      deep: true,
-      handler(val) {
-        if (val && val.length > 0) this.$set(this, `origin`, _.chunk(val, this.pageSize));
-        this.searchPage();
-      },
-    },
-  },
-  computed: {
-    ...mapState(['user']),
-  },
-  metaInfo() {
-    return { title: this.$route.meta.title };
-  },
-};
-</script>
-
-<style lang="less" scoped>
-.main {
-  .leftTop {
-    font-size: 18px;
-    width: 98%;
-    height: 41px;
-    line-height: 35px;
-    border-bottom: 1px solid #e5e5e5;
-    position: relative;
-    bottom: 1px;
-    margin: 10px;
-    font-weight: 600;
-    color: #22529a;
-  }
-  .list {
-    height: 455px;
-    overflow: hidden;
-    height: 455px;
-    overflow: hidden;
-    padding: 0 10px;
-    .infoRightList {
-      padding: 10px 0;
-      .title {
-        font-size: 18px;
-        font-weight: bold;
-      }
-      .date {
-        font-size: 18px;
-        text-align: right;
-      }
-    }
-    .infoRightList:nth-child(5) {
-      border-bottom: 1px dashed #ccc;
-      padding: 10px 0 17px 0;
-    }
-    .infoRightList:nth-child(6) {
-      padding: 15px 0 10px 0;
-    }
-    .infoRightList:hover {
-      cursor: pointer;
-      .title {
-        color: #409eff;
-      }
-    }
-  }
-}
-.page {
-  text-align: center;
-  padding: 15px 0;
-}
-</style>

+ 0 - 156
src/views/technical/list/roadshow.vue

@@ -1,156 +0,0 @@
-<template>
-  <div id="roadshow">
-    <el-row>
-      <el-col :span="24" class="main">
-        <el-col :span="24" class="leftTop">
-          <span>|</span> <span>{{ menuName }}</span>
-        </el-col>
-        <el-col :span="24" class="list">
-          <el-col class="infoLeftList" :span="24" v-for="(item, index) in list" :key="index" @click.native="clickDetail(item.id)">
-            <el-col :span="4" class="date">
-              <span>{{ item.publish_time || '暂无' }}</span>
-            </el-col>
-            <el-col :span="20" class="info">
-              <el-col :span="24" class="title textOver">
-                {{ item.title }}
-              </el-col>
-              <el-col :span="24" class="brief">
-                {{ item.titlejj || '暂无' }}
-              </el-col>
-            </el-col>
-          </el-col>
-        </el-col>
-        <el-col :span="24" class="page">
-          <el-pagination
-            @current-change="handleCurrentChange"
-            :current-page="currentPage"
-            layout="total, prev, pager, next, jumper"
-            :total="total"
-            :page-size="pageSize"
-          >
-          </el-pagination>
-        </el-col>
-      </el-col>
-    </el-row>
-  </div>
-</template>
-
-<script>
-import { mapState, createNamespacedHelpers } from 'vuex';
-export default {
-  name: 'roadshow',
-  props: {
-    roadshowList: { type: Array },
-    total: { type: Number },
-    menuName: null,
-  },
-  components: {},
-  data: function() {
-    return {
-      currentPage: 1, //默认数据1
-      pageSize: 5, //每页显示数据数量
-      origin: [], //分割数据
-      list: [], //显示数据列表
-    };
-  },
-  created() {},
-  methods: {
-    searchPage(page = 1) {
-      this.$set(this, `list`, this.origin[page - 1]);
-    },
-    handleCurrentChange(currentPage) {
-      this.searchPage(currentPage);
-    },
-    // 详情
-    clickDetail(id) {
-      this.$emit('clickDetail', { columnName: '项目路演', id: id });
-    },
-  },
-  watch: {
-    roadshowList: {
-      immediate: true,
-      deep: true,
-      handler(val) {
-        if (val && val.length > 0) this.$set(this, `origin`, _.chunk(val, this.pageSize));
-        this.searchPage();
-      },
-    },
-  },
-  computed: {
-    ...mapState(['user']),
-  },
-  metaInfo() {
-    return { title: this.$route.meta.title };
-  },
-};
-</script>
-
-<style lang="less" scoped>
-.main {
-  .leftTop {
-    font-size: 18px;
-    width: 96%;
-    height: 41px;
-    line-height: 35px;
-    border-bottom: 1px solid #e5e5e5;
-    position: relative;
-    bottom: 1px;
-    margin: 10px;
-    font-weight: 600;
-    color: #22529a;
-  }
-  .list {
-    height: 455px;
-    overflow: hidden;
-    .infoLeftList {
-      width: 97%;
-      padding: 9px 0;
-      border-bottom: 1px dashed #ccc;
-      .date {
-        text-align: center;
-        margin: 6px 0 0 0;
-        span {
-          background-color: #22529a;
-          color: #fff;
-          font-size: 18px;
-          border-radius: 5px;
-          padding: 3px 7px;
-        }
-      }
-      .info {
-        .title {
-          font-size: 18px;
-          font-weight: bold;
-          padding: 5px 0 0 0;
-        }
-        .brief {
-          font-size: 14px;
-          overflow: hidden;
-          text-overflow: ellipsis;
-          -webkit-line-clamp: 2;
-          word-break: break-all;
-          display: -webkit-box;
-          -webkit-box-orient: vertical;
-          padding: 5px 0 0 0;
-          height: 43px;
-        }
-      }
-    }
-    .infoLeftList:last-child {
-      border-bottom: none;
-    }
-    .infoLeftList:hover {
-      cursor: pointer;
-      .info {
-        .title {
-          color: #409eff;
-        }
-      }
-    }
-  }
-}
-.page {
-  text-align: center;
-  padding: 15px 0;
-}
-</style>

src/views/dynamic/parts/gzcy.vue → src/views/technical/parts/gzcy.vue


src/views/dynamic/product.vue → src/views/technical/product.vue


+ 1 - 1
src/views/vipCenter/dynamicInfo/index.vue

@@ -2,7 +2,7 @@
   <div id="index">
     <el-row>
       <el-col :span="24">
-        <el-col :span="24" class="leftTop"> <span>|</span> <span>动态监测</span> </el-col>
+        <el-col :span="24" class="leftTop"> <span>|</span> <span>数据动态</span> </el-col>
         <el-col :span="24" class="info">
           <el-tabs v-model="activeName" type="card">
             <el-tab-pane label="正在洽谈" name="first">

+ 1 - 1
src/views/vipCenter/index.vue

@@ -51,7 +51,7 @@ export default {
     foot,
     basicInfo, //绑定微信
     statisInfo, //统计报表
-    dynamicInfo, //动态监测
+    dynamicInfo, //数据动态
   },
   data: function() {
     return {};