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