Skip to content

Commit ce9317e

Browse files
committed
✨ ERP:初始化 product 信息、分类、单位的实现
1 parent cac39ae commit ce9317e

File tree

9 files changed

+1185
-0
lines changed

9 files changed

+1185
-0
lines changed

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

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
import request from '@/config/axios'
2+
3+
// ERP 商品分类 VO
4+
export interface ProductCategoryVO {
5+
// 分类编号
6+
id: number
7+
// 父分类编号
8+
parentId: number
9+
// 分类名称
10+
name: string
11+
// 分类编码
12+
code: string
13+
// 分类排序
14+
sort: number
15+
// 开启状态
16+
status: number
17+
}
18+
19+
// ERP 商品分类 API
20+
export const ProductCategoryApi = {
21+
// 查询ERP 商品分类列表
22+
getProductCategoryList: async (params) => {
23+
return await request.get({ url: `/erp/product-category/list`, params })
24+
},
25+
26+
// 查询ERP 商品分类详情
27+
getProductCategory: async (id: number) => {
28+
return await request.get({ url: `/erp/product-category/get?id=` + id })
29+
},
30+
31+
// 新增ERP 商品分类
32+
createProductCategory: async (data: ProductCategoryVO) => {
33+
return await request.post({ url: `/erp/product-category/create`, data })
34+
},
35+
36+
// 修改ERP 商品分类
37+
updateProductCategory: async (data: ProductCategoryVO) => {
38+
return await request.put({ url: `/erp/product-category/update`, data })
39+
},
40+
41+
// 删除ERP 商品分类
42+
deleteProductCategory: async (id: number) => {
43+
return await request.delete({ url: `/erp/product-category/delete?id=` + id })
44+
},
45+
46+
// 导出ERP 商品分类 Excel
47+
exportProductCategory: async (params) => {
48+
return await request.download({ url: `/erp/product-category/export-excel`, params })
49+
}
50+
}

src/api/erp/product/index.ts

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
import request from '@/config/axios'
2+
3+
// ERP 产品 VO
4+
export interface ProductVO {
5+
// 产品编号
6+
id: number
7+
// 产品名称
8+
name: string
9+
// 产品条码
10+
barCode: string
11+
// 产品类型编号
12+
categoryId: number
13+
// 单位编号
14+
unitId: number
15+
// 产品状态
16+
status: number
17+
// 产品规格
18+
standard: string
19+
// 产品备注
20+
remark: string
21+
// 保质期天数
22+
expiryDay: number
23+
// 基础重量(kg)
24+
weight: number
25+
// 采购价格,单位:元
26+
purchasePrice: number
27+
// 销售价格,单位:元
28+
salePrice: number
29+
// 最低价格,单位:元
30+
minPrice: number
31+
}
32+
33+
// ERP 产品 API
34+
export const ProductApi = {
35+
// 查询ERP 产品分页
36+
getProductPage: async (params: any) => {
37+
return await request.get({ url: `/erp/product/page`, params })
38+
},
39+
40+
// 查询ERP 产品详情
41+
getProduct: async (id: number) => {
42+
return await request.get({ url: `/erp/product/get?id=` + id })
43+
},
44+
45+
// 新增ERP 产品
46+
createProduct: async (data: ProductVO) => {
47+
return await request.post({ url: `/erp/product/create`, data })
48+
},
49+
50+
// 修改ERP 产品
51+
updateProduct: async (data: ProductVO) => {
52+
return await request.put({ url: `/erp/product/update`, data })
53+
},
54+
55+
// 删除ERP 产品
56+
deleteProduct: async (id: number) => {
57+
return await request.delete({ url: `/erp/product/delete?id=` + id })
58+
},
59+
60+
// 导出ERP 产品 Excel
61+
exportProduct: async (params) => {
62+
return await request.download({ url: `/erp/product/export-excel`, params })
63+
}
64+
}

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

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
import request from '@/config/axios'
2+
3+
// ERP 产品单位 VO
4+
export interface ProductUnitVO {
5+
// 单位编号
6+
id: number
7+
// 单位名字
8+
name: string
9+
// 单位状态
10+
status: number
11+
}
12+
13+
// ERP 产品单位 API
14+
export const ProductUnitApi = {
15+
// 查询ERP 产品单位分页
16+
getProductUnitPage: async (params: any) => {
17+
return await request.get({ url: `/erp/product-unit/page`, params })
18+
},
19+
20+
// 查询ERP 产品单位详情
21+
getProductUnit: async (id: number) => {
22+
return await request.get({ url: `/erp/product-unit/get?id=` + id })
23+
},
24+
25+
// 新增ERP 产品单位
26+
createProductUnit: async (data: ProductUnitVO) => {
27+
return await request.post({ url: `/erp/product-unit/create`, data })
28+
},
29+
30+
// 修改ERP 产品单位
31+
updateProductUnit: async (data: ProductUnitVO) => {
32+
return await request.put({ url: `/erp/product-unit/update`, data })
33+
},
34+
35+
// 删除ERP 产品单位
36+
deleteProductUnit: async (id: number) => {
37+
return await request.delete({ url: `/erp/product-unit/delete?id=` + id })
38+
},
39+
40+
// 导出ERP 产品单位 Excel
41+
exportProductUnit: async (params) => {
42+
return await request.download({ url: `/erp/product-unit/export-excel`, params })
43+
}
44+
}

