From 37ddf55c782ea3d128e7755a60f5e09f8e9cba09 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期五, 04 九月 2026 13:40:56 +0800
Subject: [PATCH] feat(qc): 添加质检方案选择和检测日期筛选功能
---
src/api/hrm/leave/index.ts | 20 +
src/views/hrm/leave/detail/approve/index.vue | 2
src/views/mes/qc/iqc/index.vue | 25 ++
src/views/mes/qc/ipqc/data.ts | 43 +++++
src/views/hrm/leave/data.ts | 15 +
src/views/mes/qc/iqc/data.ts | 28 +++
src/views/mes/qc/oqc/data.ts | 37 ++++
src/views/mes/qc/ipqc/index.vue | 25 ++
src/views/mes/qc/oqc/index.vue | 25 ++
src/views/mes/qc/rqc/index.vue | 25 ++
src/api/mes/qc/template/item/index.ts | 28 +++
src/views/hrm/leave/index.vue | 50 +++++
src/views/mes/qc/components/export-range-modal.vue | 89 +++++++++++
src/views/hrm/leave/modules/form.vue | 6
src/views/mes/qc/rqc/data.ts | 37 ++++
15 files changed, 415 insertions(+), 40 deletions(-)
diff --git a/src/api/hrm/leave/index.ts b/src/api/hrm/leave/index.ts
index e280286..ee16a80 100644
--- a/src/api/hrm/leave/index.ts
+++ b/src/api/hrm/leave/index.ts
@@ -7,8 +7,8 @@
/** 璇峰亣鐢宠 */
export interface Leave {
id?: number;
- employeeId?: number;
- employeeName?: string;
+ userId?: number;
+ userName?: string;
deptName?: string;
leaveType?: number;
startTime?: string;
@@ -21,6 +21,12 @@
processInstanceId?: string;
remark?: string;
createTime?: string;
+ }
+
+ /** 瀹℃壒娴佺▼ */
+ export interface ApproveProcess {
+ key: string;
+ name: string;
}
}
@@ -53,8 +59,10 @@
}
/** 鎻愪氦璇峰亣鐢宠锛堝彂璧峰鎵癸級 */
-export function submitLeave(id: number) {
- return requestClient.post(`/hrm/leave/submit?id=${id}`);
+export function submitLeave(id: number, processDefinitionKey: string) {
+ return requestClient.post('/hrm/leave/submit', null, {
+ params: { id, processDefinitionKey },
+ });
}
/** 鎾ら攢璇峰亣鐢宠 */
@@ -64,5 +72,7 @@
/** 鑾峰彇鍙敤娴佺▼瀹氫箟鍒楄〃 */
export function getLeaveApproveProcessDefinitionList() {
- return requestClient.get<any[]>('/hrm/leave/approve-process-definition-list');
+ return requestClient.get<HrmLeaveApi.ApproveProcess[]>(
+ '/hrm/leave/approve-process-definition-list',
+ );
}
\ No newline at end of file
diff --git a/src/api/mes/qc/template/item/index.ts b/src/api/mes/qc/template/item/index.ts
index a7b92c1..d10c641 100644
--- a/src/api/mes/qc/template/item/index.ts
+++ b/src/api/mes/qc/template/item/index.ts
@@ -21,6 +21,21 @@
}
}
+/** 璐ㄦ鏂规閫夐」锛堟柟妗�-浜у搧鍏宠仈锛� */
+export namespace MesQcTemplateItemOptionApi {
+ export interface Option {
+ id?: number; // 浜у搧鍏宠仈缂栧彿
+ templateId?: number; // 璐ㄦ鏂规 ID
+ templateCode?: string; // 璐ㄦ鏂规缂栧彿
+ templateName?: string; // 璐ㄦ鏂规鍚嶇О
+ quantityCheck?: number; // 鏈�浣庢娴嬫暟
+ quantityUnqualified?: number; // 鏈�澶т笉鍚堟牸鏁�
+ criticalRate?: number; // 鏈�澶ц嚧鍛界己闄风巼锛�%锛�
+ majorRate?: number; // 鏈�澶т弗閲嶇己闄风巼锛�%锛�
+ minorRate?: number; // 鏈�澶ц交寰己闄风巼锛�%锛�
+ }
+}
+
/** 鏌ヨ浜у搧鍏宠仈鍒嗛〉 */
export function getTemplateItemPage(
params: PageParam & { templateId?: number },
@@ -52,3 +67,16 @@
export function deleteTemplateItem(id: number) {
return requestClient.delete(`/mes/qc/template/item/delete?id=${id}`);
}
+
+/** 鏍规嵁鐗╂枡鎴栧伐鍗�/浠诲姟鍜屾娴嬬绫昏幏鍙栧彲鐢ㄨ川妫�鏂规鍒楄〃 */
+export function getTemplateItemOptionList(params: {
+ itemId?: number;
+ qcType: number;
+ taskId?: number;
+ workOrderId?: number;
+}) {
+ return requestClient.get<MesQcTemplateItemOptionApi.Option[]>(
+ '/mes/qc/template/item/list-by-item-and-type',
+ { params },
+ );
+}
diff --git a/src/views/hrm/leave/data.ts b/src/views/hrm/leave/data.ts
index c6d5154..6e8570e 100644
--- a/src/views/hrm/leave/data.ts
+++ b/src/views/hrm/leave/data.ts
@@ -2,8 +2,12 @@
import type { VxeTableGridOptions } from '#/adapter/vxe-table';
import type { HrmLeaveApi } from '#/api/hrm/leave';
+import { markRaw } from 'vue';
+
import { DICT_TYPE } from '#/packages/constants/src';
import { getDictOptions } from '#/packages/effects/hooks/src';
+
+import { UserSelect } from '#/views/system/user/components';
/** 琛ㄥ崟绫诲瀷 */
export type FormType = 'create' | 'detail' | 'update';
@@ -18,6 +22,15 @@
triggerFields: [''],
show: () => false,
},
+ },
+ {
+ fieldName: 'userId',
+ label: '鐢宠浜�',
+ component: markRaw(UserSelect),
+ componentProps: {
+ placeholder: '璇烽�夋嫨鐢宠浜�',
+ },
+ rules: 'selectRequired',
},
{
fieldName: 'leaveType',
@@ -134,7 +147,7 @@
export function useGridColumns(): VxeTableGridOptions<HrmLeaveApi.Leave>['columns'] {
return [
{ field: 'id', title: '鐢宠缂栧彿', width: 80 },
- { field: 'employeeName', title: '鐢宠浜�', minWidth: 100 },
+ { field: 'userName', title: '鐢宠浜�', minWidth: 100 },
{ field: 'deptName', title: '閮ㄩ棬', minWidth: 120 },
{
field: 'leaveType',
diff --git a/src/views/hrm/leave/detail/approve/index.vue b/src/views/hrm/leave/detail/approve/index.vue
index 59248e4..0573837 100644
--- a/src/views/hrm/leave/detail/approve/index.vue
+++ b/src/views/hrm/leave/detail/approve/index.vue
@@ -30,7 +30,7 @@
bordered: true,
column: 2,
schema: [
- { label: '鍛樺伐濮撳悕', field: 'employeeName', render: textRender },
+ { label: '鐢宠浜�', field: 'userName', render: textRender },
{ label: '鎵�灞為儴闂�', field: 'deptName', render: textRender },
{
label: '璇峰亣绫诲瀷',
diff --git a/src/views/hrm/leave/index.vue b/src/views/hrm/leave/index.vue
index e7ae028..d088fc2 100644
--- a/src/views/hrm/leave/index.vue
+++ b/src/views/hrm/leave/index.vue
@@ -2,9 +2,11 @@
import type { VxeTableGridOptions } from '#/adapter/vxe-table';
import type { HrmLeaveApi } from '#/api/hrm/leave';
+import { ref } from 'vue';
+
import { Page, useVbenModal } from '#/packages/effects/common-ui/src';
-import { message, Tag } from 'ant-design-vue';
+import { message, Modal, Select, Tag } from 'ant-design-vue';
import { DICT_TYPE } from '#/packages/constants/src';
import { getDictLabel } from '#/packages/effects/hooks/src';
@@ -13,6 +15,7 @@
import {
cancelLeave,
deleteLeave,
+ getLeaveApproveProcessDefinitionList,
getLeavePage,
submitLeave,
} from '#/api/hrm/leave';
@@ -61,11 +64,34 @@
}
}
-/** 鎻愪氦璇峰亣鐢宠 */
+const submitModalVisible = ref(false);
+const currentRow = ref<HrmLeaveApi.Leave>();
+const processList = ref<HrmLeaveApi.ApproveProcess[]>([]);
+const selectedProcessKey = ref<string>();
+const submitLoading = ref(false);
+
+/** 鎻愪氦璇峰亣鐢宠锛堝厛閫夋嫨瀹℃壒娴佺▼锛� */
async function handleSubmit(row: HrmLeaveApi.Leave) {
- await submitLeave(row.id!);
- message.success('鎻愪氦鎴愬姛');
- handleRefresh();
+ processList.value = await getLeaveApproveProcessDefinitionList();
+ currentRow.value = row;
+ selectedProcessKey.value = undefined;
+ submitModalVisible.value = true;
+}
+
+async function confirmSubmit() {
+ if (!selectedProcessKey.value) {
+ message.warning('璇烽�夋嫨璇峰亣瀹℃壒娴佺▼');
+ return;
+ }
+ submitLoading.value = true;
+ try {
+ await submitLeave(currentRow.value!.id!, selectedProcessKey.value);
+ message.success('鎻愪氦鎴愬姛');
+ submitModalVisible.value = false;
+ handleRefresh();
+ } finally {
+ submitLoading.value = false;
+ }
}
/** 鎾ら攢璇峰亣鐢宠 */
@@ -187,5 +213,19 @@
/>
</template>
</Grid>
+ <Modal
+ v-model:open="submitModalVisible"
+ title="鎻愪氦鑷冲崗鍚屽姙鍏�"
+ width="420px"
+ :confirm-loading="submitLoading"
+ @ok="confirmSubmit"
+ >
+ <Select
+ v-model:value="selectedProcessKey"
+ class="w-full"
+ placeholder="璇烽�夋嫨璇峰亣瀹℃壒娴佺▼"
+ :options="processList.map((item) => ({ label: item.name, value: item.key }))"
+ />
+ </Modal>
</Page>
</template>
\ No newline at end of file
diff --git a/src/views/hrm/leave/modules/form.vue b/src/views/hrm/leave/modules/form.vue
index 4aab581..f701b81 100644
--- a/src/views/hrm/leave/modules/form.vue
+++ b/src/views/hrm/leave/modules/form.vue
@@ -4,6 +4,8 @@
import { computed, ref } from 'vue';
+import { useUserStore } from '@vben/stores';
+
import { useVbenModal } from '#/packages/effects/common-ui/src';
import { message } from 'ant-design-vue';
@@ -16,6 +18,8 @@
const emit = defineEmits(['success']);
const formType = ref<FormType>('create');
+
+const userStore = useUserStore();
const isDetail = computed(() => formType.value === 'detail');
const getTitle = computed(() => {
@@ -74,6 +78,8 @@
formApi.setDisabled(data.formType === 'detail');
modalApi.setState({ showConfirmButton: data.formType !== 'detail' });
if (!data?.id) {
+ // 鏂板鏃堕粯璁ょ敵璇蜂汉涓哄綋鍓嶇櫥褰曠敤鎴凤紝鍙慨鏀�
+ await formApi.setFieldValue('userId', userStore.userInfo?.id);
return;
}
modalApi.lock();
diff --git a/src/views/mes/qc/components/export-range-modal.vue b/src/views/mes/qc/components/export-range-modal.vue
new file mode 100644
index 0000000..19fedfe
--- /dev/null
+++ b/src/views/mes/qc/components/export-range-modal.vue
@@ -0,0 +1,89 @@
+<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/data.ts b/src/views/mes/qc/ipqc/data.ts
index 58f1e88..86522b9 100644
--- a/src/views/mes/qc/ipqc/data.ts
+++ b/src/views/mes/qc/ipqc/data.ts
@@ -16,7 +16,9 @@
import { Button } from 'ant-design-vue';
import { generateAutoCode } from '#/api/mes/md/autocode/record';
+import { getTemplateItemOptionList } from '#/api/mes/qc/template/item';
import { getSimpleUserList } from '#/api/system/user';
+import { getRangePickerDefaultProps } from '#/utils';
import { MdItemSelect } from '#/views/mes/md/item/components';
import { MdWorkstationSelect } from '#/views/mes/md/workstation/components';
import { ProTaskSelect } from '#/views/mes/pro/task/components';
@@ -202,6 +204,39 @@
statuses: [MesProTaskStatusEnum.PREPARE],
workOrderId: values.workOrderId,
workstationId: values.workstationId,
+ }),
+ },
+ },
+ {
+ fieldName: 'templateId',
+ label: '璐ㄦ鏂规',
+ component: 'ApiSelect',
+ componentProps: {
+ api: getTemplateItemOptionList,
+ autoSelect: 'first',
+ labelField: 'templateName',
+ valueField: 'templateId',
+ placeholder: '璇烽�夋嫨璐ㄦ鏂规',
+ },
+ rules: 'selectRequired',
+ dependencies: {
+ triggerFields: ['workOrderId', 'taskId'],
+ componentProps: (values) => ({
+ api: getTemplateItemOptionList,
+ autoSelect: 'first',
+ labelField: 'templateName',
+ valueField: 'templateId',
+ disabled: formType !== 'create' || !values.workOrderId,
+ params: values.workOrderId
+ ? {
+ qcType: 2,
+ workOrderId: values.workOrderId,
+ taskId: values.taskId,
+ }
+ : {},
+ placeholder: values.workOrderId
+ ? '璇烽�夋嫨璐ㄦ鏂规'
+ : '璇峰厛閫夋嫨鐢熶骇璁㈠崟',
}),
},
},
@@ -404,6 +439,14 @@
placeholder: '璇烽�夋嫨妫�娴嬬粨鏋�',
},
},
+ {
+ fieldName: 'inspectDate',
+ label: '妫�娴嬫棩鏈�',
+ component: 'RangePicker',
+ componentProps: {
+ ...getRangePickerDefaultProps(),
+ },
+ },
];
}
diff --git a/src/views/mes/qc/ipqc/index.vue b/src/views/mes/qc/ipqc/index.vue
index 32d46c4..832a85a 100644
--- a/src/views/mes/qc/ipqc/index.vue
+++ b/src/views/mes/qc/ipqc/index.vue
@@ -4,19 +4,24 @@
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 { deleteIpqc, exportIpqc, getIpqcPage } from '#/api/mes/qc/ipqc';
import { $t } from '#/locales';
+import QcExportRangeModal from '#/views/mes/qc/components/export-range-modal.vue';
import { useGridColumns, useGridFormSchema } from './data';
import Form from './modules/form.vue';
const [FormModal, formModalApi] = useVbenModal({
connectedComponent: Form,
+ destroyOnClose: true,
+});
+
+const [ExportRangeModal, exportRangeModalApi] = useVbenModal({
+ connectedComponent: QcExportRangeModal,
destroyOnClose: true,
});
@@ -55,10 +60,15 @@
}
}
-/** 瀵煎嚭琛ㄦ牸 */
-async function handleExport() {
- const data = await exportIpqc(await gridApi.formApi.getValues());
- downloadFileFromBlobPart({ fileName: '杩囩▼妫�楠屽崟.xls', source: data });
+/** 瀵煎嚭琛ㄦ牸锛堝脊绐楅�夋楠屾椂闂磋寖鍥达級 */
+function handleExport() {
+ exportRangeModalApi
+ .setData({
+ title: '鎸夋楠屾椂闂村鍑鸿繃绋嬫楠屽崟',
+ exportApi: exportIpqc,
+ fileName: '杩囩▼妫�楠屽崟.xls',
+ })
+ .open();
}
const [Grid, gridApi] = useVbenVxeGrid({
@@ -93,8 +103,9 @@
</script>
<template>
- <Page auto-content-height><FormModal @success="handleRefresh" />
-
+ <Page auto-content-height>
+ <FormModal @success="handleRefresh" />
+ <ExportRangeModal />
<Grid table-title="杩囩▼妫�楠屽崟鍒楄〃">
<template #toolbar-tools>
<TableAction
diff --git a/src/views/mes/qc/iqc/data.ts b/src/views/mes/qc/iqc/data.ts
index 40cb523..a59f777 100644
--- a/src/views/mes/qc/iqc/data.ts
+++ b/src/views/mes/qc/iqc/data.ts
@@ -11,6 +11,7 @@
import { Button } from 'ant-design-vue';
import { generateAutoCode } from '#/api/mes/md/autocode/record';
+import { getTemplateItemOptionList } from '#/api/mes/qc/template/item';
import { getSupplierSimpleList } from '#/api/srm/supplier';
import { getSimpleUserList } from '#/api/system/user';
import { getRangePickerDefaultProps } from '#/utils';
@@ -135,6 +136,33 @@
},
},
{
+ fieldName: 'templateId',
+ label: '璐ㄦ鏂规',
+ component: 'ApiSelect',
+ componentProps: {
+ api: getTemplateItemOptionList,
+ autoSelect: 'first',
+ labelField: 'templateName',
+ valueField: 'templateId',
+ placeholder: '璇烽�夋嫨璐ㄦ鏂规',
+ },
+ rules: 'selectRequired',
+ dependencies: {
+ triggerFields: ['itemId'],
+ componentProps: (values) => ({
+ api: getTemplateItemOptionList,
+ autoSelect: 'first',
+ labelField: 'templateName',
+ valueField: 'templateId',
+ disabled: formType !== 'create' || !values.itemId,
+ params: values.itemId
+ ? { itemId: values.itemId, qcType: 1 }
+ : {},
+ placeholder: values.itemId ? '璇烽�夋嫨璐ㄦ鏂规' : '璇峰厛閫夋嫨浜у搧鐗╂枡',
+ }),
+ },
+ },
+ {
fieldName: 'vendorId',
label: '渚涘簲鍟�',
component: 'ApiSelect',
diff --git a/src/views/mes/qc/iqc/index.vue b/src/views/mes/qc/iqc/index.vue
index 44e0901..761305f 100644
--- a/src/views/mes/qc/iqc/index.vue
+++ b/src/views/mes/qc/iqc/index.vue
@@ -7,13 +7,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 { deleteIqc, exportIqc, getIqcPage } from '#/api/mes/qc/iqc';
import { $t } from '#/locales';
+import QcExportRangeModal from '#/views/mes/qc/components/export-range-modal.vue';
import { useGridColumns, useGridFormSchema } from './data';
import Form from './modules/form.vue';
@@ -24,6 +24,11 @@
const [FormModal, formModalApi] = useVbenModal({
connectedComponent: Form,
+ destroyOnClose: true,
+});
+
+const [ExportRangeModal, exportRangeModalApi] = useVbenModal({
+ connectedComponent: QcExportRangeModal,
destroyOnClose: true,
});
@@ -62,10 +67,15 @@
}
}
-/** 瀵煎嚭琛ㄦ牸 */
-async function handleExport() {
- const data = await exportIqc(await gridApi.formApi.getValues());
- downloadFileFromBlobPart({ fileName: '鏉ユ枡妫�楠屽崟.xls', source: data });
+/** 瀵煎嚭琛ㄦ牸锛堝脊绐楅�夋楠屾椂闂磋寖鍥达級 */
+function handleExport() {
+ exportRangeModalApi
+ .setData({
+ title: '鎸夋楠屾椂闂村鍑烘潵鏂欐楠屽崟',
+ exportApi: exportIqc,
+ fileName: '鏉ユ枡妫�楠屽崟.xls',
+ })
+ .open();
}
const [Grid, gridApi] = useVbenVxeGrid({
@@ -107,8 +117,9 @@
</script>
<template>
- <Page auto-content-height><FormModal @success="handleRefresh" />
-
+ <Page auto-content-height>
+ <FormModal @success="handleRefresh" />
+ <ExportRangeModal />
<Grid table-title="鏉ユ枡妫�楠屽崟鍒楄〃">
<template #toolbar-tools>
<TableAction
diff --git a/src/views/mes/qc/oqc/data.ts b/src/views/mes/qc/oqc/data.ts
index 0183a35..54b6766 100644
--- a/src/views/mes/qc/oqc/data.ts
+++ b/src/views/mes/qc/oqc/data.ts
@@ -11,7 +11,9 @@
import { Button } from 'ant-design-vue';
import { generateAutoCode } from '#/api/mes/md/autocode/record';
+import { getTemplateItemOptionList } from '#/api/mes/qc/template/item';
import { getSimpleUserList } from '#/api/system/user';
+import { getRangePickerDefaultProps } from '#/utils';
import CrmCustomerSelect from '#/components/crm-customer-select.vue';
import { MdmItemSelect } from '#/views/basicData/mdm/components';
@@ -129,6 +131,33 @@
componentProps: (values) => ({
disabled: !!values.sourceDocId,
placeholder: '璇烽�夋嫨浜у搧鐗╂枡',
+ }),
+ },
+ },
+ {
+ fieldName: 'templateId',
+ label: '璐ㄦ鏂规',
+ component: 'ApiSelect',
+ componentProps: {
+ api: getTemplateItemOptionList,
+ autoSelect: 'first',
+ labelField: 'templateName',
+ valueField: 'templateId',
+ placeholder: '璇烽�夋嫨璐ㄦ鏂规',
+ },
+ rules: 'selectRequired',
+ dependencies: {
+ triggerFields: ['itemId'],
+ componentProps: (values) => ({
+ api: getTemplateItemOptionList,
+ autoSelect: 'first',
+ labelField: 'templateName',
+ valueField: 'templateId',
+ disabled: formType !== 'create' || !values.itemId,
+ params: values.itemId
+ ? { itemId: values.itemId, qcType: 3 }
+ : {},
+ placeholder: values.itemId ? '璇烽�夋嫨璐ㄦ鏂规' : '璇峰厛閫夋嫨浜у搧鐗╂枡',
}),
},
},
@@ -340,6 +369,14 @@
placeholder: '璇烽�夋嫨妫�娴嬬粨鏋�',
},
},
+ {
+ fieldName: 'inspectDate',
+ label: '妫�娴嬫棩鏈�',
+ component: 'RangePicker',
+ componentProps: {
+ ...getRangePickerDefaultProps(),
+ },
+ },
];
}
diff --git a/src/views/mes/qc/oqc/index.vue b/src/views/mes/qc/oqc/index.vue
index 965cfda..f9043b1 100644
--- a/src/views/mes/qc/oqc/index.vue
+++ b/src/views/mes/qc/oqc/index.vue
@@ -4,19 +4,24 @@
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 { deleteOqc, exportOqc, getOqcPage } from '#/api/mes/qc/oqc';
import { $t } from '#/locales';
+import QcExportRangeModal from '#/views/mes/qc/components/export-range-modal.vue';
import { useGridColumns, useGridFormSchema } from './data';
import Form from './modules/form.vue';
const [FormModal, formModalApi] = useVbenModal({
connectedComponent: Form,
+ destroyOnClose: true,
+});
+
+const [ExportRangeModal, exportRangeModalApi] = useVbenModal({
+ connectedComponent: QcExportRangeModal,
destroyOnClose: true,
});
@@ -55,10 +60,15 @@
}
}
-/** 瀵煎嚭琛ㄦ牸 */
-async function handleExport() {
- const data = await exportOqc(await gridApi.formApi.getValues());
- downloadFileFromBlobPart({ fileName: '鍑鸿揣妫�楠屽崟.xls', source: data });
+/** 瀵煎嚭琛ㄦ牸锛堝脊绐楅�夋楠屾椂闂磋寖鍥达級 */
+function handleExport() {
+ exportRangeModalApi
+ .setData({
+ title: '鎸夋楠屾椂闂村鍑鸿揣妫�楠屽崟',
+ exportApi: exportOqc,
+ fileName: '鍑鸿揣妫�楠屽崟.xls',
+ })
+ .open();
}
const [Grid, gridApi] = useVbenVxeGrid({
@@ -93,8 +103,9 @@
</script>
<template>
- <Page auto-content-height><FormModal @success="handleRefresh" />
-
+ <Page auto-content-height>
+ <FormModal @success="handleRefresh" />
+ <ExportRangeModal />
<Grid table-title="鍑鸿揣妫�楠屽崟鍒楄〃">
<template #toolbar-tools>
<TableAction
diff --git a/src/views/mes/qc/rqc/data.ts b/src/views/mes/qc/rqc/data.ts
index 92d5e1e..ab9af37 100644
--- a/src/views/mes/qc/rqc/data.ts
+++ b/src/views/mes/qc/rqc/data.ts
@@ -15,7 +15,9 @@
import { Button } from 'ant-design-vue';
import { generateAutoCode } from '#/api/mes/md/autocode/record';
+import { getTemplateItemOptionList } from '#/api/mes/qc/template/item';
import { getSimpleUserList } from '#/api/system/user';
+import { getRangePickerDefaultProps } from '#/utils';
import { MdmItemSelect } from '#/views/basicData/mdm/components';
/** 琛ㄥ崟绫诲瀷 */
@@ -154,6 +156,33 @@
componentProps: (values) => ({
disabled: !!values.sourceDocId,
placeholder: '璇烽�夋嫨浜у搧鐗╂枡',
+ }),
+ },
+ },
+ {
+ fieldName: 'templateId',
+ label: '璐ㄦ鏂规',
+ component: 'ApiSelect',
+ componentProps: {
+ api: getTemplateItemOptionList,
+ autoSelect: 'first',
+ labelField: 'templateName',
+ valueField: 'templateId',
+ placeholder: '璇烽�夋嫨璐ㄦ鏂规',
+ },
+ rules: 'selectRequired',
+ dependencies: {
+ triggerFields: ['itemId'],
+ componentProps: (values) => ({
+ api: getTemplateItemOptionList,
+ autoSelect: 'first',
+ labelField: 'templateName',
+ valueField: 'templateId',
+ disabled: formType !== 'create' || !values.itemId,
+ params: values.itemId
+ ? { itemId: values.itemId, qcType: 4 }
+ : {},
+ placeholder: values.itemId ? '璇烽�夋嫨璐ㄦ鏂规' : '璇峰厛閫夋嫨浜у搧鐗╂枡',
}),
},
},
@@ -330,6 +359,14 @@
valueField: 'id',
},
},
+ {
+ fieldName: 'inspectDate',
+ label: '妫�娴嬫棩鏈�',
+ component: 'RangePicker',
+ componentProps: {
+ ...getRangePickerDefaultProps(),
+ },
+ },
];
}
diff --git a/src/views/mes/qc/rqc/index.vue b/src/views/mes/qc/rqc/index.vue
index 0cfc6f2..2771b4c 100644
--- a/src/views/mes/qc/rqc/index.vue
+++ b/src/views/mes/qc/rqc/index.vue
@@ -4,19 +4,24 @@
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 { useGridColumns, useGridFormSchema } from './data';
import Form from './modules/form.vue';
const [FormModal, formModalApi] = useVbenModal({
connectedComponent: Form,
+ destroyOnClose: true,
+});
+
+const [ExportRangeModal, exportRangeModalApi] = useVbenModal({
+ connectedComponent: QcExportRangeModal,
destroyOnClose: true,
});
@@ -55,10 +60,15 @@
}
}
-/** 瀵煎嚭琛ㄦ牸 */
-async function handleExport() {
- const data = await exportRqc(await gridApi.formApi.getValues());
- downloadFileFromBlobPart({ fileName: '閫�璐ф楠屽崟.xls', source: data });
+/** 瀵煎嚭琛ㄦ牸锛堝脊绐楅�夋楠屾椂闂磋寖鍥达級 */
+function handleExport() {
+ exportRangeModalApi
+ .setData({
+ title: '鎸夋楠屾椂闂村閫�璐ф楠屽崟',
+ exportApi: exportRqc,
+ fileName: '閫�璐ф楠屽崟.xls',
+ })
+ .open();
}
const [Grid, gridApi] = useVbenVxeGrid({
@@ -93,8 +103,9 @@
</script>
<template>
- <Page auto-content-height><FormModal @success="handleRefresh" />
-
+ <Page auto-content-height>
+ <FormModal @success="handleRefresh" />
+ <ExportRangeModal />
<Grid table-title="閫�璐ф楠屽崟鍒楄〃">
<template #toolbar-tools>
<TableAction
--
Gitblit v1.9.3