Skip to content

Commit a42d069

Browse files
committed
代码生成:增加主子表 erp 模式的示例
1 parent 6c405ba commit a42d069

File tree

7 files changed

+905
-0
lines changed

7 files changed

+905
-0
lines changed
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
import request from '@/config/axios'
2+
3+
export interface Demo03StudentVO {
4+
id: number
5+
name: string
6+
sex: number
7+
birthday: Date
8+
description: string
9+
}
10+
11+
// 查询学生分页
12+
export const getDemo03StudentPage = async (params) => {
13+
return await request.get({ url: `/infra/demo03-student/page`, params })
14+
}
15+
16+
// 查询学生详情
17+
export const getDemo03Student = async (id: number) => {
18+
return await request.get({ url: `/infra/demo03-student/get?id=` + id })
19+
}
20+
21+
// 新增学生
22+
export const createDemo03Student = async (data: Demo03StudentVO) => {
23+
return await request.post({ url: `/infra/demo03-student/create`, data })
24+
}
25+
26+
// 修改学生
27+
export const updateDemo03Student = async (data: Demo03StudentVO) => {
28+
return await request.put({ url: `/infra/demo03-student/update`, data })
29+
}
30+
31+
// 删除学生
32+
export const deleteDemo03Student = async (id: number) => {
33+
return await request.delete({ url: `/infra/demo03-student/delete?id=` + id })
34+
}
35+
36+
// 导出学生 Excel
37+
export const exportDemo03Student = async (params) => {
38+
return await request.download({ url: `/infra/demo03-student/export-excel`, params })
39+
}
40+
41+
// ==================== 子表(学生课程) ====================
42+
43+
// 获得学生课程分页
44+
export const getDemo03CoursePage = async (params) => {
45+
return await request.get({ url: `/infra/demo03-student/demo03-course/page`, params })
46+
}
47+
// 新增学生课程
48+
export const createDemo03Course = async (data) => {
49+
return await request.post({ url: `/infra/demo03-student/demo03-course/create`, data })
50+
}
51+
52+
// 修改学生课程
53+
export const updateDemo03Course = async (data) => {
54+
return await request.put({ url: `/infra/demo03-student/demo03-course/update`, data })
55+
}
56+
57+
// 删除学生课程
58+
export const deleteDemo03Course = async (id: number) => {
59+
return await request.delete({ url: `/infra/demo03-student/demo03-course/delete?id=` + id })
60+
}
61+
62+
// 获得学生课程
63+
export const getDemo03Course = async (id: number) => {
64+
return await request.get({ url: `/infra/demo03-student/demo03-course/get?id=` + id })
65+
}
66+
67+
// ==================== 子表(学生班级) ====================
68+
69+
// 获得学生班级分页
70+
export const getDemo03GradePage = async (params) => {
71+
return await request.get({ url: `/infra/demo03-student/demo03-grade/page`, params })
72+
}
73+
// 新增学生班级
74+
export const createDemo03Grade = async (data) => {
75+
return await request.post({ url: `/infra/demo03-student/demo03-grade/create`, data })
76+
}
77+
78+
// 修改学生班级
79+
export const updateDemo03Grade = async (data) => {
80+
return await request.put({ url: `/infra/demo03-student/demo03-grade/update`, data })
81+
}
82+
83+
// 删除学生班级
84+
export const deleteDemo03Grade = async (id: number) => {
85+
return await request.delete({ url: `/infra/demo03-student/demo03-grade/delete?id=` + id })
86+
}
87+
88+
// 获得学生班级
89+
export const getDemo03Grade = async (id: number) => {
90+
return await request.get({ url: `/infra/demo03-student/demo03-grade/get?id=` + id })
91+
}
Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
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="sex">
14+
<el-radio-group v-model="formData.sex">
15+
<el-radio
16+
v-for="dict in getIntDictOptions(DICT_TYPE.SYSTEM_USER_SEX)"
17+
:key="dict.value"
18+
:label="dict.value"
19+
>
20+
{{ dict.label }}
21+
</el-radio>
22+
</el-radio-group>
23+
</el-form-item>
24+
<el-form-item label="出生日期" prop="birthday">
25+
<el-date-picker
26+
v-model="formData.birthday"
27+
type="date"
28+
value-format="x"
29+
placeholder="选择出生日期"
30+
/>
31+
</el-form-item>
32+
<el-form-item label="简介" prop="description">
33+
<Editor v-model="formData.description" height="150px" />
34+
</el-form-item>
35+
</el-form>
36+
<template #footer>
37+
<el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button>
38+
<el-button @click="dialogVisible = false">取 消</el-button>
39+
</template>
40+
</Dialog>
41+
</template>
42+
<script setup lang="ts">
43+
import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
44+
import * as Demo03StudentApi from '@/api/infra/demo/demo03/erp'
45+
46+
const { t } = useI18n() // 国际化
47+
const message = useMessage() // 消息弹窗
48+
49+
const dialogVisible = ref(false) // 弹窗的是否展示
50+
const dialogTitle = ref('') // 弹窗的标题
51+
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
52+
const formType = ref('') // 表单的类型:create - 新增;update - 修改
53+
const formData = ref({
54+
id: undefined,
55+
name: undefined,
56+
sex: undefined,
57+
birthday: undefined,
58+
description: undefined
59+
})
60+
const formRules = reactive({
61+
name: [{ required: true, message: '名字不能为空', trigger: 'blur' }],
62+
sex: [{ required: true, message: '性别不能为空', trigger: 'blur' }],
63+
birthday: [{ required: true, message: '出生日期不能为空', trigger: 'blur' }],
64+
description: [{ required: true, message: '简介不能为空', trigger: 'blur' }]
65+
})
66+
const formRef = ref() // 表单 Ref
67+
68+
/** 打开弹窗 */
69+
const open = async (type: string, id?: number) => {
70+
dialogVisible.value = true
71+
dialogTitle.value = t('action.' + type)
72+
formType.value = type
73+
resetForm()
74+
// 修改时,设置数据
75+
if (id) {
76+
formLoading.value = true
77+
try {
78+
formData.value = await Demo03StudentApi.getDemo03Student(id)
79+
} finally {
80+
formLoading.value = false
81+
}
82+
}
83+
}
84+
defineExpose({ open }) // 提供 open 方法,用于打开弹窗
85+
86+
/** 提交表单 */
87+
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
88+
const submitForm = async () => {
89+
// 校验表单
90+
await formRef.value.validate()
91+
// 提交请求
92+
formLoading.value = true
93+
try {
94+
const data = formData.value as unknown as Demo03StudentApi.Demo03StudentVO
95+
if (formType.value === 'create') {
96+
await Demo03StudentApi.createDemo03Student(data)
97+
message.success(t('common.createSuccess'))
98+
} else {
99+
await Demo03StudentApi.updateDemo03Student(data)
100+
message.success(t('common.updateSuccess'))
101+
}
102+
dialogVisible.value = false
103+
// 发送操作成功的事件
104+
emit('success')
105+
} finally {
106+
formLoading.value = false
107+
}
108+
}
109+
110+
/** 重置表单 */
111+
const resetForm = () => {
112+
formData.value = {
113+
id: undefined,
114+
name: undefined,
115+
sex: undefined,
116+
birthday: undefined,
117+
description: undefined
118+
}
119+
formRef.value?.resetFields()
120+
}
121+
</script>
Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
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="score">
14+
<el-input v-model="formData.score" placeholder="请输入分数" />
15+
</el-form-item>
16+
</el-form>
17+
<template #footer>
18+
<el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button>
19+
<el-button @click="dialogVisible = false">取 消</el-button>
20+
</template>
21+
</Dialog>
22+
</template>
23+
<script setup lang="ts">
24+
import * as Demo03StudentApi from '@/api/infra/demo/demo03/erp'
25+
26+
const { t } = useI18n() // 国际化
27+
const message = useMessage() // 消息弹窗
28+
29+
const dialogVisible = ref(false) // 弹窗的是否展示
30+
const dialogTitle = ref('') // 弹窗的标题
31+
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
32+
const formType = ref('') // 表单的类型:create - 新增;update - 修改
33+
const formData = ref({
34+
id: undefined,
35+
studentId: undefined,
36+
name: undefined,
37+
score: undefined
38+
})
39+
const formRules = reactive({
40+
studentId: [{ required: true, message: '学生编号不能为空', trigger: 'blur' }],
41+
name: [{ required: true, message: '名字不能为空', trigger: 'blur' }],
42+
score: [{ required: true, message: '分数不能为空', trigger: 'blur' }]
43+
})
44+
const formRef = ref() // 表单 Ref
45+
46+
/** 打开弹窗 */
47+
const open = async (type: string, id?: number, studentId: number) => {
48+
dialogVisible.value = true
49+
dialogTitle.value = t('action.' + type)
50+
formType.value = type
51+
resetForm()
52+
formData.value.studentId = studentId
53+
// 修改时,设置数据
54+
if (id) {
55+
formLoading.value = true
56+
try {
57+
formData.value = await Demo03StudentApi.getDemo03Course(id)
58+
} finally {
59+
formLoading.value = false
60+
}
61+
}
62+
}
63+
defineExpose({ open }) // 提供 open 方法,用于打开弹窗
64+
65+
/** 提交表单 */
66+
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
67+
const submitForm = async () => {
68+
// 校验表单
69+
await formRef.value.validate()
70+
// 提交请求
71+
formLoading.value = true
72+
try {
73+
const data = formData.value
74+
if (formType.value === 'create') {
75+
await Demo03StudentApi.createDemo03Course(data)
76+
message.success(t('common.createSuccess'))
77+
} else {
78+
await Demo03StudentApi.updateDemo03Course(data)
79+
message.success(t('common.updateSuccess'))
80+
}
81+
dialogVisible.value = false
82+
// 发送操作成功的事件
83+
emit('success')
84+
} finally {
85+
formLoading.value = false
86+
}
87+
}
88+
89+
/** 重置表单 */
90+
const resetForm = () => {
91+
formData.value = {
92+
id: undefined,
93+
studentId: undefined,
94+
name: undefined,
95+
score: undefined
96+
}
97+
formRef.value?.resetFields()
98+
}
99+
</script>

0 commit comments

Comments
 (0)