index.vue 11.1 KB
<template>
  <div class="flow-form" v-loading="loading">
    <div class="com-title">
      <h1>请假申请</h1>
      <span class="number">流程编码:{{dataForm.billNo}}</span>
    </div>
    <el-form ref="dataForm" :model="dataForm" :rules="dataRule" label-width="100px"
      :disabled="setting.readonly">
      <el-row>
        <el-col :span="12" v-if="judgeShow('flowTitle')">
          <el-form-item label="流程标题" prop="flowTitle">
            <el-input v-model="dataForm.flowTitle" placeholder="流程标题"
              :disabled="judgeWrite('flowTitle')"></el-input>
          </el-form-item>
        </el-col>
        <el-col :span="12" v-if="judgeShow('flowUrgent')">
          <el-form-item label="紧急程度" prop="flowUrgent">
            <el-select v-model="dataForm.flowUrgent" placeholder="选择紧急程度"
              :disabled="judgeWrite('flowUrgent')">
              <el-option :key="item.value" :label="item.label" :value="item.value"
                v-for="item in flowUrgentOptions" />
            </el-select>
          </el-form-item>
        </el-col>
        <el-col :span="12" v-if="judgeShow('applyUser')">
          <el-form-item label="申请人员" prop="applyUser">
            <el-input v-model="dataForm.applyUser" placeholder="申请人员" readonly
              :disabled="judgeWrite('applyUser')"></el-input>
          </el-form-item>
        </el-col>
        <el-col :span="12" v-if="judgeShow('applyDate')">
          <el-form-item label="申请日期" prop="applyDate">
            <el-date-picker v-model="dataForm.applyDate" type="date" placeholder="选择日期"
              value-format="timestamp" format="yyyy-MM-dd" :editable="false" readonly
              :disabled="judgeWrite('applyDate')">
            </el-date-picker>
          </el-form-item>
        </el-col>
        <el-col :span="12" v-if="judgeShow('applyDept')">
          <el-form-item label="申请部门" prop="applyDept">
            <el-input v-model="dataForm.applyDept" placeholder="申请部门" readonly
              :disabled="judgeWrite('applyDept')"></el-input>
          </el-form-item>
        </el-col>
        <el-col :span="12" v-if="judgeShow('applyPost')">
          <el-form-item label="申请职位" prop="applyPost">
            <el-input v-model="dataForm.applyPost" placeholder="申请职位" readonly
              :disabled="judgeWrite('applyPost')"></el-input>
          </el-form-item>
        </el-col>
        <el-col :span="24" v-if="judgeShow('leaveType')">
          <el-form-item label="请假类别" prop="leaveType">
            <el-radio-group v-model="dataForm.leaveType" :disabled="judgeWrite('leaveType')">
              <el-radio :label="item" v-for="item in leaveTypeOptions" :key="item">{{ item }}</el-radio>
            </el-radio-group>
          </el-form-item>
        </el-col>
        <el-col :span="24" v-if="judgeShow('leaveReason')">
          <el-form-item label="请假原因" prop="leaveReason">
            <el-input v-model="dataForm.leaveReason" placeholder="请假原因" type="textarea" :rows="3"
              :disabled="judgeWrite('leaveReason')" />
          </el-form-item>
        </el-col>
        <el-col :span="24" v-if="dataForm.leaveType === '丧假'">
          <el-form-item label="丧假关系" prop="funeralRelationType">
            <el-radio-group v-model="dataForm.funeralRelationType" :disabled="setting.readonly">
              <el-radio :label="1">直系亲属</el-radio>
              <el-radio :label="2">非直系亲属</el-radio>
            </el-radio-group>
          </el-form-item>
        </el-col>
        <el-col :span="12" v-if="judgeShow('leaveStartTime')">
          <el-form-item label="起始时间" prop="leaveStartTime">
            <el-date-picker v-model="dataForm.leaveStartTime" type="datetime" placeholder="选择日期"
              value-format="timestamp" format="yyyy-MM-dd HH:mm" :editable="false"
              :disabled="judgeWrite('leaveStartTime')">
            </el-date-picker>
          </el-form-item>
        </el-col>
        <el-col :span="12" v-if="judgeShow('leaveEndTime')">
          <el-form-item label="结束时间" prop="leaveEndTime">
            <el-date-picker v-model="dataForm.leaveEndTime" type="datetime" placeholder="选择日期"
              value-format="timestamp" format="yyyy-MM-dd HH:mm" :editable="false"
              :disabled="judgeWrite('leaveEndTime')">
            </el-date-picker>
          </el-form-item>
        </el-col>
        <el-col :span="12" v-if="judgeShow('leaveDayCount')">
          <el-form-item label="请假天数" prop="leaveDayCount">
            <el-input v-model="dataForm.leaveDayCount" placeholder="请假天数"
              :disabled="judgeWrite('leaveDayCount')">
              <template slot="append">天</template>
            </el-input>
          </el-form-item>
        </el-col>
        <el-col :span="12" v-if="judgeShow('leaveHour')">
          <el-form-item label="请假小时" prop="leaveHour">
            <el-input v-model="dataForm.leaveHour" placeholder="请假小时"
              :disabled="judgeWrite('leaveHour')"></el-input>
          </el-form-item>
        </el-col>
        <el-col :span="24" v-if="judgeShow('fileJson')">
          <el-form-item label="相关附件" prop="fileJson">
            <NCC-UploadFz v-model="fileList" type="workFlow" :disabled="judgeWrite('fileJson')" />
          </el-form-item>
        </el-col>
      </el-row>
    </el-form>
  </div>
</template>

<script>
import comMixin from '../../workFlowForm/mixin'
import { Info, Create, Update } from '@/api/workFlow/workFlowForm'

