1
1
<template >
2
- <Dialog v-model =" dialogVisible" :title =" dialogTitle" >
3
- <Form ref =" formRef" v-loading =" formLoading" :rules =" rules" :schema =" allSchemas.formSchema" />
2
+ <Dialog :title =" dialogTitle" v-model =" dialogVisible" >
3
+ <el-form
4
+ ref =" formRef"
5
+ :model =" formData"
6
+ :rules =" formRules"
7
+ label-width =" 120px"
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 =" startTime" >
14
+ <el-time-picker
15
+ v-model =" formData.startTime"
16
+ value-format =" HH:mm:ss"
17
+ placeholder =" 选择开始时间点"
18
+ />
19
+ </el-form-item >
20
+ <el-form-item label =" 结束时间点" prop =" endTime" >
21
+ <el-time-picker
22
+ v-model =" formData.endTime"
23
+ value-format =" HH:mm:ss"
24
+ placeholder =" 选择结束时间点"
25
+ />
26
+ </el-form-item >
27
+ <el-form-item label =" 秒杀轮播图" prop =" sliderPicUrls" >
28
+ <UploadImgs v-model =" formData.sliderPicUrls" placeholder =" 请输入秒杀轮播图" />
29
+ </el-form-item >
30
+ <el-form-item label =" 活动状态" prop =" status" >
31
+ <el-radio-group v-model =" formData.status" >
32
+ <el-radio
33
+ v-for =" dict in getIntDictOptions(DICT_TYPE.COMMON_STATUS)"
34
+ :key =" dict.value"
35
+ :label =" dict.value"
36
+ >
37
+ {{ dict.label }}
38
+ </el-radio >
39
+ </el-radio-group >
40
+ </el-form-item >
41
+ </el-form >
4
42
<template #footer >
5
- <el-button :disabled = " formLoading " type =" primary" @click = " submitForm " >确 定</el-button >
43
+ <el-button @click = " submitForm " type =" primary" :disabled = " formLoading " >确 定</el-button >
6
44
<el-button @click =" dialogVisible = false" >取 消</el-button >
7
45
</template >
8
46
</Dialog >
9
47
</template >
10
- <script lang="ts" name="SeckillConfigForm" setup>
11
- import * as SeckillConfigApi from ' @/api/mall/promotion/seckill/seckillConfig'
12
- import { allSchemas , rules } from ' ./seckillConfig.data'
48
+ <script setup lang="ts">
49
+ import { getIntDictOptions , DICT_TYPE } from ' @/utils/dict'
50
+ import { SeckillConfigApi , SeckillConfigVO } from ' @/api/mall/promotion/seckill/seckillConfig.ts'
51
+ import { CommonStatusEnum } from ' @/utils/constants'
52
+
53
+ /** 秒杀时段 表单 */
54
+ defineOptions ({ name: ' SeckillConfigForm' })
13
55
14
56
const { t } = useI18n () // 国际化
15
57
const message = useMessage () // 消息弹窗
@@ -18,22 +60,33 @@ const dialogVisible = ref(false) // 弹窗的是否展示
18
60
const dialogTitle = ref (' ' ) // 弹窗的标题
19
61
const formLoading = ref (false ) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
20
62
const formType = ref (' ' ) // 表单的类型:create - 新增;update - 修改
63
+ const formData = ref ({
64
+ id: undefined ,
65
+ name: undefined ,
66
+ startTime: undefined ,
67
+ endTime: undefined ,
68
+ sliderPicUrls: undefined ,
69
+ status: undefined
70
+ })
71
+ const formRules = reactive ({
72
+ name: [{ required: true , message: ' 秒杀时段名称不能为空' , trigger: ' blur' }],
73
+ startTime: [{ required: true , message: ' 开始时间点不能为空' , trigger: ' blur' }],
74
+ endTime: [{ required: true , message: ' 结束时间点不能为空' , trigger: ' blur' }],
75
+ status: [{ required: true , message: ' 活动状态不能为空' , trigger: ' blur' }]
76
+ })
21
77
const formRef = ref () // 表单 Ref
22
78
23
79
/** 打开弹窗 */
24
80
const open = async (type : string , id ? : number ) => {
25
81
dialogVisible .value = true
26
82
dialogTitle .value = t (' action.' + type )
27
83
formType .value = type
84
+ resetForm ()
28
85
// 修改时,设置数据
29
86
if (id ) {
30
87
formLoading .value = true
31
88
try {
32
- const data = await SeckillConfigApi .getSeckillConfig (id )
33
- data .sliderPicUrls = data [' sliderPicUrls' ]?.map ((item ) => ({
34
- url: item
35
- }))
36
- formRef .value .setValues (data )
89
+ formData .value = await SeckillConfigApi .getSeckillConfig (id )
37
90
} finally {
38
91
formLoading .value = false
39
92
}
@@ -45,24 +98,11 @@ defineExpose({ open }) // 提供 open 方法,用于打开弹窗
45
98
const emit = defineEmits ([' success' ]) // 定义 success 事件,用于操作成功后的回调
46
99
const submitForm = async () => {
47
100
// 校验表单
48
- if (! formRef ) return
49
- const valid = await formRef .value .getElFormRef ().validate ()
50
- if (! valid ) return
101
+ await formRef .value .validate ()
51
102
// 提交请求
52
103
formLoading .value = true
53
104
try {
54
- // 处理轮播图列表
55
- const sliderPicUrls = []
56
- formRef .value .formModel .sliderPicUrls .forEach ((item ) => {
57
- // 如果是前端选的图
58
- typeof item === ' object' ? sliderPicUrls .push (item .url ) : sliderPicUrls .push (item )
59
- })
60
-
61
- // 真正提交
62
- const data = {
63
- ... formRef .value .formModel ,
64
- sliderPicUrls
65
- } as SeckillConfigApi .SeckillConfigVO
105
+ const data = formData .value as unknown as SeckillConfigVO
66
106
if (formType .value === ' create' ) {
67
107
await SeckillConfigApi .createSeckillConfig (data )
68
108
message .success (t (' common.createSuccess' ))
@@ -77,4 +117,17 @@ const submitForm = async () => {
77
117
formLoading .value = false
78
118
}
79
119
}
120
+
121
+ /** 重置表单 */
122
+ const resetForm = () => {
123
+ formData .value = {
124
+ id: undefined ,
125
+ name: undefined ,
126
+ startTime: undefined ,
127
+ endTime: undefined ,
128
+ sliderPicUrls: [],
129
+ status: CommonStatusEnum .ENABLE
130
+ }
131
+ formRef .value ?.resetFields ()
132
+ }
80
133
</script >
0 commit comments