<template>
  <div>
    <div class="search-term">
      <el-form :inline="true" :model="searchInfo" class="demo-form-inline">
        <el-form-item label="站点类型">
          <el-select v-model="searchInfo.siteType" clearable placeholder="请选择">
            <el-option v-for="item in this.siteType" :label="item.label" :value="item.value"/>
          </el-select>
        </el-form-item>
        <el-form-item label="处理状态">
          <el-select v-model="searchInfo.status" clearable placeholder="请选择">
            <el-option label="已处理" value="0"></el-option>
            <el-option label="未处理" value="1"></el-option>
          </el-select>
        </el-form-item>
        <el-form-item>
          <el-button size="mini" type="primary" icon="el-icon-search" @click="onSubmit">查询</el-button>
          <el-button class="excel-btn" size="small" type="primary" icon="el-icon-download" @click="handleExcelExport()">导出</el-button>
          <el-popover v-model:visible="deleteVisible" placement="top" width="160">
            <p>确定要删除吗?</p>
            <div style="text-align: right; margin: 0">
              <el-button size="mini" type="text" @click="deleteVisible = false">取消</el-button>
              <el-button size="mini" type="primary" @click="onDelete">确定</el-button>
            </div>
          </el-popover>
        </el-form-item>
      </el-form>
    </div>
    <el-table
        ref="multipleTable"
        border
        stripe
        style="width: 100%"
        tooltip-effect="dark"
        :data="tableData"
        @selection-change="handleSelectionChange"
    >
      <el-table-column label="日期" width="180">
        <template #default="scope">{{ formatDate(scope.row.CreatedAt) }}</template>
      </el-table-column>
      <el-table-column label="发布人" prop="oper" width="120"/>
      <el-table-column label="站点" prop="siteName" width="220"/>
      <el-table-column label="站点类型" prop="siteType" width="120"/>
      <el-table-column label="处理状态" prop="status" width="120">
        <template #default="scope">
          <el-tag v-show="scope.row.status == 'Untreated'" type="warning">未处理</el-tag>
          <el-tag v-show="scope.row.status == 'Processed'" type="success">已处理</el-tag>
        </template>
      </el-table-column>
      <el-table-column label="责任部门" prop="department" width="120"/>
      <el-table-column label="操作">
        <template #default="scope">
          <el-button size="small" type="primary" class="table-button"
                     @click="updateProblemInfo(scope.row)">查看详情
          </el-button>
          <el-button type="danger" icon="el-icon-delete" size="mini" @click="deleteRow(scope.row)">删除</el-button>
        </template>
      </el-table-column>
    </el-table>
    <el-pagination
        layout="total, sizes, prev, pager, next, jumper"
        :current-page="page"
        :page-size="pageSize"
        :page-sizes="[10, 30, 50, 100]"
        :style="{float:'right',padding:'20px'}"
        :total="total"
        @current-change="handleCurrentChange"
        @size-change="handleSizeChange"
    />
    <el-dialog v-model="dialogFormVisible" :before-close="closeDialog" title="问题详情">
      <el-form :model="formData" label-position="right" label-width="80px">
        <el-card class="box-card">
          <el-descriptions title="基本信息" border :column="2">
            <el-descriptions-item label="发布人">{{ formData.oper }}</el-descriptions-item>
            <el-descriptions-item label="站点名称">{{ formData.siteName }}</el-descriptions-item>
            <el-descriptions-item label="站点位置">{{ formData.position }}</el-descriptions-item>
            <el-descriptions-item label="站点类型">{{ formData.siteType }}</el-descriptions-item>
            <el-descriptions-item label="处理状态">
              <el-tag v-show="formData.status == 'Untreated'" type="warning">未处理</el-tag>
              <el-tag v-show="formData.status == 'Processed'" type="success">已处理</el-tag>
            </el-descriptions-item>
            <el-descriptions-item label="责任部门">{{ formData.department }}</el-descriptions-item>
          </el-descriptions>
        </el-card>
        <el-card class="box-card">
          <el-descriptions title="问题列表" :column="1" direction="vertical">
            <el-descriptions-item v-for="item in formData.matter.split('|')">
              {{ this.matterList[item] != undefined ? this.matterList[item].label : '' }}
            </el-descriptions-item>
          </el-descriptions>
        </el-card>
        <el-card class="box-card">
          <el-descriptions title="问题图片/视频" direction="vertical">
            <el-descriptions-item label="问题图片(点击图片查看更多)">
              <el-image
                  style="width: 260px; height: 240px"
                  :src="(formData.imgList.length>0?formData.imgList[0]:'')"
                  :preview-src-list="formData.imgList">
              </el-image>
            </el-descriptions-item>
            <el-descriptions-item label="问题视频">
              <span v-show="formData.video.length<1">无视频</span>
              <video style="object-fit:fill" controls width="400" height="240" v-show="formData.video.length>0" :src="formData.video">
                您的浏览器不支持Video标签。
              </video>
            </el-descriptions-item>
          </el-descriptions>
        </el-card>
        <el-card class="box-card" v-show="formData.status=='Processed'">
          <el-descriptions title="处理结果" :column="1" border direction="vertical">
            <el-descriptions-item label="处理人">{{ formData.handler }}</el-descriptions-item>
            <el-descriptions-item label="处理内容">{{ formData.handText }}</el-descriptions-item>
            <el-descriptions-item label="处理图片(点击图片查看更多)">
              <el-image
                  style="width: 260px; height: 240px"
                  :src="(formData.handImgList.length>0?formData.handImgList[0]:'')"
                  :preview-src-list="formData.handImgList">
              </el-image>
            </el-descriptions-item>
          </el-descriptions>
        </el-card>
      </el-form>
    </el-dialog>
  </div>