src/views/erp/product/ProductForm.vue

Lines changed: 154 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,154 @@
1+
<!-- ERP 产品的新增/修改 -->
2+
<template>
3+
<Dialog :title="dialogTitle" v-model="dialogVisible">
4+
<el-form
5+
ref="formRef"
6+
:model="formData"
7+
:rules="formRules"
8+
label-width="100px"
9+
v-loading="formLoading"
10+
>
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>
49+
</el-form>
50+
<template #footer>
51+
<el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button>
52+
<el-button @click="dialogVisible = false">取 消</el-button>
53+
</template>
54+
</Dialog>
55+
</template>
56+
<script setup lang="ts">
57+
import { ProductApi } from '@/api/erp/product'
58+
59+
/** ERP 产品 表单 */
60+
defineOptions({ name: 'ProductForm' })
61+
62+
const { t } = useI18n() // 国际化
63+
const message = useMessage() // 消息弹窗
64+
65+
const dialogVisible = ref(false) // 弹窗的是否展示
66+
const dialogTitle = ref('') // 弹窗的标题
67+
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
68+
const formType = ref('') // 表单的类型:create - 新增;update - 修改
69+
const formData = ref({
70+
id: undefined,
71+
name: undefined,
72+
barCode: undefined,
73+
categoryId: undefined,
74+
unitId: undefined,
75+
status: undefined,
76+
standard: undefined,
77+
remark: undefined,
78+
expiryDay: undefined,
79+
weight: undefined,
80+
purchasePrice: undefined,
81+
salePrice: undefined,
82+
minPrice: undefined
83+
})
84+
const formRules = reactive({
85+
name: [{ required: true, message: '产品名称不能为空', trigger: 'blur' }],
86+
barCode: [{ required: true, message: '产品条码不能为空', trigger: 'blur' }],
87+
categoryId: [{ required: true, message: '产品分类编号不能为空', trigger: 'blur' }],
88+
unitId: [{ required: true, message: '单位编号不能为空', trigger: 'blur' }],
89+
status: [{ required: true, message: '产品状态不能为空', trigger: 'blur' }]
90+
})
91+
const formRef = ref() // 表单 Ref
92+
93+
/** 打开弹窗 */
94+
const open = async (type: string, id?: number) => {
95+
dialogVisible.value = true
96+
dialogTitle.value = t('action.' + type)
97+
formType.value = type
98+
resetForm()
99+
// 修改时,设置数据
100+
if (id) {
101+
formLoading.value = true
102+
try {
103+
formData.value = await ProductApi.getProduct(id)
104+
} finally {
105+
formLoading.value = false
106+
}
107+
}
108+
}
109+
defineExpose({ open }) // 提供 open 方法,用于打开弹窗
110+
111+
/** 提交表单 */
112+
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
113+
const submitForm = async () => {
114+
// 校验表单
115+
await formRef.value.validate()
116+
// 提交请求
117+
formLoading.value = true
118+
try {
119+
const data = formData.value as unknown as ProductApi.ProductVO
120+
if (formType.value === 'create') {
121+
await ProductApi.createProduct(data)
122+
message.success(t('common.createSuccess'))
123+
} else {
124+
await ProductApi.updateProduct(data)
125+
message.success(t('common.updateSuccess'))
126+
}
127+
dialogVisible.value = false
128+
// 发送操作成功的事件
129+
emit('success')
130+
} finally {
131+
formLoading.value = false
132+
}
133+
}
134+
135+
/** 重置表单 */
136+
const resetForm = () => {
137+
formData.value = {
138+
id: undefined,
139+
name: undefined,
140+
barCode: undefined,
141+
categoryId: undefined,
142+
unitId: undefined,
143+
status: undefined,
144+
standard: undefined,
145+
remark: undefined,
146+
expiryDay: undefined,
147+
weight: undefined,
148+
purchasePrice: undefined,
149+
salePrice: undefined,
150+
minPrice: undefined
151+
}
152+
formRef.value?.resetFields()
153+
}
154+
</script>

0 commit comments

Comments
 (0)