 <template>
  <ai-list v-loading="isLoading" class="detail">
    <template slot="title">
      <ai-title title="会话存档详情" isShowBack isShowBottomBorder @onBackClick="cancel(false)"></ai-title>
    </template>
    <template #left>
      <div class="addressBook-left">
        <div class="addressBook-left__title">
          <h2 :class="[tabIndex == 1 ? 'tab-active' : '']" @click="typeClick(1)">群聊会话</h2>
          <h2 :class="[tabIndex == 0 ? 'tab-active' : '']" @click="typeClick(0)">私聊会话</h2>
        </div>
        <div class="addressBook-left__list--title">
          <el-input
            size="mini"
            :placeholder="tabIndex == 1 ? '请输入群名称' : '请输入昵称'"
            v-model="searchName"
            clearable
            @clear="current = 1, searchName = '', getListInit()"
            v-throttle="() => {(current = 1), getListInit();}"
            suffix-icon="iconfont iconSearch">
          </el-input>
        </div>
        <div class="addressBook-left__list--wrapper">
          <div class="addressBook-left__list--item" v-for="(item, index) in list" :key="index" :class="leftActiveIndex == index ? 'active' : ''" @click="leftClick(index)">
            <div v-if="tabIndex == 1">
              <img src="./img/group-img.png" alt="">{{item.roomName}}
            </div>
            <div v-else>
              <img :src="item.toUserAvatar" alt="">{{item.toUserName}}
            </div>
          </div>
          <AiEmpty v-if="!list.length"></AiEmpty>
        </div>
        <el-pagination class="pagination"
          layout="prev, pager, next"
          :total="total" @current-change="currentChange" :current-page="current" :page-size="20">
        </el-pagination>
      </div>
    </template>
    <template slot="content">
      <div class="content-right-title">
        <div class="tab-content">
          <h2 v-for="(item, index) in msgTypeList" :key="index" :class="msgType == index ? 'tab-active' : ''" @click="msgTypeClick(index)">{{item.name}}</h2>
        </div>
        <div class="search-content">
          <el-date-picker v-model="time" size="small" type="daterange" value-format="yyyy-MM-dd" 
            range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" @change="onChange">
          </el-date-picker>
          <el-input size="small" placeholder="输入搜索内容" v-model="searchMsg" clearable
            @clear="msgCurrent = 1, searchMsg = '', getMsgListInit()" suffix-icon="iconfont iconSearch"
          v-throttle="() => {(msgCurrent = 1), getMsgListInit();}"/>
          <!-- <ai-download :instance="instance" url="/app/appconvenientaddressbook/export" :params="search" fileName="会话存档"
                       :disabled="msgList.length == 0">
            <el-button icon="iconfont iconExported" :disabled="msgList.length == 0">导出</el-button>
          </ai-download> -->
        </div>
      </div>
      <div class="content-right-info">
        <div v-for="(item, index) in msgList" :key="index">
          <div class="item" :class="item.userId == id ? 'item-right' : 'item-left'">
            <!-- <p class="time" v-if="index == 0">{{item.msgSendTime}}</p> -->
            <p class="user-name">{{item.userName}}<span>{{item.msgSendTime}}</span></p>
            <div class="item-content-flex">
              <!-- <i class="el-icon-warning" v-if="item.userId == id"></i> -->
              <img :src="item.userAvatar" alt="" class="user-img" v-if="item.userId != id">
              <img src="./img/user-img.png" alt="" class="user-img" v-if="item.userId != id && !item.userAvatar">

              <div class="content" v-if="item.msgType == 'text'">
                <span></span>
                <p>{{item.content}}</p>
              </div>

              <div class="img-list" v-if="item.msgType == 'image'">
                <img :src="item.sdkFileUrl" alt="" v-viewer>
              </div>

              <div class="voice-info" v-if="item.msgType == 'voice'">
                <ai-audio :src="item.sdkFileUrl" skin="flat" />
              </div>

              <video style="width: 300px; object-fit: fill;" controls :src="item.sdkFileUrl" v-if="item.msgType == 'video'"></video>

              <ai-file-list v-if="item.msgType == 'file'" 
                :fileList="item.files"
                :fileOps="{ name: 'name', size: 'fileSizeStr' }"
              ></ai-file-list>

              <div class="revoke-text" v-if="item.msgType == 'revoke'">{{item.userName}}{{item.msgSendTime.substring(0, 16)}}撤回了一条消息</div>

              <div class="revoke-text" v-if="item.msgType == 'disagree'">对方不同意会话存档内容，你将无法继续提供服务</div>

              <div class="revoke-text" v-if="item.msgType == 'agree'">对方同意会话存档内容，你可以继续提供服务</div>

              <div class="card-info" v-if="item.msgType == 'card'">
                <div class="top">
                  <div class="card-left">
                    <h3>{{item.cardCorpName}}</h3>
                    <p>{{item.cardUserName}}</p>
                    <!-- <div>{{item.cardUserId}}</div> -->
                  </div>
                  <div class="card-right">
                    <img :src="item.cardUserAvatar" alt="" v-if="item.cardUserAvatar">
                    <img src="./img/user-img.png" alt="" v-else>
                  </div>
                </div>
                <div class="bottom">个人名片</div>
              </div>

              <img :src="item.sdkFileUrl" alt="" v-if="item.msgType == 'emotion'" :style="[{width: item.width/2+'px'}, {height: item.height/2+'px'}]">

              <div class="map-info" v-if="item.msgType == 'location'">
                <div :id="`map${index}`" class="map-content"></div>
                <div class="address-text">
                  <p>{{item.title}}</p>
                  <p>{{item.address}}</p>
                </div>
              </div>

              <div class="card-info" v-if="item.msgType == 'weapp'">
                <div class="top">
                  <div class="card-left">
                    <h3>{{item.description}}</h3>
                    <p>{{item.title}}</p>
                    <div>{{item.username}}{{item.displayname}}</div>
                  </div>
                </div>
                <div class="bottom">小程序</div>
              </div>

              <div class="card-info pointer" v-if="item.msgType == 'link'" @click="openLink(item)">
                <div class="top">
                  <div class="card-left">
                    <p>{{item.title}}</p>
                    <div>{{item.username}}</div>
                  </div>
                  <div class="card-right" v-if="item.imageUrl">
                    <img :src="item.imageUrl" alt="" >
                  </div>
                </div>
                <div class="bottom">分享链接</div>
              </div>

              <img :src="item.userAvatar" alt="" class="user-img" v-if="item.userId == id">
              <!-- <i class="el-icon-warning" v-if="item.userId != id"></i> -->
            </div>
          </div>
        </div>
        <AiEmpty v-if="!msgList.length"></AiEmpty>
      </div>
      <el-pagination class="msg-list-pagination"
        layout="prev, pager, next"
        :total="msgTotal" @current-change="msgCurrentChange" :current-page="msgCurrent" :page-size="20">
      </el-pagination>
    </template>
  </ai-list>
