fix(hrm): 节假日日期改为范围选择,新增弹框加宽到 800px
- 日期改用 RangePicker,新增时按范围逐个生成节假日记录,编辑时回填为范围
- 节假日类型在字典缺失时回退到「休息日/工作日」
- 弹框 600px -> 800px,范围选择器的两个日期框不再被截断
Co-Authored-By: Claude Code <noreply@anthropic.com>
| | |
| | | { |
| | | fieldName: 'date', |
| | | label: '日期', |
| | | component: 'DatePicker', |
| | | component: 'RangePicker', |
| | | componentProps: { |
| | | placeholder: '选择日期', |
| | | placeholder: ['开始日期', '结束日期'], |
| | | valueFormat: 'YYYY-MM-DD', |
| | | style: { width: '100%' }, |
| | | }, |
| | |
| | | label: '类型', |
| | | component: 'RadioGroup', |
| | | componentProps: { |
| | | options: getDictOptions(DICT_TYPE.HRM_HOLIDAY_TYPE, 'number'), |
| | | options: getDictOptions(DICT_TYPE.HRM_HOLIDAY_TYPE, 'number').length |
| | | ? getDictOptions(DICT_TYPE.HRM_HOLIDAY_TYPE, 'number') |
| | | : [ |
| | | { label: '休息日', value: 1 }, |
| | | { label: '工作日', value: 2 }, |
| | | ], |
| | | }, |
| | | rules: 'selectRequired', |
| | | }, |
| | |
| | | }, |
| | | }, |
| | | ]; |
| | | } |
| | | } |
| | |
| | | return; |
| | | } |
| | | modalApi.lock(); |
| | | const data = (await formApi.getValues()) as HrmAttendanceHolidayApi.Holiday; |
| | | const data = (await formApi.getValues()) as HrmAttendanceHolidayApi.Holiday & { |
| | | date: string | string[]; |
| | | }; |
| | | try { |
| | | if (formType.value === 'update') { |
| | | data.date = Array.isArray(data.date) ? data.date[0] : data.date; |
| | | await updateAttendanceHoliday(data); |
| | | } else { |
| | | await createAttendanceHoliday(data); |
| | | const dates = Array.isArray(data.date) ? data.date : [data.date]; |
| | | for (const date of dates) { |
| | | await createAttendanceHoliday({ ...data, date }); |
| | | } |
| | | } |
| | | await modalApi.close(); |
| | | emit('success'); |
| | |
| | | } |
| | | modalApi.lock(); |
| | | try { |
| | | await formApi.setValues(await getAttendanceHoliday(data.id)); |
| | | const detail = await getAttendanceHoliday(data.id); |
| | | await formApi.setValues({ ...detail, date: [detail.date, detail.date] }); |
| | | } finally { |
| | | modalApi.unlock(); |
| | | } |
| | |
| | | </script> |
| | | |
| | | <template> |
| | | <Modal :title="getTitle" class="w-[600px]"> |
| | | <Modal :title="getTitle" class="w-[800px]"> |
| | | <Form class="mx-4" /> |
| | | </Modal> |
| | | </template> |
| | | </template> |