1
1
<template >
2
- <Dialog
3
- v-model =" dialogVisible"
4
- :max-height =" 500"
5
- :scroll =" true"
6
- :title =" dialogTitle"
7
- :width =" 800"
8
- >
9
- <Form ref =" formRef" v-loading =" formLoading" :rules =" rules" :schema =" allSchemas.formSchema" />
2
+ <Dialog v-model =" dialogVisible" :title =" dialogTitle" :width =" 800" >
3
+ <el-form
4
+ ref =" formRef"
5
+ v-loading =" formLoading"
6
+ :model =" formData"
7
+ :rules =" formRules"
8
+ label-width =" 140px"
9
+ >
10
+ <el-form-item label =" 邮箱账号" prop =" accountId" >
11
+ <el-select v-model =" formData.accountId" placeholder =" 请选择邮箱账号" >
12
+ <el-option
13
+ v-for =" account in accountList"
14
+ :key =" account.id"
15
+ :label =" account.mail"
16
+ :value =" account.id"
17
+ />
18
+ </el-select >
19
+ </el-form-item >
20
+ <el-form-item label =" 模板编码" prop =" code" >
21
+ <el-input v-model =" formData.code" placeholder =" 请输入模板编码" />
22
+ </el-form-item >
23
+ <el-form-item label =" 模板名称" prop =" name" >
24
+ <el-input v-model =" formData.name" placeholder =" 请输入模板名称" />
25
+ </el-form-item >
26
+ <el-form-item label =" 发送人名称" prop =" nickname" >
27
+ <el-input v-model =" formData.nickname" placeholder =" 请输入发送人名称" />
28
+ </el-form-item >
29
+ <el-form-item label =" 模板标题" prop =" title" >
30
+ <el-input v-model =" formData.title" placeholder =" 请输入模板标题" />
31
+ </el-form-item >
32
+ <el-form-item label =" 模板内容" prop =" content" >
33
+ <Editor v-model =" formData.content" height =" 200px" />
34
+ </el-form-item >
35
+ <el-form-item label =" 开启状态" prop =" status" >
36
+ <el-radio-group v-model =" formData.status" >
37
+ <el-radio
38
+ v-for =" dict in getIntDictOptions(DICT_TYPE.COMMON_STATUS)"
39
+ :key =" dict.value"
40
+ :value =" dict.value"
41
+ >
42
+ {{ dict.label }}
43
+ </el-radio >
44
+ </el-radio-group >
45
+ </el-form-item >
46
+ <el-form-item label =" 备注" prop =" remark" >
47
+ <el-input v-model =" formData.remark" placeholder =" 请输入备注" type =" textarea" />
48
+ </el-form-item >
49
+ </el-form >
10
50
<template #footer >
11
51
<el-button :disabled =" formLoading" type =" primary" @click =" submitForm" >确 定</el-button >
12
52
<el-button @click =" dialogVisible = false" >取 消</el-button >
13
53
</template >
14
54
</Dialog >
15
55
</template >
16
56
<script lang="ts" setup>
57
+ import { DICT_TYPE , getIntDictOptions } from ' @/utils/dict'
17
58
import * as MailTemplateApi from ' @/api/system/mail/template'
18
- import { allSchemas , rules } from ' ./template.data'
59
+ import * as MailAccountApi from ' @/api/system/mail/account'
60
+ import { CommonStatusEnum } from ' @/utils/constants'
19
61
20
62
defineOptions ({ name: ' SystemMailTemplateForm' })
21
63
@@ -26,23 +68,44 @@ const dialogVisible = ref(false) // 弹窗的是否展示
26
68
const dialogTitle = ref (' ' ) // 弹窗的标题
27
69
const formLoading = ref (false ) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
28
70
const formType = ref (' ' ) // 表单的类型:create - 新增;update - 修改
71
+ const formData = ref ({
72
+ id: undefined ,
73
+ name: ' ' ,
74
+ code: ' ' ,
75
+ accountId: undefined ,
76
+ nickname: ' ' ,
77
+ title: ' ' ,
78
+ content: ' ' ,
79
+ status: CommonStatusEnum .ENABLE ,
80
+ remark: ' '
81
+ })
82
+ const formRules = reactive ({
83
+ accountId: [{ required: true , message: ' 邮箱账号不能为空' , trigger: ' change' }],
84
+ code: [{ required: true , message: ' 模板编码不能为空' , trigger: ' blur' }],
85
+ name: [{ required: true , message: ' 模板名称不能为空' , trigger: ' blur' }],
86
+ title: [{ required: true , message: ' 模板标题不能为空' , trigger: ' blur' }],
87
+ content: [{ required: true , message: ' 模板内容不能为空' , trigger: ' blur' }],
88
+ status: [{ required: true , message: ' 开启状态不能为空' , trigger: ' blur' }]
89
+ })
29
90
const formRef = ref () // 表单 Ref
91
+ const accountList = ref <MailAccountApi .MailAccountVO []>([]) // 邮箱账号列表
30
92
31
- /** 打开弹窗 */
32
93
const open = async (type : string , id ? : number ) => {
33
94
dialogVisible .value = true
34
95
dialogTitle .value = t (' action.' + type )
35
96
formType .value = type
97
+ resetForm ()
36
98
// 修改时,设置数据
37
99
if (id ) {
38
100
formLoading .value = true
39
101
try {
40
- const data = await MailTemplateApi .getMailTemplate (id )
41
- formRef .value .setValues (data )
102
+ formData .value = await MailTemplateApi .getMailTemplate (id )
42
103
} finally {
43
104
formLoading .value = false
44
105
}
45
106
}
107
+ // 加载邮箱账号列表
108
+ accountList .value = await MailAccountApi .getSimpleMailAccountList ()
46
109
}
47
110
defineExpose ({ open }) // 提供 open 方法,用于打开弹窗
48
111
@@ -51,12 +114,11 @@ const emit = defineEmits(['success']) // 定义 success 事件,用于操作成
51
114
const submitForm = async () => {
52
115
// 校验表单
53
116
if (! formRef ) return
54
- const valid = await formRef .value .getElFormRef (). validate ()
117
+ const valid = await formRef .value .validate ()
55
118
if (! valid ) return
56
- // 提交请求
57
119
formLoading .value = true
58
120
try {
59
- const data = formRef .value . formModel as MailTemplateApi .MailTemplateVO
121
+ const data = formData .value as MailTemplateApi .MailTemplateVO
60
122
if (formType .value === ' create' ) {
61
123
await MailTemplateApi .createMailTemplate (data )
62
124
message .success (t (' common.createSuccess' ))
@@ -71,4 +133,20 @@ const submitForm = async () => {
71
133
formLoading .value = false
72
134
}
73
135
}
136
+
137
+ /** 重置表单 */
138
+ const resetForm = () => {
139
+ formData .value = {
140
+ id: undefined ,
141
+ name: ' ' ,
142
+ code: ' ' ,
143
+ accountId: undefined ,
144
+ nickname: ' ' ,
145
+ title: ' ' ,
146
+ content: ' ' ,
147
+ status: CommonStatusEnum .ENABLE ,
148
+ remark: ' '
149
+ }
150
+ formRef .value ?.resetFields ()
151
+ }
74
152
</script >
0 commit comments