</template>

<script>
  import { mapState } from 'vuex'
  import Viewer from 'v-viewer'
  import AMapLoader from '@amap/amap-jsapi-loader'
  import Vue from 'vue'
  Vue.use(Viewer);
  
  export default {
    name: 'Detail',
    props: {
      instance: Function,
      dict: Object,
      params: Object
    },
    data () {
      return {
        isLoading: false,
        tabIndex: 1,
        searchName: '',
        time: [],
        search: {
          name: ''
        },
        current: 1,
        total: 0,
        list: [],
        leftActiveIndex: 0,
        msgCurrent: 1,
        msgTotal: 0,
        msgList: [],
        msgType: 0,
        msgTypeList: [
          {name: '全部', value: ''},
          {name: '图片/视频', value: 'imagevideo'},
          {name: '语音', value: 'voice'},
          {name: '文件', value: 'file'},
        ],
        searchMsg: '',
        // id: 'LiuYe',
        id: ''
      }
    },
    computed: {
      ...mapState(['user']),
    },
    created () {
      this.isLoading = true
      if (this.params && this.params.id) {
        this.id = this.params.id
        this.getList()
      }
      // this.getList()
    },

    methods: {
      getListInit() {
        this.isLoading = true
        this.current = 1
        this.leftActiveIndex = 0
        this.getList()
      },
      getList () {
        this.instance.post(`/app/appsessionarchiveindex/list`, null, {
          params: {
            userId: this.id,
            type: this.tabIndex,
            size: 20,
            current: this.current,
            toUserName: this.tabIndex == 1 ? '' : this.searchName,
            roomName: this.tabIndex == 1 ? this.searchName : '',
          }
        }).then(res => {
          if (res.code === 0) {
            this.list = res.data.records
            this.total = res.data.total || 0
            this.getMsgListInit()
          }
          this.isLoading = false
        }).catch(() => {
          this.isLoading = false
        })
      },
      getMsgListInit() {
        this.isLoading = true
        this.msgCurrent = 1
        this.getMsgList()
      },
      getMsgList() {
        this.instance.post(`/app/appsessionarchiveinfo/list`, null, {
          params: {
            userId: this.id,
            type: this.tabIndex,
            size: 8,
            current: this.msgCurrent,
            msgType: this.msgTypeList[this.msgType].value,
            // msgType: 'file',
            toUserId: this.list[this.leftActiveIndex].type == 1 ? '' : this.list[this.leftActiveIndex].toUserId,
            roomId: this.list[this.leftActiveIndex].type == 1 ? this.list[this.leftActiveIndex].roomId : '',
            type: this.list[this.leftActiveIndex].type,
            content: this.searchMsg,
            startTime: this.time ? this.time[0] : '',
            endTime: this.time ? this.time[1] : ''
          }
        }).then(res => {
          if (res.code === 0) {
            res.data.records.map((item, index) => {
              if(item.msgType == 'file') {
                item.files = [{url: item.sdkFileUrl, accessUrl: item.sdkFileUrl, name: item.sdkFileName, fileSizeStr: item.fileSizeStr}]
              }

              if(item.msgType == 'location') {
                // const {AMap, map} = this
                // item.map = null
                // this.$load(item.map).then(() => {
                //   // const marker = new AMap.Marker({
                //   //   position: new AMap.LngLat(item.lng, item.lat),
                //   //   title: item.address
                //   // })
                //   // item.map.add(marker)
                //   item.map.setZoomAndCenter(item.zoom, [item.lng, item.lat], false, 600)
                //   // item.map.setFitView()
                // })
                this.initMap(item.lng, item.lat, item.zoom, index)
              }
            })
            this.msgList = res.data.records
            this.msgTotal = res.data.total || 0
            this.$nextTick(() => {
              document.querySelector('.content-right-info').scrollTo(0, 999999999)
            })
          }
          this.isLoading = false
        }).catch(() => {
          this.isLoading = false
        })
      },
      initMap(lng, lat, zoom, index) {
        AMapLoader.load({
          key: '54a02a43d9828a8f9cd4f26fe281e74e',
          version: '2.0',
        }).then((AMap) => {
          this.map = new AMap.Map(`map${index}`, {
            resizeEnable: true,
            zooms: [6, 20],
            center: [lng, lat],
            zoom: zoom,
            scrollWheel: false,
          })
        })
      },
      typeClick(index) {
        this.tabIndex = index
        this.msgType = 0
        this.getListInit()
      },
      onChange() {
        this.getMsgListInit()
      },
      currentChange(e) {
        console.log(e)
        this.current = e
        this.getList()
      },
      msgCurrentChange(e) {
        this.msgCurrent = e
        this.getMsgList()
      },
      leftClick(index) {
        this.leftActiveIndex = index
        this.msgType = 0
        this.getMsgListInit()
      },
      msgTypeClick(index) {
        this.msgType = index
        this.getMsgListInit()
      },
      openLink(row) {
        document.write('<a href="" target="new"></a>');
        window.open(row.linkUrl, "new"); 
      },
      cancel () {
        this.$emit('change', {
          type: 'List',
          isRefresh: true
        })
      }
    }
  }
