CombinationActivityForm.vue 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. <template>
  2. <Dialog v-model="dialogVisible" :title="dialogTitle">
  3. <Form
  4. ref="formRef"
  5. v-loading="formLoading"
  6. :is-col="true"
  7. :rules="rules"
  8. :schema="allSchemas.formSchema"
  9. />
  10. <template #footer>
  11. <el-button :disabled="formLoading" type="primary" @click="submitForm">确 定</el-button>
  12. <el-button @click="dialogVisible = false">取 消</el-button>
  13. </template>
  14. </Dialog>
  15. </template>
  16. <script lang="ts" setup>
  17. import * as CombinationActivityApi from '@/api/mall/promotion/combination/combinationactivity'
  18. import { allSchemas, rules } from './combinationActivity.data'
  19. defineOptions({ name: 'PromotionCombinationActivityForm' })
  20. const { t } = useI18n() // 国际化
  21. const message = useMessage() // 消息弹窗
  22. const dialogVisible = ref(false) // 弹窗的是否展示
  23. const dialogTitle = ref('') // 弹窗的标题
  24. const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
  25. const formType = ref('') // 表单的类型:create - 新增;update - 修改
  26. const formRef = ref() // 表单 Ref
  27. /** 打开弹窗 */
  28. const open = async (type: string, id?: number) => {
  29. dialogVisible.value = true
  30. dialogTitle.value = t('action.' + type)
  31. formType.value = type
  32. // 修改时,设置数据
  33. if (id) {
  34. formLoading.value = true
  35. try {
  36. const data = await CombinationActivityApi.getCombinationActivity(id)
  37. formRef.value.setValues(data)
  38. } finally {
  39. formLoading.value = false
  40. }
  41. }
  42. }
  43. defineExpose({ open }) // 提供 open 方法,用于打开弹窗
  44. /** 提交表单 */
  45. const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
  46. const submitForm = async () => {
  47. // 校验表单
  48. if (!formRef) return
  49. const valid = await formRef.value.getElFormRef().validate()
  50. if (!valid) return
  51. // 提交请求
  52. formLoading.value = true
  53. try {
  54. const data = formRef.value.formModel as CombinationActivityApi.CombinationActivityVO
  55. if (formType.value === 'create') {
  56. await CombinationActivityApi.createCombinationActivity(data)
  57. message.success(t('common.createSuccess'))
  58. } else {
  59. await CombinationActivityApi.updateCombinationActivity(data)
  60. message.success(t('common.updateSuccess'))
  61. }
  62. dialogVisible.value = false
  63. // 发送操作成功的事件
  64. emit('success')
  65. } finally {
  66. formLoading.value = false
  67. }
  68. }
  69. </script>