<template>
  <div class="media" v-loading="loading">
    <h2 class="media-title">素材管理</h2>
    <div>
      <ul class="media-navs">
        <!---->
        <li class="media-nav js_top" :class="type === 'news' ? 'media-current-nav' : ''" @click="getMediaType('news')">
          <a href="javascript:void(0);">图文消息<br /></a>
        </li>
        <li class="media-nav js_top" :class="type === 'image' ? 'media-current-nav' : ''"  @click="getMediaType('image')">
          <a href="javascript:void(0);">图片<br /></a>
        </li>
        <li class="media-nav js_top" :class="type === 'voice' ? 'media-current-nav' : ''" @click="getMediaType('voice')">
          <a href="javascript:void(0);">语音<br /></a>
        </li>
        <li class="media-nav js_top" :class="type === 'video' ? 'media-current-nav' : ''" @click="getMediaType('video')">
          <a href="javascript:void(0);">视频<br /></a>
        </li>
        <!---->
      </ul>
      <div class="media-panel">
        <div class="media-panel-top flex-bt">
          <div class="media-panel-top-left">
            {{typeText[type]}}（共{{total}}条）
          </div>
          <div class="progress" v-if="showProgress">
            <el-progress :percentage="progress" status="success"></el-progress>
          </div>
          <div class="media-panel-top-right" v-if="type !== 'news'">
            <el-upload
              class="upload-demo"
              ref="upload"
              action="/api/public/upload/zone"
              :http-request="uploadFile"
              :show-file-list="false"
              :data="uploadParam">
              <!--:on-success="handleUploadSuccess"-->
              <el-button style="order:2;" slot="trigger" size="small" type="primary" v-if="!$store.state.readonly">选取文件</el-button>
              <!--<div slot="tip" class="el-upload__tip">大小不超过5M</div>-->
            </el-upload>
          </div>
        </div>
        <div v-if="mediaList.length > 0 && type === 'news'" class="d-start" style="margin-bottom: 20px">
          <div v-for="(item,index) in mediaList" :key="index" class="news-media">
            <el-card :body-style="{ padding: '0px' }">
              <div v-for="(child, childIndex) in item.content.news_item" style="position: relative">
                <div v-if="item.content.news_item.length === 1" class="single-cover">
                  <div class="title">{{child.title}}</div>
                  <img :src="child.thumb_url" style="width: 100%;margin-top: 20px;"/>
                  <div class="digest">{{child.digest}}</div>
                  <a class="preview" :href="child.url" target="_blank">
                    预览文章
                  </a>
                </div>
                <div v-else-if="item.content.news_item.length > 1" class="clear-both bottomCover" style="position: relative">
                  <div v-if="childIndex === 0" class="muti-cover">
                    <img style="width: 100%;margin-top: 20px;" :src="child.thumb_url"/>
                    <div class="bottom-title">{{child.title}}</div>
                  </div>
                  <div class="next-cover" v-else>
                    <span class="next-title">{{child.title}}</span>
                    <img class="next-img" :src="child.thumb_url"/>
                  </div>
                  <a class="preview" :href="child.url" target="_blank">
                    预览文章
                  </a>
                  </div>
              </div>
            </el-card>
          </div>
        </div>
        <page v-if="mediaList.length > 0 && type === 'news'" :nowPage="nowPage" :total="total" :limit="limit" @pageChange="onPageChange"/>
        <div v-if="mediaList.length > 0 && type !== 'news'">
          <el-table
            :data="mediaList"
            style="width: 100%">
            <el-table-column
              prop="name"
              label="名称">
            </el-table-column>
            <el-table-column
              prop="media_id"
              label="mediaId">
            </el-table-column>
            <el-table-column
              label="URL">
              <template slot-scope="scope">
                <a :href="scope.row.url" v-if="type === 'image'" target="_blank">
                  <img style="width: 60px;" :src="scope.row.url"/>
                </a>
                <!--<video v-if="type === 'video'" width="100" height="100" controls="controls">-->
                  <!--<source :src="scope.row.info.down_url"/>-->
                  <!--Your browser does not support the video tag.-->
                <!--</video>-->
                <a :href="scope.row.info.down_url" v-if="type === 'video' && scope.row.info && scope.row.info.down_url" target="_blank">
                  {{scope.row.info.title}}
                </a>
                <audio v-if="type === 'voice'" id="myAudio" controls>
                  <source :src="scope.row.url"/>
                  Your browser does not support the audio element.
                </audio>
                <!--<div v-if="type === 'news'">-->
                  <!--<div v-html="scope.row.content.news_item[0].content"></div>-->
                <!--</div>-->
              </template>
            </el-table-column>
          </el-table>
          <page :nowPage="nowPage" :total="total" :limit="limit" @pageChange="onPageChange"/>
        </div>
      </div>
    </div>
  </div>
</template>