export default {
  mixins: [comMixin],
  name: 'QjsqApply',
  data() {
    const checkStartTime = (rule, value, callback) => {
      if (!this.dataForm.leaveEndTime) {
        callback()
      } else if (this.dataForm.leaveEndTime < value) {
        callback(new Error('起始日期应该小于结束日期'))
      } else {
        this.$refs.dataForm.validateField('leaveEndTime')
        callback()
      }
    }
    const checkEndTime = (rule, value, callback) => {
      if (!this.dataForm.leaveStartTime) {
        callback()
      } else if (this.dataForm.leaveStartTime > value) {
        callback(new Error('结束日期应该大于起始日期'))
      } else {
        callback()
      }
    }
    const checkFuneralRelationType = (rule, value, callback) => {
      if (this.dataForm.leaveType !== '丧假') {
        callback()
        return
      }
      if (value !== 1 && value !== 2) {
        callback(new Error('请选择丧假关系'))
        return
      }
      callback()
    }
    return {
      billEnCode: 'WF_LeaveApplyNo',
      formApiKey: 'leaveApply',
      dataForm: {
        flowId: '',
        id: '',
        billNo: '',
        flowTitle: '',
        flowUrgent: 1,
        applyUser: '',
        applyDate: '',
        applyDept: '',
        applyPost: '',
        leaveType: '事假',
        leaveReason: '',
        funeralRelationType: null,
        leaveStartTime: '',
        leaveEndTime: '',
        leaveDayCount: '',
        leaveHour: '',
        fileJson: ''
      },
      dataRule: {
        flowTitle: [
          { required: true, message: '流程标题不能为空', trigger: 'blur' }
        ],
        flowUrgent: [
          { required: true, message: '紧急程度不能为空', trigger: 'change' }
        ],
        leaveType: [
          { required: true, message: '请假类别不能为空', trigger: 'change' }
        ],
        leaveReason: [
          { required: true, message: '请假原因不能为空', trigger: 'blur' }
        ],
        funeralRelationType: [
          { validator: checkFuneralRelationType, trigger: 'change' }
        ],
        leaveStartTime: [
          { required: true, message: '起始时间不能为空', trigger: 'change' },
          { validator: checkStartTime, trigger: 'change' }
        ],
        leaveEndTime: [
          { required: true, message: '结束时间不能为空', trigger: 'change' },
          { validator: checkEndTime, trigger: 'change' }
        ],
        leaveDayCount: [
          { required: true, message: '请假天数不能为空', trigger: 'blur' },
          { validator: this.formValidate('allDate', '请假时间必须是整数和0.5的倍数'), trigger: 'blur' }
        ],
        leaveHour: [
          { required: true, message: '请假小时不能为空', trigger: 'blur' },
          { validator: this.formValidate('allDate', '请假小时必须是整数和0.5的倍数'), trigger: 'blur' }
        ]
      },
      leaveTypeOptions: ['事假', '病假', '婚假', '产假', '丧假', '年假', '休假', '调休', '其他']
    }
  },
  methods: {
    normalizeFuneralRelationType() {
      if (this.dataForm.leaveType !== '丧假' || this.dataForm.funeralRelationType === 1 || this.dataForm.funeralRelationType === 2) return
      const reason = this.dataForm.leaveReason || ''
      if (reason.includes('【非直系亲属】')) {
        this.dataForm.funeralRelationType = 2
      } else if (reason.includes('【直系亲属】')) {
        this.dataForm.funeralRelationType = 1
      }
    },
    selfInit() {
      this.dataForm.applyDate = new Date().getTime()
      this.dataForm.flowTitle = this.userInfo.userName + '的请假申请'
      this.dataForm.applyUser = this.userInfo.userName + '/' + this.userInfo.userAccount
      this.dataForm.applyDept = this.userInfo.organizeName
      if (this.userInfo.positionIds && this.userInfo.positionIds.length) {
        const list = this.userInfo.positionIds.map(o => o.name)
        this.dataForm.applyPost = list.join(',')
      }
    },
    selfGetInfo() {
      Info(this.formApiKey, this.setting.id).then(res => {
        this.dataForm = res.data
        this.normalizeFuneralRelationType()
        if (res.data.fileJson) {
          this.fileList = JSON.parse(res.data.fileJson)
        }
        this.$emit('setPageLoad')
      })
    },
    selfSubmit() {
      this.dataForm.status = this.eventType === 'submit' ? 0 : 1
      if (this.eventType === 'save') return this.selfHandleRequest()
      this.$confirm('您确定要提交当前流程吗, 是否继续?', '提示', {
        type: 'warning'
      }).then(() => {
        this.selfHandleRequest()
      }).catch(() => { })
    },
    selfHandleRequest() {
      if (!this.dataForm.id) delete this.dataForm.id
      if (this.eventType === 'save') this.$emit('setLoad', true)
      const formMethod = this.dataForm.id ? Update : Create
      formMethod(this.formApiKey, this.dataForm).then(res => {
        this.$message({
          message: res.msg,
          type: 'success',
          duration: 1500,
          onClose: () => {
            if (this.eventType === 'save') this.$emit('setLoad', false)
            this.$emit('close', true)
          }
        })
      }).catch(() => {
        if (this.eventType === 'save') this.$emit('setLoad', false)
      })
    }
  },
  watch: {
    'dataForm.leaveType'(value) {
      if (value === '丧假') {
        if (![1, 2].includes(Number(this.dataForm.funeralRelationType))) {
          this.dataForm.funeralRelationType = 1
        }
        this.normalizeFuneralRelationType()
      } else {
        this.dataForm.funeralRelationType = null
      }
    }
  }
}
</script>