From 5620ab475b200182a4d990ee04b029396f1db2dd Mon Sep 17 00:00:00 2001
From: 吴羡 <16976746+Xian-TT3@user.noreply.gitee.com>
Date: 星期三, 30 九月 2026 19:31:14 +0800
Subject: [PATCH] feat: 质检四模块导出按筛选条件、考勤节假日配置改为时间段
---
src/views/mes/qc/ipqc/index.vue | 21 +----
src/api/hrm/attendance/holiday/index.ts | 5 +
src/views/hrm/attendance/holiday/index.vue | 5 +
/dev/null | 89 ----------------------
src/views/mes/qc/oqc/index.vue | 21 +----
src/views/hrm/attendance/holiday/data.ts | 16 ++-
src/views/hrm/attendance/holiday/modules/form.vue | 19 ++++
src/views/mes/qc/iqc/index.vue | 21 +----
src/views/mes/qc/rqc/index.vue | 21 +----
9 files changed, 57 insertions(+), 161 deletions(-)
diff --git a/src/api/hrm/attendance/holiday/index.ts b/src/api/hrm/attendance/holiday/index.ts
index 89da4ec..b030fac 100644
--- a/src/api/hrm/attendance/holiday/index.ts
+++ b/src/api/hrm/attendance/holiday/index.ts
@@ -7,7 +7,10 @@
export interface Holiday {
id?: number;
name?: string;
- date?: string;
+ /** 寮�濮嬫棩鏈� */
+ startDate?: string;
+ /** 缁撴潫鏃ユ湡 */
+ endDate?: string;
type?: number;
typeName?: string;
isLegal?: number;
diff --git a/src/views/hrm/attendance/holiday/data.ts b/src/views/hrm/attendance/holiday/data.ts
index 822451b..9ae34ac 100644
--- a/src/views/hrm/attendance/holiday/data.ts
+++ b/src/views/hrm/attendance/holiday/data.ts
@@ -29,11 +29,10 @@
rules: 'required',
},
{
- fieldName: 'date',
- label: '鏃ユ湡',
- component: 'DatePicker',
+ fieldName: 'dateRange',
+ label: '鏃ユ湡鍖洪棿',
+ component: 'RangePicker',
componentProps: {
- placeholder: '閫夋嫨鏃ユ湡',
valueFormat: 'YYYY-MM-DD',
style: { width: '100%' },
},
@@ -126,7 +125,14 @@
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: '绫诲瀷',
diff --git a/src/views/hrm/attendance/holiday/index.vue b/src/views/hrm/attendance/holiday/index.vue
index 8a33871..e5e0b51 100644
--- a/src/views/hrm/attendance/holiday/index.vue
+++ b/src/views/hrm/attendance/holiday/index.vue
@@ -114,6 +114,11 @@
]"
/>
</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>
diff --git a/src/views/hrm/attendance/holiday/modules/form.vue b/src/views/hrm/attendance/holiday/modules/form.vue
index 2ae9c5d..614daa0 100644
--- a/src/views/hrm/attendance/holiday/modules/form.vue
+++ b/src/views/hrm/attendance/holiday/modules/form.vue
@@ -53,7 +53,15 @@
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);
@@ -81,7 +89,14 @@
}
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();
}
diff --git a/src/views/mes/qc/components/export-range-modal.vue b/src/views/mes/qc/components/export-range-modal.vue
deleted file mode 100644
index 19fedfe..0000000
--- a/src/views/mes/qc/components/export-range-modal.vue
+++ /dev/null
@@ -1,89 +0,0 @@
-<script lang="ts" setup>
-import { ref } from 'vue';
-
-import { useVbenModal } from '@vben/common-ui';
-import { downloadFileFromBlobPart } from '@vben/utils';
-
-import { DatePicker, message } from 'ant-design-vue';
-
-import { getRangePickerDefaultProps } from '#/utils';
-
-/** 瀵煎嚭鍙傛暟锛堝悗绔� PageReqVO 浠ユ暟缁勮В鏋� inspectDate 璧锋锛� */
-interface ExportParams {
- inspectDate?: [string, string];
-}
-
-interface ExportModalData {
- /** 寮圭獥鏍囬 */
- title?: string;
- /** 妯″潡瀵煎嚭鍑芥暟锛歳equestClient.download(...) 杩斿洖 Blob */
- exportApi: (params: ExportParams) => Promise<Blob>;
- /** 瀵煎嚭鏂囦欢鍚� */
- fileName: string;
-}
-
-defineOptions({ name: 'QcExportRangeModal' });
-
-const rangePickerProps = getRangePickerDefaultProps();
-
-const modalData = ref<ExportModalData>();
-const range = ref<[string, string] | undefined>(undefined);
-const exporting = ref(false);
-const title = ref('瀵煎嚭');
-
-const [Modal, modalApi] = useVbenModal({
- async onConfirm() {
- if (exporting.value) {
- return;
- }
- const data = modalData.value;
- if (!data) {
- return;
- }
- exporting.value = true;
- modalApi.lock();
- try {
- const params: ExportParams =
- range.value && range.value.length === 2
- ? { inspectDate: range.value }
- : {};
- const blob = await data.exportApi(params);
- downloadFileFromBlobPart({ fileName: data.fileName, source: blob });
- message.success('瀵煎嚭鎴愬姛');
- await modalApi.close();
- } finally {
- exporting.value = false;
- modalApi.unlock();
- }
- },
- onOpenChange(isOpen: boolean) {
- if (!isOpen) {
- modalData.value = undefined;
- range.value = undefined;
- return;
- }
- const data = modalApi.getData<ExportModalData>();
- modalData.value = data;
- range.value = undefined;
- title.value = data?.title ?? '瀵煎嚭';
- modalApi.setState({ confirmText: '瀵煎嚭' });
- },
-});
-</script>
-
-<template>
- <Modal :title="title" class="w-2/5" :mask-closable="false">
- <div class="px-1 py-3">
- <div class="mb-2 text-sm font-medium text-gray-700">妫�楠屾椂闂�</div>
- <DatePicker.RangePicker
- v-model:value="range"
- v-bind="rangePickerProps"
- allow-clear
- class="w-full"
- />
- <div class="mt-2 text-xs text-gray-400">
- 涓嶉�夋椂闂村垯瀵煎嚭鍏ㄩ儴鏁版嵁锛涘鍑烘寜銆屾娴嬫棩鏈熴�嶈繃婊�
- </div>
- </div>
- </Modal>
-</template>
diff --git a/src/views/mes/qc/ipqc/index.vue b/src/views/mes/qc/ipqc/index.vue
index b879b96..5906711 100644
--- a/src/views/mes/qc/ipqc/index.vue
+++ b/src/views/mes/qc/ipqc/index.vue
@@ -4,6 +4,7 @@
import { Page, useVbenModal } from '@vben/common-ui';
import { MesQcStatusEnum } from '@vben/constants';
+import { downloadFileFromBlobPart } from '@vben/utils';
import { Button, message } from 'ant-design-vue';
@@ -16,7 +17,6 @@
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';
@@ -28,11 +28,6 @@
const [FormModal, formModalApi] = useVbenModal({
connectedComponent: Form,
- destroyOnClose: true,
-});
-
-const [ExportRangeModal, exportRangeModalApi] = useVbenModal({
- connectedComponent: QcExportRangeModal,
destroyOnClose: true,
});
@@ -101,15 +96,10 @@
}
}
-/** 瀵煎嚭琛ㄦ牸锛堝脊绐楅�夋楠屾椂闂磋寖鍥达級 */
-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 });
}
/** 鍑烘姤鍛婏細鏁版嵁鐢卞悗绔粠璇ヨ川妫�鍗曞彇锛屽墠绔彧閫夋ā鏉� */
@@ -153,7 +143,6 @@
<template>
<Page auto-content-height>
<FormModal @success="handleRefresh" />
- <ExportRangeModal />
<ReportModal />
<ImportModal @success="handleRefresh" />
<Grid table-title="杩囩▼妫�楠屽崟鍒楄〃">
diff --git a/src/views/mes/qc/iqc/index.vue b/src/views/mes/qc/iqc/index.vue
index 4be3aed..4b1f1c5 100644
--- a/src/views/mes/qc/iqc/index.vue
+++ b/src/views/mes/qc/iqc/index.vue
@@ -7,6 +7,7 @@
import { Page, useVbenModal } from '@vben/common-ui';
import { MesQcStatusEnum } from '@vben/constants';
+import { downloadFileFromBlobPart } from '@vben/utils';
import { Button, message } from 'ant-design-vue';
@@ -19,7 +20,6 @@
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';
@@ -35,11 +35,6 @@
const [FormModal, formModalApi] = useVbenModal({
connectedComponent: Form,
- destroyOnClose: true,
-});
-
-const [ExportRangeModal, exportRangeModalApi] = useVbenModal({
- connectedComponent: QcExportRangeModal,
destroyOnClose: true,
});
@@ -107,15 +102,10 @@
}
}
-/** 瀵煎嚭琛ㄦ牸锛堝脊绐楅�夋楠屾椂闂磋寖鍥达級 */
-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 });
}
/** 鍑烘姤鍛婏細鏁版嵁鐢卞悗绔粠璇ヨ川妫�鍗曞彇锛屽墠绔彧閫夋ā鏉� */
@@ -166,7 +156,6 @@
<template>
<Page auto-content-height>
<FormModal @success="handleRefresh" />
- <ExportRangeModal />
<ReportModal />
<ImportModal @success="handleRefresh" />
<Grid table-title="鏉ユ枡妫�楠屽崟鍒楄〃">
diff --git a/src/views/mes/qc/oqc/index.vue b/src/views/mes/qc/oqc/index.vue
index 7491ac7..3782c48 100644
--- a/src/views/mes/qc/oqc/index.vue
+++ b/src/views/mes/qc/oqc/index.vue
@@ -4,6 +4,7 @@
import { Page, useVbenModal } from '@vben/common-ui';
import { MesQcStatusEnum } from '@vben/constants';
+import { downloadFileFromBlobPart } from '@vben/utils';
import { Button, message } from 'ant-design-vue';
@@ -16,7 +17,6 @@
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';
@@ -28,11 +28,6 @@
const [FormModal, formModalApi] = useVbenModal({
connectedComponent: Form,
- destroyOnClose: true,
-});
-
-const [ExportRangeModal, exportRangeModalApi] = useVbenModal({
- connectedComponent: QcExportRangeModal,
destroyOnClose: true,
});
@@ -100,15 +95,10 @@
}
}
-/** 瀵煎嚭琛ㄦ牸锛堝脊绐楅�夋楠屾椂闂磋寖鍥达級 */
-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 });
}
/** 鍑烘姤鍛婏細鏁版嵁鐢卞悗绔粠璇ヨ川妫�鍗曞彇锛屽墠绔彧閫夋ā鏉� */
@@ -152,7 +142,6 @@
<template>
<Page auto-content-height>
<FormModal @success="handleRefresh" />
- <ExportRangeModal />
<ReportModal />
<ImportModal @success="handleRefresh" />
<Grid table-title="鍑鸿揣妫�楠屽崟鍒楄〃">
diff --git a/src/views/mes/qc/rqc/index.vue b/src/views/mes/qc/rqc/index.vue
index 64564a9..a5d1e36 100644
--- a/src/views/mes/qc/rqc/index.vue
+++ b/src/views/mes/qc/rqc/index.vue
@@ -4,13 +4,13 @@
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';
@@ -21,11 +21,6 @@
const [FormModal, formModalApi] = useVbenModal({
connectedComponent: Form,
- destroyOnClose: true,
-});
-
-const [ExportRangeModal, exportRangeModalApi] = useVbenModal({
- connectedComponent: QcExportRangeModal,
destroyOnClose: true,
});
@@ -69,15 +64,10 @@
}
}
-/** 瀵煎嚭琛ㄦ牸锛堝脊绐楅�夋楠屾椂闂磋寖鍥达級 */
-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 });
}
/** 鍑烘姤鍛婏細鏁版嵁鐢卞悗绔粠璇ヨ川妫�鍗曞彇锛屽墠绔彧閫夋ā鏉� */
@@ -121,7 +111,6 @@
<template>
<Page auto-content-height>
<FormModal @success="handleRefresh" />
- <ExportRangeModal />
<ReportModal />
<Grid table-title="閫�璐ф楠屽崟鍒楄〃">
<template #toolbar-tools>
--
Gitblit v1.9.3