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