From 9c8d2858d15d87ea0b47e7521061e2b6c3039a43 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期五, 09 十月 2026 14:50:49 +0800
Subject: [PATCH] feat: 仓储/售后物料改用 MDM 选择器;首页隐藏生产模块并恢复质量/设备卡片;产品入库行去除库存记录
---
src/views/wls/productreceipt/data.ts | 55 +------
src/views/aftersales/ticket/data.ts | 4
src/views/dashboard/analytics/modules/quick-actions.vue | 5
.gitignore | 9 +
src/views/wls/sn/data.ts | 6
src/views/wls/transfer/data.ts | 6
src/views/wls/batch/data.ts | 4
src/views/wls/materialstock/data.ts | 4
src/views/wls/salesnotice/data.ts | 4
src/views/wls/stocktaking/plan/components/condition-value-input.vue | 4
src/views/wls/miscreceipt/data.ts | 4
src/views/wls/itemreceipt/data.ts | 10
src/views/wls/returnsales/data.ts | 7
src/views/wls/productreceipt/modules/line-form.vue | 2
src/views/wls/outsourceissue/data.ts | 10
src/views/wls/productissue/data.ts | 10
src/views/wls/barcode/data.ts | 4
src/views/dashboard/analytics/modules/kpi-cards.vue | 68 ---------
src/views/wls/outsourcereceipt/data.ts | 6
src/views/wls/stocktaking/task/data.ts | 4
src/views/dashboard/analytics/index.vue | 148 ++++++++++++++++----
src/views/wls/packages/data.ts | 4
src/views/wls/returnvendor/data.ts | 10
src/views/wls/productsales/data.ts | 10
24 files changed, 190 insertions(+), 208 deletions(-)
diff --git a/.gitignore b/.gitignore
index 33d4363..6c645f2 100644
--- a/.gitignore
+++ b/.gitignore
@@ -30,4 +30,11 @@
# Cache
.cache/
-.temp/
\ No newline at end of file
+.temp/
+
+# Playwright MCP artifacts (screenshots / snapshots)
+.playwright-mcp/
+
+# Local scratch artifacts
+dist.zip
+/*.png
\ No newline at end of file
diff --git a/src/views/aftersales/ticket/data.ts b/src/views/aftersales/ticket/data.ts
index 15c83cc..f666775 100644
--- a/src/views/aftersales/ticket/data.ts
+++ b/src/views/aftersales/ticket/data.ts
@@ -13,7 +13,7 @@
import { z } from '#/adapter/form';
import CrmCustomerSelect from '#/components/crm-customer-select.vue';
import { ErpSaleOrderSelect } from '#/views/erp/sale/order/components';
-import { MdItemSelect } from '#/views/mes/md/item/components';
+import { MdmItemSelect } from '#/views/basicData/mdm/components';
import { WmBatchSelect } from '#/views/wls/batch/components';
import { UserSelect } from '#/views/system/user/components';
@@ -383,7 +383,7 @@
{
fieldName: 'itemId',
label: '鐗╂枡',
- component: hasOrderItems ? 'Select' : markRaw(MdItemSelect),
+ component: hasOrderItems ? 'Select' : markRaw(MdmItemSelect),
componentProps: hasOrderItems
? {
placeholder: '璇烽�夋嫨鐗╂枡',
diff --git a/src/views/dashboard/analytics/index.vue b/src/views/dashboard/analytics/index.vue
index 13794de..df4d405 100644
--- a/src/views/dashboard/analytics/index.vue
+++ b/src/views/dashboard/analytics/index.vue
@@ -1,25 +1,31 @@
<script lang="ts" setup>
+import type { PageParam, PageResult } from '@vben/request';
+
+import type { ErpPurchaseOrderApi } from '#/api/erp/purchase/order';
+import type { ErpSaleOrderApi } from '#/api/erp/sale/order';
+import type { MesHomeApi } from '#/api/mes/home';
+
import { computed, onMounted, ref } from 'vue';
import { useRouter } from 'vue-router';
import { Page } from '@vben/common-ui';
-import { Card, Col, Row } from 'ant-design-vue';
+import { Col, Row } from 'ant-design-vue';
+import { getPurchaseOrderPage } from '#/api/erp/purchase/order';
+import { getSaleOrderPage } from '#/api/erp/sale/order';
import { getHomeSummary } from '#/api/mes/home';
+import SummaryCard from '#/views/erp/home/modules/summary-card.vue';
+
import { defaultSummary } from './data';
-import AiInsights from './modules/ai-insights.vue';
-import AlertPanel from './modules/alert-panel.vue';
import BizCards from './modules/biz-cards.vue';
import KpiCards from './modules/kpi-cards.vue';
-import ProductionTrend from './modules/production-trend.vue';
import QuickActions from './modules/quick-actions.vue';
defineOptions({ name: 'DashboardAnalytics' });
const router = useRouter();
-const summary = ref(defaultSummary);
const greeting = computed(() => {
const hour = new Date().getHours();
@@ -41,12 +47,104 @@
router.push({ name });
}
-async function loadSummary() {
- summary.value = await getHomeSummary();
+interface PriceSummary {
+ monthPrice: number;
+ todayPrice: number;
+ yearPrice: number;
+ yesterdayPrice: number;
+}
+
+const saleSummary = ref<PriceSummary>();
+const purchaseSummary = ref<PriceSummary>();
+const homeSummary = ref<MesHomeApi.Summary>(defaultSummary);
+
+const PAGE_SIZE = 200;
+
+/** 閫愰〉鎷夊彇鍏ㄩ儴鍒嗛〉鏁版嵁锛堝悗绔� pageSize 涓婇檺 200锛� */
+async function fetchAllPages<T>(
+ fetcher: (params: PageParam) => Promise<PageResult<T>>,
+): Promise<T[]> {
+ const first = await fetcher({ pageNo: 1, pageSize: PAGE_SIZE });
+ const list: T[] = [...(first.list ?? [])];
+ const total = first.total ?? list.length;
+ const pageCount = Math.ceil(total / PAGE_SIZE);
+ for (let pageNo = 2; pageNo <= pageCount; pageNo++) {
+ const res = await fetcher({ pageNo, pageSize: PAGE_SIZE });
+ list.push(...(res.list ?? []));
+ }
+ return list;
+}
+
+function toDayStr(time?: Date | string): string {
+ if (!time) return '';
+ if (typeof time === 'string') return time.slice(0, 10);
+ const d = new Date(time);
+ if (Number.isNaN(d.getTime())) return '';
+ const m = String(d.getMonth() + 1).padStart(2, '0');
+ const day = String(d.getDate()).padStart(2, '0');
+ return `${d.getFullYear()}-${m}-${day}`;
+}
+
+/** 鎸夎鍗曟椂闂磋仛鍚堥噾棰濓細浠婃棩 / 鏄ㄦ棩 / 鏈湀 / 浠婂勾 */
+function aggregatePrice(
+ orders: Array<{ orderTime?: Date | string; totalPrice?: number }>,
+): PriceSummary {
+ const now = new Date();
+ const today = toDayStr(now);
+ const yesterdayDate = new Date(now);
+ yesterdayDate.setDate(now.getDate() - 1);
+ const yesterday = toDayStr(yesterdayDate);
+ const month = today.slice(0, 7);
+ const year = today.slice(0, 4);
+
+ const summary: PriceSummary = {
+ monthPrice: 0,
+ todayPrice: 0,
+ yearPrice: 0,
+ yesterdayPrice: 0,
+ };
+ for (const order of orders) {
+ const day = toDayStr(order.orderTime);
+ if (!day) continue;
+ const price = order.totalPrice ?? 0;
+ if (day === today) summary.todayPrice += price;
+ if (day === yesterday) summary.yesterdayPrice += price;
+ if (day.startsWith(month)) summary.monthPrice += price;
+ if (day.startsWith(year)) summary.yearPrice += price;
+ }
+ return summary;
+}
+
+async function loadStatistics() {
+ try {
+ const saleOrders = await fetchAllPages<ErpSaleOrderApi.SaleOrder>(
+ getSaleOrderPage,
+ );
+ saleSummary.value = aggregatePrice(saleOrders);
+ } catch {
+ /* 鎺ュ彛寮傚父鎴栨棤鏉冮檺 */
+ }
+ try {
+ const purchaseOrders = await fetchAllPages<ErpPurchaseOrderApi.PurchaseOrder>(
+ getPurchaseOrderPage,
+ );
+ purchaseSummary.value = aggregatePrice(purchaseOrders);
+ } catch {
+ /* 鎺ュ彛寮傚父鎴栨棤鏉冮檺 */
+ }
+}
+
+async function loadHomeSummary() {
+ try {
+ homeSummary.value = await getHomeSummary();
+ } catch {
+ /* 鎺ュ彛寮傚父鎴栨棤鏉冮檺 */
+ }
}
onMounted(() => {
- loadSummary();
+ loadHomeSummary();
+ loadStatistics();
});
</script>
@@ -71,35 +169,19 @@
</div>
</div>
- <!-- MES 鐢熶骇 KPI -->
- <KpiCards :summary="summary" @navigate="handleNavigate" />
+ <!-- 璐ㄩ噺 / 璁惧 KPI -->
+ <KpiCards :summary="homeSummary" @navigate="handleNavigate" />
<!-- ERP/WMS/BPM 缁忚惀 KPI -->
<BizCards @navigate="handleNavigate" />
- <!-- AI 鏅鸿兘鍒嗘瀽 -->
- <AiInsights
- :active-order-count="summary.workOrderActiveCount"
- @navigate="handleNavigate"
- />
-
- <!-- 鐢熶骇瓒嬪娍 + 棰勮闈㈡澘 -->
- <Row :gutter="16" class="mb-4">
- <Col :lg="14" :md="24" :sm="24" :xl="14" :xs="24" class="mb-4">
- <div class="glass-card rounded-2xl p-5">
- <h3 class="mb-4 text-base font-semibold text-gray-800 dark:text-gray-100">
- 鐢熶骇瓒嬪娍锛堣繎7澶╋級
- </h3>
- <ProductionTrend />
- </div>
- </Col>
- <Col :lg="10" :md="24" :sm="24" :xl="10" :xs="24" class="mb-4">
- <AlertPanel
- :repair-active-count="summary.repairActiveCount"
- @navigate="handleNavigate"
- />
- </Col>
- </Row>
+ <!-- 閿�鍞� / 閲囪喘 閲戦姒傝 -->
+ <div class="mb-4">
+ <SummaryCard
+ :purchase-summary="purchaseSummary"
+ :sale-summary="saleSummary"
+ />
+ </div>
<!-- 蹇嵎鎿嶄綔 -->
<Row :gutter="16" class="mb-4">
diff --git a/src/views/dashboard/analytics/modules/kpi-cards.vue b/src/views/dashboard/analytics/modules/kpi-cards.vue
index 761db56..50cab31 100644
--- a/src/views/dashboard/analytics/modules/kpi-cards.vue
+++ b/src/views/dashboard/analytics/modules/kpi-cards.vue
@@ -58,70 +58,8 @@
<template>
<Row :gutter="16">
- <!-- 鐢熶骇璁㈠崟 -->
- <Col :lg="6" :md="12" :sm="12" :xl="6" :xs="24" class="mb-4">
- <div
- class="glass-tilt group cursor-pointer overflow-hidden rounded-2xl border-0"
- :style="tiltStyle('order')"
- @mousemove="(e: MouseEvent) => onMouseMove(e, 'order')"
- @mouseleave="onMouseLeave('order')"
- @click="emit('navigate', 'MesProWorkOrder')"
- >
- <div class="relative z-10 flex items-center gap-4 p-5">
- <div class="flex size-12 flex-shrink-0 items-center justify-center rounded-xl bg-gradient-to-br from-blue-500 to-cyan-400 shadow-lg shadow-blue-500/25 transition-transform duration-300 group-hover:scale-110">
- <IconifyIcon class="size-6 text-white" icon="lucide:clipboard-list" />
- </div>
- <div class="min-w-0 flex-1">
- <div class="mb-1 text-xs font-medium text-gray-500 dark:text-gray-400">鐢熶骇璁㈠崟</div>
- <div class="flex items-baseline gap-1">
- <CountTo class="text-2xl font-bold leading-tight text-blue-600 dark:text-blue-400" :end-val="summary.workOrderActiveCount" :duration="1200" />
- <span class="text-xs text-gray-400">杩涜涓�</span>
- </div>
- <div class="mt-1 flex items-center gap-1 text-xs text-gray-400">
- <span class="inline-block size-1.5 rounded-full bg-amber-400" /> 寰呮帓浜� {{ summary.workOrderPrepareCount }}
- <span class="mx-1">|</span>
- <span class="inline-block size-1.5 rounded-full bg-emerald-400" /> 宸插畬鎴� {{ summary.workOrderFinishedCount }}
- </div>
- </div>
- </div>
- <div class="absolute inset-0 -z-0 bg-gradient-to-br from-blue-500/5 to-cyan-500/5 opacity-0 transition-opacity duration-300 group-hover:opacity-100" />
- <div class="absolute -right-6 -top-6 size-24 rounded-full bg-blue-400/10 blur-xl transition-all duration-300 group-hover:scale-150" />
- </div>
- </Col>
-
- <!-- 浠婃棩浜ч噺 -->
- <Col :lg="6" :md="12" :sm="12" :xl="6" :xs="24" class="mb-4">
- <div
- class="glass-tilt group cursor-pointer overflow-hidden rounded-2xl border-0"
- :style="tiltStyle('output')"
- @mousemove="(e: MouseEvent) => onMouseMove(e, 'output')"
- @mouseleave="onMouseLeave('output')"
- @click="emit('navigate', 'MesProFeedback')"
- >
- <div class="relative z-10 flex items-center gap-4 p-5">
- <div class="flex size-12 flex-shrink-0 items-center justify-center rounded-xl bg-gradient-to-br from-emerald-500 to-green-400 shadow-lg shadow-emerald-500/25 transition-transform duration-300 group-hover:scale-110">
- <IconifyIcon class="size-6 text-white" icon="lucide:trending-up" />
- </div>
- <div class="min-w-0 flex-1">
- <div class="mb-1 text-xs font-medium text-gray-500 dark:text-gray-400">浠婃棩浜ч噺</div>
- <div class="flex items-baseline gap-1">
- <CountTo class="text-2xl font-bold leading-tight text-emerald-600 dark:text-emerald-400" :end-val="summary.todayOutput" :duration="1200" />
- <span class="text-xs text-gray-400">浠�</span>
- </div>
- <div class="mt-1 text-xs text-gray-400">
- 鏄ㄦ棩 {{ summary.yesterdayOutput }} 浠�
- <span v-if="summary.yesterdayOutput > 0 && summary.todayOutput >= summary.yesterdayOutput" class="text-emerald-500">鈫�</span>
- <span v-else-if="summary.yesterdayOutput > 0" class="text-red-500">鈫�</span>
- </div>
- </div>
- </div>
- <div class="absolute inset-0 -z-0 bg-gradient-to-br from-emerald-500/5 to-green-500/5 opacity-0 transition-opacity duration-300 group-hover:opacity-100" />
- <div class="absolute -right-6 -top-6 size-24 rounded-full bg-emerald-400/10 blur-xl transition-all duration-300 group-hover:scale-150" />
- </div>
- </Col>
-
<!-- 璐ㄩ噺鍚堟牸鐜� -->
- <Col :lg="6" :md="12" :sm="12" :xl="6" :xs="24" class="mb-4">
+ <Col :lg="12" :md="12" :sm="12" :xl="12" :xs="24" class="mb-4">
<div
class="glass-tilt group cursor-pointer overflow-hidden rounded-2xl border-0"
:style="tiltStyle('quality')"
@@ -154,7 +92,7 @@
</Col>
<!-- 璁惧杩愯鐜� -->
- <Col :lg="6" :md="12" :sm="12" :xl="6" :xs="24" class="mb-4">
+ <Col :lg="12" :md="12" :sm="12" :xl="12" :xs="24" class="mb-4">
<div
class="glass-tilt group cursor-pointer overflow-hidden rounded-2xl border-0"
:style="tiltStyle('equip')"
@@ -204,7 +142,7 @@
border: 1px solid rgba(255,255,255,0.08);
box-shadow:
0 4px 24px rgba(0,0,0,0.3),
- 0 1px 4px rgba(0,0,0,0.2),
+ 0 2px 8px rgba(0,0,0,0.2),
inset 0 1px 0 rgba(255,255,255,0.04);
}
</style>
diff --git a/src/views/dashboard/analytics/modules/quick-actions.vue b/src/views/dashboard/analytics/modules/quick-actions.vue
index 9a825b5..d7b5e37 100644
--- a/src/views/dashboard/analytics/modules/quick-actions.vue
+++ b/src/views/dashboard/analytics/modules/quick-actions.vue
@@ -16,14 +16,9 @@
}
const actions: QuickAction[] = [
- { title: '鐢熶骇宸ュ崟', icon: 'lucide:file-text', route: 'MesProWorkOrder', gradient: 'from-blue-500 to-cyan-500', shadow: 'shadow-blue-500/15' },
- { title: '鐢熶骇鎶ュ伐', icon: 'lucide:check-square', route: 'MesProFeedback', gradient: 'from-emerald-500 to-green-500', shadow: 'shadow-emerald-500/15' },
{ title: '璐ㄦ绠$悊', icon: 'lucide:clipboard-check', route: 'MesQcRecord', gradient: 'from-orange-500 to-amber-500', shadow: 'shadow-orange-500/15' },
{ title: '璁惧鐐规', icon: 'lucide:settings', route: 'MesDvMachinery', gradient: 'from-violet-500 to-purple-500', shadow: 'shadow-violet-500/15' },
- { title: '鐢熶骇鎺掔▼', icon: 'lucide:calendar-range', route: 'MesProScheduling', gradient: 'from-cyan-500 to-teal-500', shadow: 'shadow-cyan-500/15' },
{ title: '鐗╂枡搴撳瓨', icon: 'lucide:package-search', route: 'WlsMaterialStock', gradient: 'from-indigo-500 to-blue-500', shadow: 'shadow-indigo-500/15' },
- { title: '宸ヨ壓璺嚎', icon: 'lucide:route', route: 'MesPdRouting', gradient: 'from-teal-500 to-emerald-500', shadow: 'shadow-teal-500/15' },
- { title: '鏁版嵁鎶ヨ〃', icon: 'lucide:bar-chart-big', route: 'MesHomeIndex', gradient: 'from-pink-500 to-rose-500', shadow: 'shadow-pink-500/15' },
];
</script>
diff --git a/src/views/wls/barcode/data.ts b/src/views/wls/barcode/data.ts
index c34a07b..f624409 100644
--- a/src/views/wls/barcode/data.ts
+++ b/src/views/wls/barcode/data.ts
@@ -20,7 +20,7 @@
import { DictTag } from '#/components/dict-tag';
import { DvMachinerySelect } from '#/views/mes/dv/machinery/components';
import { MdClientSelect } from '#/views/mes/md/client/components';
-import { MdItemSelect } from '#/views/mes/md/item/components';
+import { MdmItemSelect } from '#/views/basicData/mdm/components';
import { MdVendorSelect } from '#/views/mes/md/vendor/components';
import {
MdWorkshopSelect,
@@ -249,7 +249,7 @@
{
fieldName: 'bizId',
label: '浜у搧鐗╂枡',
- component: markRaw(MdItemSelect),
+ component: markRaw(MdmItemSelect),
componentProps: {
onChange: (item: any) => syncBizDetail(formApi, item),
},
diff --git a/src/views/wls/batch/data.ts b/src/views/wls/batch/data.ts
index 9af407b..dae52b4 100644
--- a/src/views/wls/batch/data.ts
+++ b/src/views/wls/batch/data.ts
@@ -12,7 +12,7 @@
import { DictTag } from '#/components/dict-tag';
import { getRangePickerDefaultProps } from '#/utils';
import { MdClientSelect } from '#/views/mes/md/client/components';
-import { MdItemSelect } from '#/views/mes/md/item/components';
+import { MdmItemSelect } from '#/views/basicData/mdm/components';
import { MdVendorSelect } from '#/views/mes/md/vendor/components';
import { MdWorkstationSelect } from '#/views/mes/md/workstation/components';
import { ProTaskSelect } from '#/views/mes/pro/task/components';
@@ -34,7 +34,7 @@
{
fieldName: 'itemId',
label: '浜у搧鐗╂枡',
- component: markRaw(MdItemSelect),
+ component: markRaw(MdmItemSelect),
componentProps: {
placeholder: '璇烽�夋嫨浜у搧鐗╂枡',
},
diff --git a/src/views/wls/itemreceipt/data.ts b/src/views/wls/itemreceipt/data.ts
index c2e3f70..0f9658b 100644
--- a/src/views/wls/itemreceipt/data.ts
+++ b/src/views/wls/itemreceipt/data.ts
@@ -1,7 +1,7 @@
import type { VbenFormApi, VbenFormSchema } from '#/adapter/form';
import type { VxeTableGridOptions } from '#/adapter/vxe-table';
import type { MdmItemModelApi } from '#/api/mdm/item-model';
-import type { MesMdItemApi } from '#/api/mes/md/item';
+import type { MdmItemApi } from '#/api/mdm/item';
import type { MesWmArrivalNoticeApi } from '#/api/mes/wm/arrivalnotice';
import type { MesWmArrivalNoticeLineApi } from '#/api/mes/wm/arrivalnotice/line';
import type { MesWmItemReceiptApi } from '#/api/mes/wm/itemreceipt';
@@ -23,7 +23,7 @@
import { getItemModelListByItem } from '#/api/mdm/item-model';
import { generateAutoCode } from '#/api/mes/md/autocode/record';
import { getRangePickerDefaultProps } from '#/utils';
-import { MdItemSelect } from '#/views/mes/md/item/components';
+import { MdmItemSelect } from '#/views/basicData/mdm/components';
import { SrmSupplierSelect } from '#/views/srm/supplier/components';
import {
WmArrivalNoticeLineSelect,
@@ -585,11 +585,11 @@
{
fieldName: 'itemId',
label: '鐗╂枡',
- component: markRaw(MdItemSelect),
+ component: markRaw(MdmItemSelect),
componentProps: {
placeholder: '璇烽�夋嫨鐗╂枡',
// 鍒囨崲鐗╂枡鍚庯紝鍨嬪彿銆佸綍鍏ュ崟浣嶄笌鏁伴噺閮借閲嶆柊閫�
- onChange: (item?: MesMdItemApi.Item) => handleItemChange(item?.id),
+ onChange: (item?: MdmItemApi.Item) => handleItemChange(item?.id),
},
rules: 'selectRequired',
dependencies: {
@@ -839,7 +839,7 @@
{
fieldName: 'itemId',
label: '鐗╂枡',
- component: markRaw(MdItemSelect),
+ component: markRaw(MdmItemSelect),
componentProps: {
disabled: true,
},
diff --git a/src/views/wls/materialstock/data.ts b/src/views/wls/materialstock/data.ts
index 8cc4eb3..4498823 100644
--- a/src/views/wls/materialstock/data.ts
+++ b/src/views/wls/materialstock/data.ts
@@ -7,7 +7,7 @@
import { useAccess } from '@vben/access';
import { DICT_TYPE } from '@vben/constants';
-import { MdItemSelect } from '#/views/mes/md/item/components';
+import { MdmItemSelect } from '#/views/basicData/mdm/components';
import {
WmWarehouseAreaSelect,
@@ -21,7 +21,7 @@
{
fieldName: 'itemId',
label: '鐗╂枡',
- component: markRaw(MdItemSelect),
+ component: markRaw(MdmItemSelect),
componentProps: {
placeholder: '璇烽�夋嫨鐗╂枡',
},
diff --git a/src/views/wls/miscreceipt/data.ts b/src/views/wls/miscreceipt/data.ts
index 6614440..1005535 100644
--- a/src/views/wls/miscreceipt/data.ts
+++ b/src/views/wls/miscreceipt/data.ts
@@ -12,7 +12,7 @@
import { generateAutoCode } from '#/api/mes/md/autocode/record';
import { getRangePickerDefaultProps } from '#/utils';
-import { MdItemSelect } from '#/views/mes/md/item/components';
+import { MdmItemSelect } from '#/views/basicData/mdm/components';
import {
WmWarehouseAreaSelect,
WmWarehouseLocationSelect,
@@ -330,7 +330,7 @@
{
fieldName: 'itemId',
label: '鐗╂枡',
- component: markRaw(MdItemSelect),
+ component: markRaw(MdmItemSelect),
componentProps: {
placeholder: '璇烽�夋嫨鐗╂枡',
},
diff --git a/src/views/wls/outsourceissue/data.ts b/src/views/wls/outsourceissue/data.ts
index 915327c..6e5e582 100644
--- a/src/views/wls/outsourceissue/data.ts
+++ b/src/views/wls/outsourceissue/data.ts
@@ -1,6 +1,6 @@
锘縤mport type { VbenFormApi, VbenFormSchema } from '#/adapter/form';
import type { VxeTableGridOptions } from '#/adapter/vxe-table';
-import type { MesMdItemApi } from '#/api/mes/md/item';
+import type { MdmItemApi } from '#/api/mdm/item';
import type { MesProWorkOrderApi } from '#/api/mes/pro/workorder';
import type { MesWmMaterialStockApi } from '#/api/mes/wm/materialstock';
import type { MesWmOutsourceIssueApi } from '#/api/mes/wm/outsourceissue';
@@ -20,7 +20,7 @@
import { generateAutoCode } from '#/api/mes/md/autocode/record';
import { getRangePickerDefaultProps } from '#/utils';
-import { MdItemSelect } from '#/views/mes/md/item/components';
+import { MdmItemSelect } from '#/views/basicData/mdm/components';
import { MdVendorSelect } from '#/views/mes/md/vendor/components';
import { ProWorkOrderSelect } from '#/views/mes/pro/workorder/components';
import {
@@ -313,11 +313,11 @@
{
fieldName: 'itemId',
label: '鐗╂枡',
- component: markRaw(MdItemSelect),
+ component: markRaw(MdmItemSelect),
componentProps: {
placeholder: '璇烽�夋嫨鐗╂枡',
// 鍒囨崲鐗╂枡鍚庯紝閲嶆柊璁板綍鐗╂枡涓诲崟浣嶅苟娓呯┖鍨嬪彿銆佸綍鍏ュ崟浣嶅彛寰�
- onChange: async (item?: MesMdItemApi.Item) => {
+ onChange: async (item?: MdmItemApi.Item) => {
await unitHandlers.handleItemChange(item?.id);
},
},
@@ -424,7 +424,7 @@
{
fieldName: 'itemId',
label: '鐗╂枡',
- component: markRaw(MdItemSelect),
+ component: markRaw(MdmItemSelect),
componentProps: {
disabled: true,
},
diff --git a/src/views/wls/outsourcereceipt/data.ts b/src/views/wls/outsourcereceipt/data.ts
index 4d336b4..304226d 100644
--- a/src/views/wls/outsourcereceipt/data.ts
+++ b/src/views/wls/outsourcereceipt/data.ts
@@ -20,7 +20,7 @@
import { z } from '#/adapter/form';
import { generateAutoCode } from '#/api/mes/md/autocode/record';
import { getRangePickerDefaultProps } from '#/utils';
-import { MdItemSelect } from '#/views/mes/md/item/components';
+import { MdmItemSelect } from '#/views/basicData/mdm/components';
import { MdVendorSelect } from '#/views/mes/md/vendor/components';
import { ProWorkOrderSelect } from '#/views/mes/pro/workorder/components';
import {
@@ -328,7 +328,7 @@
{
fieldName: 'itemId',
label: '鐗╂枡',
- component: markRaw(MdItemSelect),
+ component: markRaw(MdmItemSelect),
componentProps: {
placeholder: '璇烽�夋嫨鐗╂枡',
},
@@ -448,7 +448,7 @@
{
fieldName: 'itemId',
label: '鐗╂枡',
- component: markRaw(MdItemSelect),
+ component: markRaw(MdmItemSelect),
componentProps: {
disabled: true,
},
diff --git a/src/views/wls/packages/data.ts b/src/views/wls/packages/data.ts
index ec8952a..6ceddb1 100644
--- a/src/views/wls/packages/data.ts
+++ b/src/views/wls/packages/data.ts
@@ -17,7 +17,7 @@
import { getSimpleUserList } from '#/api/system/user';
import { ErpSaleOrderSelect } from '#/views/erp/sale/order/components';
import { MdClientSelect } from '#/views/mes/md/client/components';
-import { MdItemSelect } from '#/views/mes/md/item/components';
+import { MdmItemSelect } from '#/views/basicData/mdm/components';
import { MdUnitMeasureSelect } from '#/views/mes/md/unitmeasure/components';
import { ProWorkOrderSelect } from '#/views/mes/pro/workorder/components';
@@ -456,7 +456,7 @@
{
fieldName: 'itemId',
label: '浜у搧鐗╂枡',
- component: markRaw(MdItemSelect),
+ component: markRaw(MdmItemSelect),
componentProps: {
placeholder: '璇烽�夋嫨浜у搧鐗╂枡',
},
diff --git a/src/views/wls/productissue/data.ts b/src/views/wls/productissue/data.ts
index 781bd29..f71f608 100644
--- a/src/views/wls/productissue/data.ts
+++ b/src/views/wls/productissue/data.ts
@@ -1,6 +1,6 @@
锘縤mport type { VbenFormApi, VbenFormSchema } from '#/adapter/form';
import type { VxeTableGridOptions } from '#/adapter/vxe-table';
-import type { MesMdItemApi } from '#/api/mes/md/item';
+import type { MdmItemApi } from '#/api/mdm/item';
import type { MesProTaskApi } from '#/api/mes/pro/task';
import type { MesWmMaterialStockApi } from '#/api/mes/wm/materialstock';
import type { MesWmProductIssueApi } from '#/api/mes/wm/productissue';
@@ -20,7 +20,7 @@
import { generateAutoCode } from '#/api/mes/md/autocode/record';
import { getRangePickerDefaultProps } from '#/utils';
-import { MdItemSelect } from '#/views/mes/md/item/components';
+import { MdmItemSelect } from '#/views/basicData/mdm/components';
import { MdWorkstationSelect } from '#/views/mes/md/workstation/components';
import { ProTaskSelect } from '#/views/mes/pro/task/components';
import { ProWorkOrderSelect } from '#/views/mes/pro/workorder/components';
@@ -336,11 +336,11 @@
{
fieldName: 'itemId',
label: '浜у搧鐗╂枡',
- component: markRaw(MdItemSelect),
+ component: markRaw(MdmItemSelect),
componentProps: {
placeholder: '璇烽�夋嫨浜у搧鐗╂枡',
// 鍒囨崲鐗╂枡鍚庯紝閲嶆柊璁板綍鐗╂枡涓诲崟浣嶅苟娓呯┖鍨嬪彿銆佸綍鍏ュ崟浣嶅彛寰�
- onChange: async (item?: MesMdItemApi.Item) => {
+ onChange: async (item?: MdmItemApi.Item) => {
await unitHandlers.handleItemChange(item?.id);
},
},
@@ -426,7 +426,7 @@
{
fieldName: 'itemId',
label: '鐗╂枡',
- component: markRaw(MdItemSelect),
+ component: markRaw(MdmItemSelect),
componentProps: {
disabled: true,
},
diff --git a/src/views/wls/productreceipt/data.ts b/src/views/wls/productreceipt/data.ts
index f249a84..8408598 100644
--- a/src/views/wls/productreceipt/data.ts
+++ b/src/views/wls/productreceipt/data.ts
@@ -1,6 +1,5 @@
import type { VbenFormApi, VbenFormSchema } from '#/adapter/form';
import type { VxeTableGridOptions } from '#/adapter/vxe-table';
-import type { MesWmMaterialStockApi } from '#/api/mes/wm/materialstock';
import type { MesWmProductReceiptApi } from '#/api/mes/wm/productreceipt';
import type { MesWmProductReceiptDetailApi } from '#/api/mes/wm/productreceipt/detail';
import type { MesWmProductReceiptLineApi } from '#/api/mes/wm/productreceipt/line';
@@ -17,9 +16,8 @@
import { generateAutoCode } from '#/api/mes/md/autocode/record';
import { getRangePickerDefaultProps } from '#/utils';
-import { MdItemSelect } from '#/views/mes/md/item/components';
+import { MdmItemSelect } from '#/views/basicData/mdm/components';
import { ProWorkOrderSelect } from '#/views/mes/pro/workorder/components';
-import { WmMaterialStockSelect } from '#/views/wls/materialstock/components';
import {
WmWarehouseAreaSelect,
WmWarehouseLocationSelect,
@@ -255,34 +253,16 @@
}
/** 鍏ュ簱鍗曡鏂板/淇敼鐨勮〃鍗� */
-export function useLineFormSchema(formApi?: VbenFormApi): VbenFormSchema[] {
+export function useLineFormSchema(): VbenFormSchema[] {
return [
{
- fieldName: 'materialStockId',
- label: '搴撳瓨璁板綍',
- component: markRaw(WmMaterialStockSelect),
+ fieldName: 'itemId',
+ label: '鐗╂枡',
+ component: markRaw(MdmItemSelect),
componentProps: {
- // 閫夋嫨搴撳瓨璁板綍鍚庯紝鑷姩鍥炲~鐗╂枡/鎵规/鏁伴噺
- onChange: async (stock?: MesWmMaterialStockApi.MaterialStock) => {
- await formApi?.setValues({
- batchCode: stock?.batchCode,
- batchId: stock?.batchId,
- itemId: stock?.itemId,
- quantity: stock?.quantity,
- quantityMax: stock?.quantity,
- });
- },
- virtualFilter: 'only',
+ placeholder: '璇烽�夋嫨鐗╂枡',
},
rules: 'selectRequired',
- },
- {
- fieldName: 'quantityMax',
- component: 'Input',
- dependencies: {
- triggerFields: [''],
- show: () => false,
- },
},
{
fieldName: 'quantity',
@@ -295,32 +275,13 @@
precision: 2,
},
rules: 'required',
- dependencies: {
- triggerFields: ['quantityMax'],
- componentProps: (values) => ({
- class: '!w-full',
- max: values.quantityMax,
- min: 0,
- placeholder: '璇疯緭鍏ュ叆搴撴暟閲�',
- precision: 2,
- }),
- },
},
{
fieldName: 'batchCode',
label: '鎵规鍙�',
component: 'Input',
componentProps: {
- disabled: true,
- placeholder: '閫夋嫨搴撳瓨鍚庤嚜鍔ㄥ甫鍑�',
- },
- },
- {
- fieldName: 'itemId',
- label: '鐗╂枡',
- component: markRaw(MdItemSelect),
- componentProps: {
- disabled: true,
+ placeholder: '璇疯緭鍏ユ壒娆″彿锛堝彲閫夛級',
},
},
{
@@ -380,7 +341,7 @@
{
fieldName: 'itemId',
label: '鐗╂枡',
- component: markRaw(MdItemSelect),
+ component: markRaw(MdmItemSelect),
componentProps: {
disabled: true,
},
diff --git a/src/views/wls/productreceipt/modules/line-form.vue b/src/views/wls/productreceipt/modules/line-form.vue
index b9e3716..231d56e 100644
--- a/src/views/wls/productreceipt/modules/line-form.vue
+++ b/src/views/wls/productreceipt/modules/line-form.vue
@@ -69,7 +69,7 @@
formData.value = undefined;
return;
}
- formApi.setState({ schema: useLineFormSchema(formApi) });
+ formApi.setState({ schema: useLineFormSchema() });
// 鍔犺浇鏁版嵁
const data = modalApi.getData<{ id?: number; receiptId: number }>();
receiptId.value = data.receiptId;
diff --git a/src/views/wls/productsales/data.ts b/src/views/wls/productsales/data.ts
index 6099512..a4afe74 100644
--- a/src/views/wls/productsales/data.ts
+++ b/src/views/wls/productsales/data.ts
@@ -1,6 +1,6 @@
import type { VbenFormApi, VbenFormSchema } from '#/adapter/form';
import type { VxeTableGridOptions } from '#/adapter/vxe-table';
-import type { MesMdItemApi } from '#/api/mes/md/item';
+import type { MdmItemApi } from '#/api/mdm/item';
import type { MesWmMaterialStockApi } from '#/api/mes/wm/materialstock';
import type { MesWmProductSalesApi } from '#/api/mes/wm/productsales';
import type { MesWmProductSalesDetailApi } from '#/api/mes/wm/productsales/detail';
@@ -24,7 +24,7 @@
import { generateAutoCode } from '#/api/mes/md/autocode/record';
import { ErpSaleOrderSelect } from '#/views/erp/sale/order/components';
import { getRangePickerDefaultProps } from '#/utils';
-import { MdItemSelect } from '#/views/mes/md/item/components';
+import { MdmItemSelect } from '#/views/basicData/mdm/components';
import { WmMaterialStockSelect } from '#/views/wls/materialstock/components';
import {
buildItemUnitSchema,
@@ -530,11 +530,11 @@
{
fieldName: 'itemId',
label: '浜у搧',
- component: markRaw(MdItemSelect),
+ component: markRaw(MdmItemSelect),
componentProps: {
placeholder: '璇烽�夋嫨浜у搧',
// 鍒囨崲浜у搧鍚庯紝閲嶆柊璁板綍鐗╂枡涓诲崟浣嶅苟娓呯┖鍨嬪彿銆佸綍鍏ュ崟浣嶅彛寰�
- onChange: async (item?: MesMdItemApi.Item) => {
+ onChange: async (item?: MdmItemApi.Item) => {
await unitHandlers.handleItemChange(item?.id);
},
},
@@ -641,7 +641,7 @@
{
fieldName: 'itemId',
label: '鐗╂枡',
- component: markRaw(MdItemSelect),
+ component: markRaw(MdmItemSelect),
componentProps: {
disabled: true,
},
diff --git a/src/views/wls/returnsales/data.ts b/src/views/wls/returnsales/data.ts
index 7a3214b..3f5d820 100644
--- a/src/views/wls/returnsales/data.ts
+++ b/src/views/wls/returnsales/data.ts
@@ -16,7 +16,7 @@
import CrmCustomerSelect from '#/components/crm-customer-select.vue';
import { generateAutoCode } from '#/api/mes/md/autocode/record';
import { ErpSaleOrderSelect } from '#/views/erp/sale/order/components';
-import { MdItemSelect } from '#/views/mes/md/item/components';
+import { MdmItemSelect } from '#/views/basicData/mdm/components';
import { WmBatchSelect } from '#/views/wls/batch/components';
import {
WmWarehouseAreaSelect,
@@ -354,7 +354,7 @@
{
fieldName: 'itemId',
label: '鐗╂枡',
- component: hasItems ? 'Select' : markRaw(MdItemSelect),
+ component: hasItems ? 'Select' : markRaw(MdmItemSelect),
componentProps: hasItems
? {
placeholder: '璇烽�夋嫨鐗╂枡',
@@ -370,7 +370,6 @@
}
: {
placeholder: '璇烽�夋嫨鐗╂枡',
- productIds: [],
},
rules: 'selectRequired',
},
@@ -499,7 +498,7 @@
{
fieldName: 'itemId',
label: '鐗╂枡',
- component: markRaw(MdItemSelect),
+ component: markRaw(MdmItemSelect),
componentProps: {
disabled: true,
},
diff --git a/src/views/wls/returnvendor/data.ts b/src/views/wls/returnvendor/data.ts
index cc98016..ced93ac 100644
--- a/src/views/wls/returnvendor/data.ts
+++ b/src/views/wls/returnvendor/data.ts
@@ -1,6 +1,6 @@
import type { VbenFormApi, VbenFormSchema } from '#/adapter/form';
import type { VxeTableGridOptions } from '#/adapter/vxe-table';
-import type { MesMdItemApi } from '#/api/mes/md/item';
+import type { MdmItemApi } from '#/api/mdm/item';
import type { MesWmMaterialStockApi } from '#/api/mes/wm/materialstock';
import type { MesWmReturnVendorApi } from '#/api/mes/wm/returnvendor';
import type { MesWmReturnVendorDetailApi } from '#/api/mes/wm/returnvendor/detail';
@@ -13,7 +13,7 @@
import { Button } from 'ant-design-vue';
import { generateAutoCode } from '#/api/mes/md/autocode/record';
-import { MdItemSelect } from '#/views/mes/md/item/components';
+import { MdmItemSelect } from '#/views/basicData/mdm/components';
import { MdVendorSelect } from '#/views/mes/md/vendor/components';
import { ErpPurchaseOrderSelect } from '#/views/erp/purchase/order/components';
import { WmBatchSelect } from '#/views/wls/batch/components';
@@ -358,11 +358,11 @@
{
fieldName: 'itemId',
label: '浜у搧鐗╂枡',
- component: markRaw(MdItemSelect),
+ component: markRaw(MdmItemSelect),
componentProps: {
placeholder: '璇烽�夋嫨浜у搧鐗╂枡',
// 鍒囨崲浜у搧鍚庯紝閲嶆柊璁板綍鐗╂枡涓诲崟浣嶅苟娓呯┖鍨嬪彿銆佸綍鍏ュ崟浣嶅彛寰�
- onChange: async (item?: MesMdItemApi.Item) => {
+ onChange: async (item?: MdmItemApi.Item) => {
await unitHandlers.handleItemChange(item?.id);
},
},
@@ -470,7 +470,7 @@
{
fieldName: 'itemId',
label: '鐗╂枡',
- component: markRaw(MdItemSelect),
+ component: markRaw(MdmItemSelect),
componentProps: {
disabled: true,
},
diff --git a/src/views/wls/salesnotice/data.ts b/src/views/wls/salesnotice/data.ts
index 6818446..5254f5c 100644
--- a/src/views/wls/salesnotice/data.ts
+++ b/src/views/wls/salesnotice/data.ts
@@ -16,7 +16,7 @@
import { generateAutoCode } from '#/api/mes/md/autocode/record';
import CrmCustomerSelect from '#/components/crm-customer-select.vue';
import { ErpSaleOrderSelect } from '#/views/erp/sale/order/components';
-import { MdItemSelect } from '#/views/mes/md/item/components';
+import { MdmItemSelect } from '#/views/basicData/mdm/components';
/** 琛ㄥ崟绫诲瀷 */
export type FormType = 'create' | 'detail' | 'update';
@@ -355,7 +355,7 @@
{
fieldName: 'itemId',
label: '鐗╂枡',
- component: markRaw(MdItemSelect),
+ component: markRaw(MdmItemSelect),
componentProps: {
placeholder: '璇烽�夋嫨鐗╂枡',
},
diff --git a/src/views/wls/sn/data.ts b/src/views/wls/sn/data.ts
index 2023366..45a19cc 100644
--- a/src/views/wls/sn/data.ts
+++ b/src/views/wls/sn/data.ts
@@ -5,7 +5,7 @@
import { markRaw } from 'vue';
import { getRangePickerDefaultProps } from '#/utils';
-import { MdItemSelect } from '#/views/mes/md/item/components';
+import { MdmItemSelect } from '#/views/basicData/mdm/components';
/** 鐢熸垚 SN 鐮佺殑琛ㄥ崟 */
export function useFormSchema(): VbenFormSchema[] {
@@ -13,7 +13,7 @@
{
fieldName: 'itemId',
label: '鐗╂枡',
- component: markRaw(MdItemSelect),
+ component: markRaw(MdmItemSelect),
componentProps: {
placeholder: '璇烽�夋嫨鐗╂枡',
},
@@ -59,7 +59,7 @@
{
fieldName: 'itemId',
label: '鐗╂枡',
- component: markRaw(MdItemSelect),
+ component: markRaw(MdmItemSelect),
componentProps: {
placeholder: '璇烽�夋嫨鐗╂枡',
},
diff --git a/src/views/wls/stocktaking/plan/components/condition-value-input.vue b/src/views/wls/stocktaking/plan/components/condition-value-input.vue
index 1ad1dfc..68ed573 100644
--- a/src/views/wls/stocktaking/plan/components/condition-value-input.vue
+++ b/src/views/wls/stocktaking/plan/components/condition-value-input.vue
@@ -10,7 +10,7 @@
import { getWarehouseArea } from '#/api/mes/wm/warehouse/area';
import { getWarehouseLocation } from '#/api/mes/wm/warehouse/location';
-import { MdItemSelect } from '#/views/mes/md/item/components';
+import { MdmItemSelect } from '#/views/basicData/mdm/components';
import { WmBatchSelect } from '#/views/wls/batch/components';
import {
WmWarehouseAreaSelect,
@@ -195,7 +195,7 @@
@change="handleSelectorChange"
/>
</div>
- <MdItemSelect
+ <MdmItemSelect
v-else-if="type === WlsStockTakingParamTypeEnum.ITEM"
:model-value="effectiveValue"
@change="handleSelectorChange"
diff --git a/src/views/wls/stocktaking/task/data.ts b/src/views/wls/stocktaking/task/data.ts
index ed62e0c..4da8005 100644
--- a/src/views/wls/stocktaking/task/data.ts
+++ b/src/views/wls/stocktaking/task/data.ts
@@ -20,7 +20,7 @@
import { generateAutoCode } from '#/api/mes/md/autocode/record';
import { getSimpleUserList } from '#/api/system/user';
import { getRangePickerDefaultProps } from '#/utils';
-import { MdItemSelect } from '#/views/mes/md/item/components';
+import { MdmItemSelect } from '#/views/basicData/mdm/components';
import { StockTakingPlanSelect } from '#/views/wls/stocktaking/plan/components';
import {
WmWarehouseAreaSelect,
@@ -498,7 +498,7 @@
{
fieldName: 'itemId',
label: '鐗╂枡',
- component: markRaw(MdItemSelect),
+ component: markRaw(MdmItemSelect),
componentProps: {
placeholder: '璇烽�夋嫨鐗╂枡',
},
diff --git a/src/views/wls/transfer/data.ts b/src/views/wls/transfer/data.ts
index 864d701..b57b7dc 100644
--- a/src/views/wls/transfer/data.ts
+++ b/src/views/wls/transfer/data.ts
@@ -18,7 +18,7 @@
import { z } from '#/adapter/form';
import { generateAutoCode } from '#/api/mes/md/autocode/record';
-import { MdItemSelect } from '#/views/mes/md/item/components';
+import { MdmItemSelect } from '#/views/basicData/mdm/components';
import { WmMaterialStockSelect } from '#/views/wls/materialstock/components';
import {
WmWarehouseAreaSelect,
@@ -446,7 +446,7 @@
{
fieldName: 'itemId',
label: '鐗╂枡',
- component: markRaw(MdItemSelect),
+ component: markRaw(MdmItemSelect),
componentProps: {
disabled: true,
},
@@ -576,7 +576,7 @@
{
fieldName: 'itemId',
label: '鐗╂枡',
- component: markRaw(MdItemSelect),
+ component: markRaw(MdmItemSelect),
componentProps: {
disabled: true,
},
--
Gitblit v1.9.3