<template>
  <div class="app-container">
    <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="100px">
      <el-form-item label="隐患名称" prop="troubleName">
        <el-input v-model="queryParams.troubleName" placeholder="请输入隐患名称" style="width: 170px"/>
      </el-form-item>
      <el-form-item label="隐患类型" prop="troubleType">
        <el-select v-model="queryParams.troubleType" placeholder="请选择隐患类型" filterable clearable size="small" style="width: 170px">
          <el-option
            v-for="dict in typeOptions"
            :key="dict.dictValue"
            :label="dict.dictLabel"
            :value="dict.dictValue"
          ></el-option>
        </el-select>
      </el-form-item>
      <el-form-item label="处理状态" prop="dealStatus">
        <el-select v-model="queryParams.dealStatus" placeholder="请选择状态" filterable clearable size="small" style="width: 170px">
          <el-option
            v-for="temp in statusOptions"
            :key="temp.value"
            :label="temp.label"
            :value="temp.value"
          ></el-option>
        </el-select>
      </el-form-item>
      <el-form-item label="上报时间" prop="startCreateTime">
        <el-date-picker
          clearable size="small"
          v-model="queryParams.startCreateTime"
          value-format="yyyy-MM-dd HH:mm:ss"
          type="datetime"
          placeholder="请选择起始时间"
          align="right"
          style="width: 200px">
        </el-date-picker>
        <font color="#C0C4CC"> 至</font>
      </el-form-item>
      <el-form-item label="" prop="endCreateTime">
        <el-date-picker
          clearable size="small"
          v-model="queryParams.endCreateTime"
          value-format="yyyy-MM-dd HH:mm:ss"
          type="datetime"
          placeholder="请选择截止时间"
          align="right"
          style="width: 200px">
        </el-date-picker>
      </el-form-item>
      <el-form-item>
        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
      </el-form-item>
    </el-form>

    <el-row :gutter="10" class="mb8">
      <el-col :span="1.5">
        <el-button
          type="primary"
          plain
          icon="el-icon-plus"
          size="mini"
          @click="handleAdd"
          v-hasPermi="['riskManagement:hiddenTrouble:add']"
        >新增</el-button>
      </el-col>
      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
    </el-row>

    <el-table v-loading="loading" :data="hiddenTroubleList" @selection-change="handleSelectionChange">
      <el-table-column label="隐患名称" align="center" prop="troubleName" width="400px"/>
      <el-table-column label="隐患类型" align="center" prop="troubleType" >
        <template slot-scope="scope">
          <span v-if="scope.row.troubleType == 1">设备老化</span>
          <span v-if="scope.row.troubleType == 2">质保过期</span>
        </template>
      </el-table-column>
      <el-table-column label="隐患级别" align="center" prop="troubleLevel" >
        <template slot-scope="scope">
          <span v-if="scope.row.troubleLevel == 1">Ⅰ级</span>
          <span v-if="scope.row.troubleLevel == 2">Ⅱ级</span>
          <span v-if="scope.row.troubleLevel == 3">Ⅲ级</span>
        </template>
      </el-table-column>
      <el-table-column label="图片" align="center" prop="pictureUrl" style="text-align:center;">
        <template slot-scope="scope">
          <img :src="scope.row.pictureUrl" style="width: 20%;vertical-align:middle;cursor:pointer;" @click="showPicture(scope.row)"/>
          <el-image :ref="'a'+scope.row.troubleId" :src="scope.row.pictureUrl" v-show="false" :preview-src-list="[scope.row.pictureUrl]" v-if="scope.row.pictureUrl != '' && scope.row.pictureUrl != null"></el-image>
        </template>
      </el-table-column>
      <el-table-column label="上报人" align="center" prop="reportManName" />
      <el-table-column label="上报时间" align="center" prop="createTime" />
      <el-table-column label="处理状态" align="center" prop="dealStatus" >
        <template slot-scope="scope">
          <span v-if="scope.row.orderId == null || scope.row.orderId == ''">未生成工单</span>
          <span v-if="(scope.row.dealStatus == null || scope.row.dealStatus == '') &&
              scope.row.orderId != null && scope.row.orderId != ''">暂未处理</span>
          <span v-if="scope.row.dealStatus == 1">不需处理</span>
          <span v-if="scope.row.dealStatus == 2">已处理完成</span>
          <span v-if="scope.row.dealStatus == 3">未处理完成</span>
        </template>
      </el-table-column>
      <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="280px">
        <template slot-scope="scope">
          <el-button
            size="normal"
            type="text"
            icon="el-icon-edit"
            @click="handleIssue(scope.row)"
            v-hasPermi="['workOrder:basicsInfo:add']"
            v-if="scope.row.orderId == '' || scope.row.orderId == null"
          >生成工单
          </el-button>
          <el-button
            size="normal"
            type="text"
            icon="el-icon-edit"
            @click="handleUpdate(scope.row)"
            v-hasPermi="['riskManagement:hiddenTrouble:edit']"
            v-if="scope.row.orderId == '' || scope.row.orderId == null"
          >修改
          </el-button>
          <el-button
            size="normal"
            type="text"
            icon="el-icon-edit"
            @click="showDetail(scope.row)"
          >详情</el-button>
          <el-button
            size="normal"
            type="text"
            icon="el-icon-delete"
            @click="handleIsDel(scope.row)"
            v-hasPermi="['riskManagement:hiddenTrouble:query']"
            v-if="scope.row.orderId == '' || scope.row.orderId == null"
          >作废
          </el-button>
        </template>
      </el-table-column>
    </el-table>

    <pagination
      v-show="total>0"
      :total="total"
      :page.sync="queryParams.pageNum"
      :limit.sync="queryParams.pageSize"
      @pagination="getList"
    />

    <!-- 添加或修改隐患信息对话框 -->
    <el-dialog destroy-on-close :title="title1" :visible.sync="open1" width="800px" append-to-body @close="cancel">
      <el-form ref="form1" :model="form1" :rules="rules" label-width="120px">
        <el-col :span="23">
          <el-form-item label="隐患名称" prop="troubleName">
            <el-input v-model="form1.troubleName" placeholder="请输入隐患名称" style="width: 600px" />
          </el-form-item>
        </el-col>
        <el-col :span="12">
          <el-form-item label="隐患类型" prop="troubleType">
            <el-select v-model="form1.troubleType" placeholder="请选择隐患类型" filterable style="width: 220px">
              <el-option
                v-for="dict in typeOptions"
                :key="dict.dictValue"
                :label="dict.dictLabel"
                :value="dict.dictValue"
              ></el-option>
            </el-select>
          </el-form-item>
        </el-col>
        <el-col :span="12">
          <el-form-item label="隐患级别" prop="troubleLevel">
            <el-select v-model="form1.troubleLevel" placeholder="请选择隐患级别" filterable style="width: 220px">
              <el-option
                v-for="dict in levelOptions"
                :key="dict.dictValue"
                :label="dict.dictLabel"
                :value="dict.dictValue"
              ></el-option>
            </el-select>
          </el-form-item>
        </el-col>
        <el-col :span="12">
          <el-form-item label="上报人" prop="reportMan">
            <el-select v-model="form1.reportMan" placeholder="请选择上报人" filterable style="width: 220px">
              <el-option
                v-for="item in userList"
                :key="item.userId"
                :label="item.nickName"
                :value="item.userId"
              ></el-option>
            </el-select>
          </el-form-item>
        </el-col>
        <el-col :span="12">
          <el-form-item label="隐患设备" prop="device">
            <el-cascader
              v-model="form1.device"
              :options="options"
              :props="props"
              :show-all-levels="false"
              @change="handleChange"
              filterable
              clearable
              style="width: 220px"
            ></el-cascader>
          </el-form-item>
        </el-col>
        <el-col :span="23">
          <el-form-item label="地址" prop="address">
            <el-input v-model="form1.address" type="textarea" placeholder="请输入地址" style="width: 600px" />
          </el-form-item>
        </el-col>
        <el-col :span="23">
          <el-form-item label="经纬度" prop="longitude">
            <el-row>
              <el-col :span="8">
                <el-input v-model.number="form1.longitude" placeholder="请输入经度" />
              </el-col>
              <el-col :span="8" style="margin-left: 10px">
                <el-input v-model.number="form1.latitude" placeholder="请输入纬度"/>
              </el-col>
              <el-col :span="5" style="margin-left: 10px">
                <el-button type="primary" plain @click="MapdialogFun">选择经纬度</el-button>
              </el-col>
            </el-row>
          </el-form-item>
        </el-col>
        <el-col :span="23">
          <el-form-item label="图片上传" prop="pictureUrl">
            <MyFileUpload
              listType="picture-card"
              @resFun="getFileInfo"
              @remove="listRemove"
              :fileArr="fileList"
            />
            <el-input v-show="false" disabled v-model="form1.pictureUrl"></el-input>
          </el-form-item>
        </el-col>
        <el-col :span="23">
          <el-form-item label="隐患信息" prop="remarks">
            <el-input v-model="form1.remarks" type="textarea" placeholder="请输入隐患信息" style="width: 600px" />
          </el-form-item>
        </el-col>
      </el-form>
      <div slot="footer" class="dialog-footer">
        <el-button type="primary" @click="submitForm1">确 定</el-button>
        <el-button @click="cancel">取 消</el-button>
      </div>
    </el-dialog>
    <el-dialog :title="title2" :visible.sync="open2" width="800px" append-to-body @close="cancel">
      <el-form ref="form2" :model="form2" :rules="rules" label-width="120px">
        <el-form-item label="隐患名称">
          <font>{{form2.troubleName}}</font>
        </el-form-item>
        <el-form-item label="隐患类型">
          <font v-if="form2.troubleType == 1">设备老化</font>
          <font v-if="form2.troubleType == 2">质保过期</font>
        </el-form-item>
        <el-form-item label="隐患级别">
          <font v-if="form2.troubleLevel == 1">Ⅰ级</font>
          <font v-if="form2.troubleLevel == 2">Ⅱ级</font>
          <font v-if="form2.troubleLevel == 3">Ⅲ级</font>
        </el-form-item>
        <el-form-item label="工单名称" prop="orderName">
          <el-input v-model="form2.orderName" placeholder="请输入工单名称" style="width: 600px" />
        </el-form-item>
        <el-form-item label="指定执行人员" prop="appointInspector" >
          <el-select v-model="form2.appointInspector" placeholder="请选择执行人员" filterable clearable size="small"  style="width: 600px">
            <el-option
              v-for="item in inspector"
              :key="item.userId"
              :label="item.nickName"
              :value="item.userId"
            ></el-option>
          </el-select>
        </el-form-item>
        <el-form-item label="工单描述" prop="remarks">
          <el-input type="textarea" v-model="form2.remarks" placeholder="请输入工单描述" style="width: 600px" />
        </el-form-item>
      </el-form>
      <div slot="footer" class="dialog-footer">
        <el-button type="primary" @click="submitForm2">确 定</el-button>
        <el-button @click="cancel">取 消</el-button>
      </div>
    </el-dialog>

    <Mapdialog
      v-if="loadmap"
      :dialogTableVisible="dialogTableVisible"
      @dialogcancelFun="dialogcancelFun"
      :slat="form1.latitude"
      :slng="form1.longitude"
      @confirmFun="confirmFun($event)"
    ></Mapdialog>
  </div>
