<template>
  <div class="app-container">
    <div class="rightCont">
      <el-form label-width="100px">
        <el-row :gutter="24">
          <el-col :span="5">
            <el-form-item label="关键字：" >
              <el-input v-model="form.VIDEONAME" style="width:206px" placeholder="输入视频名称或者摄像头编码"/>
            </el-form-item>
          </el-col>
          <el-col :span="4">
            <el-form-item label="所属相关方：" >
              <el-select v-model="form.UNITS_ID" filterable clearable placeholder="请选择施工相关方">
                <el-option v-for="item in unitsList" :key="item.UNITS_ID" :label="item.UNITS_NAME" :value="item.UNITS_ID" />
              </el-select>
            </el-form-item>
          </el-col>
          <el-col :span="4">
            <el-form-item label="使用单位：" >
              <el-input v-model="form.UNIT_USE" style="width:206px" placeholder="请输入内容"/>
            </el-form-item>
          </el-col>
          <el-col :span="4">
            <el-form-item label="负责人：" >
              <el-input v-model="form.UNITS_USER_ID" style="width:206px" placeholder="请输入内容"/>
            </el-form-item>
          </el-col>
          <el-col :span="6">
            <el-form-item label-width="50px">
              <el-button v-waves class="filter-item" type="primary" icon="el-icon-search" @click="getQuery">
                搜索
              </el-button>
              <el-button v-waves class="filter-item" type="success" icon="el-icon-refresh" @click="goKeyReset">
                重置
              </el-button>
            </el-form-item>
          </el-col>
        </el-row>
      </el-form>
      <div>
        <el-table
          v-loading="listLoading"
          ref="multipleTable"
          :data="varList"
          :row-key="getRowKey"
          border
          tooltip-effect="dark"
          style="width: 100%">
          <el-table-column :selectable="selectable" type="selection" reserve-selection width="55" align="center"/>
          <el-table-column type="index" label="序号" width="55" align="center"/>
          <el-table-column :formatter="getUnitName" prop="UNITS_ID" label="所属相关方"/>
          <el-table-column prop="UNIT_USE" label="使用单位"/>
          <el-table-column prop="MODEL" label="视频型号"/>
          <el-table-column prop="VIDEONAME" label="视频名称"/>
          <el-table-column prop="VIDEOURL" label="播放地址"/>
          <el-table-column prop="CODE" label="摄像头编号"/>
          <el-table-column prop="PERSON" label="负责人"/>
          <el-table-column prop="PHONE" label="手机号"/>
          <el-table-column prop="ITEM_COUNT" label="视频监控中使用数" width="auto" align="center">
            <template slot-scope="{row}">
              <span v-if="row.ITEM_COUNT != 0">
                <a style="color: #1e9fff;text-decoration:underline" @click="clickItemCount(row)">{{ row.ITEM_COUNT }}</a>
              </span>
              <span v-else>{{ row.ITEM_COUNT }}</span>
            </template>
          </el-table-column>
          <el-table-column prop="ONLINE_STATUS" label="在线状态" width="80">
            <template slot-scope="{row}">
              <span v-if="row.ONLINE_STATUS == 0">
                <el-tag type="success">在线</el-tag>
              </span>
              <span v-else>
                <el-tag type="danger">离线</el-tag>
              </span>
            </template>
          </el-table-column>
          <el-table-column prop="CORP_NAME" label="创建人单位"/>
          <el-table-column prop="CREATOR_NAME" label="创建人"/>
          <el-table-column label="操作" width="300px">
            <template slot-scope="{row}">
              <el-button type="success" icon="el-icon-caret-right" size="mini" @click="showVideo(row)">播放</el-button>
              <el-button
                type="primary"
                icon="el-icon-edit"
                size="mini"
                @click="handleEdit(row)">修改
              </el-button>
              <el-button
                :disabled="row.ITEM_COUNT != 0"
                type="danger"
                icon="el-icon-delete"
                size="mini"
                @click="handleBatchDel(row)">删除
              </el-button>
            </template>
          </el-table-column>
        </el-table>
        <div class="page-btn-group">
          <div>
            <el-button type="primary" icon="el-icon-plus" @click="handleAdd">新增</el-button>
            <el-button type="danger" icon="el-icon-delete" @click="handleBatchDel">批量删除</el-button>
            <el-button type="info" icon="el-icon-refresh" @click="refreshOnlineStatus">刷新在线状态</el-button>
          </div>
          <pagination
            :total="total"
            :page.sync="listQuery.page"
            :limit.sync="listQuery.limit"
            @pagination="getList()"/>
        </div>
      </div>
    </div>
    <el-dialog
      :visible.sync="addForm.dialogVisible"
      :title="addForm.dialogType === 'add' ? '新增' : '编辑'"
      width="40%">
      <el-form
        ref="addForm"
        :rules="addForm.rules"
        :model="addForm.info"
        label-position="right"
        label-width="150px"
        style="padding:10px 10px">
        <el-row>
          <el-form-item label="所属相关方：" prop="UNITS_ID">
            <el-select v-model="addForm.info.UNITS_ID" filterable placeholder="请选择施工相关方" style="width: 100%;">
              <el-option v-for="item in unitsList" :key="item.UNITS_ID" :label="item.UNITS_NAME" :value="item.UNITS_ID" />
            </el-select>
          </el-form-item>
        </el-row>
        <el-row>
          <el-form-item label="使用单位：" prop="UNIT_USE">
            <el-input v-model="addForm.info.UNIT_USE" style="width: 100%" placeholder="请输入内容"/>
          </el-form-item>
        </el-row>
        <el-row>
          <el-form-item label="规格型号：" prop="MODEL">
            <el-input v-model="addForm.info.MODEL" style="width: 100%" placeholder="请输入内容"/>
          </el-form-item>
        </el-row>
        <el-row>
          <el-form-item label="视频名称：" prop="VIDEONAME">
            <el-input v-model="addForm.info.VIDEONAME" style="width: 100%" placeholder="请输入内容"/>
          </el-form-item>
        </el-row>
        <el-row>
          <el-form-item label="播放路径：" prop="VIDEOURL">
            <el-input v-model="addForm.info.VIDEOURL" style="width: 100%" placeholder="请输入内容"/>
          </el-form-item>
        </el-row>
        <el-row>
          <el-form-item label="设备国标编号：" prop="NATIONAL_STANDARD_ID">
            <el-input v-model="addForm.info.NATIONAL_STANDARD_ID" style="width: 100%" placeholder="请输入内容"/>
          </el-form-item>
        </el-row>
        <el-row>
          <el-form-item label="摄像头编号：" prop="CODE">
            <el-input v-model="addForm.info.CODE" style="width: 100%" placeholder="请输入内容"/>
          </el-form-item>
        </el-row>
        <el-row>
          <el-form-item label="负责人：" prop="PERSON">
            <el-input v-model="addForm.info.PERSON" style="width: 100%" placeholder="请输入内容" />
          </el-form-item>
        </el-row>
        <el-row>
          <el-form-item label="联系电话：" prop="PHONE">
            <el-input v-model="addForm.info.PHONE" style="width: 100%" placeholder="请输入内容" />
          </el-form-item>
        </el-row>
        <el-row>
          <el-form-item label="在线情况：" prop="REMAKE">
            <el-input v-model="addForm.info.REMAKE" style="width: 100%" placeholder="请输入内容"/>
          </el-form-item>
        </el-row>
        <el-row>
          <el-form-item label="所属企业：" prop="CORPINFO_ID">
            <el-select v-model="addForm.info.CORPINFO_ID" style="width: 100%;">
              <el-option v-for="item in corpinfoAllList" :key="item.CORPINFO_ID" :value="item.CORPINFO_ID" :label="item.CORP_NAME"/>
            </el-select>
          </el-form-item>
        </el-row>
      </el-form>
      <div slot="footer" class="dialog-footer">
        <el-button @click="addForm.dialogVisible = false">取 消</el-button>
        <el-button type="primary" @click="confirm">提 交</el-button>
      </div>
    </el-dialog>
    <el-drawer
      :visible.sync="visible"
      title="重点工程"
      direction="rtl"
      size="40%">
      <el-table :data="gridData">
        <el-table-column type="index" label="序号" width="50" align="center" />
        <el-table-column prop="OUTSOURCED_NAME" label="重点工程名称" show-overflow-tooltip />
        <el-table-column prop="UNITS_NAME" label="施工相关方" show-overflow-tooltip />
        <!--        <el-table-column prop="INVOLVING_CORPS_NAME" label="辖区单位" show-overflow-tooltip />-->
        <el-table-column prop="MANAGE_CORPS_NAME" label="监理单位" show-overflow-tooltip />
      </el-table>
      <pagination
        :total="zdtotal"
        :page.sync="zdlistQuery.page"
        :limit.sync="zdlistQuery.limit"
        @pagination="zdgetList()"/>
    </el-drawer>
    <el-dialog v-if="dialogVideo" :visible.sync="dialogVideo" :show-close="false" title="视频2" width="600px">
      <iframe :src="VIDEOURL" width="100%" height="380" allowfullscreen allow="autoplay; fullscreen;microphone" style="position: relative;border:none"/>
      <div slot="footer" class="dialog-footer">
        <el-button @click="back">取 消</el-button>
      </div>
    </el-dialog>
    <el-dialog v-if="dialogVideoHLS" :visible.sync="dialogVideoHLS" :before-close="handleBack" :show-close="false" title="视频" width="600px">
      <div id="aLiVideoPlayer" class="prism-player"/>
      <div slot="footer" class="dialog-footer">
        <el-button @click="back">取 消</el-button>
      </div>
    </el-dialog>

  </div>
