Skip to content

Commit 6d9ca29

Browse files
committed
✨ ERP:完成 stock 仓库信息的实现
1 parent 36a0330 commit 6d9ca29

File tree

6 files changed

+468
-44
lines changed

6 files changed

+468
-44
lines changed

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

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,12 @@ import request from '@/config/axios'
22

33
// ERP 商品分类 VO
44
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
5+
id: number // 分类编号
6+
parentId: number // 父分类编号
7+
name: string // 分类名称
8+
code: string // 分类编码
9+
sort: number // 分类排序
10+
status: number // 开启状态
1711
}
1812

1913
// ERP 商品分类 API

src/api/erp/product/index.ts

Lines changed: 13 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -2,32 +2,19 @@ import request from '@/config/axios'
22

33
// ERP 产品 VO
44
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
5+
id: number // 产品编号
6+
name: string // 产品名称
7+
barCode: string // 产品条码
8+
categoryId: number // 产品类型编号
9+
unitId: number // 单位编号
10+
status: number // 产品状态
11+
standard: string // 产品规格
12+
remark: string // 产品备注
13+
expiryDay: number // 保质期天数
14+
weight: number // 重量(kg)
15+
purchasePrice: number // 采购价格,单位:元
16+
salePrice: number // 销售价格,单位:元
17+
minPrice: number // 最低价格,单位:元
3118
}
3219

3320
// ERP 产品 API

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

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,9 @@ import request from '@/config/axios'
22

33
// ERP 产品单位 VO
44
export interface ProductUnitVO {
5-
// 单位编号
6-
id: number
7-
// 单位名字
8-
name: string
9-
// 单位状态
10-
status: number
5+
id: number // 单位编号
6+
name: string // 单位名字
7+
status: number // 单位状态
118
}
129

1310
// ERP 产品单位 API

