Skip to content

Commit b25d9c0

Browse files
committed
✨ ERP:增加结算账户 100%
1 parent 5deabcf commit b25d9c0

File tree

10 files changed

+432
-7
lines changed

10 files changed

+432
-7
lines changed

src/api/erp/finance/account/index.ts

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
import request from '@/config/axios'
2+
3+
// ERP 结算账户 VO
4+
export interface AccountVO {
5+
id: number // 结算账户编号
6+
no: string // 账户编码
7+
remark: string // 备注
8+
status: number // 开启状态
9+
sort: number // 排序
10+
defaultStatus: boolean // 是否默认
11+
name: string // 账户名称
12+
}
13+
14+
// ERP 结算账户 API
15+
export const AccountApi = {
16+
// 查询结算账户分页
17+
getAccountPage: async (params: any) => {
18+
return await request.get({ url: `/erp/account/page`, params })
19+
},
20+
21+
// 查询结算账户详情
22+
getAccount: async (id: number) => {
23+
return await request.get({ url: `/erp/account/get?id=` + id })
24+
},
25+
26+
// 新增结算账户
27+
createAccount: async (data: AccountVO) => {
28+
return await request.post({ url: `/erp/account/create`, data })
29+
},
30+
31+
// 修改结算账户
32+
updateAccount: async (data: AccountVO) => {
33+
return await request.put({ url: `/erp/account/update`, data })
34+
},
35+
36+
// 修改结算账户默认状态
37+
updateAccountDefaultStatus: async (id: number, defaultStatus: boolean) => {
38+
return await request.put({
39+
url: `/erp/account/update-default-status`,
40+
params: {
41+
id,
42+
defaultStatus
43+
}
44+
})
45+
},
46+
47+
// 删除结算账户
48+
deleteAccount: async (id: number) => {
49+
return await request.delete({ url: `/erp/account/delete?id=` + id })
50+
},
51+
52+
// 导出结算账户 Excel
53+
exportAccount: async (params: any) => {
54+
return await request.download({ url: `/erp/account/export-excel`, params })
55+
}
56+
}
Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
<template>
2+
<Dialog :title="dialogTitle" v-model="dialogVisible">
3+
<el-form
4+
ref="formRef"
5+
:model="formData"
6+
:rules="formRules"
7+
label-width="100px"
8+
v-loading="formLoading"
9+
>
10+
<el-form-item label="名称" prop="name">
11+
<el-input v-model="formData.name" placeholder="请输入名称" />
12+
</el-form-item>
13+
<el-form-item label="编码" prop="no">
14+
<el-input v-model="formData.no" placeholder="请输入编码" />
15+
</el-form-item>
16+
<el-form-item label="备注" prop="remark">
17+
<el-input v-model="formData.remark" placeholder="请输入备注" />
18+
</el-form-item>
19+
<el-form-item label="状态" prop="status">
20+
<el-radio-group v-model="formData.status">
21+
<el-radio
22+
v-for="dict in getIntDictOptions(DICT_TYPE.COMMON_STATUS)"
23+
:key="dict.value"
24+
:label="dict.value"
25+
>
26+
{{ dict.label }}
27+
</el-radio>
28+
</el-radio-group>
29+
</el-form-item>
30+
<el-form-item label="排序" prop="sort">
31+
<el-input v-model="formData.sort" placeholder="请输入排序" />
32+
</el-form-item>
33+
</el-form>
34+
<template #footer>
35+
<el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button>
36+
<el-button @click="dialogVisible = false">取 消</el-button>
37+
</template>
38+
</Dialog>
39+
</template>
40+
<script setup lang="ts">
41+
import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
42+
import { AccountApi, AccountVO } from '@/api/erp/finance/account'
43+
44+
/** ERP 结算 表单 */
45+
defineOptions({ name: 'AccountForm' })
46+
47+
const { t } = useI18n() // 国际化
48+
const message = useMessage() // 消息弹窗
49+
50+
const dialogVisible = ref(false) // 弹窗的是否展示
51+
const dialogTitle = ref('') // 弹窗的标题
52+
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
53+
const formType = ref('') // 表单的类型:create - 新增;update - 修改
54+
const formData = ref({
55+
id: undefined,
56+
name: undefined,
57+
no: undefined,
58+
remark: undefined,
59+
status: undefined,
60+
sort: undefined,
61+
defaultStatus: undefined
62+
})
63+
const formRules = reactive({
64+
name: [{ required: true, message: '名称不能为空', trigger: 'blur' }],
65+
status: [{ required: true, message: '开启状态不能为空', trigger: 'blur' }],
66+
sort: [{ required: true, message: '排序不能为空', trigger: 'blur' }]
67+
})
68+
const formRef = ref() // 表单 Ref
69+
70+
/** 打开弹窗 */
71+
const open = async (type: string, id?: number) => {
72+
dialogVisible.value = true
73+
dialogTitle.value = t('action.' + type)
74+
formType.value = type
75+
resetForm()
76+
// 修改时,设置数据
77+
if (id) {
78+
formLoading.value = true
79+
try {
80+
formData.value = await AccountApi.getAccount(id)
81+
} finally {
82+
formLoading.value = false
83+
}
84+
}
85+
}
86+
defineExpose({ open }) // 提供 open 方法,用于打开弹窗
87+
88+
/** 提交表单 */
89+
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
90+
const submitForm = async () => {
91+
// 校验表单
92+
await formRef.value.validate()
93+
// 提交请求
94+
formLoading.value = true
95+
try {
96+
const data = formData.value as unknown as AccountVO
97+
if (formType.value === 'create') {
98+
await AccountApi.createAccount(data)
99+
message.success(t('common.createSuccess'))
100+
} else {
101+
await AccountApi.updateAccount(data)
102+
message.success(t('common.updateSuccess'))
103+
}
104+
dialogVisible.value = false
105+
// 发送操作成功的事件
106+
emit('success')
107+
} finally {
108+
formLoading.value = false
109+
}
110+
}
111+
112+
/** 重置表单 */
113+
const resetForm = () => {
114+
formData.value = {
115+
id: undefined,
116+
name: undefined,
117+
no: undefined,
118+
remark: undefined,
119+
status: undefined,
120+
sort: undefined
121+
}
122+
formRef.value?.resetFields()
123+
}
124+
</script>

0 commit comments

Comments
 (0)