<template>
  <div>
    <van-loading
      v-if="uploadLoading"
      type="spinner"
      class="loading_box"
      vertical
      text-color="#fff"
      text-size='16'
    >
      上传中，请勿退出...
    </van-loading>
    <x-header :left-options="{backText: '',showBack:true}">
      内镜视频
      <div
        class="uploadBtn"
        slot="right"
      >
        <van-uploader
          :after-read="afterRead"
          :max-count='1'
          accept='video/*'
        >
          <van-button type="text">上传文件</van-button>
        </van-uploader>
      </div>
    </x-header>

    <!-- 列表 -->
    <v-content
      has-header
      :has-footer="false"
    >
      <van-list
        :immediate-check='false'
        class="list_content"
        ref="scroller"
        v-model="loading"
        :finished="finished"
        finished-text="没有更多了"
        :offset="100"
        @load="onLoad"
      >
        <van-row
          type="flex"
          justify="space-between"
        >
          <van-col
            v-for="(item,index) in videoList"
            :key="index"
            class="col"
          >
            <!-- 图片 -->
            <div class="img_box">
              <van-image
                id="video"
                :src="'https://inno.sh-sict.com/gastric/gastric-resources/' + item.coverUrl"
              />
              <div class="start_icon">
                <van-icon
                  name="play-circle-o"
                  size="50"
                  color='#e6e6e6'
                  @click="showVideo(item.videoName)"
                />
              </div>

            </div>
            <div
              class="van-ellipsis"
              style="font-size:12px;"
            >
              {{item.videoName}}
            </div>
            <div class="label van-ellipsis">
              {{item.createTime}}
            </div>
            <div class="label van-ellipsis">
              <a>诊断详情</a>
              <a
                style="color:#127BFF;"
                @click="showPop(item)"
              >点击查看</a>
            </div>
          </van-col>
        </van-row>
      </van-list>
    </v-content>
    <van-popup
      v-model="show"
      position="bottom"
      round
      :style="{ height: '40%' }"
    >
      <div class="pop_content">
        <div class="item">
          <div class="label">
            诊断日期：
          </div>
          <div class="value">
            {{ describe.diagnosisTime || '--' }}
          </div>
        </div>
        <div class="item">
          <div class="label">
            诊断所见：
          </div>
          <div class="value">
            {{ describe.finding || '--' }}
          </div>
        </div>
        <div class="item">
          <div class="label">
            诊断结果：
          </div>
          <div class="value">
            {{ describe.diagnosis || '--' }}
          </div>
        </div>
      </div>
    </van-popup>
  </div>
</template>
<script>
// 引入
import { uploadByPieces } from '../utils/upload'
export default {
  name: 'videoList',
  data () {
    return {
      show: false,
      describe: {},//诊断详情
      videoList: [],
      loading: false,
      finished: false,
      pageNum: 1,
      pageSize: 10,
      totalCount: 0,
      uploadLoading: false
    }
  },
  methods: {
    onLoad () {
      if (!this.finished) {
        this.pageNum++
        this.getVideoList()
      }
    },
    getVideoList () {
      let data = {
        pageNum: this.pageNum,
        pageSize: this.pageSize,
        dataId: this.$route.query.id
      }
      this.$API.getVideoList(data).then(res => {
        this.loading = false
        if (res.code == 1) {
          this.totalCount = res.object.totalCount
          this.videoList = [...this.videoList, ...res.object.list]
        }
        if (this.videoList.length >= this.totalCount) {
          this.finished = true
        }
      })
    },
    showPop (data) {
      this.show = true
      this.describe = data
    },
    showVideo (url) {
      this.$router.push(`/videoShow?src=${url}`)
    },
    afterRead (file) {
      this.uploadLoading = true
      // console.log(file);
      let dataId = this.$route.query.id
      let randomNum = dataId + '' + Math.round(Math.random() * 10000)
      uploadByPieces({
        randoms: randomNum, // 随机数，这里作为给后端处理分片的标识 根据项目看情况 是否要加
        file: file.file, // 视频实体
        pieceSize: 10, // 分片大小
        dataId: dataId,
        success: data => {
          console.log('分片上传视频成功', data)

          // 合并
          this.$API.fileMerge({
            dataId: dataId,
            videoName: data.videoName,
            id: randomNum
          }).then(res => {
            this.uploadLoading = false
            this.pageNum = 1
            this.videoList = []
            this.getVideoList()
          })
        },
        error: e => {
          console.log('分片上传视频失败', e)
          this.uploadLoading = false
        }
      })
    },
  },
  mounted () {
    this.videoList = []
    this.getVideoList()
  },
  activated () {
    const scrollTop = this.$route.meta.scrollTop;
    const $content = document.querySelector('.list_content');
    if (scrollTop && $content) {
      this.$nextTick(() => {
        console.log(scrollTop);
        document.querySelector('.list_content').scrollTop = scrollTop;
      })
    }
  },
  beforeRouteLeave (to, from, next) {
    if (to.path != '/videoShow') {
      from.meta.keepAlive = false
    } else
      if (to.path == '/videoShow') {
        from.meta.keepAlive = true
        const $content = document.querySelector('.list_content'); // 列表的外层容器
        const scrollTop = $content ? $content.scrollTop : 0;
        from.meta.scrollTop = scrollTop;
      }
    next()
  }
}
</script>
<style lang="scss" scoped>
.content {
  background: rgb(246, 246, 246);
}
.list_content {
  padding: 14px 14px;
  height: 100%;
  overflow: auto;
  .col {
    width: 48%;
    padding: 10px;
    background: #fff;
    margin-bottom: 10px;
    .label {
      display: flex;
      justify-content: space-between;
      font-size: 12px;
    }
  }
}
#video {
  width: 100%;
  height: 150px;
  img {
    display: block;
    margin: 0;
    padding: 0;
  }
}
.uploadBtn {
  transform: translateY(-16px) translatex(12px);
  color: #fff;
}
.img_box {
  position: relative;
  .start_icon {
    height: 150px;
    position: absolute;
    left: 0;
    top: 0;
    width: 100%;
    background: rgba(0, 0, 0, 0.5);
    display: flex;
    justify-content: center;
    align-items: center;
  }
}
.pop_content {
  padding: 20px;
  .item {
    display: flex;
    margin-bottom: 10px;
    .label {
      color: #127bff;
    }
    .value {
      color: #444;
    }
  }
}
.loading_box {
  width: 100%;
  height: 100%;
  position: absolute;
  left: 0;
  top: 0;
  display: flex;
  justify-content: center;
  align-items: center;
  z-index: 10000;
  background: rgba(0, 0, 0, 0.5);
  color: #fff;
}
</style>