瀏覽代碼

Merge branch 'master' of http://git.cc-lotus.info/live/web-live

lrf402788946 3 年之前
父節點
當前提交
8430723937

+ 1 - 1
public/home.html

@@ -145,7 +145,7 @@
           })
         },
         noticeBtn(){
-          if (this.info.status=='1') {
+          if (this.info.status=='0') {
             window.location.href = `/platlive/achieveLive/detail?id=${this.info.id}`
           }else{
             alert(`展会尚未开启,展会开始时间:${this.info.start_time}!`)

+ 12 - 4
src/views/achieveLive/detail.vue

@@ -19,20 +19,20 @@
               <product-data></product-data>
             </el-col>
             <el-col :span="24" class="two_3">
-              专家
+              <expert-data></expert-data>
             </el-col>
             <!-- <el-col :span="24" class="two_4">
               <el-image :src="fourImg"> </el-image>
             </el-col> -->
             <el-col :span="24" class="two_5">
               <el-col :span="8" class="left">
-                嘉宾
+                <jiabin-data></jiabin-data>
               </el-col>
               <el-col :span="8" class="center">
-                项目
+                <xiangmu-data></xiangmu-data>
               </el-col>
               <el-col :span="8" class="right">
-                公共
+                <chat-data></chat-data>
               </el-col>
             </el-col>
           </div>
@@ -51,6 +51,10 @@ import top from './detail/top.vue';
 import videoData from './detail/videoData.vue';
 import imgtextData from './detail/imgtextData.vue';
 import productData from './detail/productData.vue';
+import expertData from './detail/expertData.vue';
+import jiabinData from './detail/jiabinData.vue';
+import xiangmuData from './detail/xiangmuData.vue';
+import chatData from './detail/chatData.vue';
 import { mapState, createNamespacedHelpers } from 'vuex';
 const { mapActions: dock } = createNamespacedHelpers('dock');
 export default {
@@ -62,6 +66,10 @@ export default {
     videoData,
     imgtextData,
     productData,
+    expertData,
+    jiabinData,
+    xiangmuData,
+    chatData,
   },
   data: function() {
     return {

+ 65 - 0
src/views/achieveLive/detail/chatData.vue

@@ -0,0 +1,65 @@
+<template>
+  <div id="chatData">
+    <el-row>
+      <el-col :span="24" class="main">
+        <el-col :span="24" class="one">
+          <el-tabs v-model="active" type="card">
+            <el-tab-pane label="公共聊天" name="first">
+              <el-col :span="24" class="first">
+                公共聊天
+              </el-col>
+            </el-tab-pane>
+          </el-tabs>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { mapState, createNamespacedHelpers } from 'vuex';
+export default {
+  name: 'chatData',
+  props: {},
+  components: {},
+  data: function() {
+    return {
+      active: 'first',
+      list: [],
+    };
+  },
+  created() {},
+  methods: {},
+  computed: {
+    ...mapState(['user']),
+    id() {
+      return this.$route.query.id;
+    },
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  watch: {
+    test: {
+      deep: true,
+      immediate: true,
+      handler(val) {},
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.main {
+  .one {
+    .first {
+      padding: 0 10px;
+      height: 410px;
+      overflow-y: auto;
+    }
+    /deep/.el-tabs__header {
+      margin: 0 0 10px 0;
+    }
+  }
+}
+</style>

+ 134 - 0
src/views/achieveLive/detail/expertData.vue

@@ -0,0 +1,134 @@
+<template>
+  <div id="expertData">
+    <el-row>
+      <el-col :span="24" class="main">
+        <el-col :span="24" class="one">
+          <el-tabs v-model="active" type="card">
+            <el-tab-pane label="专家智库" name="first">
+              <el-col :span="24" class="first">
+                <el-col :span="8" class="list" v-for="(item, index) in expertList" :key="index">
+                  <el-col :span="6" class="image">
+                    <el-image :src="item.img_path">
+                      <div slot="error" class="image-slot">
+                        <el-image :src="img_url"></el-image>
+                      </div>
+                    </el-image>
+                  </el-col>
+                  <el-col :span="18" class="text">
+                    <p class="textOver">{{ item.name }}</p>
+                    <p class="textOver">{{ item.zwzc }}</p>
+                    <p class="textOver">{{ item.company }}</p>
+                    <p>
+                      <el-button type="primary" size="mini" @click="detail(item)">详情</el-button>
+                      <el-button type="success" size="mini" @click="trans(item)">对接</el-button>
+                    </p>
+                  </el-col>
+                </el-col>
+              </el-col>
+              <el-col :span="24" class="btn">
+                <el-button type="primary" size="mini" @click="moreBtn">查看更多专家</el-button>
+              </el-col>
+            </el-tab-pane>
+          </el-tabs>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { mapState, createNamespacedHelpers } from 'vuex';
+const { mapActions: expert } = createNamespacedHelpers('expert');
+export default {
+  name: 'expertData',
+  props: {},
+  components: {},
+  data: function() {
+    return {
+      active: 'first',
+      img_url: require('@common/src/assets/live/d10_fbb1.png'),
+      expertList: [],
+    };
+  },
+  created() {
+    if (this.id) this.search();
+  },
+  methods: {
+    ...expert(['query']),
+    async search({ skip = 0, limit = 9, ...info } = {}) {
+      let res = await this.query({ skip, limit, ...info });
+      if (this.$checkRes(res)) {
+        this.$set(this, `expertList`, res.data);
+      }
+    },
+    // 查看详情
+    detail(data) {},
+    // 对接
+    trans(data) {},
+    // 查看更多项目
+    moreBtn() {},
+  },
+  computed: {
+    ...mapState(['user']),
+    id() {
+      return this.$route.query.id;
+    },
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  watch: {
+    test: {
+      deep: true,
+      immediate: true,
+      handler(val) {},
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.main {
+  .one {
+    .first {
+      height: 465px;
+      overflow: hidden;
+      padding: 0 10px;
+      .list {
+        width: 32.6%;
+        height: 140px;
+        box-shadow: 0 0 5px #ccc;
+        border-radius: 5px;
+        margin: 5px 10px 10px 0;
+        padding: 10px;
+        .image {
+          height: 120px;
+          overflow: hidden;
+          border: 1px dashed #ccc;
+          .el-image {
+            height: 120px;
+            overflow: hidden;
+          }
+        }
+        .text {
+          padding: 0 0 0 10px;
+          p {
+            font-size: 16px;
+            margin: 0 0 8px 0;
+          }
+          p:nth-child(1) {
+            font-size: 18px;
+            font-weight: bold;
+          }
+        }
+      }
+      .list:nth-child(3n) {
+        margin: 5px 0 10px 0;
+      }
+    }
+    .btn {
+      text-align: center;
+    }
+  }
+}
+</style>

+ 128 - 0
src/views/achieveLive/detail/jiabinData.vue

@@ -0,0 +1,128 @@
+<template>
+  <div id="jiabinData">
+    <el-row>
+      <el-col :span="24" class="main">
+        <el-col :span="24" class="one">
+          <el-tabs v-model="active" type="card">
+            <el-tab-pane label="嘉宾访谈" name="first">
+              <el-col :span="24" class="first">
+                <el-col :span="24" class="list" v-for="(item, index) in list" :key="index" @click.native="detail(item)">
+                  <el-col :span="6" class="image">
+                    <el-image :src="item.picture">
+                      <div slot="error" class="image-slot">
+                        <p>暂无图片</p>
+                      </div>
+                    </el-image>
+                  </el-col>
+                  <el-col :span="18" class="text">
+                    <p class="textOver">{{ item.title }}</p>
+                    <p class="textOver">更新时间:{{ item.publish_time }}</p>
+                    <p class="textOver">信息来源:{{ item.origin }}</p>
+                  </el-col>
+                </el-col>
+              </el-col>
+            </el-tab-pane>
+          </el-tabs>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { mapState, createNamespacedHelpers } from 'vuex';
+const { mapActions: interview } = createNamespacedHelpers('interview');
+export default {
+  name: 'jiabinData',
+  props: {},
+  components: {},
+  data: function() {
+    return {
+      active: 'first',
+      list: [],
+    };
+  },
+  created() {
+    if (this.id) this.search();
+  },
+  methods: {
+    ...interview(['query']),
+    async search({ skip = 0, limit = 10, ...info } = {}) {
+      let res = await this.query({ skip, dock_id: this.id, ...info });
+      if (this.$checkRes(res)) this.$set(this, `list`, res.data);
+    },
+    // 详情
+    detail(data) {},
+  },
+  computed: {
+    ...mapState(['user']),
+    id() {
+      return this.$route.query.id;
+    },
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  watch: {
+    test: {
+      deep: true,
+      immediate: true,
+      handler(val) {},
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.main {
+  .one {
+    .first {
+      padding: 0 10px;
+      height: 450px;
+      overflow-y: auto;
+      .list {
+        border: 1px solid #ccc;
+        border-radius: 5px;
+        margin: 0 0 10px 0;
+        padding: 10px;
+        .image {
+          height: 80px;
+          overflow: hidden;
+          border: 1px dashed #ccc;
+          text-align: center;
+          .el-image {
+            height: 80px;
+          }
+          p {
+            line-height: 80px;
+          }
+        }
+        .text {
+          padding: 0 0 0 10px;
+          p {
+            font-size: 14px;
+            margin: 0 0 5px 0;
+          }
+          p:nth-child(1) {
+            font-size: 16px;
+            font-weight: bold;
+            padding: 3px 0;
+          }
+        }
+      }
+      .list:hover {
+        cursor: pointer;
+        border: 1px solid #409eff;
+        .text {
+          p:nth-child(1) {
+            color: #409eff;
+          }
+        }
+      }
+    }
+    /deep/.el-tabs__header {
+      margin: 0 0 10px 0;
+    }
+  }
+}
+</style>

+ 163 - 5
src/views/achieveLive/detail/productData.vue

@@ -4,8 +4,42 @@
       <el-col :span="24" class="main">
         <el-col :span="24" class="one">
           <el-tabs v-model="activeName" type="card">
-            <el-tab-pane label="技术成果" name="first">技术成果</el-tab-pane>
-            <el-tab-pane label="科技需求" name="second">科技需求</el-tab-pane>
+            <el-tab-pane label="技术成果" name="first">
+              <el-col :span="24" class="first">
+                <el-col :span="5" class="achieveList" v-for="(item, index) in achieveList" :key="index">
+                  <el-col :span="24" class="top">
+                    <p class="textOver">{{ item.name || '暂无' }}</p>
+                    <p>{{ item.achievebrief || '暂无' }}</p>
+                    <p class="textOver">领域:{{ item.field || '暂无' }}</p>
+                    <p class="textOver">联系人{{ item.contacts || '暂无' }}</p>
+                  </el-col>
+                  <el-col :span="24" class="down">
+                    <el-button size="mini" type="primary" @click="detail(item, '1')">详情</el-button>
+                    <el-button size="mini" type="success" @click="trans(item, '1')">对接</el-button>
+                  </el-col>
+                </el-col>
+              </el-col>
+              <el-col :span="24" class="btn">
+                <el-button type="primary" size="mini" @click="moreBtn('1')">查看更多项目</el-button>
+              </el-col>
+            </el-tab-pane>
+            <el-tab-pane label="科技需求" name="second">
+              <el-col :span="24" class="second">
+                <el-col :span="5" class="techolList" v-for="(item, index) in techolList" :key="index">
+                  <el-col :span="24" class="top">
+                    <p>{{ item.name || '暂无' }}</p>
+                    <p class="textOver">领域:{{ item.field || '暂无' }}</p>
+                  </el-col>
+                  <el-col :span="24" class="down">
+                    <el-button size="mini" type="primary" @click="detail(item, '0')">详情</el-button>
+                    <el-button size="mini" type="success" @click="trans(item, '0')">对接</el-button>
+                  </el-col>
+                </el-col>
+              </el-col>
+              <el-col :span="24" class="btn">
+                <el-button type="primary" size="mini" @click="moreBtn('0')">查看更多项目</el-button>
+              </el-col>
+            </el-tab-pane>
           </el-tabs>
         </el-col>
       </el-col>
@@ -15,6 +49,7 @@
 
 <script>
 import { mapState, createNamespacedHelpers } from 'vuex';
+const { mapActions: statistics } = createNamespacedHelpers('statistics');
 export default {
   name: 'productData',
   props: {},
@@ -22,10 +57,33 @@ export default {
   data: function() {
     return {
       activeName: 'first',
+      achieveList: [],
+      techolList: [],
     };
   },
-  created() {},
-  methods: {},
+  created() {
+    if (this.id) this.search();
+  },
+  methods: {
+    ...statistics(['dockProduct']),
+    async search({ skip = 0, limit = 10, ...info } = {}) {
+      info.dock_id = this.id;
+      let res = await this.dockProduct({ skip, limit, type: '0', ...info });
+      if (this.$checkRes(res)) {
+        this.$set(this, `techolList`, res.data);
+      }
+      res = await this.dockProduct({ skip, limit, type: '1', ...info });
+      if (this.$checkRes(res)) {
+        this.$set(this, `achieveList`, res.data);
+      }
+    },
+    // 查看详情
+    detail(data, type) {},
+    // 对接
+    trans(data, type) {},
+    // 查看更多项目
+    moreBtn(type) {},
+  },
   computed: {
     ...mapState(['user']),
     id() {
@@ -45,4 +103,104 @@ export default {
 };
 </script>
 
-<style lang="less" scoped></style>
+<style lang="less" scoped>
+.main {
+  .one {
+    .btn {
+      text-align: center;
+    }
+    .first {
+      padding: 0 10px;
+      height: 530px;
+      overflow: hidden;
+      .achieveList {
+        width: 18.9%;
+        height: 250px;
+        background: url('~@common/src/assets/achieve.png');
+        background-size: 100% 100%;
+        background-repeat: no-repeat;
+        margin: 0 15px 15px 0;
+        padding: 22px 22px 8px 22px;
+        border-radius: 5px;
+        .top {
+          height: 190px;
+          overflow: hidden;
+          p:nth-child(1) {
+            font-size: 18px;
+            font-weight: bold;
+            padding: 5px 0;
+          }
+          p:nth-child(2) {
+            font-size: 12px;
+            overflow: hidden;
+            text-overflow: ellipsis;
+            -webkit-line-clamp: 6;
+            word-break: break-all;
+            display: -webkit-box;
+            -webkit-box-orient: vertical;
+            padding: 0 5px;
+            height: 105px;
+            line-height: 17px;
+          }
+          p:nth-child(3) {
+            font-size: 14px;
+            padding: 4px 0 0 0;
+          }
+          p:nth-child(4) {
+            font-size: 14px;
+            padding: 4px 0 0 0;
+          }
+        }
+        .down {
+          text-align: center;
+        }
+      }
+      .achieveList:nth-child(5n) {
+        margin: 0 0 15px 0;
+      }
+    }
+    .second {
+      padding: 0 10px;
+      height: 530px;
+      overflow: hidden;
+      .techolList {
+        width: 18.9%;
+        height: 250px;
+        border: 1px solid #ccc;
+        border-radius: 5px;
+        margin: 0 15px 15px 0;
+        padding: 22px 22px 8px 22px;
+        .top {
+          height: 190px;
+          overflow: hidden;
+          p:nth-child(1) {
+            height: 145px;
+            text-align: center;
+            font-size: 18px;
+            margin: 0 0 10px 0;
+            overflow: hidden;
+            text-overflow: ellipsis;
+            -webkit-line-clamp: 6;
+            word-break: break-all;
+            display: -webkit-box;
+            -webkit-box-orient: vertical;
+          }
+          p:nth-child(2) {
+            text-align: center;
+            font-size: 16px;
+          }
+        }
+        .down {
+          text-align: center;
+        }
+      }
+      .techolList:nth-child(5n) {
+        margin: 0 0 15px 0;
+      }
+    }
+    /deep/.el-tabs__header {
+      margin: 0 0 10px 0;
+    }
+  }
+}
+</style>

+ 129 - 0
src/views/achieveLive/detail/xiangmuData.vue

@@ -0,0 +1,129 @@
+<template>
+  <div id="xiangmuData">
+    <el-row>
+      <el-col :span="24" class="main">
+        <el-col :span="24" class="one">
+          <el-tabs v-model="active" type="card">
+            <el-tab-pane label="项目路演" name="first">
+              <el-col :span="24" class="first">
+                <el-col :span="24" class="list" v-for="(item, index) in list" :key="index" @click.native="detail(item)">
+                  <el-col :span="24" class="title textOver">
+                    {{ item.title }}
+                  </el-col>
+                  <el-col :span="24" class="other">
+                    <el-col :span="24" class="other_info">
+                      更新时间:<span> {{ item.publish_time || '暂无' }}</span>
+                    </el-col>
+                    <el-col :span="24" class="other_info">
+                      信息来源:<span> {{ item.origin || '暂无' }}</span>
+                    </el-col>
+                  </el-col>
+                  <el-col :span="24" class="brief">
+                    {{ item.brief }}
+                  </el-col>
+                </el-col>
+              </el-col>
+            </el-tab-pane>
+          </el-tabs>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { mapState, createNamespacedHelpers } from 'vuex';
+const { mapActions: roadShow } = createNamespacedHelpers('roadShow');
+export default {
+  name: 'xiangmuData',
+  props: {},
+  components: {},
+  data: function() {
+    return {
+      active: 'first',
+      list: [],
+    };
+  },
+  created() {
+    if (this.id) this.search();
+  },
+  methods: {
+    ...roadShow(['query']),
+    async search({ skip = 0, limit = 10, ...info } = {}) {
+      let res = await this.query({ skip, dock_id: this.id, ...info });
+      if (this.$checkRes(res)) this.$set(this, `list`, res.data);
+    },
+    // 查看详情
+    detail(data) {},
+  },
+  computed: {
+    ...mapState(['user']),
+    id() {
+      return this.$route.query.id;
+    },
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  watch: {
+    test: {
+      deep: true,
+      immediate: true,
+      handler(val) {},
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.main {
+  .one {
+    .first {
+      padding: 0 10px;
+      height: 450px;
+      overflow-y: auto;
+      .list {
+        border: 1px solid #ccc;
+        padding: 8px;
+        border-radius: 5px;
+        margin: 0 0 10px 0;
+        .title {
+          font-size: 16px;
+          margin: 0 0 3px 0;
+          font-weight: bold;
+        }
+        .other {
+          .other_info {
+            font-size: 14px;
+            margin: 0 0 2px 0;
+            font-size: 14px;
+            color: #666;
+            span {
+              color: #000;
+            }
+          }
+        }
+        .brief {
+          overflow: hidden;
+          text-overflow: ellipsis;
+          -webkit-line-clamp: 1;
+          word-break: break-all;
+          display: -webkit-box;
+          -webkit-box-orient: vertical;
+          font-size: 14px;
+        }
+      }
+      .list:hover {
+        cursor: pointer;
+        border: 1px solid #409eff;
+        .title {
+          color: #409eff;
+        }
+      }
+    }
+    /deep/.el-tabs__header {
+      margin: 0 0 10px 0;
+    }
+  }
+}
+</style>