Skip to content

Commit 72c5eaa

Browse files
committed
代码生成:增加 one 情况下的示例代码
1 parent 55f6e4c commit 72c5eaa

File tree

9 files changed

+702
-109
lines changed

9 files changed

+702
-109
lines changed

src/api/infra/demo01/index.ts

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
import request from '@/config/axios'
2+
3+
export interface Demo01StudentVO {
4+
id: number
5+
name: string
6+
description: string
7+
birthday: Date
8+
sex: number
9+
enabled: boolean
10+
avatar: string
11+
video: string
12+
memo: string
13+
}
14+
15+
// 查询学生列表
16+
export const getDemo01StudentPage = async (params) => {
17+
return await request.get({ url: `/infra/demo01-student/page`, params })
18+
}
19+
20+
// 查询学生详情
21+
export const getDemo01Student = async (id: number) => {
22+
return await request.get({ url: `/infra/demo01-student/get?id=` + id })
23+
}
24+
25+
// 新增学生
26+
export const createDemo01Student = async (data: Demo01StudentVO) => {
27+
return await request.post({ url: `/infra/demo01-student/create`, data })
28+
}
29+
30+
// 修改学生
31+
export const updateDemo01Student = async (data: Demo01StudentVO) => {
32+
return await request.put({ url: `/infra/demo01-student/update`, data })
33+
}
34+
35+
// 删除学生
36+
export const deleteDemo01Student = async (id: number) => {
37+
return await request.delete({ url: `/infra/demo01-student/delete?id=` + id })
38+
}
39+
40+
// 导出学生 Excel
41+
export const exportDemo01Student = async (params) => {
42+
return await request.download({ url: `/infra/demo01-student/export-excel`, params })
43+
}

src/api/infra/demo02/index.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,3 +33,17 @@ export const deleteDemoStudent = async (id: number) => {
3333
export const exportDemoStudent = async (params) => {
3434
return await request.download({ url: `/infra/demo-student/export-excel`, params })
3535
}
36+
37+
// 获得学生联系人列表
38+
export const getDemoStudentContactListByStudentId = async (studentId) => {
39+
return await request.get({
40+
url: `/infra/demo-student/demo-student/list-by-student-id?studentId=` + studentId
41+
})
42+
}
43+
44+
// 获得学生地址
45+
export const getDemoStudentAddressByStudentId = async (studentId) => {
46+
return await request.get({
47+
url: `/infra/demo-student/demo-student/get-by-student-id?studentId=` + studentId
48+
})
49+
}

src/components/UploadFile/src/UploadFile.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ watch(
144144
} else if (isArray(props.modelValue)) {
145145
// 情况2:字符串
146146
files.concat(props.modelValue)
147-
} else if (props.modelValue === undefined) {
147+
} else if (props.modelValue == null) {
148148
// 情况3:undefined 不处理
149149
} else {
150150
throw new Error('不支持的 modelValue 类型')
Lines changed: 150 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,150 @@
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="description">
14+
<el-input v-model="formData.description" type="textarea" placeholder="请输入简介" />
15+
</el-form-item>
16+
<el-form-item label="出生日期" prop="birthday">
17+
<el-date-picker
18+
v-model="formData.birthday"
19+
type="date"
20+
value-format="x"
21+
placeholder="选择出生日期"
22+
/>
23+
</el-form-item>
24+
<el-form-item label="性别" prop="sex">
25+
<el-select v-model="formData.sex" placeholder="请选择性别">
26+
<el-option
27+
v-for="dict in getIntDictOptions(DICT_TYPE.SYSTEM_USER_SEX)"
28+
:key="dict.value"
29+
:label="dict.label"
30+
:value="dict.value"
31+
/>
32+
</el-select>
33+
</el-form-item>
34+
<el-form-item label="是否有效" prop="enabled">
35+
<el-radio-group v-model="formData.enabled">
36+
<el-radio
37+
v-for="dict in getBoolDictOptions(DICT_TYPE.INFRA_BOOLEAN_STRING)"
38+
:key="dict.value"
39+
:label="dict.value"
40+
>
41+
{{ dict.label }}
42+
</el-radio>
43+
</el-radio-group>
44+
</el-form-item>
45+
<el-form-item label="头像">
46+
<UploadImg v-model="formData.avatar" />
47+
</el-form-item>
48+
<el-form-item label="附件" prop="video">
49+
<UploadFile v-model="formData.video" />
50+
</el-form-item>
51+
<el-form-item label="备注" prop="memo">
52+
<Editor v-model="formData.memo" height="150px" />
53+
</el-form-item>
54+
</el-form>
55+
<template #footer>
56+
<el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button>
57+
<el-button @click="dialogVisible = false">取 消</el-button>
58+
</template>
59+
</Dialog>
60+
</template>
61+
<script setup lang="ts">
62+
import { getIntDictOptions, getStrDictOptions, getBoolDictOptions, DICT_TYPE } from '@/utils/dict'
63+
import * as Demo01StudentApi from '@/api/infra/demo01'
64+
65+
const { t } = useI18n() // 国际化
66+
const message = useMessage() // 消息弹窗
67+
68+
const dialogVisible = ref(false) // 弹窗的是否展示
69+
const dialogTitle = ref('') // 弹窗的标题
70+
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
71+
const formType = ref('') // 表单的类型:create - 新增;update - 修改
72+
const formData = ref({
73+
id: undefined,
74+
name: undefined,
75+
description: undefined,
76+
birthday: undefined,
77+
sex: undefined,
78+
enabled: undefined,
79+
avatar: undefined,
80+
video: undefined,
81+
memo: undefined
82+
})
83+
const formRules = reactive({
84+
name: [{ required: true, message: '名字不能为空', trigger: 'blur' }],
85+
birthday: [{ required: true, message: '出生日期不能为空', trigger: 'blur' }],
86+
sex: [{ required: true, message: '性别不能为空', trigger: 'change' }],
87+
enabled: [{ required: true, message: '是否有效不能为空', trigger: 'blur' }],
88+
avatar: [{ required: true, message: '头像不能为空', trigger: 'blur' }],
89+
memo: [{ 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 Demo01StudentApi.getDemo01Student(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 Demo01StudentApi.Demo01StudentVO
120+
if (formType.value === 'create') {
121+
await Demo01StudentApi.createDemo01Student(data)
122+
message.success(t('common.createSuccess'))
123+
} else {
124+
await Demo01StudentApi.updateDemo01Student(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+
description: undefined,
141+
birthday: undefined,
142+
sex: undefined,
143+
enabled: undefined,
144+
avatar: undefined,
145+
video: undefined,
146+
memo: undefined
147+
}
148+
formRef.value?.resetFields()
149+
}
150+
</script>

0 commit comments

Comments
 (0)