From ef25e8c6dace52c939ea77c50b59b0918cb5d36a Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期三, 15 七月 2026 15:52:08 +0800
Subject: [PATCH] 银川 1.仓储物流添加库存事务流水页面

---
 /dev/null |  525 ----------------------------------------------------------
 1 files changed, 0 insertions(+), 525 deletions(-)

diff --git a/mdm_frontend_change.md b/mdm_frontend_change.md
deleted file mode 100644
index 5db78df..0000000
--- a/mdm_frontend_change.md
+++ /dev/null
@@ -1,525 +0,0 @@
-# 鐗╂枡涓绘暟鎹ā鍧� (MDM) 鍓嶇鍙樻洿鏂囨。
-
-> **鍩哄噯鏂囨。**锛氭湰鏂囨。涓� MDM 妯″潡鐨�**涓氬姟涓� API 鍙樻洿鍩哄噯**銆傞〉闈㈠疄鐜版柟寮忥紙缁勪欢銆佽〃鏍笺�佽〃鍗曘�佺洰褰曠粨鏋勶級椤婚伒寰� [`FRONTEND_DEVELOPMENT.md`](./FRONTEND_DEVELOPMENT.md)锛屾湰鏂囨。涓殑 Element Plus 绀轰緥浠呮弿杩颁笟鍔″瓧娈典笌浜や簰锛屼笉鍙洿鎺ョ収鎼� UI 妗嗘灦銆�
-
-## 涓�銆佹柊澧為〉闈�
-
-### 1.1 鐗╂枡涓绘暟鎹鐞�
-
-#### 娑夊強椤甸潰
-
-- 鐗╂枡鍒楄〃椤� (`views/mdm/item/index.vue`)
-- 鐗╂枡鏂板/缂栬緫寮圭獥 (`views/mdm/item/ItemForm.vue`)
-- 鐗╂枡璇︽儏椤� (`views/mdm/item/detail.vue`)
-
-#### API
-
-| 鏂规硶 | 璺緞 | 璇存槑 |
-|------|------|------|
-| GET | /mdm/item/page | 鐗╂枡鍒嗛〉鏌ヨ |
-| GET | /mdm/item/list | 鐗╂枡鍒楄〃鏌ヨ |
-| GET | /mdm/item/get | 鑾峰彇鐗╂枡璇︽儏 |
-| POST | /mdm/item/create | 鍒涘缓鐗╂枡 |
-| PUT | /mdm/item/update | 鏇存柊鐗╂枡 |
-| DELETE | /mdm/item/delete | 鍒犻櫎鐗╂枡 |
-| PUT | /mdm/item/update-status | 鏇存柊鐗╂枡鐘舵�� |
-
-**璇锋眰鍙傛暟锛堢墿鏂欐煡璇級锛�**
-
-| 鍙傛暟 | 绫诲瀷 | 蹇呭~ | 璇存槑 |
-|------|------|------|------|
-| code | String | 鍚� | 鐗╂枡缂栫爜 |
-| name | String | 鍚� | 鐗╂枡鍚嶇О |
-| categoryId | Long | 鍚� | 鍒嗙被ID |
-| itemType | Integer | 鍚� | 鐗╂枡绫诲瀷(1:鍘熸枡,2:鍗婃垚鍝�,3:鎴愬搧,4:杈呮枡) |
-| status | Integer | 鍚� | 鐘舵�� |
-
-**鍝嶅簲锛�**
-
-```json
-{
-  "code": 200,
-  "data": {
-    "list": [
-      {
-        "id": 1,
-        "code": "M001",
-        "name": "鐗╂枡鍚嶇О",
-        "barCode": "鏉$爜",
-        "specification": "瑙勬牸鍨嬪彿",
-        "categoryId": 10,
-        "categoryName": "鍒嗙被鍚嶇О",
-        "unitMeasureId": 1,
-        "unitMeasureName": "鍗曚綅鍚嶇О",
-        "brandId": 1,
-        "brandName": "鍝佺墝鍚嶇О",
-        "itemType": 1,
-        "status": 0,
-        "purchasePrice": 100.00,
-        "salesPrice": 150.00,
-        "costPrice": 80.00,
-        "safetyStock": 50.00,
-        "minStock": 20.00,
-        "maxStock": 200.00,
-        "isBatchManaged": true,
-        "expiryDay": 365,
-        "remark": "澶囨敞"
-      }
-    ],
-    "total": 100
-  }
-}
-```
-
-#### 鍓嶇淇敼鐐�
-
-**1. 鐗╂枡鍒楄〃椤甸潰缁撴瀯锛�**
-
-```html
-<template>
-  <ContentWrap>
-    <!-- 鎼滅储鍖哄煙 -->
-    <el-form :model="queryParams" ref="queryFormRef" :inline="true">
-      <el-form-item label="鐗╂枡缂栫爜" prop="code">
-        <el-input v-model="queryParams.code" placeholder="璇疯緭鍏ョ墿鏂欑紪鐮�" />
-      </el-form-item>
-      <el-form-item label="鐗╂枡鍚嶇О" prop="name">
-        <el-input v-model="queryParams.name" placeholder="璇疯緭鍏ョ墿鏂欏悕绉�" />
-      </el-form-item>
-      <el-form-item label="鐗╂枡鍒嗙被" prop="categoryId">
-        <el-tree-select v-model="queryParams.categoryId" :data="categoryTree" />
-      </el-form-item>
-      <el-form-item label="鐗╂枡绫诲瀷" prop="itemType">
-        <el-select v-model="queryParams.itemType" placeholder="璇烽�夋嫨鐗╂枡绫诲瀷">
-          <el-option label="鍘熸枡" :value="1" />
-          <el-option label="鍗婃垚鍝�" :value="2" />
-          <el-option label="鎴愬搧" :value="3" />
-          <el-option label="杈呮枡" :value="4" />
-        </el-select>
-      </el-form-item>
-      <el-form-item>
-        <el-button type="primary" @click="handleQuery">鎼滅储</el-button>
-        <el-button @click="resetQuery">閲嶇疆</el-button>
-      </el-form-item>
-    </el-form>
-
-    <!-- 鎿嶄綔鎸夐挳 -->
-    <el-row :gutter="10" class="mb8">
-      <el-col :span="1.5">
-        <el-button type="primary" plain @click="handleCreate">鏂板</el-button>
-      </el-col>
-      <el-col :span="1.5">
-        <el-button type="success" plain @click="handleExport">瀵煎嚭</el-button>
-      </el-col>
-    </el-row>
-
-    <!-- 琛ㄦ牸 -->
-    <el-table v-loading="loading" :data="list">
-      <el-table-column label="鐗╂枡缂栫爜" prop="code" width="120" />
-      <el-table-column label="鐗╂枡鍚嶇О" prop="name" width="180" />
-      <el-table-column label="瑙勬牸鍨嬪彿" prop="specification" width="150" />
-      <el-table-column label="鍒嗙被" prop="categoryName" width="100" />
-      <el-table-column label="鍗曚綅" prop="unitMeasureName" width="80" />
-      <el-table-column label="鐗╂枡绫诲瀷" prop="itemType" width="80">
-        <template #default="{ row }">
-          <dict-tag :type="DICT_TYPE.MDM_ITEM_TYPE" :value="row.itemType" />
-        </template>
-      </el-table-column>
-      <el-table-column label="閲囪喘浠�" prop="purchasePrice" width="100" />
-      <el-table-column label="閿�鍞环" prop="salesPrice" width="100" />
-      <el-table-column label="鎵规绠$悊" prop="isBatchManaged" width="80">
-        <template #default="{ row }">
-          <el-tag v-if="row.isBatchManaged" type="success">鏄�</el-tag>
-          <el-tag v-else type="info">鍚�</el-tag>
-        </template>
-      </el-table-column>
-      <el-table-column label="鐘舵��" prop="status" width="80">
-        <template #default="{ row }">
-          <dict-tag :type="DICT_TYPE.COMMON_STATUS" :value="row.status" />
-        </template>
-      </el-table-column>
-      <el-table-column label="鎿嶄綔" width="180" fixed="right">
-        <template #default="{ row }">
-          <el-button link type="primary" @click="handleUpdate(row)">缂栬緫</el-button>
-          <el-button link type="danger" @click="handleDelete(row)">鍒犻櫎</el-button>
-        </template>
-      </el-table-column>
-    </el-table>
-
-    <!-- 鍒嗛〉 -->
-    <Pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNo" v-model:limit="queryParams.pageSize" @pagination="getList" />
-  </ContentWrap>
-</template>
-```
-
-**2. 鐗╂枡琛ㄥ崟寮圭獥锛�**
-
-```html
-<el-dialog v-model="dialogVisible" title="鐗╂枡淇℃伅" width="800px">
-  <el-form ref="formRef" :model="formData" :rules="formRules" label-width="120px">
-    <el-row :gutter="20">
-      <el-col :span="12">
-        <el-form-item label="鐗╂枡缂栫爜" prop="code">
-          <el-input v-model="formData.code" placeholder="璇疯緭鍏ョ墿鏂欑紪鐮�" />
-        </el-form-item>
-      </el-col>
-      <el-col :span="12">
-        <el-form-item label="鐗╂枡鍚嶇О" prop="name">
-          <el-input v-model="formData.name" placeholder="璇疯緭鍏ョ墿鏂欏悕绉�" />
-        </el-form-item>
-      </el-col>
-    </el-row>
-    <el-row :gutter="20">
-      <el-col :span="12">
-        <el-form-item label="鏉$爜" prop="barCode">
-          <el-input v-model="formData.barCode" placeholder="璇疯緭鍏ユ潯鐮�" />
-        </el-form-item>
-      </el-col>
-      <el-col :span="12">
-        <el-form-item label="瑙勬牸鍨嬪彿" prop="specification">
-          <el-input v-model="formData.specification" placeholder="璇疯緭鍏ヨ鏍煎瀷鍙�" />
-        </el-form-item>
-      </el-col>
-    </el-row>
-    <el-row :gutter="20">
-      <el-col :span="12">
-        <el-form-item label="鐗╂枡鍒嗙被" prop="categoryId">
-          <el-tree-select v-model="formData.categoryId" :data="categoryTree" />
-        </el-form-item>
-      </el-col>
-      <el-col :span="12">
-        <el-form-item label="璁¢噺鍗曚綅" prop="unitMeasureId">
-          <el-select v-model="formData.unitMeasureId" placeholder="璇烽�夋嫨鍗曚綅">
-            <el-option v-for="unit in unitList" :key="unit.id" :label="unit.name" :value="unit.id" />
-          </el-select>
-        </el-form-item>
-      </el-col>
-    </el-row>
-    <el-row :gutter="20">
-      <el-col :span="12">
-        <el-form-item label="鍝佺墝" prop="brandId">
-          <el-select v-model="formData.brandId" placeholder="璇烽�夋嫨鍝佺墝">
-            <el-option v-for="brand in brandList" :key="brand.id" :label="brand.name" :value="brand.id" />
-          </el-select>
-        </el-form-item>
-      </el-col>
-      <el-col :span="12">
-        <el-form-item label="鐗╂枡绫诲瀷" prop="itemType">
-          <el-select v-model="formData.itemType" placeholder="璇烽�夋嫨鐗╂枡绫诲瀷">
-            <el-option label="鍘熸枡" :value="1" />
-            <el-option label="鍗婃垚鍝�" :value="2" />
-            <el-option label="鎴愬搧" :value="3" />
-            <el-option label="杈呮枡" :value="4" />
-          </el-select>
-        </el-form-item>
-      </el-col>
-    </el-row>
-    <!-- 浠锋牸淇℃伅 -->
-    <el-row :gutter="20">
-      <el-col :span="8">
-        <el-form-item label="閲囪喘浠�" prop="purchasePrice">
-          <el-input-number v-model="formData.purchasePrice" :precision="2" />
-        </el-form-item>
-      </el-col>
-      <el-col :span="8">
-        <el-form-item label="閿�鍞环" prop="salesPrice">
-          <el-input-number v-model="formData.salesPrice" :precision="2" />
-        </el-form-item>
-      </el-col>
-      <el-col :span="8">
-        <el-form-item label="鎴愭湰浠�" prop="costPrice">
-          <el-input-number v-model="formData.costPrice" :precision="2" />
-        </el-form-item>
-      </el-col>
-    </el-row>
-    <!-- 搴撳瓨绠$悊 -->
-    <el-row :gutter="20">
-      <el-col :span="12">
-        <el-form-item label="瀹夊叏搴撳瓨" prop="safetyStock">
-          <el-input-number v-model="formData.safetyStock" :precision="2" />
-        </el-form-item>
-      </el-col>
-      <el-col :span="12">
-        <el-form-item label="鎵规绠$悊" prop="isBatchManaged">
-          <el-switch v-model="formData.isBatchManaged" />
-        </el-form-item>
-      </el-col>
-    </el-row>
-    <el-form-item label="澶囨敞" prop="remark">
-      <el-input v-model="formData.remark" type="textarea" :rows="3" />
-    </el-form-item>
-  </el-form>
-  <template #footer>
-    <el-button @click="dialogVisible = false">鍙栨秷</el-button>
-    <el-button type="primary" @click="submitForm">纭畾</el-button>
-  </template>
-</el-dialog>
-```
-
-**3. 鏁版嵁瀹氫箟锛�**
-
-```js
-<script setup>
-import { ref, reactive, onMounted } from 'vue'
-import * as ItemApi from '@/api/mdm/item'
-
-const loading = ref(false)
-const list = ref([])
-const total = ref(0)
-const queryParams = reactive({
-  pageNo: 1,
-  pageSize: 10,
-  code: '',
-  name: '',
-  categoryId: null,
-  itemType: null,
-  status: null
-})
-
-const dialogVisible = ref(false)
-const formData = ref({
-  id: undefined,
-  code: '',
-  name: '',
-  barCode: '',
-  specification: '',
-  categoryId: null,
-  unitMeasureId: null,
-  brandId: null,
-  itemType: 1,
-  purchasePrice: null,
-  salesPrice: null,
-  costPrice: null,
-  safetyStock: null,
-  isBatchManaged: false,
-  remark: ''
-})
-
-const getList = async () => {
-  loading.value = true
-  try {
-    const data = await ItemApi.getItemPage(queryParams)
-    list.value = data.list
-    total.value = data.total
-  } finally {
-    loading.value = false
-  }
-}
-
-const handleCreate = () => {
-  formData.value = { ...initialFormData }
-  dialogVisible.value = true
-}
-
-const handleUpdate = (row) => {
-  formData.value = { ...row }
-  dialogVisible.value = true
-}
-
-const submitForm = async () => {
-  await formRef.value.validate()
-  if (formData.value.id) {
-    await ItemApi.updateItem(formData.value)
-  } else {
-    await ItemApi.createItem(formData.value)
-  }
-  dialogVisible.value = false
-  getList()
-}
-
-onMounted(() => {
-  getList()
-})
-</script>
-```
-
----
-
-### 1.2 鐗╂枡鍒嗙被绠$悊
-
-#### 娑夊強椤甸潰
-
-- 鐗╂枡鍒嗙被绠$悊椤� (`views/mdm/category/index.vue`)
-
-#### API
-
-| 鏂规硶 | 璺緞 | 璇存槑 |
-|------|------|------|
-| GET | /mdm/category/list | 鍒嗙被鍒楄〃鏌ヨ |
-| GET | /mdm/category/get | 鑾峰彇鍒嗙被璇︽儏 |
-| POST | /mdm/category/create | 鍒涘缓鍒嗙被 |
-| PUT | /mdm/category/update | 鏇存柊鍒嗙被 |
-| DELETE | /mdm/category/delete | 鍒犻櫎鍒嗙被 |
-
----
-
-### 1.3 璁¢噺鍗曚綅绠$悊
-
-#### 娑夊強椤甸潰
-
-- 璁¢噺鍗曚綅绠$悊椤� (`views/mdm/unit/index.vue`)
-
-#### API
-
-| 鏂规硶 | 璺緞 | 璇存槑 |
-|------|------|------|
-| GET | /mdm/unit/page | 鍗曚綅鍒嗛〉鏌ヨ |
-| GET | /mdm/unit/list | 鍗曚綅鍒楄〃鏌ヨ |
-| POST | /mdm/unit/create | 鍒涘缓鍗曚綅 |
-| PUT | /mdm/unit/update | 鏇存柊鍗曚綅 |
-| DELETE | /mdm/unit/delete | 鍒犻櫎鍗曚綅 |
-
----
-
-### 1.4 鍝佺墝绠$悊
-
-#### 娑夊強椤甸潰
-
-- 鍝佺墝绠$悊椤� (`views/mdm/brand/index.vue`)
-
-#### API
-
-| 鏂规硶 | 璺緞 | 璇存槑 |
-|------|------|------|
-| GET | /mdm/brand/page | 鍝佺墝鍒嗛〉鏌ヨ |
-| GET | /mdm/brand/list | 鍝佺墝鍒楄〃鏌ヨ |
-| POST | /mdm/brand/create | 鍒涘缓鍝佺墝 |
-| PUT | /mdm/brand/update | 鏇存柊鍝佺墝 |
-| DELETE | /mdm/brand/delete | 鍒犻櫎鍝佺墝 |
-
----
-
-## 浜屻�佷慨鏀归〉闈�
-
-### 2.1 ERP 浜у搧绠$悊椤甸潰
-
-#### 淇敼鍐呭
-
-**鍘熼〉闈�**锛歚views/erp/product/index.vue`
-
-**淇敼鐐�**锛�
-1. API 鎺ュ彛浠� `/erp/product/*` 鏀逛负璋冪敤 `/mdm/item/*`
-2. 鏁版嵁瀛楁鏄犲皠璋冩暣锛坄productId` 鈫� `itemId`锛�
-3. 澧炲姞鐗╂枡绫诲瀷绛涢�夛紙鍘熸枡/鍗婃垚鍝�/鎴愬搧/杈呮枡锛�
-
-**娉ㄦ剰浜嬮」**锛�
-- ERP 浜у搧椤甸潰鏁版嵁鏉ユ簮浠� MDM 鐗╂枡鑾峰彇
-- 淇濈暀 ERP 鐗规湁瀛楁锛堥噰璐环銆侀攢鍞环銆佹渶浣庝环锛夌殑缂栬緫鑳藉姏
-
----
-
-### 2.2 MES 鐗╂枡绠$悊椤甸潰
-
-#### 淇敼鍐呭
-
-**鍘熼〉闈�**锛歚views/mes/md/item/index.vue`
-
-**淇敼鐐�**锛�
-1. API 鎺ュ彛浠� `/mes/md-item/*` 鏀逛负璋冪敤 `/mdm/item/*`
-2. 鏁版嵁瀛楁鏄犲皠璋冩暣锛坄itemTypeId` 鈫� `categoryId`锛�
-3. 鎵规閰嶇疆浠庣嫭绔嬮〉闈㈡敼涓虹墿鏂欒鎯呴〉瀛愭ā鍧�
-
-**娉ㄦ剰浜嬮」**锛�
-- MES 鐗╂枡椤甸潰鏁版嵁鏉ユ簮浠� MDM 鐗╂枡鑾峰彇
-- 鎵规灞炴�ч厤缃繚鐣欏湪 MDM 妯″潡绠$悊
-
----
-
-### 2.3 WMS 鍟嗗搧绠$悊椤甸潰
-
-#### 淇敼鍐呭
-
-**鍘熼〉闈�**锛歚views/wms/item/index.vue`
-
-**淇敼鐐�**锛�
-1. API 鎺ュ彛浠� `/wms/item/*` 鏀逛负璋冪敤 `/mdm/item/*`
-2. SKU 绠$悊鏀逛负鐗╂枡璇︽儏椤靛瓙妯″潡
-3. 搴撳瓨鏌ヨ鏀圭敤缁熶竴鎺ュ彛 `/wms/stock/*`
-
-**娉ㄦ剰浜嬮」**锛�
-- WMS 鍟嗗搧椤甸潰鏁版嵁鏉ユ簮浠� MDM 鐗╂枡鑾峰彇
-- SKU 浣滀负鐗╂枡鐨勮鏍煎睘鎬х鐞�
-
----
-
-## 涓夈�佹柊澧炲瓧鍏哥被鍨�
-
-| 瀛楀吀绫诲瀷 | 瀛楀吀鍊� | 璇存槑 |
-|---------|-------|------|
-| MDM_ITEM_TYPE | 1 | 鍘熸枡 |
-| MDM_ITEM_TYPE | 2 | 鍗婃垚鍝� |
-| MDM_ITEM_TYPE | 3 | 鎴愬搧 |
-| MDM_ITEM_TYPE | 4 | 杈呮枡 |
-| STOCK_BIZ_TYPE | 10 | 閲囪喘鍏ュ簱 |
-| STOCK_BIZ_TYPE | 20 | 閿�鍞嚭搴� |
-| STOCK_BIZ_TYPE | 30 | 鐢熶骇鍏ュ簱 |
-| STOCK_BIZ_TYPE | 40 | 鐢熶骇棰嗘枡 |
-| STOCK_BIZ_TYPE | 50 | 鐢熶骇閫�鏂� |
-| STOCK_BIZ_TYPE | 60 | 閲囪喘閫�璐у嚭搴� |
-| STOCK_BIZ_TYPE | 70 | 閿�鍞��璐у叆搴� |
-| STOCK_BIZ_TYPE | 80 | 璋冩嫧鍏ュ簱 |
-| STOCK_BIZ_TYPE | 90 | 璋冩嫧鍑哄簱 |
-| STOCK_BIZ_TYPE | 100 | 鐩樼泩鍏ュ簱 |
-| STOCK_BIZ_TYPE | 110 | 鐩樹簭鍑哄簱 |
-
----
-
-## 鍥涖�佽矾鐢遍厤缃�
-
-```js
-// 鏂板璺敱
-{
-  path: '/mdm',
-  component: Layout,
-  name: 'MDM',
-  meta: { title: '涓绘暟鎹鐞�', icon: 'ep:goods' },
-  children: [
-    {
-      path: 'item',
-      name: 'MdmItem',
-      component: () => import('@/views/mdm/item/index.vue'),
-      meta: { title: '鐗╂枡绠$悊' }
-    },
-    {
-      path: 'category',
-      name: 'MdmCategory',
-      component: () => import('@/views/mdm/category/index.vue'),
-      meta: { title: '鐗╂枡鍒嗙被' }
-    },
-    {
-      path: 'unit',
-      name: 'MdmUnit',
-      component: () => import('@/views/mdm/unit/index.vue'),
-      meta: { title: '璁¢噺鍗曚綅' }
-    },
-    {
-      path: 'brand',
-      name: 'MdmBrand',
-      component: () => import('@/views/mdm/brand/index.vue'),
-      meta: { title: '鍝佺墝绠$悊' }
-    },
-    {
-      path: 'warehouse',
-      name: 'MdmWarehouse',
-      component: () => import('@/views/mdm/warehouse/index.vue'),
-      meta: { title: '浠撳簱绠$悊' }
-    }
-  ]
-}
-```
-
----
-
-## 浜斻�佹敞鎰忎簨椤�
-
-1. **鏁版嵁杩佺Щ**锛氭墽琛屾暟鎹縼绉� SQL 鍚庯紝鍘熸湁 ERP/MES/WMS 鐨勭墿鏂欓〉闈㈠皢灞曠ず杩佺Щ鍚庣殑 MDM 鏁版嵁
-2. **鏉冮檺閰嶇疆**锛氭柊澧� MDM 妯″潡鑿滃崟鍜屾潈闄愰厤缃�
-3. **API 瀵规帴**锛氬墠绔渶瑕佹柊澧� MDM 鐩稿叧 API 鏂囦欢 (`api/mdm/item.js`, `api/mdm/category.js` 绛�)
-4. **瀛楁鍏煎**锛氭棫椤甸潰鐨勫瓧娈靛悕绉伴渶瑕佹槧灏勫埌鏂板瓧娈碉紝濡� `productId` 鈫� `itemId`
-5. **鐘舵�佸悓姝�**锛氱墿鏂欑姸鎬佸彉鏇村悗锛岄渶瑕佸悓姝ユ洿鏂板悇妯″潡寮曠敤鐘舵��
-
----
-
-**鏂囨。鐗堟湰**: v1.0
-**鍒涘缓鏃ユ湡**: 2026-06-29
-**浣滆��**: Claude Code
\ No newline at end of file

--
Gitblit v1.9.3