<template>
  <div class="app-container">

    <!-- 搜索工作栏 -->
    <search-bar
      :formConfigs="formConfig"
      ref="searchBarForm"
      @headBtnClick="buttonClick"
    />
    <!-- 列表 -->
    <base-table
      :page="queryParams.pageNo"
      :limit="queryParams.pageSize"
      :table-props="tableProps"
      :table-data="list"
      :max-height="tableH"
    >
      <method-btn
        v-if="tableBtn.length"
        slot="handleBtn"
        :width="120"
        label="操作"
        :method-list="tableBtn"
        @clickBtn="handleClick"
      />
    </base-table>
    <pagination
      :page.sync="queryParams.pageNo"
      :limit.sync="queryParams.pageSize"
      :total="total"
      @pagination="getList"
    />
    <!-- 新增 -->
    <base-dialog
      :dialogTitle="addOrEditTitle"
      :dialogVisible="centervisible"
      @cancel="handleCancel"
      @confirm="handleConfirm"
      :before-close="handleCancel"
      width='70%'
    >
      <group-class-add ref="classList" @successSubmit="successSubmit" />
    </base-dialog>
  </div>
</template>

<script>
import { getGroupClassesPage, deleteGroupClasses, updateGroupClasses } from "@/api/base/groupClasses";
import GroupClassAdd from './components/groupClassAdd.vue'
import { formatDate } from '@/utils'
const tableProps = [
  {
    prop: 'enableTimeStr',
    label: '生效时段',
    minWidth: 300
  },
  {
    prop: 'name',
    label: '班次名称'
  },
  {
    prop: 'timeStr',
    label: '班次时间',
    minWidth: 100
  },
  {
    prop: 'code',
    label: '班次编码',
    minWidth: 200
  },
  {
    prop: 'status',
    label: '班次状态'
  },
  {
    prop: 'remark',
    label: '备注'
  }
]
export default {
  name: "GroupClass",
  components: { GroupClassAdd },
  data() {
    return {
      formConfig: [
        {
          type: 'input',
          label: '班次名称',
          placeholder: '班次名称',
          param: 'name'
        },
        {
          type: 'button',
          btnName: '查询',
          name: 'search',
          color: 'primary'
        },
        {
          type: 'separate'
        },
        {
          type: this.$auth.hasPermi('base:group-classes:create') ? 'button' : '',
          btnName: '新增',
          name: 'add',
          color: 'success',
          plain: true
        }
      ],
      tableProps,
      tableBtn: [
        this.$auth.hasPermi('base:group-classes:update')
          ? {
              type: 'edit',
              btnName: '编辑'
            }
          : undefined,
          {
            type: 'cancel',
            btnName: '作废',
            showParam: {
              type: '&',
              data: [
                {
                  type: 'unequal',
                  name: 'status',
                  value: '不可用'
                }
              ]
            }
          },
        this.$auth.hasPermi('base:group-classes:delete')
          ? {
              type: 'delete',
              btnName: '删除'
            }
          : undefined
      ].filter((v) => v),
      tableH: this.tableHeight(260),
      // 总条数
      total: 0,
      // 班次基础信息列表
      list: [],
      // 弹出层标题
      addOrEditTitle: "",
      // 是否显示弹出层
      centervisible: false,
      // 查询参数
      queryParams: {
        pageNo: 1,
        pageSize: 20,
        name: null
      }
    };
  },
  created() {
    window.addEventListener('resize', () => {
      this.tableH = this.tableHeight(260)
    })
    this.getList()
  },
  methods: {
    buttonClick(val) {
      switch (val.btnName) {
        case 'search':
          this.queryParams.pageNo = 1;
          this.queryParams.name = val.name
          this.getList()
          break
        default:
          this.addOrEditTitle = '新增'
          this.centervisible = true
          this.$nextTick(() => {
            this.$refs.classList.init()
          })
      }
    },
    /** 查询列表 */
    getList() {
      getGroupClassesPage(this.queryParams).then(res => {
        if (res.code === 0 && res.data.list.length > 0) {
          res.data.list.map(item => {
            item.enableTimeStr = formatDate(item.enableTime) + '至' + (item.disableTime ? formatDate(item.disableTime) : '永久')
            item.timeStr = item.startTime.slice(0, 5) + '-' + item.endTime.slice(0, 5)
            item.status = item.status === true ? '可用' : '不可用'
          })
          this.list = res.data.list;
          this.total = res.data.total;
        } else {
          this.list = []
          this.total = 0
        }
      });
    },
    handleClick(val) {
      switch (val.type) {
        case 'edit':
          this.addOrEditTitle = '编辑'
          this.$nextTick(() => {
            this.$refs.classList.init(val.data.id)
          })
          this.centervisible = true
          break
        case 'cancel':
          this.discard(val.data)
          break
        default:
        this.handleDelete(val.data)
      }
    },
    handleCancel() {
      this.$refs.classList.formClear()
      this.centervisible = false
      this.addOrEditTitle = ''
    },
    handleConfirm() {
      this.$refs.classList.submitForm()
    },
    successSubmit() {
      this.handleCancel()
      this.getList()
    },
    discard(row) {
      let obj = {}
      obj.id = row.id
      obj.startTime = row.startTime
      obj.endTime = row.endTime
      obj.enableTime = row.enableTime
      obj.disableTime = Date.parse(new Date())
      this.$modal.confirm('是否确认作废班次名称为"' + row.name + '"的数据项?').then(function() {
          return updateGroupClasses({ ...obj })
        }).then(() => {
          this.getList();
          this.$modal.msgSuccess("操作成功");
        }).catch(() => {});
    },
    /** 删除按钮操作 */
    handleDelete(row) {
      console.log(row)
      let _this = this
      if (row.status === '可用') {// 可用
        _this.$modal.confirm('删除的班次"' + row.name + '"可能会影响交接班计划,请点取消再次确认!').then(function() {
          return _this.$modal.confirm('是否确认删除班次名称为"' + row.name + '"的数据项?').then(function() {
              return deleteGroupClasses(row.id);
            }).then(() => {
              _this.getList();
              _this.$modal.msgSuccess("删除成功");
            }).catch(() => {});
          })
      } else {
        _this.$modal.confirm('是否确认删除班次名称为"' + row.name + '"的数据项?').then(function() {
            return deleteGroupClasses(row.id);
          }).then(() => {
            _this.getList();
            _this.$modal.msgSuccess("删除成功");
          }).catch(() => {});
      }
    }
  }
};
</script>