<template>
  <div>
    <xy-dialog
      ref="dialog"
      :is-show.sync="isShow"
      type="form"
      title="调令调整"
      :form="form"
      :rules="rules"
      @submit="submit"
    >
      <template #extraFormTop>
        <el-descriptions title="调令信息" :column="2" label-class-name="xy-table-item-label">
          <el-descriptions-item label="点位">{{ detail.equipment_id_equipments_id_relation ? detail.equipment_id_equipments_id_relation.name : "" }}</el-descriptions-item>
          <el-descriptions-item label="泵闸总数">{{ detail.equipment_id_equipments_id_relation ? detail.equipment_id_equipments_id_relation.bengzhashuliang : "" }}</el-descriptions-item>
          <el-descriptions-item label="开启数量">{{ detail.kaiqishuliang }}</el-descriptions-item>
          <el-descriptions-item label="开始时间">{{ $moment(detail.start_time).format("HH:mm") }}</el-descriptions-item>
          <el-descriptions-item label="结束时间">{{ $moment(detail.end_time).format("HH:mm") }}</el-descriptions-item>
          <el-descriptions-item label="类型">
            <el-tag size="small">{{ myleibie }}</el-tag>
          </el-descriptions-item>
          <el-descriptions-item label="范围">
            <el-tag size="small">{{ myarea }}</el-tag>
          </el-descriptions-item>
        </el-descriptions>
      </template>
      <template v-slot:content>
        <div class="xy-table-item">
          <div class="xy-table-item-label">调令内容 ：</div>
          <div class="xy-table-item-content">
            <el-input
              type="textarea"
              :autosize="{ minRows: 2 }"
              v-model="form.content"
              clearable
              placeholder="请输入调令内容"
              style="width: 300px"
            ></el-input>
          </div>
        </div>
      </template>
      <template v-slot:tiaozhengleixing>
        <div class="xy-table-item">
          <div class="xy-table-item-label">调整类型 ：</div>
          <div class="xy-table-item-content">
            <el-select
              :popper-append-to-body="false"
              v-model="form.tiaozhengleixing"
              clearable
              placeholder="请选择调整类型"
              style="width: 300px"
            >
              <el-option
                v-for="item in types"
                :key="item.id"
                :label="item.value"
                :value="item.id"
              ></el-option>
            </el-select>
          </div>
        </div>
      </template>
      <template #kaiqishuliang v-if="equipmentType === 1">
        <div class="xy-table-item">
          <div class="xy-table-item-label">调整数量 ：</div>
          <div class="xy-table-item-content">
            <el-input-number :min="0" :max="openNumberMax" controls-position="right" style="width: 300px" v-model="form.kaiqishuliang"></el-input-number>
          </div>
        </div>
      </template>
    </xy-dialog>
  </div>
</template>

