Skip to content

Commit 36a0330

Browse files
committed
✨ ERP:完成 product 信息、分类、单位的实现
1 parent ce9317e commit 36a0330

File tree

8 files changed

+212
-115
lines changed

8 files changed

+212
-115
lines changed

src/api/erp/product/category/index.ts

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,33 +18,38 @@ export interface ProductCategoryVO {
1818

1919
// ERP 商品分类 API
2020
export const ProductCategoryApi = {
21-
// 查询ERP 商品分类列表
21+
// 查询商品分类列表
2222
getProductCategoryList: async (params) => {
2323
return await request.get({ url: `/erp/product-category/list`, params })
2424
},
2525

26-
// 查询ERP 商品分类详情
26+
// 查询商品分类精简列表
27+
getProductCategorySimpleList: async () => {
28+
return await request.get({ url: `/erp/product-category/simple-list` })
29+
},
30+
31+
// 查询商品分类详情
2732
getProductCategory: async (id: number) => {
2833
return await request.get({ url: `/erp/product-category/get?id=` + id })
2934
},
3035

31-
// 新增ERP 商品分类
36+
// 新增商品分类
3237
createProductCategory: async (data: ProductCategoryVO) => {
3338
return await request.post({ url: `/erp/product-category/create`, data })
3439
},
3540

36-
// 修改ERP 商品分类
41+
// 修改商品分类
3742
updateProductCategory: async (data: ProductCategoryVO) => {
3843
return await request.put({ url: `/erp/product-category/update`, data })
3944
},
4045

41-
// 删除ERP 商品分类
46+
// 删除商品分类
4247
deleteProductCategory: async (id: number) => {
4348
return await request.delete({ url: `/erp/product-category/delete?id=` + id })
4449
},
4550

46-
// 导出ERP 商品分类 Excel
51+
// 导出商品分类 Excel
4752
exportProductCategory: async (params) => {
4853
return await request.download({ url: `/erp/product-category/export-excel`, params })
4954
}
50-
}
55+
}

src/api/erp/product/index.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -32,33 +32,33 @@ export interface ProductVO {
3232

3333
// ERP 产品 API
3434
export const ProductApi = {
35-
// 查询ERP 产品分页
35+
// 查询产品分页
3636
getProductPage: async (params: any) => {
3737
return await request.get({ url: `/erp/product/page`, params })
3838
},
3939

40-
// 查询ERP 产品详情
40+
// 查询产品详情
4141
getProduct: async (id: number) => {
4242
return await request.get({ url: `/erp/product/get?id=` + id })
4343
},
4444

45-
// 新增ERP 产品
45+
// 新增产品
4646
createProduct: async (data: ProductVO) => {
4747
return await request.post({ url: `/erp/product/create`, data })
4848
},
4949

50-
// 修改ERP 产品
50+
// 修改产品
5151
updateProduct: async (data: ProductVO) => {
5252
return await request.put({ url: `/erp/product/update`, data })
5353
},
5454

55-
// 删除ERP 产品
55+
// 删除产品
5656
deleteProduct: async (id: number) => {
5757
return await request.delete({ url: `/erp/product/delete?id=` + id })
5858
},
5959

60-
// 导出ERP 产品 Excel
60+
// 导出产品 Excel
6161
exportProduct: async (params) => {
6262
return await request.download({ url: `/erp/product/export-excel`, params })
6363
}
64-
}
64+
}

src/api/erp/product/unit/index.ts

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,33 +12,38 @@ export interface ProductUnitVO {
1212

1313
// ERP 产品单位 API
1414
export const ProductUnitApi = {
15-
// 查询ERP 产品单位分页
15+
// 查询产品单位分页
1616
getProductUnitPage: async (params: any) => {
1717
return await request.get({ url: `/erp/product-unit/page`, params })
1818
},
1919

20-
// 查询ERP 产品单位详情
20+
// 查询商品单位精简列表
21+
getProductUnitSimpleList: async () => {
22+
return await request.get({ url: `/erp/product-unit/simple-list` })
23+
},
24+
25+
// 查询产品单位详情
2126
getProductUnit: async (id: number) => {
2227
return await request.get({ url: `/erp/product-unit/get?id=` + id })
2328
},
2429

25-
// 新增ERP 产品单位
30+
// 新增产品单位
2631
createProductUnit: async (data: ProductUnitVO) => {
2732
return await request.post({ url: `/erp/product-unit/create`, data })
2833
},
2934

30-
// 修改ERP 产品单位
35+
// 修改产品单位
3136
updateProductUnit: async (data: ProductUnitVO) => {
3237
return await request.put({ url: `/erp/product-unit/update`, data })
3338
},
3439

35-
// 删除ERP 产品单位
40+
// 删除产品单位
3641
deleteProductUnit: async (id: number) => {
3742
return await request.delete({ url: `/erp/product-unit/delete?id=` + id })
3843
},
3944

40-
// 导出ERP 产品单位 Excel
45+
// 导出产品单位 Excel
4146
exportProductUnit: async (params) => {
4247
return await request.download({ url: `/erp/product-unit/export-excel`, params })
4348
}
44-
}
49+
}