</template>

<script>
import Pagination from '@/components/Pagination'
import { requestFN } from '@/utils/request'
import waves from '@/directive/waves' // waves directive
import SelectTree from '@/components/SelectTree'
import TiandiMap from '../../../../components/TianMap/TiandiMap'

export default {
  components: { Pagination, SelectTree, TiandiMap },
  directives: { waves },
  data() {
    return {
      // 播放
      dialogVideo: false,
      dialogVideoHLS: false,
      dialogVideoBack: false,
      dialogVideoAll: false,
      corpinfoAllList: [],
      VIDEOURL: '',
      player: {},
      //
      dialogFormMap: false,
      listLoading: true,
      VIDEO_RESOURCES_ID: '',
      add: false,
      del: false,
      edit: false,
      timer: '',
      form: {
        VIDEONAME: '',
        UNITS_USER_ID: '',
        UNIT_USE: '',
        UNITS_ID: ''
      },
      unitsList: [],
      addForm: {
        dialogType: 'add', // 增or改
        dialogVisible: false,
        rules: {
          VIDEONAME: [{ required: true, message: '不可为空', trigger: 'blur' }],
          UNITS_ID: [{ required: true, message: '不可为空', trigger: 'blur' }],
          MODEL: [{ required: true, message: '不可为空', trigger: 'blur' }],
          UNIT_USE: [{ required: true, message: '不可为空', trigger: 'blur' }],
          PERSON: [{ required: true, message: '不可为空', trigger: 'blur' }],
          PHONE: [{ required: true, message: '不可为空', trigger: 'blur' }],
          VIDEOURL: [{ required: true, message: '不可为空', trigger: 'blur' }],
          CODE: [{ required: true, message: '不可为空', trigger: 'blur' }],
          NATIONAL_STANDARD_ID: [{ required: true, message: '不可为空', trigger: 'blur' }]
        },
        info: {
          VIDEO_RESOURCES_ID: '', // 主键
          UNITS_ID: '', // 所属相关方
          UNIT_USE: '', // 使用单位
          MODEL: '', // 规格型号
          VIDEONAME: '', // 视频名称
          VIDEOURL: '', // 播放路径
          CODE: '', // 摄像头编号
          PHONE: '', // 手机号码
          REMAKE: '', // 在线情况
          PERSON: '', // 负责人
          NATIONAL_STANDARD_ID: '' // 设备国标编号
        }
      },
      typeData: [],
      stateData: [
        {
          NAME: '正常',
          BIANMA: 0
        }, {
          NAME: '异常',
          BIANMA: 1
        }
      ],
      varRegionList: [],
      listQuery: {
        page: 1,
        limit: 10
      },
      zdlistQuery: {
        page: 1,
        limit: 10
      },
      ls: [],
      unitsUserList: [],
      dates: [],
      total: 0,
      zdtotal: 0,
      // 树形菜单
      filterText: '',
      visible: false,
      gridData: [],
      varList: [],
      pd: [],
      defaultProps: {
        value: 'id',
        children: 'children',
        label: 'name'
      }
    }
  },
  computed: {

  },
  watch: {
    filterText(val) {
      console.log(val)
      this.$refs.tree.filter(val)
    }
  },
  async created() {
    await this.getUnitsList()
    await this.getList()
    await this.getCoroInfoAll()
  },
  beforeDestroy() {
    console.log('定时器关闭')
    clearInterval(this.timer)
  },
  methods: {
    getCoroInfoAll() {
      requestFN(
        '/corpinfo/listSelect',
        { }
      ).then((data) => {
        this.corpinfoAllList = data.list
      }).catch((e) => {
      })
    },
    // 五分钟关闭视频播放页面定时任务
    start() {
      console.log('定时器开启')
      this.timer = setInterval(this.closeVideoStart, (5 * 60 * 1000)) // 5分钟
    },
    over() {
      // 定时器手动关闭
      console.log('定时器自动关闭')
      this.$message.warning('单次播放时长已到5分钟自动关闭')
      clearInterval(this.timer)
    },
    closeVideoStart() {
      this.dialogVideo = false
      this.dialogVideoHLS = false
      this.dialogVideoBack = false
      this.dialogVideoAll = false
      this.over()
    },
    changeSelUid(event) {
      this.unitsUserList = []
      this.form.UNITS_USER_ID = ''
      if (event) {
        // 查询相关方单位的负责人
        this.getUnitUser(event)
      }
    },
    getUnitUser(event) {
      requestFN(
        '/personnelmanagement/listAll',
        {
          UNITS_ID: event
        }
      ).then((data) => {
        this.unitsUserList = data.varList
        this.$forceUpdate()
      }).catch((e) => {
      })
    },
    // 播放
    handleBack() {
      if (this.dialogVideoAll) {
        for (let i = 0; i < this.playerList.length; i++) {
          this.playerList[i].dispose()
        }
        this.dialogVideoAll = false
      }
      if (this.dialogVideoHLS) {
        this.player.dispose()
        this.dialogVideoHLS = false
      }
    },
    back() {
      console.log('手动关闭定时器')
      clearInterval(this.timer)
      if (this.dialogVideo) this.dialogVideo = false
      if (this.dialogVideoBack) this.dialogVideoBack = false
      if (this.dialogVideoAll) {
        this.dialogVideoAll = false
        for (let i = 0; i < this.playerList.length; i++) {
          this.playerList[i].dispose()
        }
      }
      if (this.dialogForm) this.dialogForm = false
      if (this.dialogVideoHLS) {
        this.dialogVideoHLS = false
        this.player.dispose()
      }
    },
    showVideo(row) {
      this.$message.warning('单次播放最多五分钟')
      this.start()
      if (!row.PLATFORMVIDEOMANAGEMENT_ID) {
        this.VIDEOURL = row.VIDEOURL
        this.dialogVideo = true
      } else {
        requestFN(
          '/platformvideomanagement/getHlsPath',
          {
            INDEXCODE: row.INDEXCODE
          }
        ).then((res) => {
          this.dialogVideoHLS = true
          this.$nextTick(() => {
            // eslint-disable-next-line no-undef
            this.player = new Aliplayer({
              'id': 'aLiVideoPlayer',
              'source': res.data.url,
              'width': '100%',
              'height': '500px',
              'autoplay': true,
              'isLive': true,
              'rePlay': false,
              'playsinline': true,
              'preload': true,
              'controlBarVisibility': 'hover',
              'useH5Prism': true
            }, function(player) {
              console.log('The player is created')
            })
          })
        }).catch((e) => {
          this.over()
          this.listLoading = false
        })
      }
    },
    // 播放 end-------------
    getUnitName(e) {
      const unit = this.unitsList.filter(t => {
        return t.UNITS_ID == e.UNITS_ID
      })
      if (unit.length > 0) {
        return unit[0].UNITS_NAME
      } else {
        return ''
      }
    },
    getUnitsList() {
      requestFN(
        '/units/listAll'
      ).then((data) => {
        this.unitsList = data.varList
      }).catch((e) => {
      })
    },
    confirm() {
      this.$refs.addForm.validate(valid => {
        if (valid) {
          requestFN(
            '/videoResources/' + this.addForm.dialogType,
            {
              ...this.addForm.info
            }
          ).then((data) => {
            this.$message.success('保存成功')
            this.getList()
            this.addForm.dialogVisible = false
          }).catch((e) => {
          })
        } else {
          return false
        }
      })
    },
    clickItemCount(row) {
      this.VIDEO_RESOURCES_ID = row.VIDEO_RESOURCES_ID
      this.zdgetList()
    },
    selectable(row, index) {
      return row.ITEM_COUNT == 0
    },
    handleEdit(row) {
      this.resetAddForm()
      this.addForm.info.VIDEO_RESOURCES_ID = row.VIDEO_RESOURCES_ID
      this.addForm.info.CODE = row.CODE
      this.addForm.info.VIDEOURL = row.VIDEOURL
      this.addForm.info.VIDEONAME = row.VIDEONAME
      this.addForm.info.UNITS_ID = row.UNITS_ID
      this.addForm.info.MODEL = row.MODEL
      this.addForm.info.UNIT_USE = row.UNIT_USE
      this.addForm.info.PHONE = row.PHONE
      this.addForm.info.PERSON = row.PERSON
      this.addForm.info.REMAKE = row.REMAKE
      this.addForm.info.CORPINFO_ID = row.CORPINFO_ID
      this.addForm.dialogType = 'edit'
      this.addForm.dialogVisible = true
    },
    getRowKey(row) {
      return row.VIDEO_RESOURCES_ID
    },
    refreshOnlineStatus() {
      console.log(1)
      requestFN(
        '/videoResources/videoDevicesUpdateOnlineStatus'
      ).then((data) => {
        this.$message({
          message: '刷新成功',
          type: 'success'
        })
        this.getList()
      }).catch((e) => {
      })
    },
    // 批量删除
    handleBatchDel(row) {
      const DATA_IDS = []
      if (row.VIDEO_RESOURCES_ID) {
        DATA_IDS.push(row.VIDEO_RESOURCES_ID)
      } else {
        const _selectData = this.$refs.multipleTable.selection
        if (_selectData == null || _selectData.length == 0) {
          this.$message({
            message: '请选中要删除的项...',
            type: 'error'
          })
          return false
        }
        _selectData.forEach(item => {
          DATA_IDS.push(item.VIDEO_RESOURCES_ID)
        })
      }
      this.$confirm('确定要删除吗?', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        this.listLoading = true
        requestFN(
          '/videoResources/deleteAll',
          {
            DATA_IDS: DATA_IDS.join(',')
          }
        ).then(() => {
          this.$message({
            message: '删除成功',
            type: 'success'
          })
          this.listLoading = false
          this.varList = []
          this.listQuery.page = 1
          this.$refs.multipleTable.clearSelection()
          this.getList()
        }).catch((e) => {
          this.listLoading = false
          this.$refs.multipleTable.clearSelection()
        })
      }).catch(() => {
      })
    },
    // 添加
    handleAdd() {
      this.resetAddForm()
      this.addForm.dialogType = 'add'
      this.addForm.dialogVisible = true
    },
    resetAddForm() {
      this.addForm.info = {
        VIDEO_RESOURCES_ID: '', // 主键
        UNITS_ID: '', // 所属相关方
        MODEL: '', // 规格型号
        UNIT_USE: '', // 使用单位
        VIDEONAME: '', // 视频名称
        VIDEOURL: '', // 播放路径
        CODE: '', // 摄像头编号
        REMAKE: '', // 在线情况
        PHONE: '', // 手机号码
        PERSON: '', // 负责人
        CORPINFO_ID: '' // 企业ID
      }
    },
    // 搜索
    getQuery() {
      this.getList()
    },
    zdgetList() {
      this.gridData = []
      requestFN(
        '/videoResources/getPageOutSourceBySid?showCount=' + this.zdlistQuery.limit + '&currentPage=' + this.zdlistQuery.page,
        {
          VIDEO_RESOURCES_ID: this.VIDEO_RESOURCES_ID
        }
      ).then((data) => {
        this.listLoading = false
        this.gridData = data.varList
        this.zdtotal = data.page.totalResult
        if (!this.visible) {
          this.visible = true
        }
      }).catch((e) => {
      })
    },
    // 获取列表
    getList() {
      this.listLoading = true
      this.varList = []
      requestFN(
        '/videoResources/list?showCount=' + this.listQuery.limit + '&currentPage=' + this.listQuery.page,
        {
          VIDEONAME: this.form.VIDEONAME,
          PERSONNELMANAGEMENT_ID: this.form.UNITS_USER_ID,
          UNIT_USE: this.form.UNIT_USE,
          UNITS_ID: this.form.UNITS_ID
        }
      ).then((data) => {
        this.listLoading = false
        this.varList = data.varList
        this.total = data.page.totalResult
      }).catch((e) => {
        this.listLoading = false
      })
    },
    goKeyReset() {
      this.form.VIDEONAME = ''
      this.form.UNITS_USER_ID = ''
      this.form.UNIT_USE = ''
      this.form.UNITS_ID = ''
      this.getList()
    }
  }
}
</script>

<style scoped>
.returnBtn {
  float: right;
}

.app-container {
  display: flex; /**/
  align-items: baseline;
}

.rightCont {
  width: 100%
}

#map {
  width: 1000px;
  height: 500px;
}
</style>