src/api/erp/stock/warehouse/index.ts

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
import request from '@/config/axios'
2+
3+
// ERP 仓库 VO
4+
export interface WarehouseVO {
5+
id: number // 仓库编号
6+
name: string // 仓库名称
7+
address: string // 仓库地址
8+
sort: number // 排序
9+
remark: string // 备注
10+
principal: string // 负责人
11+
warehousePrice: number // 仓储费,单位:元
12+
truckagePrice: number // 搬运费,单位:元
13+
status: number // 开启状态
14+
defaultStatus: boolean // 是否默认
15+
}
16+
17+
// ERP 仓库 API
18+
export const WarehouseApi = {
19+
// 查询仓库分页
20+
getWarehousePage: async (params: any) => {
21+
return await request.get({ url: `/erp/warehouse/page`, params })
22+
},
23+
24+
// 查询仓库详情
25+
getWarehouse: async (id: number) => {
26+
return await request.get({ url: `/erp/warehouse/get?id=` + id })
27+
},
28+
29+
// 新增仓库
30+
createWarehouse: async (data: WarehouseVO) => {
31+
return await request.post({ url: `/erp/warehouse/create`, data })
32+
},
33+
34+
// 修改仓库
35+
updateWarehouse: async (data: WarehouseVO) => {
36+
return await request.put({ url: `/erp/warehouse/update`, data })
37+
},
38+
39+
// 修改仓库默认状态
40+
updateWarehouseDefaultStatus: async (id: number, defaultStatus: boolean) => {
41+
return await request.put({
42+
url: `/erp/warehouse/update-default-status`,
43+
params: {
44+
id,
45+
defaultStatus
46+
}
47+
})
48+
},
49+
50+
// 删除仓库
51+
deleteWarehouse: async (id: number) => {
52+
return await request.delete({ url: `/erp/warehouse/delete?id=` + id })
53+
},
54+
55+
// 导出仓库 Excel
56+
exportWarehouse: async (params) => {
57+
return await request.download({ url: `/erp/warehouse/export-excel`, params })
58+
}
59+
}
Lines changed: 157 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,157 @@
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="address">
15+
<el-input v-model="formData.address" placeholder="请输入仓库地址" />
16+
</el-form-item>
17+
<el-form-item label="仓库状态" prop="status">
18+
<el-radio-group v-model="formData.status">
19+
<el-radio
20+
v-for="dict in getIntDictOptions(DICT_TYPE.COMMON_STATUS)"
21+
:key="dict.value"
22+
:label="dict.value"
23+
>
24+
{{ dict.label }}
25+
</el-radio>
26+
</el-radio-group>
27+
</el-form-item>
28+
<el-form-item label="仓储费" prop="warehousePrice">
29+
<el-input-number
30+
v-model="formData.warehousePrice"
31+
placeholder="请输入仓储费,单位:元/天/KG"
32+
:min="0"
33+
:precision="2"
34+
class="!w-1/1"
35+
/>
36+
</el-form-item>
37+
<el-form-item label="搬运费" prop="truckagePrice">
38+
<el-input-number
39+
v-model="formData.truckagePrice"
40+
placeholder="请输入搬运费,单位:元"
41+
:min="0"
42+
:precision="2"
43+
class="!w-1/1"
44+
/>
45+
</el-form-item>
46+
<el-form-item label="负责人" prop="principal">
47+
<el-input v-model="formData.principal" placeholder="请输入负责人" />
48+
</el-form-item>
49+
<el-form-item label="排序" prop="sort">
50+
<el-input-number
51+
v-model="formData.sort"
52+
placeholder="请输入排序"
53+
:precision="0"
54+
class="!w-1/1"
55+
/>
56+
</el-form-item>
57+
<el-form-item label="备注" prop="remark">
58+
<el-input type="textarea" v-model="formData.remark" placeholder="请输入备注" />
59+
</el-form-item>
60+
</el-form>
61+
<template #footer>
62+
<el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button>
63+
<el-button @click="dialogVisible = false">取 消</el-button>
64+
</template>
65+
</Dialog>
66+
</template>
67+
<script setup lang="ts">
68+
import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
69+
import { WarehouseApi, WarehouseVO } from '@/api/erp/stock/warehouse'
70+
import { CommonStatusEnum } from '@/utils/constants'
71+
72+
/** ERP 仓库表单 */
73+
defineOptions({ name: 'WarehouseForm' })
74+
75+
const { t } = useI18n() // 国际化
76+
const message = useMessage() // 消息弹窗
77+
78+
const dialogVisible = ref(false) // 弹窗的是否展示
79+
const dialogTitle = ref('') // 弹窗的标题
80+
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
81+
const formType = ref('') // 表单的类型:create - 新增;update - 修改
82+
const formData = ref({
83+
id: undefined,
84+
name: undefined,
85+
address: undefined,
86+
sort: undefined,
87+
remark: undefined,
88+
principal: undefined,
89+
warehousePrice: undefined,
90+
truckagePrice: undefined,
91+
status: undefined
92+
})
93+
const formRules = reactive({
94+
name: [{ required: true, message: '仓库名称不能为空', trigger: 'blur' }],
95+
sort: [{ required: true, message: '排序不能为空', trigger: 'blur' }],
96+
status: [{ required: true, message: '开启状态不能为空', trigger: 'blur' }]
97+
})
98+
const formRef = ref() // 表单 Ref
99+
100+
/** 打开弹窗 */
101+
const open = async (type: string, id?: number) => {
102+
dialogVisible.value = true
103+
dialogTitle.value = t('action.' + type)
104+
formType.value = type
105+
resetForm()
106+
// 修改时,设置数据
107+
if (id) {
108+
formLoading.value = true
109+
try {
110+
formData.value = await WarehouseApi.getWarehouse(id)
111+
} finally {
112+
formLoading.value = false
113+
}
114+
}
115+
}
116+
defineExpose({ open }) // 提供 open 方法,用于打开弹窗
117+
118+
/** 提交表单 */
119+
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
120+
const submitForm = async () => {
121+
// 校验表单
122+
await formRef.value.validate()
123+
// 提交请求
124+
formLoading.value = true
125+
try {
126+
const data = formData.value as unknown as WarehouseVO
127+
if (formType.value === 'create') {
128+
await WarehouseApi.createWarehouse(data)
129+
message.success(t('common.createSuccess'))
130+
} else {
131+
await WarehouseApi.updateWarehouse(data)
132+
message.success(t('common.updateSuccess'))
133+
}
134+
dialogVisible.value = false
135+
// 发送操作成功的事件
136+
emit('success')
137+
} finally {
138+
formLoading.value = false
139+
}
140+
}
141+
142+
/** 重置表单 */
143+
const resetForm = () => {
144+
formData.value = {
145+
id: undefined,
146+
name: undefined,
147+
address: undefined,
148+
sort: undefined,
149+
remark: undefined,
150+
principal: undefined,
151+
warehousePrice: undefined,
152+
truckagePrice: undefined,
153+
status: CommonStatusEnum.ENABLE
154+
}
155+
formRef.value?.resetFields()
156+
}
157+
</script>

0 commit comments

Comments
 (0)