Newer
Older
iris_temperature_front_gz / src / views / attendance / atdRules.vue
IRIS on 28 Jun 2020 9 KB 首页加图表
<template>
  <div v-if="showPage" class="app-container">
    <el-form ref="dataForm" :rules="rules" :model="atdRulesForm" label-width="180px">
      <el-divider content-position="left">工作日设置</el-divider>
      <el-row>
        <el-col :offset="2" style="margin-top: 5px;margin-bottom: 5px">
          <el-form-item prop="workDayArr">
            <el-checkbox-group v-model="atdRulesForm.workDayArr" size="medium">
              <el-checkbox-button v-for="week in weeks" :label="week.value" :key="week.value" :value="week.value">{{ week.label }}</el-checkbox-button>
            </el-checkbox-group>
          </el-form-item>
        </el-col>
      </el-row>
      <el-divider content-position="left" >考勤时间设置</el-divider>
      <el-row>
        <el-col :offset="2" style="margin-top: 5px;">
          <el-col :span="6">
            <el-form-item label="上班时间" prop="workTimeBegin">
              <el-time-picker
                v-model="atdRulesForm.workTimeBegin"
                :default-value = "atdRulesForm.workTimeBegin"
                :picker-options="{selectableRange:`00:00:00 - ${(atdRulesForm.breakTimeBegin ? atdRulesForm.breakTimeBegin : atdRulesForm.workTimeEnd) ? (atdRulesForm.breakTimeBegin ? atdRulesForm.breakTimeBegin : atdRulesForm.workTimeEnd) + ':00' : '23:59:00'}`}"
                format="HH:mm"
                value-format="HH:mm:ss"
                placeholder="上班时间"/>
            </el-form-item>
          </el-col>
          <el-col :span="6" style="margin-left: 15px">
            <el-form-item label="下班时间" prop="workTimeEnd">
              <el-time-picker
                v-model="atdRulesForm.workTimeEnd"
                :default-value = "atdRulesForm.workTimeEnd"
                :picker-options="{selectableRange: `${(atdRulesForm.breakTimeEnd ? atdRulesForm.breakTimeEnd : atdRulesForm.workTimeBegin) ? (atdRulesForm.breakTimeEnd ? atdRulesForm.breakTimeEnd : atdRulesForm.workTimeBegin) +':00' : '00:00:00'}-23:59:00`}"
                format="HH:mm"
                value-format="HH:mm:ss"
                placeholder="下班时间"/>
            </el-form-item>
          </el-col>
        </el-col>
      </el-row>
      <el-row>
        <el-col :offset="2" style="margin-bottom: 5px">
          <el-col :span="6">
            <el-form-item label="休息开始时间" prop="breakTimeBegin">
              <el-time-picker
                v-model="atdRulesForm.breakTimeBegin"
                :default-value = "atdRulesForm.breakTimeBegin"
                :picker-options="{selectableRange:`${atdRulesForm.workTimeBegin ? atdRulesForm.workTimeBegin+':00' : '00:00:00'} -${atdRulesForm.breakTimeEnd ? atdRulesForm.breakTimeEnd+':00' : '23:59:00'}`}"
                format="HH:mm"
                value-format="HH:mm:ss"
                placeholder="休息开始时间"/>
            </el-form-item>
          </el-col>
          <el-col :span="6" style="margin-left: 15px">
            <el-form-item label="休息结束时间" prop="breakTimeEnd">
              <el-time-picker
                v-model="atdRulesForm.breakTimeEnd"
                :default-value = "atdRulesForm.breakTimeEnd"
                :picker-options="{selectableRange:`${atdRulesForm.breakTimeBegin ? atdRulesForm.breakTimeBegin+':00' : '00:00:00'} -${atdRulesForm.workTimeEnd ? atdRulesForm.workTimeEnd +':00' : '23:59:00'}`}"
                format="HH:mm"
                value-format="HH:mm:ss"
                placeholder="休息结束时间"/>
            </el-form-item>
          </el-col>
        </el-col>
      </el-row>
      <el-divider content-position="left">迟到规则设置</el-divider>
      <el-row>
        <el-col :span="6" :offset="2" style="margin-top: 5px;">
          <el-form-item label="迟到宽容时长(分钟)" prop="delayBegin1">
            <el-input v-model.number.trim="atdRulesForm.delayBegin1" :max="atdRulesForm.delayBegin2" min="0" style="width: 220px" type="number" placeholder="必填"/>
          </el-form-item>
        </el-col>
        <el-col :span="8" style="margin-top: 15px;margin-left: 140px"><span> 说明:晚到时长超过xx分钟将视为迟到</span></el-col>
      </el-row>
      <el-row>
        <el-col :span="6" :offset="2">
          <el-form-item label="严重迟到时长(分钟)" prop="delayBegin2">
            <el-input v-model.number.trim="atdRulesForm.delayBegin2" :min="atdRulesForm.delayBegin1" style="width: 220px" type="number" placeholder="必填"/>
          </el-form-item>
        </el-col>
        <el-col :span="8" style="margin-top: 12px;margin-left: 140px"><span> 说明:晚到时长超过xx分钟将视为旷工</span></el-col>
      </el-row>
      <el-row>
        <el-col :offset="8" style="margin-top: 20px;">
          <el-button type="primary" size="medium" @click="cancel">放弃修改</el-button>
          <el-button type="primary" size="medium" @click="save">保存修改</el-button>
        </el-col>
      </el-row>
    </el-form>
  </div>
