guhongwei преди 4 години
родител
ревизия
bec78f06d4

+ 3 - 3
public/home.html

@@ -52,8 +52,8 @@
       <p class='title'>中科在线(长春)</p>
    </div>
    <div class='right'>
-      <!-- <button onclick="window.open('http://free.liaoningdoupo.com/platlive/webLogin')">平台登录</button>
-      <button onclick="window.open('http://free.liaoningdoupo.com/platlive/adminLogin')">管理登录</button> -->
+      <button onclick="window.open('http://free.liaoningdoupo.com/platlive/webLogin')">平台登录</button>
+      <button onclick="window.open('http://free.liaoningdoupo.com/platlive/adminLogin')">管理登录</button>
    </div>
   </div>
   <img class="sci-wheel" src="static/home/images/sci.gif" alt="">
@@ -76,7 +76,7 @@
     </a>
   </div>
   <!-- 浮窗 -->
-  <div id="floatingDiv" style="position:absolute;left:50px;top:60px;z-index: 9999;display:none">
+  <div id="floatingDiv" style="position:absolute;left:50px;top:60px;z-index: 9999;">
     <div id="a" onClick="javascript:this.parentNode.style.display='none';">关闭窗口</div>
     <div class='floating' onclick="noticeBtn()">
       <p id="floatingid" class='floatingInfo'></p>

+ 2 - 4
src/layout/live/head.vue

@@ -13,12 +13,10 @@
           <el-col :span="12" class="right">
             <span v-if="user.uid || user.suid" class="name"> {{ user.name || user.adminuser }}</span>
             <span v-if="user.uid">
-              <span
-                v-if="user.role == '2' || user.role == '3' || user.role == '4' || user.role == '5' || user.role == '6' || user.role == '7' || user.role == '8'"
-              >
+              <span v-if="user.role == '3' || user.role == '4' || user.role == '5' || user.role == '6' || user.role == '7' || user.role == '8'">
                 <el-button @click="tuCenter" type="info" size="mini">个人中心</el-button>
-                <el-button @click="zhuxiao" type="danger" size="mini">退出登录</el-button>
               </span>
+              <el-button @click="zhuxiao" type="danger" size="mini">退出登录</el-button>
             </span>
             <el-button v-else type="primary" size="mini" @click="webLogin">平台登录</el-button>
             <span v-if="user.uid">

+ 133 - 0
src/layout/vipCenter/menuInfo.vue