</template>

<script>
import {
  createProblemInfo,
  deleteProblemInfo,
  deleteProblemInfoByIds,
  updateProblemInfo,
  findProblemInfo,
  getProblemInfoList,
  exportExcel
} from '@/api/problemInfo' //  此处请自行替换地址
import infoList from '@/mixins/infoList'
import { getDict } from '@/utils/dictionary'

export default {
  name: 'ProblemInfo',
  mixins: [infoList],
  data() {
    return {
      listApi: getProblemInfoList,
      dialogFormVisible: false,
      type: '',
      siteType: [],
      deleteVisible: false,
      multipleSelection: [],
      matterList: [],
      formData: {
        oper: 0,
        handler: 0,
        imgs: '',
        imgList: [],
        handImgList: [],
        video: '',
        siteId: 0,
        position: '',
        matter: '',
        siteType: '',
        status: '',
        handImgs: '',
        handText: '',
        department: '',
      }
    }
  },
  async created() {
    this.siteType = await getDict('site_type')
    await this.getTableData()
  },
  methods: {
    handleExcelExport() {
      exportExcel(this.formData)
    },
    // 条件搜索前端看此方法
    onSubmit() {
      this.page = 1
      this.pageSize = 10
      this.getTableData()
    },
    handleSelectionChange(val) {
      this.multipleSelection = val
    },
    deleteRow(row) {
      this.$confirm('确定要删除吗?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        this.deleteProblemInfo(row)
      })
    },
    async onDelete() {
      const ids = []
      if (this.multipleSelection.length === 0) {
        this.$message({
          type: 'warning',
          message: '请选择要删除的数据'
        })
        return
      }
      this.multipleSelection &&
      this.multipleSelection.map(item => {
        ids.push(item.ID)
      })
      const res = await deleteProblemInfoByIds({ids})
      if (res.code === 0) {
        this.$message({
          type: 'success',
          message: '删除成功'
        })
        if (this.tableData.length === ids.length && this.page > 1) {
          this.page--
        }
        this.deleteVisible = false
        this.getTableData()
      }
    },
    async updateProblemInfo(row) {
      const res = await findProblemInfo({ID: row.ID})
      this.type = 'update'
      if (res.code === 0) {
        this.formData = res.data.reproblemInfo
        if (this.formData.imgs.length > 0) {
          this.formData.imgList = this.formData.imgs.split('|')
        } else {
          this.formData.imgList = []
        }
        if (this.formData.handImgs.length > 0) {
          this.formData.handImgList = this.formData.handImgs.split('|')
        } else {
          this.formData.handImgList = []
        }
        this.matterList = await getDict('site_' + this.formData.siteId)
        this.dialogFormVisible = true
      }
    },
    closeDialog() {
      const video = document.getElementById('video')
      if (video != undefined) {
        video.pause()
      }
      this.dialogFormVisible = false
      this.formData = {
        oper: 0,
        handler: 0,
        imgs: '',
        video: '',
        siteId: 0,
        imgList: [],
        position: '',
        matter: '',
        handImgList: [],
        siteType: '',
        status: '',
        handImgs: '',
        handText: '',
        department: '',
      }
    },
    async deleteProblemInfo(row) {
      const res = await deleteProblemInfo({ID: row.ID})
      if (res.code === 0) {
        this.$message({
          type: 'success',
          message: '删除成功'
        })
        if (this.tableData.length === 1 && this.page > 1) {
          this.page--
        }
        this.getTableData()
      }
    },
    async enterDialog() {
      let res
      switch (this.type) {
        case 'create':
          res = await createProblemInfo(this.formData)
          break
        case 'update':
          res = await updateProblemInfo(this.formData)
          break
        default:
          res = await createProblemInfo(this.formData)
          break
      }
      if (res.code === 0) {
        this.$message({
          type: 'success',
          message: '创建/更改成功'
        })
        this.closeDialog()
        this.getTableData()
      }
    },
    openDialog() {
      this.type = 'create'
      this.dialogFormVisible = true
    }
  },
}
</script>

<style>
.box-card {
  margin-bottom: 10px;
}
</style>