<template>
  <ai-detail class="reportAtWillDetail" v-loading="isLoading">
    <template #title>
      <ai-title title="矛盾调解详情" isShowBack isShowBottomBorder  @onBackClick="cancel(false)"></ai-title>
    </template>
    <template #content>
      <div class="detail-content__wrapper">
        <ai-card class="detail-content__wrapper--left" title="基础信息">
          <template #content>
            <ai-wrapper>
              <ai-info-item label="上报人员">
                <ai-open-data type="userName" :openid="detail.name" />
              </ai-info-item>
              <ai-info-item label="当前状态" :value="dict.getLabel('clapEventStatus', detail.eventStatus)"></ai-info-item>
              <ai-info-item label="上报时间">{{ detail.createTime }}</ai-info-item>
              <ai-info-item label="事件类型">{{ detail.groupName }}</ai-info-item>
              <ai-info-item label="事件描述" isLine>{{ detail.content }}</ai-info-item>
              <ai-info-item label="现场照片" isLine>
                <ai-uploader :instance="instance" disabled v-model="detail.files"></ai-uploader>
              </ai-info-item>
              <ai-info-item label="所属网格">{{ detail.girdName }}</ai-info-item>
              <ai-info-item label="事件位置" isLine>
                <div id="map" style="width: 500px; height: 280px;"></div>
              </ai-info-item>
            </ai-wrapper>
          </template>
        </ai-card>
        <div class="rightZone">
          <ai-card title="办理进度">
            <template #content>
              <el-steps direction="vertical" :active="1">
                <el-step
                  v-for="(item, i) in processList"
                  :key="i"
                  :title="item.systemExplain"
                  :description="item.doTime">
                  <template #title>
                    <h2 class="step-title" style="font-weight: 500; font-size: 14px;">
                      <ai-open-data type="userName" :openid="item.user" />
                      {{ item.title }}
                    </h2>
                  </template>
                  <template #description>
                    <p style="color: #888; margin: 0 4px 10px 0; font-size: 14px;">{{ item.doTime }}</p>
                    <div style="color: #444;margin-bottom: 10px;" v-if="item.doExplain">{{ item.doExplain }}</div>
                    <ai-uploader :instance="instance" disabled v-model="item.files"></ai-uploader>
                  </template>
                </el-step>
              </el-steps>
            </template>
          </ai-card>
        </div>
      </div>
    </template>
  </ai-detail>
</template>

<script>
  import AMapLoader from '@amap/amap-jsapi-loader'
  import { mapState } from 'vuex'

  export default {
    name: 'Detail',
    props: ['dict', 'instance', 'params'],

    data() {
      return {
        isLoading: true,
        detail: {},
        processList: []
      }
    },

    computed: {
      ...mapState(['user'])
    },

    created() {
      this.dict.load('clapEventStatus').then(() => {
        this.getDetail()
      })
    },

    methods: {
      getDetail() {
        this.instance.post('/app/appclapeventinfo/queryDetailById', null, {
          params: { id: this.params.id }
        }).then(res => {
          if (res?.data) {
            this.detail = res.data
            this.processList = res.data.processList.map(item => {
              item.user = /\$(.+?)\$/g.exec(item.systemExplain)[1]
              item.title = item.systemExplain.replace(/\$(.+?)\$/g, '')

              return item
            })

            this.$nextTick(() => {
              this.initMap()
            })
            this.isLoading = false
          }
        }).catch(() => {
          this.isLoading = false
        })
      },

      cancel (isRefresh) {
        this.$emit('change', {
          type: 'list',
          isRefresh: !!isRefresh
        })
      },

      onChange(e) {
        this.instance.post(`/app/appvillagerintegralrule/list?size=1000&classification=${e}&ruleStatus=1`).then(res => {
          if (res.code === 0) {
            this.form.ruleId = ''
            this.eventList = res.data.records
          }
        })
      },

      initMap() {
        let { lng, lat } = this.detail
        let center = [lng, lat]
        AMapLoader.load({
          key: 'b553334ba34f7ac3cd09df9bc8b539dc',
          version: '2.0'
        }).then(AMap => {
          let map = new AMap.Map('map', {
            center,
            zoom: 14
          })
          let marker = new AMap.Marker({
            position: new AMap.LngLat(lng, lat),
            title: this.detail.address
          })
          map.add(marker)
        })
      }
    }
  }
</script>

<style lang="scss" scoped>
  .reportAtWillDetail {
    height: 100%;

    .el-steps {
      ::v-deep .el-step__icon {
        font-size: 12px;
        color: #555555;
        border-color: #d0d4dc;
      }

      ::v-deep .el-step__head.is-finish {
        .el-step__icon.is-text {
          border: none;
          color: #fff;
          font-size: 12px;
          background: #2266ff;
        }
      }

      ::v-deep .el-step__line {
        background-color: #d0d4dc;
      }
    }

    .imgs {
      font-size: 0;

      img {
        width: 108px;
        height: 108px;
        margin-right: 4px;
        margin-bottom: 4px;
        cursor: pointer;
        user-select: none;

        &:hover {
          opacity: 0.8;
        }

        &:nth-of-type(2n) {
          margin-right: 0;
        }
      }
    }

    ::v-deep .el-step__head.is-process {
      color: #555;
      border-color: #555;
    }

    ::v-deep .is-finish h2 {
      color: #2266ff;
    }

    .step-title {
      color: #555;
    }

    .detail-content__wrapper {
      display: flex;
      width: 100%;

      .detail-content__wrapper--left {
        flex: 1;
        margin-right: 20px;
      }
    }

    ::v-deep .ai-detail__content {
      background: #f3f6f9;

      .ai-detail__content--wrapper {
        display: flex;
        gap: 16px;
        width: 100%;
        max-width: 100%;
        padding: 16px;
        box-sizing: border-box;

        & > .el-card {
          flex: 1;
          min-width: 0;
        }

        .rightZone {
          width: 400px;
          flex-shrink: 0;
          display: flex;
          flex-direction: column;
          gap: 16px;
        }
      }
    }

    ::v-deep .el-card {
      .el-card__header {
        padding: 12px 16px;
        font-weight: bold;
      }

      .el-card__body {
        padding: 8px;
      }

      #amap {
        width: 466px;
        height: 232px;
      }

      .el-steps {
        margin-left: 8px;
      }

      .imgFormItem > .el-form-item__content {
        display: flex;
        gap: 16px;
        flex-wrap: wrap;

        &:before {
          content: none;
        }

        .el-image__inner {
          width: 82px;
          height: 82px;
        }
      }
    }
  }
</style>