</template>

<script>
import { listHiddenTrouble, getHiddenTrouble, addHiddenTrouble, updateHiddenTrouble, exportHiddenTrouble } from "@/api/riskManagement/hiddenTrouble";
import { addBasicsInfo } from "@/api/workOrder/basicsInfo";
import { inspectorList, allListUser } from "@/api/system/user";
import { deviceNodeTree } from "@/api/device/deviceInfo";
import MyFileUpload from '@/components/MyFileUpload';
import Mapdialog from "@/components/mapDialog/checkDeviceLoaction.vue";

export default {
  name: "HiddenTrouble",
  components: {
    MyFileUpload,
    Mapdialog
  },
  data() {
    return {
      // 遮罩层
      loading: true,
      // 导出遮罩层
      exportLoading: false,
      // 选中数组
      ids: [],
      // 非单个禁用
      single: true,
      // 非多个禁用
      multiple: true,
      // 显示搜索条件
      showSearch: true,
      // 总条数
      total: 0,
      // 隐患信息表格数据
      hiddenTroubleList: [],
      // 隐患类型字典
      typeOptions: [],
      // 隐患等级字典
      levelOptions: [],
      // 处理状态字典
      statusOptions: [
        {'label':'未生成工单','value':'-1'},
        {'label':'暂未处理','value':'-2'},
        {'label':'不需处理','value':'1'},
        {'label':'已处理完成','value':'2'},
        {'label':'未处理完成','value':'3'}
      ],
      // 上传文件列表
      fileList: [],
      // 地图
      loadmap: false,
      dialogTableVisible: false,
      // 设备级联
      options: [],
      props: {
        value: "id",
        label: "name",
        level: "level",
        children: "childList",
      },
      // 用户列表
      userList: [],
      // 巡检员列表
      inspector: [],
      // 弹出层标题
      title1: "",
      // 是否显示弹出层
      open1: false,
      // 弹出层标题
      title2: "",
      // 是否显示弹出层
      open2: false,
      // 查询参数
      queryParams: {
        pageNum: 1,
        pageSize: 10,
        troubleName: null,
        troubleType: null,
        deviceId: null,
        troubleLevel: null,
        orderId: null,
        longitude: null,
        deviceType: null,
        latitude: null,
        dealStatus: null,
        startCreateTime: null,
        endCreateTime: null,
        address: null,
        remarks: null,
        pictureUrl: null,
        reportMan: null
      },
      // 表单参数
      form1: {},
      // 表单参数
      form2: {},
      // 表单校验
      rules: {
        troubleName: [
          { required: true, message: "请输入隐患名称", trigger: "blur" }
        ],
        troubleType: [
          { required: true, message: "请选择隐患类型", trigger: "blur" }
        ],
        troubleLevel: [
          { required: true, message: "请选择隐患级别", trigger: "blur" }
        ],
        reportMan: [
          { required: true, message: "请选择上报人", trigger: "blur" }
        ],
        address: [
          { required: true, message: "请输入地址", trigger: "blur" }
        ],
        pictureUrl: [
          { required: true, message: "请上传图片", trigger: ['blur', 'change']  }
        ],
        longitude: [
          { required: true, message: "请输入经纬度", trigger: "blur" }
        ],
        orderName: [
          { required: true, message: "请输入工单名称", trigger: "blur" }
        ],
        appointInspector: [
          { required: true, message: "请选择巡检人员", trigger: "blur" }
        ],
      }
    };
  },
  created() {
    this.getList();
    this.getDicts("t_trouble_type").then(response => {
      this.typeOptions = response.data;
    });
    this.getDicts("t_trouble_level").then(response => {
      this.levelOptions = response.data;
    });
  },
  methods: {
    /** 查询隐患信息列表 */
    getList() {
      this.loading = true;
      listHiddenTrouble(this.queryParams).then(response => {
        this.hiddenTroubleList = response.rows;
        this.total = response.total;
        this.loading = false;
      });
    },
    /** 详细信息跳转 */
    showDetail(row) {
      this.$router.push({
        path: '/riskManagement/hiddenTroubleDetail',
        query:{
          troubleId : row.troubleId
        }
      })
    },
    getFileInfo(res){
      console.log ("res",res  )
      this.form1.pictureUrl = res.url;

    },
    listRemove(e) {
      this.form1.pictureUrl = "";
      this.fileList = [];
      console.log("删除了")
    },
    confirmFun(res) {
      //确认选择经纬度
      this.form1.longitude = res.lng;
      this.form1.latitude = res.lat;
    },
    MapdialogFun() {
      this.loadmap = true;
      this.dialogTableVisible = true;
    },
    dialogcancelFun() {
      this.loadmap = false;
      this.dialogTableVisible = false;
    },
    handleChange(value) {
      console.log(this.form1.device);
      let arr = this.form1.device;
      this.form1.deviceType = arr[0];
      this.form1.deviceId = arr[1];
    },
    getUserList(){
      this.loading = true;
      allListUser().then(response => {
        this.userList = response.data;
        this.loading = false;
      });
    },
    getInspectorList(){
      this.loading = true;
      inspectorList().then(response => {
        this.inspector = response.data;
        this.loading = false;
      });
    },
    // 取消按钮
    cancel() {
      this.open1 = false;
      this.open2 = false;
      this.fileList = [];
      this.reset();
    },
    // 表单重置
    reset() {
      this.form1 = {
        troubleId: null,
        troubleType: null,
        deviceId: null,
        troubleLevel: null,
        orderId: null,
        longitude: null,
        device: null,
        deviceType: null,
        latitude: null,
        dealStatus: null,
        updateTime: null,
        address: null,
        createTime: null,
        remarks: null,
        pictureUrl: null,
        reportMan: null
      };
      this.resetForm("form1");
      this.form2 = {
        troubleId: null,
        troubleName: null,
        troubleType: null,
        troubleLevel: null,
        orderId: null,
        orderName: null,
        appointInspector: null,
        updateTime: null,
        createTime: null,
        remarks: null
      };
      this.resetForm("form2");
    },
    /** 搜索按钮操作 */
    handleQuery() {
      this.queryParams.pageNum = 1;
      this.getList();
    },
    /** 重置按钮操作 */
    resetQuery() {
      this.resetForm("queryForm");
      this.handleQuery();
    },
    // 多选框选中数据
    handleSelectionChange(selection) {
      this.ids = selection.map(item => item.troubleId)
      this.single = selection.length!==1
      this.multiple = !selection.length
    },
    showPicture(row){
      this.$refs['a'+row.troubleId].showViewer = true;
      console.log("===",row.troubleId);
    },
    /** 新增按钮操作 */
    handleAdd() {
      this.reset();
      this.getUserList();
      deviceNodeTree().then(response => {
        this.options = response.data;
        this.open1 = true;
        this.title1 = "新增隐患信息";
      });
    },
    /** 下发按钮操作 */
    handleIssue(row) {
      this.reset();
      this.getInspectorList();
      const troubleId = row.troubleId || this.ids
      getHiddenTrouble(troubleId).then(response => {
        this.form2 = response.data;
        this.form2.remarks = "";
        this.open2 = true;
        this.title2 = "填写工单信息";
      });
    },
    /** 修改按钮操作 */
    handleUpdate(row) {
      this.reset();
      this.getUserList();
      deviceNodeTree().then(response => {
        this.options = response.data;
      });
      const troubleId = row.troubleId || this.ids
      getHiddenTrouble(troubleId).then(response => {
        this.form1 = response.data;
        console.log("this.form1", this.form1);
        if(this.form1.deviceType != null && this.form1.deviceId != null){
          this.form1.device = [this.form1.deviceType, this.form1.deviceId];
        }
        this.open1 = true;
        this.title1 = "修改隐患信息";
        console.log("this.form1.pictureUrl",this.form1.pictureUrl)
        if (this.form1.pictureUrl) {
          this.fileList.push({
            url: this.form1.pictureUrl,
          });
        }
      });
    },
    /** 提交按钮 */
    submitForm1() {
      this.$refs["form1"].validate(valid => {
        if (valid) {
          if (this.form1.troubleId != null) {
            updateHiddenTrouble(this.form1).then(response => {
              this.msgSuccess("修改成功");
              this.open1 = false;
              this.getList();
            });
          } else {
            addHiddenTrouble(this.form1).then(response => {
              this.msgSuccess("新增成功");
              this.open1 = false;
              this.getList();
            });
          }
        }
      });
    },
    /** 生成工单提交按钮 */
    submitForm2() {
      this.$refs["form2"].validate(valid => {
        if (valid) {
          this.form2.resourceId = this.form2.troubleId;
          this.form2.orderType = "2";
          addBasicsInfo(this.form2).then(response => {
            this.msgSuccess("生成工单成功");
            this.open2 = false;
            this.getList();
          });
        }
      });
    },
    /** 作废按钮操作 */
    handleIsDel(row) {
      row.isDel = "1";
      this.$confirm('是否确认作废隐患名称为"' + row.troubleName + '"的数据项?', "警告", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning"
      }).then(function () {
        return updateHiddenTrouble(row);
      }).then(() => {
        this.getList();
        this.msgSuccess("已作废");
      }).catch(() => {
      });
    },
  }
};
</script>