<script>
  import {getMediaListApi,uploadFileApi} from "../../service/api";
  import page from '../framework/page'
  export default {
      name: "resource",
      data() {
        return {
          mediaList: [],
          nowPage: 1,
          total: 0,
          limit: 5,
          loading: false,
          type: 'news',
          imageList: [],
          uploadParam: {
            type: 'wechat',
            chunk: 0,
            count: 1
          },
          fileUid:null,
          showProgress: false,
          typeText: {
            'image' : '图片',
            'video' : '视频',
            'voice' : '语音'
          }
        }
      },
      components:{
        page
      },
      mounted(){
        this.getMediaList(this.type)
      },
      computed:{
        progress(){
          return this.$store.state.progressList.find(i=>{return i.id === this.fileUid}).num <100 ? this.$store.state.progressList.find(i=>{return i.id === this.fileUid}).num : 100
        }
      },
      methods: {
        getMediaType(type){
            this.type = type;
            this.nowPage = 1;
            this.getMediaList(type);
        },
        onPageChange(val){
          this.nowPage = val
          this.getMediaList(this.type)
        },
        getMediaList(type){
          let json = {
            type: type,
            page: this.nowPage,
            limit: this.limit
          };
          this.loading = true;
          getMediaListApi(json).then(res=>{
            this.loading = false;
            this.type = type;
            this.mediaList = res.item;
            this.total = res.total_count;
            if (res.item.length === 0 ) {
              this.$message({
                showClose: true,
                message: '暂无数据'
              });
            }
          }).catch(() => {
            this.loading = false;
          })
        },
        handleUploadSuccess(res) {
            console.log('handleUploadSuccess', res)
          if (res.code === 200) {
            this.imageList = [{name:res.data.url,url:process.env.IMAGE_URL_HEAD + res.data.url}]
          }
        },
        uploadFile(a) {
          this.loading = true;
          this.$store.dispatch('setProgress',{type:'new',id:a.file.uid});
          this.fileUid = a.file.uid;
          this.showProgress = true;
          uploadFileApi({file:a.file,type:'wechat'}).then(res=>{
            this.imageList = [{name:res.url,url:process.env.IMAGE_URL_HEAD + res.url}]
            this.getMediaList(this.type)
            this.loading = false;
            this.showProgress = false;
            this.$message({
              type: 'success',
              message: '上传成功!'
            });
          }).catch(()=>{
            this.loading = false;
            this.showProgress = false;
          })
        }
      }
    }
</script>

<style scoped lang="less">
  .progress {
    width: 50%;
  }
  .flex-bt {
    display: flex;
    justify-content: space-between;
    align-items: flex-start;
  }
  .el-upload__tip {
    margin-right: 15px;
    font-size: 13px;
    color: #8d8d8d;
    order: 1;
  }
  .upload-demo {
    display: inline-block;
    .el-upload {
      order: 2;
    }
  }
  .media {
    margin-bottom: 40px;
    padding: 20px 0;
    &-title {
       font-size: 26px;
       font-weight: 400;
       line-height: 1;
       margin-bottom: 20px;
       margin-left: 20px;
    }
    &-navs {
       text-align: left;
       line-height: 1;
       border-bottom: 1px solid #E0E1E2;
       font-size: 16px;

    }
    &-nav {
       display: inline-block;
       margin-right: 24px;
       margin-bottom: -1px;
       line-height: 40px;
        a {
          display: block;
          text-decoration: none;
          color: #353535;
          width: auto;
          overflow: hidden;
          text-overflow: ellipsis;
          white-space: nowrap;
          word-wrap: normal;
          max-width: 120px;
        }
    }
    &-current-nav {
      border-bottom: 2px solid #1AAD19;
      a {
        color: #44B549;
      }
    }
    &-panel {
       padding: 24px 40px;
       margin-bottom: 30px;
       background-color: #FFFFFF;
       border-radius: 3px;
       -moz-border-radius: 3px;
       -webkit-border-radius: 3px;
       box-shadow: 0 1px 5px 0 rgba(0, 0, 0, 0.05);
      .el-upload {
        order: 2;
      }
    }
  }
  .clear-both{
  &:after{
     content: '';
     display: block;
     clear: both;
   }
  }
</style>
<style>
  .news-media {
    padding: 10px;
    width: 300px;
  }
  .news-media img{
    width: 100%;
  }
  .f-news {
    max-height: 300px;
    overflow: hidden;
  }
  .s-news img {
    width: 50px;
    float: right;
  }
  .title {
    font-size: 16px;
    font-weight: 400;
    display: block;
    line-height: 1.2;
    color: #353535;
  }
  .digest {
    padding-top: 12px;
    color: #9A9A9A;
    font-size: 14px;
  }
  .single-cover {
    padding: 20px 15px 15px;
  }
  .muti-title {
    position: absolute;
  }
  .muti-cover {
    position: relative;
    padding: 20px 15px 0 15px;
  }
  .bottom-title {
    color: #FFFFFF;
    background-color: rgba(0, 0, 0, 0.55);
    position: absolute;
    left: 15px;
    right: 15px;
    bottom: 0;
    padding: 8px 12px;
  }
  .next-cover {
    padding: 12px 15px;
    position: relative;
  }
  .next-img {
    float: right;
    margin-left: 12px;
    width: 60px !important;
    height: 60px !important;
  }
  .next-title {
    overflow: hidden;
    font-weight: 400;
    word-wrap: break-word;
    -webkit-hyphens: auto;
    -ms-hyphens: auto;
    hyphens: auto;
    color: #353535;
  }
  .single-cover:hover .preview,.bottomCover:hover .preview{
    display: flex;
    justify-content: center;
    align-items: center;
    color: #fff;
  }
  .d-start {
    display: flex;
    flex-flow: row wrap;
    justify-content: flex-start;
    align-items: flex-start;
  }
  .preview {
    display: none;
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background-color: rgba(0,0,0,0.5);
    text-decoration: none;
  }
</style>