</script>

<style scoped lang="scss">
  .detail {
    .addressBook-left {
      width: 100%;
      height: auto;
      background: #FAFAFB;
      position: relative;

      .addressBook-left__title {
        display: flex;
        align-items: center;
        width: 100%;
        height: 40px;
        background: #ffffff;

        h2 {
          flex: 1;
          height: 100%;
          line-height: 40px;
          color: #222;
          font-size: 14px;
          text-align: center;
          cursor: pointer;
          border-bottom: 2px solid transparent;

          &.tab-active {
            color: #2266FF;
            border-bottom: 2px solid #2266FF;
          }
        }
      }

      .addressBook-left__list--wrapper {
        height: calc(100% - 110px);
        padding: 8px;
        overflow-y: scroll;
        .addressBook-left__list--item {
          line-height: 44px;
          font-size: 16px;
          color: #333;
          margin-bottom: 8px;
          padding: 8px;
          cursor: pointer;
          img {
            width: 44px;
            height: 44px;
            border-radius: 50%;
            margin-right: 8px;
            vertical-align: middle;
          }
        }
        .addressBook-left__list--item:hover {
          background-color: #E8EFFF;
        }
        .active {
          background-color: #E8EFFF;
          color: #26f;
        }
      }
      .addressBook-left__list--title {
        display: flex;
        align-items: center;
        margin: 8px 8px 0;

        .addressBook-left__list--search {
          flex: 1;

          :deep( input ){
            width: 100%;
          }
        }

        .el-button {
          width: 84px;
          flex-shrink: 1;
          margin-right: 8px;
        }
      }
      .pagination {
        position: absolute;
        bottom: 0;
        width: 100%;
        text-align: center;
        background-color: #fff;
      }
    }

    :deep( .ai-list__content--right ){
      flex: 1;
      min-width: 0;
      margin-left: 1px;
      box-shadow: none;

      .ai-list__content--right-wrapper {
        width: 100%;
        position: relative;
        padding: 0!important;
        height: 100%;
      }
    }

    .content-right-title {
      height: 40px;
      border-bottom: 1px solid #ddd;
      display: flex;
      justify-content: space-between;
      box-sizing: content-box;
      .tab-content {
        display: flex;
        align-items: center;
        width: 300px;
        height: 40px;
        background: #ffffff;

        h2 {
          flex: 1;
          height: 100%;
          line-height: 40px;
          color: #222;
          font-size: 14px;
          text-align: center;
          cursor: pointer;
          border-bottom: 2px solid transparent;

          &.tab-active {
            color: #2266FF;
            border-bottom: 2px solid #2266FF;
          }
        }
      }
      .search-content {
        display: flex;
        padding: 4px 8px 4px 0;
        .ai-download,
        .el-input {
          margin-left: 8px;
        }
        .el-input {
          width: 240px;
        }
        .el-date-editor--daterange {
          width: 240px;
        }
        :deep .el-date-editor .el-range-separator {
          width: 30px;
        }
      }
    }
    .content-right-info {
      padding: 24px 16px;
      height: calc(100% - 80px);
      overflow-y: scroll;
      .item {
        margin-bottom: 48px;
        .user-name {
          color: #666;
          font-size: 12px;
          line-height: 20px;
          padding:0 0 0 64px;
          span {
            display: inline-block;
            margin: 0 12px;
            color: #999;
          }
        }
        .item-content-flex {
          display: flex;
          .user-img {
            width: 44px;
            height: 44px;
            border-radius: 50%;
            margin-right: 8px;
          }
          .content {
            max-width: calc(100% - 144px);
            position: relative;
            background-color: #f3f6f9;
            
            span {
              width: 0px;
              height: 0px;
              border: 10px solid transparent;
              position: absolute;
              top: 50%;
              margin-top: -10px;
            }
            p {
              display: inline-block;
              padding: 8px;
              line-height: 28px;
              font-family: PingFangSC-Regular;
              font-size: 16px;
              color: #333;
              word-break: break-all;
            }
          }
          .img-list {
            img {
              max-width: 400px;
            }
          }
          .voice-info {
            .ai-audio {
              margin-top: 8px;
            }
          }
          .el-icon-warning {
            font-size: 32px;
            color: #f46;
            margin-top: 8px;
          }
          .revoke-text {
            line-height: 44px;
            padding: 0 6px;
            border-radius: 4px;
            background-color: #EEE;
            color: #999;
            margin-top: 4px;
          }
          .card-info {
            width: 300px;
            position: relative;
            border-radius: 8px;
            background-color: #fff;
            border: 1px solid #eee;

            .top {
              display: flex;
              padding: 16px;
              .card-left {
                width: calc(100% - 60px);
                h3 {
                  line-height: 60px;
                  font-size: 24px;
                  font-weight: 500;
                  color: #333;
                  margin-bottom: 10px;
                }
                p {
                  color: #000;
                  line-height: 24px;
                  font-size: 18px;
                }
                div {
                  color: #666;
                  font-size: 14px;
                  line-height: 24px;
                }
              }
              .card-right {
                img {
                  width: 50px;
                  height: 50px;
                  border-radius: 4px;
                }
              }
            }
            .bottom {
              padding-left: 16px;
              line-height: 44px;
              font-size: 16px;
              color: #666;
              border-top: 1px solid #eee;
            }
          }
          .pointer {
            cursor: pointer;
          }
          .map-info {
            width: 600px;
            height: 400px;
            position: relative;
            .map-content {
              width: 600px;
              height: 400px;
            }
            .address-text {
              position: absolute;
              bottom: 0;
              left: 0;
              z-index: 9999;
              width: 600px;
              background-color: rgba(0, 0, 0, .7);
              p {
                color: #fff;
                line-height: 34px;
                font-size: 16px;
                padding-left: 16px;
                word-break: break-all;
              }
            }
          }
        }
      }
      .item-left {
        .item-content-flex { 
          .user-img {
            margin: 0 20px 0 0;
          }
          .content {
            span {
              left: -18px;
              border-right-color: #f3f6f9;
            }
          }
          .el-icon-warning {
            margin-left: 16px;
          }
        }
        
      }
      .item-right {
        width: 100%;
        justify-content: right;
        .user-name {
          text-align: right;
          padding: 0 52px 0 0;
        }
        .item-content-flex {
          justify-content: end;
          .user-img {
            margin: 0 0 0 20px;
          }
          .content {
            background-color: #90e287;
            span {
              border-left-color:#90e287;
              right: -18px;
            }
          }
          .el-icon-warning {
            margin-right: 16px;
          }
          .voice-info {
            text-align: right;
          }
        }
        
      }
    }
    .addressBook-left__list--wrapper::-webkit-scrollbar,
    .content-right-info::-webkit-scrollbar {
      width: 4px;
    }
    .addressBook-left__list--wrapper::-webkit-scrollbar-thumb,
    .content-right-info::-webkit-scrollbar-thumb {
      border-radius: 10px;
      background: rgba(0,0,0,0.2);
    }
    .addressBook-left__list--wrapper::-webkit-scrollbar-track
    .content-right-info::-webkit-scrollbar-track {
      border-radius: 0;
      background: rgba(0,0,0,0.1);
    }
    .msg-list-pagination {
      position: absolute;
      bottom: 0;
      width: calc(100% - 32px);
      text-align: center;
    }
  }

</style>
