feat: 质检四模块导出按筛选条件、考勤节假日配置改为时间段
1. MES 质检:IQC/IPQC/OQC/RQC 导出改为按当前筛选条件直接导出,删除原「导出区间」弹窗组件。
2. HRM 考勤:节假日配置表单改为「日期区间」RangePicker 录入,列表按区间展示。
(参考 dev_宁夏_万通新材料 前端实现)
| | |
| | | export interface Holiday { |
| | | id?: number; |
| | | name?: string; |
| | | date?: string; |
| | | /** å¼å§æ¥æ */ |
| | | startDate?: string; |
| | | /** ç»ææ¥æ */ |
| | | endDate?: string; |
| | | type?: number; |
| | | typeName?: string; |
| | | isLegal?: number; |
| | |
| | | rules: 'required', |
| | | }, |
| | | { |
| | | fieldName: 'date', |
| | | label: 'æ¥æ', |
| | | component: 'DatePicker', |
| | | fieldName: 'dateRange', |
| | | label: 'æ¥æåºé´', |
| | | component: 'RangePicker', |
| | | componentProps: { |
| | | placeholder: 'éæ©æ¥æ', |
| | | valueFormat: 'YYYY-MM-DD', |
| | | style: { width: '100%' }, |
| | | }, |
| | |
| | | export function useGridColumns(): VxeTableGridOptions<HrmAttendanceHolidayApi.Holiday>['columns'] { |
| | | return [ |
| | | { field: 'name', title: 'è忥åç§°', minWidth: 150 }, |
| | | { field: 'date', title: 'æ¥æ', width: 120 }, |
| | | { |
| | | field: 'startDate', |
| | | title: 'æ¥æåºé´', |
| | | minWidth: 200, |
| | | slots: { |
| | | default: 'dateRange', |
| | | }, |
| | | }, |
| | | { |
| | | field: 'type', |
| | | title: 'ç±»å', |
| | |
| | | ]" |
| | | /> |
| | | </template> |
| | | <template #dateRange="{ row }"> |
| | | <span v-if="!row.startDate && !row.endDate">-</span> |
| | | <span v-else-if="row.startDate === row.endDate">{{ row.startDate }}</span> |
| | | <span v-else>{{ row.startDate }} ~ {{ row.endDate }}</span> |
| | | </template> |
| | | <template #isLegal="{ row }"> |
| | | <Tag v-if="row.isLegal === 1" color="red">æ³å®</Tag> |
| | | <span v-else>-</span> |
| | |
| | | return; |
| | | } |
| | | modalApi.lock(); |
| | | const data = (await formApi.getValues()) as HrmAttendanceHolidayApi.Holiday; |
| | | const values = (await formApi.getValues()) as HrmAttendanceHolidayApi.Holiday & { |
| | | dateRange?: string[]; |
| | | }; |
| | | const { dateRange, ...rest } = values; |
| | | const data: HrmAttendanceHolidayApi.Holiday = { |
| | | ...rest, |
| | | startDate: dateRange?.[0], |
| | | endDate: dateRange?.[1], |
| | | }; |
| | | try { |
| | | if (formType.value === 'update') { |
| | | await updateAttendanceHoliday(data); |
| | |
| | | } |
| | | modalApi.lock(); |
| | | try { |
| | | await formApi.setValues(await getAttendanceHoliday(data.id)); |
| | | const detail = await getAttendanceHoliday(data.id); |
| | | await formApi.setValues({ |
| | | ...detail, |
| | | dateRange: |
| | | detail.startDate && detail.endDate |
| | | ? [detail.startDate, detail.endDate] |
| | | : undefined, |
| | | }); |
| | | } finally { |
| | | modalApi.unlock(); |
| | | } |
| | |
| | | |
| | | import { Page, useVbenModal } from '@vben/common-ui'; |
| | | import { MesQcStatusEnum } from '@vben/constants'; |
| | | import { downloadFileFromBlobPart } from '@vben/utils'; |
| | | |
| | | import { Button, message } from 'ant-design-vue'; |
| | | |
| | |
| | | importIpqcTemplate, |
| | | } from '#/api/mes/qc/ipqc'; |
| | | import { $t } from '#/locales'; |
| | | import QcExportRangeModal from '#/views/mes/qc/components/export-range-modal.vue'; |
| | | import QcImportFormModal from '#/views/mes/qc/components/import-form-modal.vue'; |
| | | import QcReportGenerateModal from '#/views/mes/qc/components/report-generate-modal.vue'; |
| | | |
| | |
| | | |
| | | const [FormModal, formModalApi] = useVbenModal({ |
| | | connectedComponent: Form, |
| | | destroyOnClose: true, |
| | | }); |
| | | |
| | | const [ExportRangeModal, exportRangeModalApi] = useVbenModal({ |
| | | connectedComponent: QcExportRangeModal, |
| | | destroyOnClose: true, |
| | | }); |
| | | |
| | |
| | | } |
| | | } |
| | | |
| | | /** 导åºè¡¨æ ¼ï¼å¼¹çªéæ£éªæ¶é´èå´ï¼ */ |
| | | function handleExport() { |
| | | exportRangeModalApi |
| | | .setData({ |
| | | title: 'ææ£éªæ¶é´å¯¼åºè¿ç¨æ£éªå', |
| | | exportApi: exportIpqc, |
| | | fileName: 'è¿ç¨æ£éªå.xls', |
| | | }) |
| | | .open(); |
| | | /** 导åºè¡¨æ ¼ï¼æå表ç鿡件坼åºï¼ */ |
| | | async function handleExport() { |
| | | const data = await exportIpqc(await gridApi.formApi.getValues()); |
| | | downloadFileFromBlobPart({ fileName: 'è¿ç¨æ£éªå.xls', source: data }); |
| | | } |
| | | |
| | | /** åºæ¥åï¼æ°æ®ç±å端ä»è¯¥è´¨æ£ååï¼å端åªéæ¨¡æ¿ */ |
| | |
| | | <template> |
| | | <Page auto-content-height> |
| | | <FormModal @success="handleRefresh" /> |
| | | <ExportRangeModal /> |
| | | <ReportModal /> |
| | | <ImportModal @success="handleRefresh" /> |
| | | <Grid table-title="è¿ç¨æ£éªåå表"> |
| | |
| | | |
| | | import { Page, useVbenModal } from '@vben/common-ui'; |
| | | import { MesQcStatusEnum } from '@vben/constants'; |
| | | import { downloadFileFromBlobPart } from '@vben/utils'; |
| | | |
| | | import { Button, message } from 'ant-design-vue'; |
| | | |
| | |
| | | importIqcTemplate, |
| | | } from '#/api/mes/qc/iqc'; |
| | | import { $t } from '#/locales'; |
| | | import QcExportRangeModal from '#/views/mes/qc/components/export-range-modal.vue'; |
| | | import QcImportFormModal from '#/views/mes/qc/components/import-form-modal.vue'; |
| | | import QcReportGenerateModal from '#/views/mes/qc/components/report-generate-modal.vue'; |
| | | |
| | |
| | | |
| | | const [FormModal, formModalApi] = useVbenModal({ |
| | | connectedComponent: Form, |
| | | destroyOnClose: true, |
| | | }); |
| | | |
| | | const [ExportRangeModal, exportRangeModalApi] = useVbenModal({ |
| | | connectedComponent: QcExportRangeModal, |
| | | destroyOnClose: true, |
| | | }); |
| | | |
| | |
| | | } |
| | | } |
| | | |
| | | /** 导åºè¡¨æ ¼ï¼å¼¹çªéæ£éªæ¶é´èå´ï¼ */ |
| | | function handleExport() { |
| | | exportRangeModalApi |
| | | .setData({ |
| | | title: 'ææ£éªæ¶é´å¯¼åºæ¥ææ£éªå', |
| | | exportApi: exportIqc, |
| | | fileName: 'æ¥ææ£éªå.xls', |
| | | }) |
| | | .open(); |
| | | /** 导åºè¡¨æ ¼ï¼æå表ç鿡件坼åºï¼ */ |
| | | async function handleExport() { |
| | | const data = await exportIqc(await gridApi.formApi.getValues()); |
| | | downloadFileFromBlobPart({ fileName: 'æ¥ææ£éªå.xls', source: data }); |
| | | } |
| | | |
| | | /** åºæ¥åï¼æ°æ®ç±å端ä»è¯¥è´¨æ£ååï¼å端åªéæ¨¡æ¿ */ |
| | |
| | | <template> |
| | | <Page auto-content-height> |
| | | <FormModal @success="handleRefresh" /> |
| | | <ExportRangeModal /> |
| | | <ReportModal /> |
| | | <ImportModal @success="handleRefresh" /> |
| | | <Grid table-title="æ¥ææ£éªåå表"> |
| | |
| | | |
| | | import { Page, useVbenModal } from '@vben/common-ui'; |
| | | import { MesQcStatusEnum } from '@vben/constants'; |
| | | import { downloadFileFromBlobPart } from '@vben/utils'; |
| | | |
| | | import { Button, message } from 'ant-design-vue'; |
| | | |
| | |
| | | importOqcTemplate, |
| | | } from '#/api/mes/qc/oqc'; |
| | | import { $t } from '#/locales'; |
| | | import QcExportRangeModal from '#/views/mes/qc/components/export-range-modal.vue'; |
| | | import QcImportFormModal from '#/views/mes/qc/components/import-form-modal.vue'; |
| | | import QcReportGenerateModal from '#/views/mes/qc/components/report-generate-modal.vue'; |
| | | |
| | |
| | | |
| | | const [FormModal, formModalApi] = useVbenModal({ |
| | | connectedComponent: Form, |
| | | destroyOnClose: true, |
| | | }); |
| | | |
| | | const [ExportRangeModal, exportRangeModalApi] = useVbenModal({ |
| | | connectedComponent: QcExportRangeModal, |
| | | destroyOnClose: true, |
| | | }); |
| | | |
| | |
| | | } |
| | | } |
| | | |
| | | /** 导åºè¡¨æ ¼ï¼å¼¹çªéæ£éªæ¶é´èå´ï¼ */ |
| | | function handleExport() { |
| | | exportRangeModalApi |
| | | .setData({ |
| | | title: 'ææ£éªæ¶é´å¯¼åºè´§æ£éªå', |
| | | exportApi: exportOqc, |
| | | fileName: 'åºè´§æ£éªå.xls', |
| | | }) |
| | | .open(); |
| | | /** 导åºè¡¨æ ¼ï¼æå表ç鿡件坼åºï¼ */ |
| | | async function handleExport() { |
| | | const data = await exportOqc(await gridApi.formApi.getValues()); |
| | | downloadFileFromBlobPart({ fileName: 'åºè´§æ£éªå.xls', source: data }); |
| | | } |
| | | |
| | | /** åºæ¥åï¼æ°æ®ç±å端ä»è¯¥è´¨æ£ååï¼å端åªéæ¨¡æ¿ */ |
| | |
| | | <template> |
| | | <Page auto-content-height> |
| | | <FormModal @success="handleRefresh" /> |
| | | <ExportRangeModal /> |
| | | <ReportModal /> |
| | | <ImportModal @success="handleRefresh" /> |
| | | <Grid table-title="åºè´§æ£éªåå表"> |
| | |
| | | |
| | | import { Page, useVbenModal } from '@vben/common-ui'; |
| | | import { MesQcStatusEnum } from '@vben/constants'; |
| | | import { downloadFileFromBlobPart } from '@vben/utils'; |
| | | |
| | | import { Button, message } from 'ant-design-vue'; |
| | | |
| | | import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table'; |
| | | import { deleteRqc, exportRqc, getRqcPage } from '#/api/mes/qc/rqc'; |
| | | import { $t } from '#/locales'; |
| | | import QcExportRangeModal from '#/views/mes/qc/components/export-range-modal.vue'; |
| | | import QcReportGenerateModal from '#/views/mes/qc/components/report-generate-modal.vue'; |
| | | |
| | | import { useGridColumns, useGridFormSchema } from './data'; |
| | |
| | | |
| | | const [FormModal, formModalApi] = useVbenModal({ |
| | | connectedComponent: Form, |
| | | destroyOnClose: true, |
| | | }); |
| | | |
| | | const [ExportRangeModal, exportRangeModalApi] = useVbenModal({ |
| | | connectedComponent: QcExportRangeModal, |
| | | destroyOnClose: true, |
| | | }); |
| | | |
| | |
| | | } |
| | | } |
| | | |
| | | /** 导åºè¡¨æ ¼ï¼å¼¹çªéæ£éªæ¶é´èå´ï¼ */ |
| | | function handleExport() { |
| | | exportRangeModalApi |
| | | .setData({ |
| | | title: 'ææ£éªæ¶é´å¯¼éè´§æ£éªå', |
| | | exportApi: exportRqc, |
| | | fileName: 'éè´§æ£éªå.xls', |
| | | }) |
| | | .open(); |
| | | /** 导åºè¡¨æ ¼ï¼æå表ç鿡件坼åºï¼ */ |
| | | async function handleExport() { |
| | | const data = await exportRqc(await gridApi.formApi.getValues()); |
| | | downloadFileFromBlobPart({ fileName: 'éè´§æ£éªå.xls', source: data }); |
| | | } |
| | | |
| | | /** åºæ¥åï¼æ°æ®ç±å端ä»è¯¥è´¨æ£ååï¼å端åªéæ¨¡æ¿ */ |
| | |
| | | <template> |
| | | <Page auto-content-height> |
| | | <FormModal @success="handleRefresh" /> |
| | | <ExportRangeModal /> |
| | | <ReportModal /> |
| | | <Grid table-title="éè´§æ£éªåå表"> |
| | | <template #toolbar-tools> |