guhongwei 4 年之前
父節點
當前提交
77c1fb9fa0
共有 6 個文件被更改,包括 260 次插入2 次删除
  1. 二進制
      src/assets/kjpd.png
  2. 二進制
      src/assets/train.png
  3. 7 0
      src/router/index.js
  4. 2 1
      src/views/service/register.vue
  5. 246 0
      src/views/train/detail.vue
  6. 5 1
      src/views/train/index.vue

二進制
src/assets/kjpd.png


二進制
src/assets/train.png


+ 7 - 0
src/router/index.js

@@ -77,6 +77,13 @@ const web = [
     meta: { title: '管理登录' },
     component: () => import('../views/login.vue'),
   },
+  // 宣传培训详情页
+  {
+    path: '/train/detail',
+    name: 'train_detail',
+    meta: { title: '宣传培训-详情页' },
+    component: () => import('../views/train/detail.vue'),
+  },
   {
     path: '/adminCenter/homeIndex',
     name: 'adminCenter',

+ 2 - 1
src/views/service/register.vue

@@ -66,7 +66,8 @@ export default {
     border-radius: 5px;
     border: 1px solid #ccc;
     .btn {
-      margin: 10px;
+      padding: 10px;
+      text-align: right;
     }
     .text {
       font-size: 30px;

+ 246 - 0
src/views/train/detail.vue

@@ -0,0 +1,246 @@
+<template>
+  <div id="index">
+    <el-row>
+      <el-col :span="24" class="main">
+        <div class="w_1200">
+          <el-col :span="24" class="top"> 宣传培训-{{ column_name }} </el-col>
+          <el-col :span="24" class="info">
+            <el-col :span="24" class="one">
+              <el-button type="primary" size="mini" @click="$router.push({ path: '/train/index' })">返回</el-button>
+            </el-col>
+            <el-col :span="24" class="two">
+              <el-col :span="24" class="title">
+                {{ info.title }}
+              </el-col>
+              <el-col :span="24" class="twoVideo">
+                <el-col :span="18" class="left">
+                  <video :src="video_url" controls="" controlsList="nodownload">您的浏览器不支持 video 标签。</video>
+                </el-col>
+                <el-col :span="6" class="right">
+                  <h1>视频列表</h1>
+                  <el-col :span="24" class="list">
+                    <el-col :span="24" class="videoList" v-for="(item, index) in videoList" :key="index" @click.native="show(item, index)">
+                      <el-col :span="12" class="file">
+                        <video :src="item.url" controlsList="nodownload" :poster="posterUrl">您的浏览器不支持 video 标签。</video>
+                      </el-col>
+                      <el-col :span="12" class="videoInfo">
+                        <p :style="`color:${menuIndex == index ? menuColor : ''}`">{{ item.name }}</p>
+                      </el-col>
+                    </el-col>
+                  </el-col>
+                </el-col>
+              </el-col>
+            </el-col>
+            <el-col :span="24" class="thr">
+              <el-tabs type="border-card">
+                <el-tab-pane label="视频简介">
+                  <p class="textOver"><span>举办方:</span>{{ info.organizers || '暂无' }}</p>
+                  <p class="textOver"><span>举办城市:</span>{{ info.province || '暂无' }}-{{ info.city || '暂无' }}</p>
+                  <p class="textOver"><span>培训时间:</span>{{ info.start_time || '暂无' }}-{{ info.end_time || '暂无' }}</p>
+                  <p><span>视频简介:</span>{{ info.brief || '暂无' }}</p>
+                </el-tab-pane>
+              </el-tabs>
+            </el-col>
+          </el-col>
+        </div>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { mapState, createNamespacedHelpers } from 'vuex';
+const { mapActions: online } = createNamespacedHelpers('online');
+const { mapActions: code } = createNamespacedHelpers('code');
+var moment = require('moment');
+export default {
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  name: 'index',
+  props: {},
+  components: {},
+  data: function () {
+    return {
+      info: {},
+      // 视频
+      video_url: '',
+      videoList: [],
+      menuIndex: '',
+      menuColor: 'rgb(64,158,255)',
+      posterUrl: require('@a/train.png'),
+    };
+  },
+  async created() {
+    await this.search();
+  },
+  methods: {
+    ...online(['fetch']),
+    ...code(['xzqh']),
+    async search() {
+      let res = await this.fetch(this.id);
+      if (this.$checkRes(res)) {
+        this.$set(this, `videoList`, res.data.video);
+        this.$set(this, `info`, res.data);
+      }
+    },
+    // 查询省市
+    async searchXzqh(data) {
+      if (data.province) {
+        const res = await this.xzqh();
+        if (this.$checkRes(res)) {
+          data.province = res.data.find((i) => i.code == data.province).name;
+        }
+      }
+      if (data.city) {
+        const res = await this.xzqh({ code: data.city });
+        if (this.$checkRes(res)) {
+          data.city = res.data.find((i) => i.code == data.city).name;
+        }
+      }
+    },
+    show(data, index) {
+      if (data) {
+        this.menuIndex = index;
+        this.$set(this, `video_url`, data.url);
+      }
+    },
+    searchvideo() {
+      this.show(this.videoList[0], '0');
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+    id() {
+      return this.$route.query.id;
+    },
+    column_name() {
+      return this.$route.query.column_name;
+    },
+  },
+  watch: {
+    videoList: {
+      immediate: true,
+      deep: true,
+      handler(val) {
+        if (val) {
+          this.searchvideo();
+        }
+      },
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.main {
+  background: url('~@a/kjpd.png');
+  background-repeat: no-repeat;
+  background-size: 100% 100%;
+  height: 100%;
+  .top {
+    font-size: 50px;
+    color: #ffffff;
+    font-family: '楷体';
+    height: 130px;
+    line-height: 130px;
+  }
+  .info {
+    min-height: 800px;
+    background: #ffffff5f;
+    border-radius: 10px;
+    padding: 20px;
+    .one {
+      text-align: right;
+      margin: 0 0 10px 0;
+    }
+    .two {
+      margin: 0 0 10px 0;
+      .title {
+        font-size: 35px;
+        font-weight: bold;
+        text-align: center;
+        font-family: cursive;
+        margin: 0 0 10px 0;
+      }
+      .twoVideo {
+        height: 430px;
+        background: #000;
+        .left {
+          video {
+            width: 100%;
+            height: 430px;
+          }
+        }
+        .right {
+          height: 430px;
+          background: #000;
+          h1 {
+            height: 40px;
+            line-height: 40px;
+            text-align: center;
+            color: #fff;
+            font-size: 16px;
+            background: #409eff;
+            margin: 0;
+          }
+          .list {
+            height: 390px;
+            overflow: auto;
+            padding: 0px 10px;
+            .videoList {
+              border-radius: 10px;
+              border: 1px solid #fff;
+              color: #fff;
+              margin: 10px 0 0 0;
+              height: 120px;
+              .file {
+                video {
+                  width: 100%;
+                  height: 117px;
+                  overflow: hidden;
+                }
+              }
+              .videoInfo {
+                padding: 10px 5px;
+                p {
+                  font-size: 12px;
+                  margin: 0 0 5px 0;
+                }
+                p:nth-child(1) {
+                  font-size: 16px;
+                  overflow: hidden;
+                  text-overflow: ellipsis;
+                  -webkit-line-clamp: 2;
+                  word-break: break-all;
+                  display: -webkit-box;
+                  -webkit-box-orient: vertical;
+                }
+              }
+            }
+            .videoList:hover {
+              cursor: pointer;
+              .videoInfo {
+                p:nth-child(1) {
+                  color: #409eff;
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+    .thr {
+      /deep/.el-tabs--border-card {
+        background: transparent;
+      }
+      p {
+        border-bottom: 1px dashed #ccc;
+        color: #000000;
+        font-weight: bold;
+        padding: 10px 0;
+      }
+    }
+  }
+}
+</style>

+ 5 - 1
src/views/train/index.vue

@@ -18,7 +18,7 @@
                 </p>
               </el-col>
               <el-col :span="24" class="btn">
-                <el-button type="primary" size="mini">进人展会</el-button>
+                <el-button type="primary" size="mini" @click="detail(item)">进人展会</el-button>
               </el-col>
             </el-col>
           </el-col>
@@ -76,6 +76,10 @@ export default {
         }
       }
     },
+    // 进入展会
+    detail(data) {
+      this.$router.push({ path: '/train/detail', query: { id: data.id, column_name: data.column_name } });
+    },
   },
   computed: {
     ...mapState(['user']),