From 6957952b4c71e17df16e7e1bf1e983791dfdc65c Mon Sep 17 00:00:00 2001 From: zlwu <704541015@qq.com> Date: Wed, 19 Aug 2026 12:50:37 +0800 Subject: [PATCH] feat(web-admin): add qc material month import template UI Co-authored-by: Cursor --- .../src/api/qc-material-month-template.ts | 83 ++++ .../QcMaterialMonthImportDialog.vue | 261 ++++++++++++ .../QcMaterialMonthTemplateDialog.vue | 379 ++++++++++++++++++ .../quality-inspection/qc-material/index.vue | 42 +- 4 files changed, 764 insertions(+), 1 deletion(-) create mode 100644 web-admin/src/api/qc-material-month-template.ts create mode 100644 web-admin/src/views/quality-inspection/qc-material/QcMaterialMonthImportDialog.vue create mode 100644 web-admin/src/views/quality-inspection/qc-material/QcMaterialMonthTemplateDialog.vue diff --git a/web-admin/src/api/qc-material-month-template.ts b/web-admin/src/api/qc-material-month-template.ts new file mode 100644 index 00000000..5c708504 --- /dev/null +++ b/web-admin/src/api/qc-material-month-template.ts @@ -0,0 +1,83 @@ +import request from '@/utils/http' + +export interface QcMonthTemplateRow { + id: string + materialId?: string + materialCode: string + materialName: string + specModel?: string + unit?: string + catalogNo: string + batchNo: string + manufacturer: string + unitPrice: number + amount: number + inQty: number + expireDate: string + orderNum?: number + remark?: string +} + +export interface QcMonthImportPreviewLine { + templateId?: string + materialId?: string + materialCode: string + materialName: string + specModel?: string + unit?: string + stockInNo: string + stockInDate: string + expireDate: string + catalogNo: string + batchNo: string + manufacturer: string + unitPrice: number + amount: number + qty: number + remark?: string +} + +export function fetchQcMonthTemplateList() { + return request.get({ + url: '/web/admin/qc-material-month-templates' + }) +} + +export function fetchCreateQcMonthTemplate(data: Record) { + return request.post({ + url: '/web/admin/qc-material-month-templates', + data + }) +} + +export function fetchUpdateQcMonthTemplate(id: string, data: Record) { + return request.put({ + url: `/web/admin/qc-material-month-templates/${id}`, + data + }) +} + +export function fetchDeleteQcMonthTemplate(id: string) { + return request.delete({ + url: `/web/admin/qc-material-month-templates/${id}` + }) +} + +export function fetchPreviewQcMonthImport(stockInDate: string) { + return request.post({ + url: '/web/admin/qc-material-month-templates/preview', + data: { stockInDate } + }) +} + +export function fetchConfirmQcMonthImport(data: { + stockInDate: string + items: QcMonthImportPreviewLine[] + remark?: string + stockInTime?: string +}) { + return request.post<{ count: number }>({ + url: '/web/admin/qc-material-month-templates/confirm', + data + }) +} diff --git a/web-admin/src/views/quality-inspection/qc-material/QcMaterialMonthImportDialog.vue b/web-admin/src/views/quality-inspection/qc-material/QcMaterialMonthImportDialog.vue new file mode 100644 index 00000000..ece13e4b --- /dev/null +++ b/web-admin/src/views/quality-inspection/qc-material/QcMaterialMonthImportDialog.vue @@ -0,0 +1,261 @@ + + + + + diff --git a/web-admin/src/views/quality-inspection/qc-material/QcMaterialMonthTemplateDialog.vue b/web-admin/src/views/quality-inspection/qc-material/QcMaterialMonthTemplateDialog.vue new file mode 100644 index 00000000..c6140192 --- /dev/null +++ b/web-admin/src/views/quality-inspection/qc-material/QcMaterialMonthTemplateDialog.vue @@ -0,0 +1,379 @@ + + + + + diff --git a/web-admin/src/views/quality-inspection/qc-material/index.vue b/web-admin/src/views/quality-inspection/qc-material/index.vue index de2723df..2bfa8e06 100644 --- a/web-admin/src/views/quality-inspection/qc-material/index.vue +++ b/web-admin/src/views/quality-inspection/qc-material/index.vue @@ -88,6 +88,14 @@ 批量废弃 + + + 月初导入 + + + + 维护月初模板 + + +
@@ -1242,7 +1255,9 @@ Edit, Delete, CircleClose, - Paperclip + Paperclip, + Calendar, + Setting } from '@element-plus/icons-vue' import SystemViewDialog from '@/components/business/system-view-dialog/index.vue' import AmountInput from '@/components/common/amount-input/index.vue' @@ -1269,6 +1284,9 @@ import QcMaterialUsageTab from './QcMaterialUsageTab.vue' import QcMaterialStockCheckTab from './QcMaterialStockCheckTab.vue' import QcMaterialBatchAttachmentDialog from './QcMaterialBatchAttachmentDialog.vue' + import QcMaterialMonthTemplateDialog from './QcMaterialMonthTemplateDialog.vue' + import QcMaterialMonthImportDialog from './QcMaterialMonthImportDialog.vue' + import { fetchQcMonthTemplateList } from '@/api/qc-material-month-template' import { useMenuPerm } from '@/hooks/core/useMenuPerm' defineOptions({ name: 'QualityInspectionQcMaterial' }) @@ -1279,6 +1297,9 @@ /** 暂时隐藏批量入库入口,恢复时改为 true */ const batchStockInButtonVisible = false + const monthTemplateVisible = ref(false) + const monthImportVisible = ref(false) + const route = useRoute() const QC_MATERIAL_TABS = [ @@ -2317,6 +2338,25 @@ batchStockInFormRef.value?.clearValidate?.() } + async function handleMonthImport() { + try { + const list = (await fetchQcMonthTemplateList()) || [] + if (!list.length) { + ElMessage.warning('请先维护月初模板') + monthTemplateVisible.value = true + return + } + monthImportVisible.value = true + } catch { + /* request 层已提示 */ + } + } + + async function handleMonthImportSuccess() { + monthImportVisible.value = false + await loadData() + } + async function handleBatchStockInSubmit() { await batchStockInFormRef.value?.validate?.() if (!batchStockInLines.value.length) {