| | |
| | | <el-tab-pane label="假期设置" name="holiday"> |
| | | <div class="tab-content"> |
| | | <el-button type="primary" @click="openDialog('holiday', 'add')">新增假期</el-button> |
| | | |
| | | |
| | | <el-table :data="holidayData" border style="width: 100%; margin-top: 20px;"> |
| | | <el-table-column prop="name" label="假期名称" /> |
| | | <el-table-column prop="type" label="假期类型"> |
| | |
| | | <el-tab-pane label="年假设置" name="annual"> |
| | | <div class="tab-content"> |
| | | <el-button type="primary" @click="openDialog('annual', 'add')">新增年假规则</el-button> |
| | | |
| | | |
| | | <el-table :data="annualData" border style="width: 100%; margin-top: 20px;"> |
| | | <el-table-column prop="employeeType" label="员工类型"> |
| | | <template #default="scope"> |
| | |
| | | <el-tab-pane label="加班设置" name="overtime"> |
| | | <div class="tab-content"> |
| | | <el-button type="primary" @click="openDialog('overtime', 'add')">新增加班规则</el-button> |
| | | |
| | | |
| | | <el-table :data="overtimeData" border style="width: 100%; margin-top: 20px;"> |
| | | <el-table-column prop="name" label="规则名称" /> |
| | | <el-table-column prop="type" label="加班类型" > |
| | |
| | | <el-tab-pane label="上班时间设置" name="worktime"> |
| | | <div class="tab-content"> |
| | | <el-button type="primary" @click="openDialog('worktime', 'add')">新增时间段</el-button> |
| | | |
| | | |
| | | <el-table :data="worktimeData" border style="width: 100%; margin-top: 20px;"> |
| | | <el-table-column prop="name" label="时间段名称" /> |
| | | <el-table-column prop="startTime" label="上班时间"/> |
| | |
| | | <el-form-item label="名称" prop="name" v-if="currentType !== 'annual'"> |
| | | <el-input v-model="form.name" placeholder="请输入名称" /> |
| | | </el-form-item> |
| | | |
| | | |
| | | <el-form-item label="类型" prop="type" v-if="currentType === 'holiday' || currentType === 'overtime'"> |
| | | <el-select v-model="form.type" placeholder="请选择类型" style="width: 100%"> |
| | | <el-option |
| | | v-for="option in getTypeOptions()" |
| | | :key="option.value" |
| | | :label="option.label" |
| | | :value="option.value" |
| | | <el-option |
| | | v-for="option in getTypeOptions()" |
| | | :key="option.value" |
| | | :label="option.label" |
| | | :value="option.value" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | |
| | | <!-- <el-option label="正式员工" value="regular" /> |
| | | <el-option label="试用期员工" value="probation" /> |
| | | <el-option label="实习生" value="intern" /> --> |
| | | <el-option |
| | | v-for="option in getTypeOptions()" |
| | | :key="option.value" |
| | | :label="option.label" |
| | | :value="option.value" |
| | | <el-option |
| | | v-for="option in getTypeOptions()" |
| | | :key="option.value" |
| | | :label="option.label" |
| | | :value="option.value" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | |
| | | @change="validateTimeField('startTime')" |
| | | /> |
| | | </el-form-item> |
| | | |
| | | |
| | | <el-form-item label="结束时间" prop="endTime" v-if="currentType === 'overtime'"> |
| | | <el-time-picker |
| | | v-model="form.endTime" |
| | |
| | | </el-radio-group> |
| | | </el-form-item> |
| | | </el-form> |
| | | |
| | | |
| | | <template #footer> |
| | | <span class="dialog-footer"> |
| | | <el-button @click="dialogVisible = false">取消</el-button> |
| | |
| | | workYears: [{ required: true, message: '请输入工作年限', trigger: 'blur' }], |
| | | annualDays: [{ required: true, message: '请输入年假天数', trigger: 'blur' }], |
| | | maxCarryOver: [{ required: true, message: '请输入最大结转天数', trigger: 'blur' }], |
| | | startTime: [{ |
| | | required: true, |
| | | message: '请选择开始时间', |
| | | startTime: [{ |
| | | required: true, |
| | | message: '请选择开始时间', |
| | | trigger: 'change', |
| | | validator: (rule, value, callback) => { |
| | | if (!value) { |
| | |
| | | } |
| | | } |
| | | }], |
| | | endTime: [{ |
| | | required: true, |
| | | message: '请选择结束时间', |
| | | endTime: [{ |
| | | required: true, |
| | | message: '请选择结束时间', |
| | | trigger: 'change', |
| | | validator: (rule, value, callback) => { |
| | | if (!value) { |
| | |
| | | } |
| | | } |
| | | }], |
| | | workStartTime: [{ |
| | | required: true, |
| | | message: '请选择上班时间', |
| | | workStartTime: [{ |
| | | required: true, |
| | | message: '请选择上班时间', |
| | | trigger: 'change', |
| | | validator: (rule, value, callback) => { |
| | | if (!value) { |
| | |
| | | } |
| | | } |
| | | }], |
| | | workEndTime: [{ |
| | | required: true, |
| | | message: '请选择下班时间', |
| | | workEndTime: [{ |
| | | required: true, |
| | | message: '请选择下班时间', |
| | | trigger: 'change', |
| | | validator: (rule, value, callback) => { |
| | | if (!value) { |
| | |
| | | const end = new Date(form.dateRange[1]) |
| | | form.startDate = start.toISOString().split('T')[0] |
| | | form.endDate = end.toISOString().split('T')[0] |
| | | |
| | | |
| | | if (isNaN(start.getTime()) || isNaN(end.getTime())) { |
| | | console.warn('无效的日期格式') |
| | | return |
| | | } |
| | | |
| | | |
| | | const diffTime = Math.abs(end - start) |
| | | const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24)) + 1 |
| | | form.days = diffDays |
| | |
| | | try { |
| | | currentType.value = type |
| | | currentAction.value = action |
| | | |
| | | |
| | | if (action === 'add') { |
| | | dialogTitle.value = `新增${getTypeName(type)}` |
| | | currentEditId.value = '' |
| | |
| | | currentEditId.value = row.id |
| | | fillForm(row) |
| | | } |
| | | |
| | | |
| | | dialogVisible.value = true |
| | | } catch (error) { |
| | | console.error('打开弹窗失败:', error) |
| | |
| | | ElMessage.error('表单引用不存在') |
| | | return |
| | | } |
| | | |
| | | |
| | | await formRef.value.validate() |
| | | |
| | | |
| | | if (currentAction.value === 'add') { |
| | | addItem() |
| | | } else if (currentAction.value === 'edit') { |
| | | editItem() |
| | | } |
| | | |
| | | |
| | | dialogVisible.value = false |
| | | ElMessage.success('操作成功') |
| | | } catch (error) { |
| | |
| | | const editItem = () => { |
| | | let dataArray |
| | | let index |
| | | |
| | | |
| | | if (currentType.value === 'holiday') { |
| | | const params = { |
| | | id: currentEditId.value, |
| | |
| | | // dataArray = overtimeData.value |
| | | // index = dataArray.findIndex(item => item.id === currentEditId.value) |
| | | // if (index > -1) { |
| | | // dataArray[index] = { |
| | | // dataArray[index] = { |
| | | // ...dataArray[index], |
| | | // name: form.name, |
| | | // type: form.type, |
| | |
| | | // dataArray = worktimeData.value |
| | | // index = dataArray.findIndex(item => item.id === currentEditId.value) |
| | | // if (index > -1) { |
| | | // dataArray[index] = { |
| | | // dataArray[index] = { |
| | | // ...dataArray[index], |
| | | // name: form.name, |
| | | // startTime: form.workStartTime || '', |
| | |
| | | ElMessage.error(err.msg); |
| | | }) |
| | | } |
| | | |
| | | |
| | | // const index = dataArray.findIndex(item => item.id === row.id) |
| | | // if (index > -1) { |
| | | // dataArray.splice(index, 1) |