wuhongyu 5 년 전
부모
커밋
00cc49f576
6개의 변경된 파일521개의 추가작업 그리고 15개의 파일을 삭제
  1. 7 4
      src/layout/live/head.vue
  2. 21 0
      src/router/index.js
  3. 27 9
      src/views/direct.vue
  4. 2 2
      src/views/hall/dock/dockDetail.vue
  5. 213 0
      src/views/hall/dock/zhuanjiaDetail.vue
  6. 251 0
      src/views/technical/zhibolist.vue

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

@@ -36,7 +36,7 @@
                 <a @click="turnTo('home')" target="">首页</a>
               </li> -->
               <li class="">
-               <a href="/static/liveIndex.html" target="_blank">直播大厅</a>
+                <a @click="zhibo()" target="_blank">直播大厅</a>
               </li>
               <li :class="isTab('market') ? 'active' : ''">
                 <a @click="turnTo('market')" target="">科技超市</a>
@@ -72,11 +72,12 @@ export default {
   },
   created() {},
   methods: {
-  
-
     fuwu() {
       this.$router.push({ path: '/live/service' });
     },
+    zhibo() {
+      this.$router.push({ path: '/technical/zhibolist' });
+    },
     turnTo(type) {
       if (type == 'index') {
         console.log('首页未出');
@@ -88,7 +89,9 @@ export default {
       else return this.$route.path.includes(`/live/${type}`);
     },
   },
-  computed: {},
+  computed: {
+    ...mapState(['user']),
+  },
 };
 </script>
 

+ 21 - 0
src/router/index.js

@@ -38,12 +38,26 @@ const live = [
         meta: { title: '技术培训', subSite: true },
         component: () => import('../views/technical/index.vue'),
       },
+      {
+        path: '/technical/zhibolist',
+        name: 'technical_lzhibolist',
+        meta: { title: '直播大厅列表', subSite: true },
+        component: () => import('../views/technical/zhibolist.vue'),
+      },
       {
         path: '/technical/list',
         name: 'technical_list',
         meta: { title: '技术培训列表', subSite: true },
         component: () => import('../views/technical/list.vue'),
       },
+
+      {
+        path: '/live/liveApply',
+        meta: { title: '项目申请', subSite: true },
+        name: 'live_apply',
+        component: () => import('../views/hall/liveApply.vue'),
+      },
+
       {
         path: '/kejipeixun/index',
         name: 'kejipeixun_index',
@@ -100,6 +114,13 @@ const live = [
     name: 'dock_Detail',
     component: () => import('../views/hall/dock/dockDetail.vue'),
   },
+  {
+    path: '/live/hall/dock/zhuanjiaDetail',
+    meta: { title: '专家信息详情', subSite: true },
+    name: 'dock_Detail',
+    component: () => import('../views/hall/dock/zhuanjiaDetail.vue'),
+  },
+
   {
     path: '/live/hall/dock/dockInfo',
     meta: { title: '对接信息查看', subSite: true },

+ 27 - 9
src/views/direct.vue

@@ -101,7 +101,7 @@
                                 <el-col :span="24" class="info"> 简介:{{ policyInfo.introduction }} </el-col>
 
                                 <el-col :span="24" class="info">
-                                  <el-button type="primary" class="duijie">对接</el-button>
+                                  <el-button type="primary" class="duijie" @click="technology(policyInfo.id)">对接</el-button>
                                 </el-col>
                               </el-col>
                             </el-col>
@@ -109,7 +109,7 @@
                             <span class="title" slot="reference" @mouseover="hover(item)"> {{ item.name }}</span>
                           </el-popover>
 
-                          <span><el-button class="duijie">对接</el-button></span>
+                          <span><el-button class="duijie" @click="technologyBtn(item.id)">对接</el-button></span>
                         </p>
 
                         <p class="newp">
@@ -155,7 +155,7 @@
                               <el-col :span="24" class="info"> 简介:{{ policyInfo.introduction }} </el-col>
 
                               <el-col :span="24" class="info">
-                                <el-button type="primary" class="duijie">对接</el-button>
+                                <el-button type="primary" class="duijie" @click="technology(policyInfo.id)">对接</el-button>
                               </el-col>
                             </el-col>
                           </el-col>
@@ -201,7 +201,7 @@
                               <el-col :span="24" class="info"> 简介:{{ policyInfo.introduction }} </el-col>
 
                               <el-col :span="24" class="info">
-                                <el-button type="primary" class="duijie">对接</el-button>
+                                <el-button type="primary" class="duijie" @click="technology(policyInfo.id)">对接</el-button>
                               </el-col>
                             </el-col>
                           </el-col>
@@ -211,7 +211,7 @@
                       <div class="serviceDown">
                         <el-image :src="item.image[0].url"></el-image>
                         <p>
-                          <button>立即咨询</button>
+                          <button @click="technologyBtn(item.id)">立即咨询</button>
                           <span class="type1">服务类型:</span>
                           <span class="type2">{{ item.product_type_name }}</span>
                         </p>
@@ -244,6 +244,9 @@
                               <el-col :span="24" class="info"> 手机号:{{ policyInfo.phone }} </el-col>
                               <el-col :span="24" class="info"> 业务工作简介:{{ policyInfo.job_profile }} </el-col>
                               <el-col :span="24" class="info"> 备注:{{ policyInfo.remark }} </el-col>
+                              <el-col :span="24" class="info">
+                                <el-button type="primary" class="duijie" @click="duizhuanjia(policyInfo.id)">对接</el-button>
+                              </el-col>
                             </el-col>
                             <span class="title" slot="reference" @mouseover="zhuanjia(item)"> {{ item.name }}</span>
                           </el-popover>
@@ -451,7 +454,6 @@ export default {
   }),
   created() {
     this.searchInfo();
-    this.searchDock();
   },
   methods: {
     ...mapProduct({ mapProductQuery: 'query' }),
@@ -474,13 +476,12 @@ export default {
       console.log(res);
       if (this.$checkRes(res)) this.$set(this, `expertList`, res.data);
     },
-    async searchDock() {},
+
     onclickjs(item) {
       console.log(item);
-
       this.$set(this, `policyInfo`, item);
     },
-
+    //划过展示
     hover: function(item) {
       this.$set(this, `policyInfo`, item);
       console.log(item);
@@ -491,6 +492,23 @@ export default {
       this.dialogVisible = true;
       this.$set(this, `policyInfo`, item);
     },
+
+    //对接
+    technologyBtn(id) {
+      console.log(id);
+      this.$router.push({ path: '/live/hall/dock/dockDetail', query: { id: id } });
+    },
+    technology(id) {
+      this.$router.push({ path: '/live/hall/dock/dockDetail', query: { id: id } });
+    },
+    duizhuanjia(id) {
+      this.$router.push({ path: '/live/hall/dock/zhuanjiaDetail', query: { id: id } });
+    },
+
+    //直播中心
+    clickBtn() {
+      this.$router.push({ path: '/live/liveList' });
+    },
     handleClose(done) {
       this.$confirm('确认关闭?')
         .then(_ => {

+ 2 - 2
src/views/hall/dock/dockDetail.vue

@@ -28,10 +28,10 @@
                     </p>
                     <p>
                       <span>产品类型:{{ productInfo.product_type_name }}</span>
-                      <span>研发阶段:{{ productInfo.phase }}</span>
+                      <span>研发阶段:{{ productInfo.phase == 1 ? '阶段成果' : '最终成果' }}</span>
                     </p>
                     <p>
-                      <span>交易方式:{{ productInfo.business }}</span>
+                      <span>{{ productInfo.business == '0' ? '公用' : productInfo.business == '1' ? '转让' : '竞价' }}</span>
                       <span>交易价格:{{ productInfo.price }}/{{ productInfo.priceunit }}</span>
                     </p>
                   </div>

+ 213 - 0
src/views/hall/dock/zhuanjiaDetail.vue

@@ -0,0 +1,213 @@
+<template>
+  <div id="dockDetail">
+    <el-row>
+      <el-col :span="24" class="style">
+        <el-image :src="beijingPic"></el-image>
+        <el-col :span="24" class="info">
+          <div class="w_1200">
+            <el-col :span="24" class="top">
+              <p>吉林省计算中心对接直播大厅</p>
+              <p>主办方:吉林省计算中心</p>
+            </el-col>
+            <el-col :span="24" class="main">
+              <el-col :span="6" class="btn">
+                <el-col :span="24">
+                  <el-button type="primary" icon="el-icon-tickets" @click="btnInfo">项目信息</el-button>
+                </el-col>
+                <el-col :span="24">
+                  <el-button type="danger" icon="el-icon-phone-outline" @click="btnPhone">线下对接</el-button>
+                </el-col>
+              </el-col>
+              <el-col :span="18" class="mainInfo">
+                <el-col :span="24" v-if="display === '1'">
+                  <p class="name textOver">{{ productInfo.name }}</p>
+                  <div class="brief">
+                    <p>
+                      <span>职务:{{ productInfo.position }}</span>
+                      <span>从事领域:{{ productInfo.field }}</span>
+                    </p>
+
+                    <p>
+                      <span>学术成就:{{ productInfo.achievement }}</span>
+                      <span>毕业院校:{{ productInfo.school }}</span>
+                    </p>
+                  </div>
+                  <p class="intro">
+                    <span><i class="el-icon-date"></i>业务工作简介</span>
+                    <span>{{ productInfo.job_profile }} </span>
+                  </p>
+                </el-col>
+                <el-col :span="24" v-if="display === '2'" class="contact">
+                  <p>
+                    专家姓名:<span style="color:red;">{{ productInfo.name }}</span>
+                  </p>
+                  <p>
+                    专家电话:<span style="color:red;">{{ productInfo.phone }}</span>
+                  </p>
+                </el-col>
+              </el-col>
+            </el-col>
+          </div>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { mapState, createNamespacedHelpers } from 'vuex';
+const { mapActions: talentExperts } = createNamespacedHelpers('talentExperts');
+export default {
+  name: 'dockDetail',
+  props: {},
+  components: {},
+  data: () => ({
+    beijingPic: require('@a/live/top_3.png'),
+    display: '1',
+    productInfo: {},
+  }),
+  created() {
+    if (this.$route.query.id) {
+      this.searchInfo();
+    }
+  },
+  methods: {
+    ...talentExperts(['fetch']),
+
+    async searchInfo() {
+      let res = await this.fetch(this.$route.query.id);
+      console.log(res.data);
+
+      if (res.errcode === 0) {
+        this.$set(this, `productInfo`, res.data);
+      }
+    },
+    // 项目信息
+    btnInfo() {
+      this.display = '1';
+    },
+    // 线下对接
+    btnPhone() {
+      this.display = '2';
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+    pageTitle() {
+      return `${this.$route.meta.title}`;
+    },
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.w_1200 {
+  width: 1200px;
+  margin: 0 auto;
+}
+p {
+  padding: 0;
+  margin: 0;
+}
+.style {
+  height: 100vh;
+}
+.style .info {
+  position: relative;
+  top: -450px;
+}
+.style .top {
+  position: relative;
+  top: 0;
+  width: 100%;
+  text-align: center;
+  z-index: 999;
+  height: 230px;
+  margin: 0 0 20px 0;
+}
+.style .top p:first-child {
+  font-size: 50px;
+  color: #fff;
+}
+.style .top p:last-child {
+  font-size: 30px;
+  color: #fff;
+  position: absolute;
+  width: 100%;
+  top: 170px;
+}
+.style .main {
+  height: 670px;
+  border: 1px solid red;
+  background: #fff;
+  overflow: hidden;
+  padding: 30px 20px;
+}
+.main .btn div {
+  padding: 30px 0 0px 0;
+}
+/deep/.main .btn .el-button {
+  float: left;
+  margin: 0 40px;
+  width: 70%;
+}
+.main .mainInfo {
+  border: 1px solid red;
+  height: 610px;
+}
+.mainInfo .name {
+  font-size: 25px;
+  text-align: center;
+  height: 90px;
+  line-height: 90px;
+  border-bottom: 2px solid red;
+  margin: 0 60px;
+}
+.mainInfo .brief {
+  float: left;
+  padding: 0 88px 15px 88px;
+  color: red;
+  margin: 15px 20px 0 19px;
+  width: 75%;
+  border-bottom: 1px dashed red;
+}
+.mainInfo .brief p {
+  float: left;
+  width: 100%;
+  padding: 0 0 15px 0;
+}
+.mainInfo .brief p span:first-child {
+  float: left;
+  width: 50%;
+}
+.mainInfo .intro {
+  float: left;
+  padding: 20px;
+  width: 95%;
+}
+.mainInfo .intro span:first-child {
+  display: inline-block;
+  width: 100%;
+  font-size: 20px;
+  color: red;
+}
+.mainInfo .intro span:last-child {
+  display: inline-block;
+  line-height: 25px;
+  color: #666;
+  text-indent: 2rem;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  -webkit-line-clamp: 13;
+  word-break: break-all;
+  display: -webkit-box;
+  -webkit-box-orient: vertical;
+}
+.mainInfo .contact {
+  padding: 20px;
+  font-size: 18px;
+}
+</style>

+ 251 - 0
src/views/technical/zhibolist.vue

@@ -0,0 +1,251 @@
+<template>
+  <div id="list">
+    <el-col :span="24" class="main">
+      <el-col :span="24" class="info">
+        <el-col>
+          <el-col :span="24" class="leftTop">
+            <span>|</span> <span>{{ menuName }}</span>
+          </el-col>
+          <el-col class="infoRightList" :span="24" v-for="(item, index) in hangyeList" :key="index">
+            <p>
+              <span class="textOver" @click="clickhangye(item.id)">{{ item.title }}</span
+              ><span class="textOver">{{ item.start_time }}</span>
+
+              <el-button type="primary" class="duijie">进入对接会</el-button>
+              <el-button type="primary" class="duijie" @click="apply(item.id)">申请对接会</el-button>
+            </p>
+          </el-col>
+        </el-col>
+
+        <el-col class="page">
+          <el-pagination
+            background
+            @current-change="handleCurrentChange"
+            :current-page.sync="currentPage"
+            :page-size="pageSize"
+            layout="total,prev, pager, next, jumper"
+            :total="pageTotal"
+          >
+          </el-pagination>
+        </el-col>
+      </el-col>
+    </el-col>
+  </div>
+</template>
+
+<script>
+import _ from 'lodash';
+import { mapState, createNamespacedHelpers } from 'vuex';
+const { mapActions: dock } = createNamespacedHelpers('dock');
+export default {
+  name: 'list',
+  props: {},
+  components: {},
+  data: () => ({
+    squareImage: require('@/assets/live/square_big.png'),
+    menuIndex: '0',
+    menuName: '直播列表',
+    menuColor: 'rgb(254, 149, 14)',
+    currentPage: 1,
+    pageTotal: 0,
+    pageSize: 10,
+    limit: 10,
+    hangyeList: [],
+  }),
+  created() {
+    this.searchList();
+  },
+  computed: {},
+  methods: {
+    ...dock({ dockQuery: 'query' }),
+    async searchList({ skip = 0, limit = 10, ...info } = {}) {
+      console.log('ccc');
+
+      let res = await this.dockQuery({});
+      this.$set(this, `pageTotal`, res.total);
+      console.log(res.data);
+
+      if (res.errcode === 0) {
+        this.$set(this, `hangyeList`, res.data);
+      }
+    },
+
+    async initList({ name, skip = 0, limit = 10, ...info } = {}) {
+      this.$set(this, `pageTotal`, res.total);
+    },
+    apply(id) {
+      this.$router.push({ path: '/live/liveApply', query: { id: id } });
+    },
+    handleCurrentChange(val) {
+      console.log(`当前页: ${val}`);
+      this.limit = 5;
+      this.initList({ skip: (val - 1) * this.limit, limit: this.limit });
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.main {
+  width: 80%;
+  margin: 0 auto;
+  float: none;
+}
+.menu {
+  float: left;
+  height: 450px;
+  width: 20%;
+  background: no-repeat bottom right;
+  background-image: url(../../assets/live/menu_back.jpg);
+  margin: 30px 0;
+  padding: 10px 0 0 10px;
+  box-sizing: border-box;
+  box-shadow: 0 0 10px #bbbaba;
+}
+.menu .el-image {
+  width: 30px;
+  display: inline-table;
+  margin: 10px 5px;
+}
+.menu span {
+  font-size: 24px;
+  color: #92959a;
+  font-weight: 600;
+  margin-left: 3px;
+  position: relative;
+  top: 10px;
+}
+.menuList p {
+  line-height: 60px;
+  font-size: 18px;
+  cursor: pointer;
+  border-bottom: 1px solid #2d64b3;
+  color: #044b79;
+  font-weight: 600;
+}
+.info {
+  width: 100%;
+  float: right;
+  margin: 30px 0 30px 2px;
+  height: 585px;
+  box-shadow: 0 0 10px #2d64b3;
+  overflow: hidden;
+  right: 0px;
+  background: #ffffff;
+}
+.leftInfo {
+  height: 500px;
+  overflow: hidden;
+}
+.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;
+}
+.infoLeftList {
+  float: left;
+  width: 95%;
+  border-bottom: 1px dashed #ccc;
+  padding: 10px 0 10px 10px;
+  height: 87px;
+  margin: 0 0 0 5px;
+}
+.infoLeftList:hover p:last-child span:first-child {
+  -webkit-transform: translateY(-3px);
+  -ms-transform: translateY(-3px);
+  transform: translateY(-3px);
+  -webkit-box-shadow: 0 0 6px #999;
+  box-shadow: 0 0 6px #999;
+  -webkit-transition: all 0.5s ease-out;
+  transition: all 0.5s ease-out;
+  color: #005293;
+  cursor: pointer;
+}
+.infoLeftList p:first-child {
+  float: left;
+  width: 20%;
+  font-size: 15px;
+  background: #044b79;
+  text-align: center;
+  color: #fff;
+  font-weight: bold;
+  padding: 4px 0px;
+  margin: 0 0 0 5px;
+}
+.infoLeftList p:last-child {
+  float: right;
+  width: 70%;
+  padding: 0 0 0 10px;
+}
+.infoLeftList p:last-child span:first-child {
+  float: left;
+  width: 90%;
+  font-size: 18px;
+}
+.infoLeftList p:last-child span:last-child {
+  float: left;
+  width: 90%;
+  font-size: 16px;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  -webkit-line-clamp: 2;
+  word-break: break-all;
+  display: -webkit-box;
+  -webkit-box-orient: vertical;
+  margin: 5px 0 0 0;
+  color: #666;
+}
+.page {
+  text-align: center;
+  margin: 10px 0;
+}
+.infoRightList {
+  float: left;
+  width: 95%;
+  padding: 7px 0;
+  margin: 0 0 0 5px;
+}
+
+.infoRightList:hover p span:first-child {
+  -webkit-transform: translateY(-3px);
+  -ms-transform: translateY(-3px);
+  transform: translateY(-3px);
+  -webkit-box-shadow: 0 0 6px #999;
+  box-shadow: 0 0 6px #999;
+  -webkit-transition: all 0.5s ease-out;
+  transition: all 0.5s ease-out;
+  color: #005293;
+  cursor: pointer;
+}
+.infoRightList p {
+  font-size: 18px;
+}
+.infoRightList p span:first-child {
+  display: inline-block;
+  width: 60%;
+  margin: 0 20px 0 10px;
+}
+.infoRightList p span:last-child {
+  display: inline-block;
+  width: 15%;
+  text-align: center;
+  font-size: 16px;
+}
+.duijie {
+  color: #fff;
+  background-color: #ff8500;
+  text-align: center;
+  padding: 10px 15px 10px 15px;
+  margin: 10px 0 0 10px;
+}
+.duijie:hover {
+  background-color: #0279d5;
+}
+</style>