@@ -0,0 +1,133 @@
+<template>
+  <div id="menuInfo">
+    <el-row>
+      <el-col :span="24">
+        <el-col :span="24" class="top">
+          <el-image :src="topUrl"></el-image>
+          <span>个人中心</span>
+        </el-col>
+        <el-col :span="24">
+          <el-menu :default-active="num" @select="selectMenu" text-color="#999" active-text-color="#044b79">
+            <!-- <el-menu-item :index="index + ''" v-for="(item, index) in menu" :key="index">
+              <template slot="title">
+                <i class="el-icon-tickets"></i>
+                <span>{{ item.title }}</span>
+              </template>
+            </el-menu-item> -->
+            <el-menu-item index="1">
+              <template slot="title">
+                <i class="el-icon-notebook-1"></i>
+                <span>绑定微信</span>
+              </template>
+            </el-menu-item>
+            <el-menu-item index="2">
+              <template slot="title">
+                <i class="el-icon-notebook-1"></i>
+                <span>统计报表</span>
+              </template>
+            </el-menu-item>
+            <el-menu-item index="3">
+              <template slot="title">
+                <i class="el-icon-video-camera"></i>
+                <span>动态监测</span>
+              </template>
+            </el-menu-item>
+            <el-menu-item index="4">
+              <template slot="title">
+                <i class="el-icon-circle-close"></i>
+                <span>返回</span>
+              </template>
+            </el-menu-item>
+            <el-menu-item index="5">
+              <template slot="title">
+                <i class="el-icon-circle-close"></i>
+                <span>退出登录</span>
+              </template>
+            </el-menu-item>
+          </el-menu>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { mapState, createNamespacedHelpers } from 'vuex';
+const { mapActions: login } = createNamespacedHelpers('login');
+const { mapActions: personalChat } = createNamespacedHelpers('personalchat');
+const { mapActions: dock } = createNamespacedHelpers('dock');
+export default {
+  name: 'menuInfo',
+  props: {},
+  components: {},
+  data: function() {
+    return {
+      topUrl: require('@/assets/live/square_big.png'),
+      num: 1,
+      haveMsg: false,
+    };
+  },
+  created() {
+    this.$set(this, `num`, this.$route.query.num);
+  },
+  mounted() {},
+  methods: {
+    ...login({ logout: 'logout', transactiondtetle: 'delete' }),
+    ...dock(['fetch', 'query', 'delete', 'update', 'fetch']),
+    // 菜单跳转
+    async selectMenu(key) {
+      if (key == '5') {
+        this.logout();
+        this.$message({
+          message: '退出登录成功',
+          type: 'success',
+        });
+        this.$router.push({ path: '/webLogin' });
+      } else if (key == '4') {
+        let res = await this.fetch(this.user.remark);
+        this.$router.push({ path: '/hall/direct', query: { id: res.data.id, title: res.data.title } });
+      } else {
+        this.$router.push({ path: '/vipCenter/index', query: { num: key } });
+      }
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+    pageTitle() {
+      return `${this.$route.meta.title}`;
+    },
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.top {
+  height: 50px;
+  line-height: 50px;
+  text-align: center;
+  border-bottom: 1px solid #2d64b3;
+  .el-image {
+    float: left;
+    padding: 10px 40px;
+    width: 30px;
+    height: 30px;
+  }
+  span {
+    font-size: 24px;
+    color: #92959a;
+    font-weight: 600;
+    float: left;
+    text-align: left;
+  }
+}
+/deep/.el-menu-item {
+  font-weight: bold;
+  font-size: 20px;
+  text-align: center;
+  border-bottom: 1px solid #2d64b3;
+  margin: 0 20px;
+}
+</style>

+ 13 - 1
src/router/index.js

@@ -1,6 +1,6 @@
 import Vue from 'vue';
 import VueRouter from 'vue-router';
-import checkLogin from '@common/router/before';
+import checkLogin from './before';
 Vue.use(VueRouter);
 const live = [
   {
@@ -120,6 +120,12 @@ const live = [
     meta: { title: '直播大厅', subSite: true },
     component: () => import('../views/hall/direct.vue'),
   },
+  {
+    path: '/hall/productList/technologyList',
+    name: 'live_technologyList',
+    meta: { title: '产品列表', subSite: true },
+    component: () => import('../views/hall/productList/technologyList.vue'),
+  },
   {
     path: '/hall/productList/expertList',
     name: 'productList_expertList',
@@ -156,6 +162,12 @@ const live = [
     meta: { title: '个人中心', subSite: true },
     component: () => import('../views/superAdminCenter/index.vue'),
   },
+  // 展会vip-个人中心
+  {
+    path: '/vipCenter/index',
+    meta: { title: '个人中心', subSite: true },
+    component: () => import('../views/vipCenter/index.vue'),
+  },
 ];
 const routes = [...live];
 

+ 5 - 6
src/views/superAdminCenter/vip/index.vue

@@ -91,12 +91,11 @@ export default {
   methods: {
     ...users(['create', 'query', 'update', 'delete']),
     async search({ skip = 0, limit = 10, ...info } = {}) {
-      if (this.user.code.length == 3) {
-        const res = await this.query({ skip, limit, role: '2', ...info });
-        if (this.$checkRes(res)) {
-          this.$set(this, `list`, res.data);
-          this.$set(this, `total`, res.total);
-        }
+      const res = await this.query({ skip, limit, role: '2', ...info });
+      if (this.$checkRes(res)) {
+        console.log(res);
+        this.$set(this, `list`, res.data);
+        this.$set(this, `total`, res.total);
       }
     },
     // 添加

+ 63 - 0
src/views/vipCenter/basicInfo/index.vue

@@ -0,0 +1,63 @@
+<template>
+  <div id="index">
+    <el-row>
+      <el-col :span="24" class="leftTop"> <span>|</span> <span>绑定微信</span> </el-col>
+      <el-col :span="24" class="info">
+        <img :src="qc" />
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { mapState, createNamespacedHelpers } from 'vuex';
+import QRCode from 'qrcode';
+export default {
+  name: 'index',
+  props: {},
+  components: {},
+  data: function() {
+    return {
+      qc: '',
+    };
+  },
+  created() {},
+  methods: {
+    async creatQrCode() {
+      let url = `http://free.liaoningdoupo.com/api/auth/wxchat?redirect_uri=http://free.liaoningdoupo.com/platmobile/bind/&type=1&uid=${this.user.uid}`; // 需要转换为二维码的内容
+      let el = document.getElementById('qrCodeUrl');
+      this.qc = await QRCode.toDataURL(url, { height: 200, width: 200 });
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+    pageTitle() {
+      return `${this.$route.meta.title}`;
+    },
+  },
+  mounted() {
+    this.creatQrCode();
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.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;
+}
+.info {
+  padding: 0 40px 0 10px;
+}
+</style>

+ 100 - 0
src/views/vipCenter/dynamicInfo/index.vue

@@ -0,0 +1,100 @@
+<template>
+  <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="info">
+          <el-tabs v-model="activeName" type="card">
+            <el-tab-pane label="正在洽谈" name="first">
+              <zzqt :zzqtList="zzqtList" :total="zzqtTotal"></zzqt>
+            </el-tab-pane>
+            <el-tab-pane label="达成意向" name="second">
+              <dcyx :dcyxList="dcyxList" :total="dxyxTotal"></dcyx>
+            </el-tab-pane>
+            <el-tab-pane label="交易完成" name="third">
+              <jywc :jywcList="jywcList" :total="jywcTotal"></jywc>
+            </el-tab-pane>
+          </el-tabs>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { mapState, createNamespacedHelpers } from 'vuex';
+import zzqt from './parts/zzqt.vue';
+import dcyx from './parts/dcyx.vue';
+import jywc from './parts/jywc.vue';
+const { mapActions: transactions } = createNamespacedHelpers('transaction');
+const { mapActions: dock } = createNamespacedHelpers('dock');
+export default {
+  name: 'index',
+  props: {},
+  components: {
+    zzqt,
+    dcyx,
+    jywc,
+  },
+  data: function() {
+    return {
+      activeName: 'first',
+      dock_id: '',
+      zzqtList: [],
+      zzqtTotal: 0,
+      dcyxList: [],
+      dxyxTotal: 0,
+      jywcList: [],
+      jywcTotal: 0,
+    };
+  },
+  created() {
+    this.searchInfo();
+  },
+  methods: {
+    ...transactions({ transactionsfetch: 'fetch', transactionslist: 'query', transactiondetele: 'detele', transactionupdate: 'update' }),
+    ...dock({ dockQuery: 'query', dockFetch: 'fetch' }),
+    async searchInfo({ skip = 0, limit = 10, ...info } = {}) {
+      let res = await this.dockFetch(this.user.remark);
+      this.$set(this, `dock_id`, res.data.id);
+      let arr = await this.transactionslist({ skip, limit, dockid: this.dock_id, ...info });
+      var zzqt = arr.data.filter(item => item.status === '0');
+      var dcyx = arr.data.filter(item => item.status === '1');
+      var jywc = arr.data.filter(item => item.status === '2');
+      this.$set(this, `zzqtList`, zzqt);
+      this.$set(this, `zzqtTotal`, zzqt.length);
+      this.$set(this, `dcyxList`, dcyx);
+      this.$set(this, `dxyxTotal`, dcyx.length);
+      this.$set(this, `jywcList`, jywc);
+      this.$set(this, `jywcTotal`, jywc.length);
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+    pageTitle() {
+      return `${this.$route.meta.title}`;
+    },
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.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;
+}
+.info {
+  padding: 0 40px 0 0;
+}
+</style>

+ 79 - 0
src/views/vipCenter/dynamicInfo/parts/dcyx.vue

@@ -0,0 +1,79 @@
+<template>
+  <div id="dcyx">
+    <el-row>
+      <el-col :span="24">
+        <el-table :data="list" border style="width: 100%">
+          <el-table-column prop="product_name" label="产品名称" align="center"> </el-table-column>
+          <el-table-column prop="username" label="营销人" align="center"> </el-table-column>
+          <el-table-column prop="market_username" label="购买人" align="center"> </el-table-column>
+        </el-table>
+        <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 _ from 'lodash';
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  name: 'dcyx',
+  props: {
+    dcyxList: null,
+    total: null,
+  },
+  components: {},
+  data: function() {
+    return {
+      currentPage: 1,
+      pageSize: 10,
+      origin: [],
+      list: [],
+    };
+  },
+  created() {},
+  methods: {
+    search(page = 1) {
+      this.$set(this, `list`, this.origin[page - 1]);
+    },
+    handleCurrentChange(currentPage) {
+      this.search(currentPage);
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+    pageTitle() {
+      return `${this.$route.meta.title}`;
+    },
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  watch: {
+    dcyxList: {
+      immediate: true,
+      deep: true,
+      handler(val) {
+        if (val && val.length > 0) this.$set(this, `origin`, _.chunk(val, this.pageSize));
+        this.search();
+      },
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.page {
+  text-align: right;
+  padding: 10px 0;
+}
+</style>

+ 79 - 0
src/views/vipCenter/dynamicInfo/parts/jywc.vue

@@ -0,0 +1,79 @@
+<template>
+  <div id="jywc">
+    <el-row>
+      <el-col :span="24">
+        <el-table :data="list" border style="width: 100%">
+          <el-table-column prop="product_name" label="产品名称" align="center"> </el-table-column>
+          <el-table-column prop="username" label="营销人" align="center"> </el-table-column>
+          <el-table-column prop="market_username" label="购买人" align="center"> </el-table-column>
+        </el-table>
+        <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 _ from 'lodash';
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  name: 'jywc',
+  props: {
+    jywcList: null,
+    total: null,
+  },
+  components: {},
+  data: function() {
+    return {
+      currentPage: 1,
+      pageSize: 10,
+      origin: [],
+      list: [],
+    };
+  },
+  created() {},
+  methods: {
+    search(page = 1) {
+      this.$set(this, `list`, this.origin[page - 1]);
+    },
+    handleCurrentChange(currentPage) {
+      this.search(currentPage);
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+    pageTitle() {
+      return `${this.$route.meta.title}`;
+    },
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  watch: {
+    jywcList: {
+      immediate: true,
+      deep: true,
+      handler(val) {
+        if (val && val.length > 0) this.$set(this, `origin`, _.chunk(val, this.pageSize));
+        this.search();
+      },
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.page {
+  text-align: right;
+  padding: 10px 0;
+}
+</style>

+ 79 - 0
src/views/vipCenter/dynamicInfo/parts/zzqt.vue

@@ -0,0 +1,79 @@
+<template>
+  <div id="zzqt">
+    <el-row>
+      <el-col :span="24">
+        <el-table :data="list" border style="width: 100%">
+          <el-table-column prop="product_name" label="产品名称" align="center"> </el-table-column>
+          <el-table-column prop="username" label="营销人" align="center"> </el-table-column>
+          <el-table-column prop="market_username" label="购买人" align="center"> </el-table-column>
+        </el-table>
+        <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 _ from 'lodash';
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  name: 'zzqt',
+  props: {
+    zzqtList: null,
+    total: null,
+  },
+  components: {},
+  data: function() {
+    return {
+      currentPage: 1,
+      pageSize: 10,
+      origin: [],
+      list: [],
+    };
+  },
+  created() {},
+  methods: {
+    search(page = 1) {
+      this.$set(this, `list`, this.origin[page - 1]);
+    },
+    handleCurrentChange(currentPage) {
+      this.search(currentPage);
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+    pageTitle() {
+      return `${this.$route.meta.title}`;
+    },
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  watch: {
+    zzqtList: {
+      immediate: true,
+      deep: true,
+      handler(val) {
+        if (val && val.length > 0) this.$set(this, `origin`, _.chunk(val, this.pageSize));
+        this.search();
+      },
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.page {
+  text-align: right;
+  padding: 10px 0;
+}
+</style>

+ 98 - 0
src/views/vipCenter/index.vue

@@ -0,0 +1,98 @@
+<template>
+  <div id="index">
+    <el-row>
+      <el-col :span="24" class="info">
+        <el-col :span="24" class="top">
+          <heads></heads>
+        </el-col>
+        <el-col :span="24" class="main">
+          <div class="w_1200">
+            <el-col :span="4" class="mainMenu">
+              <menuInfo></menuInfo>
+            </el-col>
+            <el-col :span="19" class="mainMess">
+              <span v-if="num == '1'">
+                <basicInfo></basicInfo>
+              </span>
+              <span v-else-if="num == '2'">
+                <statisInfo></statisInfo>
+              </span>
+              <span v-else-if="num == '3'">
+                <dynamicInfo></dynamicInfo>
+              </span>
+              <span v-else>
+                退出登录
+              </span>
+            </el-col>
+          </div>
+        </el-col>
+        <el-col :span="24" class="foot">
+          <foot></foot>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import heads from '@/layout/userCenter/heads.vue';
+import menuInfo from '@/layout/vipCenter/menuInfo.vue';
+import foot from '@/layout/live/foot.vue';
+import basicInfo from './basicInfo/index.vue';
+import statisInfo from './statisInfo/index.vue';
+import dynamicInfo from './dynamicInfo/index.vue';
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  name: 'index',
+  props: {},
+  components: {
+    heads,
+    menuInfo,
+    foot,
+    basicInfo, //绑定微信
+    statisInfo, //统计报表
+    dynamicInfo, //动态监测
+  },
+  data: function() {
+    return {};
+  },
+  created() {},
+  methods: {},
+  computed: {
+    ...mapState(['user']),
+    num() {
+      return this.$route.query.num;
+    },
+    pageTitle() {
+      return `${this.$route.meta.title}`;
+    },
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.w_1200 {
+  width: 80%;
+  margin: 0 auto;
+}
+.info {
+  background-color: #e9edf6;
+}
+.main {
+  min-height: 600px;
+  margin: 15px 0;
+}
+.mainMenu {
+  width: 20%;
+  min-height: 600px;
+  background-color: #fff;
+}
+.mainMess {
+  float: right;
+  min-height: 600px;
+  background-color: #fff;
+}
+</style>

+ 98 - 0
src/views/vipCenter/password/index.vue

@@ -0,0 +1,98 @@
+<template>
+  <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="info">
+          <el-form :model="form" :rules="rules" ref="form" label-width="100px">
+            <el-form-item label="旧密码" prop="oldpasswd">
+              <el-input v-model="form.oldpasswd" placeholder="请输入旧密码" show-password></el-input>
+            </el-form-item>
+            <el-form-item label="新密码" prop="newpasswd">
+              <el-input v-model="form.newpasswd" placeholder="请输入新密码" show-password></el-input>
+            </el-form-item>
+            <el-form-item>
+              <el-button @click="resetForm('form')">取消</el-button>
+              <el-button type="primary" @click="submitForm('form')">提交</el-button>
+            </el-form-item>
+          </el-form>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { mapState, createNamespacedHelpers } from 'vuex';
+const { mapActions: password } = createNamespacedHelpers('password');
+const { mapActions: login } = createNamespacedHelpers('login');
+export default {
+  name: 'index',
+  props: {},
+  components: {},
+  data: function() {
+    return {
+      form: {},
+      rules: {
+        oldpasswd: [{ required: true, message: '请输入旧密码', trigger: 'blur' }],
+        newpasswd: [{ required: true, message: '请输入新密码', trigger: 'blur' }],
+      },
+    };
+  },
+  created() {},
+  methods: {
+    ...login({ logout: 'logout', transactiondtetle: 'delete' }),
+    ...password({ userFetch: 'fetch', userCreate: 'create', userUpdate: 'update' }),
+    resetForm(formName) {
+      this.$refs[formName].resetFields();
+    },
+    async submitForm(formName) {
+      this.$refs[formName].validate(async valid => {
+        if (valid) {
+          this.form.id = this.user.uid;
+          let res = await this.userUpdate(this.form);
+          if (res.errcode === 0) {
+            this.$message({
+              message: '密码修改成功',
+              type: 'success',
+            });
+            this.logout();
+            this.$router.push({ path: '/webLogin' });
+          } else {
+            this.$message.error('密码修改失败');
+          }
+        } else {
+          return false;
+        }
+      });
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+    pageTitle() {
+      return `${this.$route.meta.title}`;
+    },
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.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;
+}
+.info {
+  padding: 40px 40px 0 0;
+}
+</style>

+ 66 - 0
src/views/vipCenter/statisInfo/index.vue

@@ -0,0 +1,66 @@
+<template>
+  <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="info">
+          <el-tabs v-model="activeName" type="card">
+            <el-tab-pane label="技术需求" name="first">
+              <technology></technology>
+            </el-tab-pane>
+            <el-tab-pane label="可转化成果" name="second">
+              <achievements></achievements>
+            </el-tab-pane>
+          </el-tabs>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { mapState, createNamespacedHelpers } from 'vuex';
+import technology from './parts/technology.vue';
+import achievements from './parts/achievements.vue';
+
+export default {
+  name: 'index',
+  props: {},
+  components: {
+    technology,
+    achievements,
+  },
+  data: function() {
+    return { activeName: 'first' };
+  },
+  created() {},
+  methods: {},
+  computed: {
+    ...mapState(['user']),
+    pageTitle() {
+      return `${this.$route.meta.title}`;
+    },
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.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;
+}
+.info {
+  padding: 0 38px 0 10px;
+}
+</style>

+ 152 - 0
src/views/vipCenter/statisInfo/parts/achievements.vue

@@ -0,0 +1,152 @@
+<template>
+  <div id="column">
+    <el-row>
+      <el-col :span="24" class="info">
+        <el-col :span="24" class="list">
+          <template>
+            <el-col :span="24" class="search">
+              <el-col :span="5">
+                <el-select v-model="field" filterable clearable placeholder="请选择所属领域" @change="changeField">
+                  <el-option v-for="(item, index) in fieldList" :key="index" :value="item.name" :label="item.name"></el-option>
+                </el-select>
+              </el-col>
+              <el-col :span="12">
+                <el-radio-group v-model="radio1" @change="changeRadio">
+                  <el-radio label="0" border>是我处支持范围</el-radio>
+                  <el-radio label="1" border>不是我处支持范围</el-radio>
+                </el-radio-group>
+              </el-col>
+            </el-col>
+            <el-table :data="list" style="width: 100%" border>
+              <el-table-column type="index" label="序号" width="50" align="center"> </el-table-column>
+              <el-table-column prop="name" label="商品名称 " align="center"> </el-table-column>
+              <el-table-column prop="field" label="所属领域 " align="center"> </el-table-column>
+              <el-table-column prop="cooperation" label="合作方式 " align="center"> </el-table-column>
+              <el-table-column prop="contacts" label="联系人 " align="center"> </el-table-column>
+              <el-table-column prop="phone" label="联系电话 " align="center"> </el-table-column>
+            </el-table>
+            <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>
+          </template>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { createNamespacedHelpers, mapGetters, mapState } from 'vuex';
+const { mapActions: dock } = createNamespacedHelpers('dock');
+const { mapActions: markettype } = createNamespacedHelpers('markettype');
+import _ from 'loadsh';
+export default {
+  name: 'column',
+  props: {},
+  components: {},
+  data: () => ({
+    applyList: [], //查询数据
+    currentPage: 1, //默认数据1
+    pageSize: 10, //每页显示数据数量
+    origin: [], //分割数据
+    list: [], //显示数据列表
+    total: 0,
+    // 所属领域
+    fieldList: [],
+    field: '',
+    // 是否我处支持
+    radio1: '',
+  }),
+  created() {
+    this.search();
+    this.searchtype();
+  },
+  methods: {
+    ...dock(['query', 'delete', 'update', 'fetch']),
+    ...markettype({ markettypeList: 'query' }),
+    async search({ skip = 0, limit = 10, ...info } = {}) {
+      let res = await this.fetch(this.user.remark);
+      let arr = res.data.apply.map(item => item.goodsList);
+      arr = _.flattenDeep(arr);
+      var newArr = arr.filter(item => item.type === '1');
+      this.$set(this, `applyList`, newArr);
+      this.$set(this, `total`, newArr.length);
+    },
+    // 查询字典表
+    async searchtype() {
+      // 所属领域;
+      let res = await this.markettypeList({ category: '01' });
+      if (this.$checkRes(res)) {
+        this.$set(this, `fieldList`, res.data);
+      }
+    },
+    searchPage(page = 1) {
+      this.$set(this, `list`, this.origin[page - 1]);
+    },
+    handleCurrentChange(currentPage) {
+      this.searchPage(currentPage);
+    },
+    // 筛选技术领域
+    changeField(value) {
+      var arr = this.applyList.filter(item => item.field === value);
+      this.$set(this, `list`, arr);
+      this.$set(this, `total`, arr.length);
+    },
+    // 筛选是否是我处支持
+    changeRadio() {},
+  },
+  computed: {
+    ...mapState(['user']),
+    pageTitle() {
+      return `${this.$route.meta.title}`;
+    },
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  watch: {
+    applyList: {
+      immediate: true,
+      deep: true,
+      handler(val) {
+        if (val && val.length > 0) this.$set(this, `origin`, _.chunk(val, this.pageSize));
+        this.searchPage();
+      },
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.top {
+  padding: 15px 0;
+  border-bottom: 1px solid #cccc;
+}
+.top .topTitle {
+  padding: 0 10px;
+}
+.top .topAdd {
+  padding: 0 10px 0 0;
+  text-align: right;
+}
+.search {
+  padding: 0 0 18px 0;
+}
+.anniu {
+  padding: 0 10px 0 0;
+  /deep/.el-button {
+    margin: 0 10px;
+  }
+}
+.page {
+  padding: 20px 0;
+  text-align: center;
+}
+</style>

+ 152 - 0
src/views/vipCenter/statisInfo/parts/technology.vue

@@ -0,0 +1,152 @@
+<template>
+  <div id="column">
+    <el-row>
+      <el-col :span="24" class="info">
+        <el-col :span="24" class="list">
+          <template>
+            <el-col :span="24" class="search">
+              <el-col :span="5">
+                <el-select v-model="field" filterable clearable placeholder="请选择所属领域" @change="changeField">
+                  <el-option v-for="(item, index) in fieldList" :key="index" :value="item.name" :label="item.name"></el-option>
+                </el-select>
+              </el-col>
+              <el-col :span="12">
+                <el-radio-group v-model="radio1" @change="changeRadio">
+                  <el-radio label="0" border>是我处支持范围</el-radio>
+                  <el-radio label="1" border>不是我处支持范围</el-radio>
+                </el-radio-group>
+              </el-col>
+            </el-col>
+            <el-table :data="list" style="width: 100%" border>
+              <el-table-column type="index" label="序号" width="50" align="center"> </el-table-column>
+              <el-table-column prop="name" label="商品名称 " align="center"> </el-table-column>
+              <el-table-column prop="field" label="所属领域 " align="center"> </el-table-column>
+              <el-table-column prop="cooperation" label="合作方式 " align="center"> </el-table-column>
+              <el-table-column prop="contacts" label="联系人 " align="center"> </el-table-column>
+              <el-table-column prop="phone" label="联系电话 " align="center"> </el-table-column>
+            </el-table>
+            <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>
+          </template>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { createNamespacedHelpers, mapGetters, mapState } from 'vuex';
+const { mapActions: dock } = createNamespacedHelpers('dock');
+const { mapActions: markettype } = createNamespacedHelpers('markettype');
+import _ from 'loadsh';
+export default {
+  name: 'column',
+  props: {},
+  components: {},
+  data: () => ({
+    applyList: [], //查询数据
+    currentPage: 1, //默认数据1
+    pageSize: 10, //每页显示数据数量
+    origin: [], //分割数据
+    list: [], //显示数据列表
+    total: 0,
+    // 所属领域
+    fieldList: [],
+    field: '',
+    // 是否我处支持
+    radio1: '',
+  }),
+  created() {
+    this.search();
+    this.searchtype();
+  },
+  methods: {
+    ...dock(['query', 'delete', 'update', 'fetch']),
+    ...markettype({ markettypeList: 'query' }),
+    async search({ skip = 0, limit = 10, ...info } = {}) {
+      let res = await this.fetch(this.user.remark);
+      let arr = res.data.apply.map(item => item.goodsList);
+      arr = _.flattenDeep(arr);
+      var newArr = arr.filter(item => item.type === '0');
+      this.$set(this, `applyList`, newArr);
+      this.$set(this, `total`, newArr.length);
+    },
+    // 查询字典表
+    async searchtype() {
+      // 所属领域;
+      let res = await this.markettypeList({ category: '01' });
+      if (this.$checkRes(res)) {
+        this.$set(this, `fieldList`, res.data);
+      }
+    },
+    searchPage(page = 1) {
+      this.$set(this, `list`, this.origin[page - 1]);
+    },
+    handleCurrentChange(currentPage) {
+      this.searchPage(currentPage);
+    },
+    // 筛选技术领域
+    changeField(value) {
+      var arr = this.applyList.filter(item => item.field === value);
+      this.$set(this, `list`, arr);
+      this.$set(this, `total`, arr.length);
+    },
+    // 筛选是否是我处支持
+    changeRadio() {},
+  },
+  computed: {
+    ...mapState(['user']),
+    pageTitle() {
+      return `${this.$route.meta.title}`;
+    },
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  watch: {
+    applyList: {
+      immediate: true,
+      deep: true,
+      handler(val) {
+        if (val && val.length > 0) this.$set(this, `origin`, _.chunk(val, this.pageSize));
+        this.searchPage();
+      },
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.top {
+  padding: 15px 0;
+  border-bottom: 1px solid #cccc;
+}
+.top .topTitle {
+  padding: 0 10px;
+}
+.top .topAdd {
+  padding: 0 10px 0 0;
+  text-align: right;
+}
+.search {
+  padding: 0 0 18px 0;
+}
+.anniu {
+  padding: 0 10px 0 0;
+  /deep/.el-button {
+    margin: 0 10px;
+  }
+}
+.page {
+  padding: 20px 0;
+  text-align: center;
+}
+</style>

+ 5 - 1
src/views/webLogin.vue

@@ -33,7 +33,11 @@ export default {
     async submitnewLogin(form) {
       let res = await this.toLogin({ user: form });
       if (res.uid) {
-        this.$router.push({ path: '/userCenter/index', query: { num: '1' } });
+        if (res.role == '2') {
+          this.$router.push('/market/index');
+        } else {
+          this.$router.push({ path: '/userCenter/index', query: { num: '1' } });
+        }
       }
     },
     // 注册