src/views/erp/product/ProductForm.vue

Lines changed: 129 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -8,44 +8,120 @@
88
label-width="100px"
99
v-loading="formLoading"
1010
>
11-
<el-form-item label="名称" prop="name">
12-
<el-input v-model="formData.name" placeholder="请输入名称" />
13-
</el-form-item>
14-
<el-form-item label="条码" prop="barCode">
15-
<el-input v-model="formData.barCode" placeholder="请输入条码" />
16-
</el-form-item>
17-
<el-form-item label="分类编号" prop="categoryId">
18-
<el-input v-model="formData.categoryId" placeholder="请输入分类编号" />
19-
</el-form-item>
20-
<el-form-item label="单位编号" prop="unitId">
21-
<el-input v-model="formData.unitId" placeholder="请输入单位编号" />
22-
</el-form-item>
23-
<el-form-item label="状态" prop="status">
24-
<el-radio-group v-model="formData.status">
25-
<el-radio label="1">请选择字典生成</el-radio>
26-
</el-radio-group>
27-
</el-form-item>
28-
<el-form-item label="规格" prop="standard">
29-
<el-input v-model="formData.standard" placeholder="请输入规格" />
30-
</el-form-item>
31-
<el-form-item label="备注" prop="remark">
32-
<el-input v-model="formData.remark" placeholder="请输入备注" />
33-
</el-form-item>
34-
<el-form-item label="保质期天数" prop="expiryDay">
35-
<el-input v-model="formData.expiryDay" placeholder="请输入保质期天数" />
36-
</el-form-item>
37-
<el-form-item label="基础重量(kg)" prop="weight">
38-
<el-input v-model="formData.weight" placeholder="请输入基础重量(kg)" />
39-
</el-form-item>
40-
<el-form-item label="采购价格,单位:元" prop="purchasePrice">
41-
<el-input v-model="formData.purchasePrice" placeholder="请输入采购价格,单位:元" />
42-
</el-form-item>
43-
<el-form-item label="销售价格,单位:元" prop="salePrice">
44-
<el-input v-model="formData.salePrice" placeholder="请输入销售价格,单位:元" />
45-
</el-form-item>
46-
<el-form-item label="最低价格,单位:元" prop="minPrice">
47-
<el-input v-model="formData.minPrice" placeholder="请输入最低价格,单位:元" />
48-
</el-form-item>
11+
<el-row :gutter="20">
12+
<el-col :span="12">
13+
<el-form-item label="名称" prop="name">
14+
<el-input v-model="formData.name" placeholder="请输入名称" />
15+
</el-form-item>
16+
</el-col>
17+
<el-col :span="12">
18+
<el-form-item label="条码" prop="barCode">
19+
<el-input v-model="formData.barCode" placeholder="请输入条码" />
20+
</el-form-item>
21+
</el-col>
22+
<el-col :span="12">
23+
<el-form-item label="分类" prop="categoryId">
24+
<el-tree-select
25+
v-model="formData.categoryId"
26+
:data="categoryList"
27+
:props="defaultProps"
28+
check-strictly
29+
default-expand-all
30+
placeholder="请选择分类"
31+
class="w-1/1"
32+
/>
33+
</el-form-item>
34+
</el-col>
35+
<el-col :span="12">
36+
<el-form-item label="单位" prop="unitId">
37+
<el-select v-model="formData.unitId" clearable placeholder="请选择单位" class="w-1/1">
38+
<el-option
39+
v-for="unit in unitList"
40+
:key="unit.id"
41+
:label="unit.name"
42+
:value="unit.id"
43+
/>
44+
</el-select>
45+
</el-form-item>
46+
</el-col>
47+
<el-col :span="12">
48+
<el-form-item label="状态" prop="status">
49+
<el-radio-group v-model="formData.status">
50+
<el-radio
51+
v-for="dict in getIntDictOptions(DICT_TYPE.COMMON_STATUS)"
52+
:key="dict.value"
53+
:label="dict.value"
54+
>
55+
{{ dict.label }}
56+
</el-radio>
57+
</el-radio-group>
58+
</el-form-item>
59+
</el-col>
60+
<el-col :span="12">
61+
<el-form-item label="规格" prop="standard">
62+
<el-input v-model="formData.standard" placeholder="请输入规格" />
63+
</el-form-item>
64+
</el-col>
65+
<el-col :span="12">
66+
<el-form-item label="保质期天数" prop="expiryDay">
67+
<el-input-number
68+
v-model="formData.expiryDay"
69+
placeholder="请输入保质期天数"
70+
:min="0"
71+
:precision="0"
72+
class="!w-1/1"
73+
/>
74+
</el-form-item>
75+
</el-col>
76+
<el-col :span="12">
77+
<el-form-item label="重量(kg)" prop="weight">
78+
<el-input-number
79+
v-model="formData.weight"
80+
placeholder="请输入重量(kg)"
81+
:min="0"
82+
class="!w-1/1"
83+
/>
84+
</el-form-item>
85+
</el-col>
86+
<el-col :span="12">
87+
<el-form-item label="采购价格" prop="purchasePrice">
88+
<el-input-number
89+
v-model="formData.purchasePrice"
90+
placeholder="请输入采购价格,单位:元"
91+
:min="0"
92+
:precision="2"
93+
class="!w-1/1"
94+
/>
95+
</el-form-item>
96+
</el-col>
97+
<el-col :span="12">
98+
<el-form-item label="销售价格" prop="salePrice">
99+
<el-input-number
100+
v-model="formData.salePrice"
101+
placeholder="请输入销售价格,单位:元"
102+
:min="0"
103+
:precision="2"
104+
class="!w-1/1"
105+
/>
106+
</el-form-item>
107+
</el-col>
108+
<el-col :span="12">
109+
<el-form-item label="最低价格" prop="minPrice">
110+
<el-input-number
111+
v-model="formData.minPrice"
112+
placeholder="请输入最低价格,单位:元"
113+
:min="0"
114+
:precision="2"
115+
class="!w-1/1"
116+
/>
117+
</el-form-item>
118+
</el-col>
119+
<el-col :span="24">
120+
<el-form-item label="备注" prop="remark">
121+
<el-input type="textarea" v-model="formData.remark" placeholder="请输入备注" />
122+
</el-form-item>
123+
</el-col>
124+
</el-row>
49125
</el-form>
50126
<template #footer>
51127
<el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button>
@@ -54,7 +130,12 @@
54130
</Dialog>
55131
</template>
56132
<script setup lang="ts">
57-
import { ProductApi } from '@/api/erp/product'
133+
import { ProductApi, ProductVO } from '@/api/erp/product'
134+
import { ProductCategoryApi, ProductCategoryVO } from '@/api/erp/product/category'
135+
import { ProductUnitApi, ProductUnitVO } from '@/api/erp/product/unit'
136+
import { CommonStatusEnum } from '@/utils/constants'
137+
import { defaultProps, handleTree } from '@/utils/tree'
138+
import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
58139
59140
/** ERP 产品 表单 */
60141
defineOptions({ name: 'ProductForm' })
@@ -89,6 +170,8 @@ const formRules = reactive({
89170
status: [{ required: true, message: '产品状态不能为空', trigger: 'blur' }]
90171
})
91172
const formRef = ref() // 表单 Ref
173+
const categoryList = ref<ProductCategoryVO[]>([]) // 产品分类列表
174+
const unitList = ref<ProductUnitVO[]>([]) // 产品单位列表
92175
93176
/** 打开弹窗 */
94177
const open = async (type: string, id?: number) => {
@@ -105,6 +188,11 @@ const open = async (type: string, id?: number) => {
105188
formLoading.value = false
106189
}
107190
}
191+
// 产品分类
192+
const categoryData = await ProductCategoryApi.getProductCategorySimpleList()
193+
categoryList.value = handleTree(categoryData, 'id', 'parentId')
194+
// 产品单位
195+
unitList.value = await ProductUnitApi.getProductUnitSimpleList()
108196
}
109197
defineExpose({ open }) // 提供 open 方法,用于打开弹窗
110198
@@ -116,7 +204,7 @@ const submitForm = async () => {
116204
// 提交请求
117205
formLoading.value = true
118206
try {
119-
const data = formData.value as unknown as ProductApi.ProductVO
207+
const data = formData.value as unknown as ProductVO
120208
if (formType.value === 'create') {
121209
await ProductApi.createProduct(data)
122210
message.success(t('common.createSuccess'))
@@ -140,7 +228,7 @@ const resetForm = () => {
140228
barCode: undefined,
141229
categoryId: undefined,
142230
unitId: undefined,
143-
status: undefined,
231+
status: CommonStatusEnum.ENABLE,
144232
standard: undefined,
145233
remark: undefined,
146234
expiryDay: undefined,

src/views/erp/product/category/index.vue

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -136,12 +136,8 @@ const { t } = useI18n() // 国际化
136136
const loading = ref(true) // 列表的加载中
137137
const list = ref<ProductCategoryVO[]>([]) // 列表的数据
138138
const queryParams = reactive({
139-
parentId: undefined,
140139
name: undefined,
141-
code: undefined,
142-
sort: undefined,
143-
status: undefined,
144-
createTime: []
140+
status: undefined
145141
})
146142
const queryFormRef = ref() // 搜索的表单
147143
const exportLoading = ref(false) // 导出的加载中

0 commit comments

Comments
 (0)