</template>

<script>
import { getAtdRules, updateAtdRules } from '@/api/attendance'

export default {
  name: 'AtdRules',
  data() {
    const valiDelay1 = (rule, value, callback) => {
      if (value !== '') {
        if (parseInt(value) < 0) {
          callback(new Error('不能小于0'))
        } else {
          if (this.atdRulesForm.delayBegin2 !== '' && parseInt(value) > parseInt(this.atdRulesForm.delayBegin2)) {
            callback(new Error('不能大于严重迟到时长'))
          } else {
            callback()
          }
        }
      } else {
        callback(new Error('迟到宽容时长不能为空'))
      }
    }
    const valiDelay2 = (rule, value, callback) => {
      if (value !== '') {
        if (this.atdRulesForm.delayBegin1 !== '' && parseInt(value) < parseInt(this.atdRulesForm.delayBegin1)) {
          callback(new Error('不能小于迟到宽容时长'))
        } else {
          if (this.atdRulesForm.workTimeBegin !== '' && this.atdRulesForm.breakTimeBegin !== '') {
            debugger
            var time1 = new Date('2020-01-01 ' + this.atdRulesForm.workTimeBegin)
            var time2 = new Date('2020-01-01 ' + this.atdRulesForm.breakTimeBegin)
            var diff = time2.getTime() - time1.getTime() // 时间差的毫秒数
            var minutes = Math.floor(diff / (60 * 1000))// 计算相差分钟数
            if (parseInt(value) > parseInt(minutes)) {
              callback(new Error('不能大于上午上班时长'))
            } else {
              callback()
            }
          } else {
            callback()
          }
        }
      } else {
        callback(new Error('严重迟到时长不能为空'))
      }
    }
    return {
      showPage: false,
      weeks: [{ label: '星期一', value: '1' }, { label: '星期二', value: '2' }, { label: '星期三', value: '3' }, { label: '星期四', value: '4' }, { label: '星期五', value: '5' }, { label: '星期六', value: '6' }, { label: '星期日', value: '7' }],
      // weeks: ['星期一','星期二','星期三','星期四','星期五','星期六','星期日'],
      atdRulesForm: {
        id: '',
        workDayArr: [],
        workDay: '',
        workTimeBegin: '',
        workTimeEnd: '',
        breakTimeBegin: '',
        breakTimeEnd: '',
        delayBegin1: '',
        delayBegin2: ''
      },
      rules: {
        workDayArr: [{ required: true, type: 'array', min: 1, message: '请选择工作日', trigger: ['blur', 'change'] }],
        workTimeBegin: [{ type: 'string', required: true, message: '上班时间必填', trigger: ['blur', 'change'] }],
        workTimeEnd: [{ type: 'string', required: true, message: '下班时间必填', trigger: ['blur', 'change'] }],
        breakTimeBegin: [{ required: true, message: '休息开始时间必填', trigger: ['blur', 'change'] }],
        breakTimeEnd: [{ required: true, message: '休息结束时间必填', trigger: ['blur', 'change'] }],
        delayBegin1: [{ validator: valiDelay1, type: 'number', required: true, trigger: 'blur', multiLine: false }],
        delayBegin2: [{ validator: valiDelay2, type: 'number', required: true, trigger: 'blur' }]
      }
    }
  },
  mounted() {
    this.fetchData()// 获取数据
  },
  methods: {
    // 保存
    save() {
      this.$refs['dataForm'].validate((valid) => {
        if (valid) {
          // 处理工作日数据,转换为字符串
          this.atdRulesForm.workDay = this.atdRulesForm.workDayArr.join(',')
          console.log(this.atdRulesForm.workTimeBegin)
          updateAtdRules(this.atdRulesForm).then(response => {
            if (response.code === 200) {
              this.$message.success('修改成功')
            }
          })
        }
      })
    },
    // 获取数据
    fetchData() {
      getAtdRules().then(response => {
        if (response.code === 200) {
          this.atdRulesForm.id = response.data.id
          this.atdRulesForm.workDayArr = response.data.workDay.split(',') // 处理工作日数据,转换为数组
          this.atdRulesForm.workTimeBegin = response.data.workTimeBegin
          this.atdRulesForm.workTimeEnd = response.data.workTimeEnd
          this.atdRulesForm.breakTimeBegin = response.data.breakTimeBegin
          this.atdRulesForm.breakTimeEnd = response.data.breakTimeEnd
          this.atdRulesForm.delayBegin1 = response.data.delayBegin1
          this.atdRulesForm.delayBegin2 = response.data.delayBegin2
        }
        this.showPage = true
      })
    },
    // 放弃修改
    cancel() {
      // 清除验证
      this.$nextTick(() => {
        this.$refs['dataForm'].clearValidate()
      })
      this.fetchData()
    }
  }
}
</script>

<style rel="stylesheet/scss" lang="scss" scoped>
</style>