<script>
import { show, save } from "@/api/system/baseForm";
export default {
  props: {
    areas: Array,
    abilities: Array
  },
  data() {
    return {
      isShow: false,
      id: "",
      type: "",
      detail: {},

      form: {
        content: "",
        tiaozhengleixing: "",
        kaiqishuliang: 0
      },
      rules: {},
      originalData: "",
    };
  },
  methods: {
    show() {
      this.isShow = true;
    },
    hidden() {
      this.isShow = false;
    },
    init() {
      for (let key in this.form) {
        if (this.form[key] instanceof Array) {
          this.form[key] = [];
        } else {
          this.form[key] = "";
        }
      }
      this.$refs["dialog"].clearValidate();
    },
    setId(id) {
      if (typeof id == "number") {
        this.id = id;
      } else {
        console.error("error typeof id: " + typeof id);
      }
    },
    getId() {
      return this.id;
    },
    setType(type = "add") {
      let types = ["add", "editor"];
      if (types.includes(type)) {
        this.type = type;
      } else {
        console.warn("Unknown type: " + type);
      }
    },
    setForm(key = [], value = []) {
      if (key instanceof Array) {
        key.forEach((key, index) => {
          this.form[key] = value[index] ?? "";
        });
      }
      if (typeof key === "string") {
        this.form[key] = value;
      }
      if (!key) {
        this.init();
      }
    },

    async getDetail() {
      const res = await show({ id: this.id, table_name: "transfers" });
      this.$integrateData(this.form, res);
      this.originalData = JSON.stringify(this.form);
      this.detail = res;
    },

    submit() {
      if (this.form.tiaozhengleixing === "" || this.form.tiaozhengleixing === undefined) {
        this.$message({
          message: "请选择类型",
          type: "warning"
        })
        return
      }
      const leixingLabel = this.types.find(i => i.id === this.form.tiaozhengleixing)?.id
      if (leixingLabel === 0) {
        this.form.kaiqishuliang = Number(this.detail?.kaiqishuliang) - Number(this.form.kaiqishuliang)
      } else if (leixingLabel === 1) {
        this.form.kaiqishuliang = Number(this.detail?.kaiqishuliang) + Number(this.form.kaiqishuliang)
      } else {
      }
      let updateData = JSON.stringify(this.form);
      let text = ""
      if (updateData !== this.originalData) {
        let originalData = JSON.parse(this.originalData)
        let nowData = JSON.parse(updateData)
        let kv = new Map([
          ['content','调令内容'],
          ['tiaozhengleixing','调整状态'],
          ['kaiqishuliang','调整数量'],
        ])
        for (let key of kv.keys()) {
          if (key === 'kaiqishuliang') {
            if (this.detail.equipment_id_equipments_id_relation?.type === 1) {
              text += nowData[key] === originalData[key] ? "" : (`【${kv.get(key)}】从"${originalData[key] || "0"}"更改为"${nowData[key]}"` || " ")
            }
          } else {
            text += nowData[key] === originalData[key] ? "" : (`【${kv.get(key)}】从"${this.types.find(i => i.id === originalData[key])?.value || originalData[key] || " "}"更改为"${this.types.find(i => i.id === nowData[key])?.value || nowData[key]}"` || " ")
          }
        }
      }
      this.form.to_transfer_id = this.detail.id;
      this.form.is_adjust =  1;
      this.form.id_logs_transfer_id_relation = this.detail.id_logs_transfer_id_relation.map(i => ({
        transfer_id: i.transfer_id,
        content: i.content,
        created_at: this.$moment().format("YYYY-MM-DD HH:mm:ss")
      }))
      this.form.id_logs_transfer_id_relation.push({
        transfer_id: this.detail.id,
        content: text
      })
      for (let key in this.detail) {
        if (/_relation|_at/g.test(key)) {
          delete this.detail[key]
        }
      }
      delete this.detail.id;
      save({
        table_name: "transfers",
        ...this.detail,
        ...this.form,
        status: 2,
      }).then((res) => {
        if (updateData !== this.originalData) {
          save({
            table_name: "logs",
            transfer_id: this.getId(),
            content: text,
            created_at: this.$moment().format("YYYY-MM-DD HH:mm:ss")
          },false)
        }
        this.$message({
          type: "success",
          message: "操作成功",
        });
        this.isShow = false;
        this.$emit("refresh");
      });
    },
  },
  computed: {
    myarea () {
      return this.areas.find(i => i.value === this.detail.equipment_id_equipments_id_relation?.area)?.key || "";
    },
    myleibie () {
      return this.abilities.find(i => i.value === this.detail?.leibie)?.key || "";
    },

    openNumberMax () {
      const leixingLabel = this.types.find(i => i.id === this.form.tiaozhengleixing)?.value
      if (leixingLabel === '关闭') {
        return Number(this.detail?.kaiqishuliang) || 0
      }  else {
        return (Number(this.detail?.equipment_id_equipments_id_relation?.bengzhashuliang) - Number(this.detail?.kaiqishuliang)) || 0
      }
    },

    equipmentType () {
      return this.detail?.equipment_id_equipments_id_relation?.type;
    },

    types () {
      let temp = this.equipmentType;
      if (this.equipmentType === 1) {
        return [
          {
            id: 0,
            value: "关闭"
          },
          {
            id: 1,
            value: "增开"
          }
        ]
      } else {
        return [
          {
            id: 0,
            value: "关闭"
          },
          {
            id: 1,
            value: "调整开度"
          }
        ]
      }
    }
  },
  watch: {
    isShow(val) {
      if (val) {
        if (this.type === "editor") {
          this.getDetail();
        }
      } else {
        this.id = "";
        this.type = "";
        this.originalData = "";
        this.init();
        this.$refs["dialog"].clearValidate();
        delete this.form.id;
      }
    },
  },
};
</script>

<style scoped lang="scss">
::v-deep .el-input__inner {
  text-align: left;
}
</style>
