form.vue 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. <template>
  2. <Dialog :title="modelTitle" v-model="modelVisible">
  3. <el-form ref="formRef" :model="form" :rules="rules" label-width="130px" v-loading="formLoading">
  4. <el-form-item label="短信签名" prop="signature">
  5. <el-input v-model="form.signature" placeholder="请输入短信签名" />
  6. </el-form-item>
  7. <el-form-item label="渠道编码" prop="code">
  8. <el-select v-model="form.code" placeholder="请选择渠道编码" clearable>
  9. <el-option
  10. v-for="dict in getDictOptions(DICT_TYPE.SYSTEM_SMS_CHANNEL_CODE)"
  11. :key="dict.value"
  12. :label="dict.label"
  13. :value="dict.value"
  14. />
  15. </el-select>
  16. </el-form-item>
  17. <el-form-item label="启用状态">
  18. <el-radio-group v-model="form.status">
  19. <el-radio
  20. v-for="dict in getDictOptions(DICT_TYPE.COMMON_STATUS)"
  21. :key="dict.value"
  22. :label="parseInt(dict.value)"
  23. >{{ dict.label }}</el-radio
  24. >
  25. </el-radio-group>
  26. </el-form-item>
  27. <el-form-item label="备注" prop="remark">
  28. <el-input v-model="form.remark" placeholder="请输入备注" />
  29. </el-form-item>
  30. <el-form-item label="短信 API 的账号" prop="apiKey">
  31. <el-input v-model="form.apiKey" placeholder="请输入短信 API 的账号" />
  32. </el-form-item>
  33. <el-form-item label="短信 API 的密钥" prop="apiSecret">
  34. <el-input v-model="form.apiSecret" placeholder="请输入短信 API 的密钥" />
  35. </el-form-item>
  36. <el-form-item label="短信发送回调 URL" prop="callbackUrl">
  37. <el-input v-model="form.callbackUrl" placeholder="请输入短信发送回调 URL" />
  38. </el-form-item>
  39. </el-form>
  40. <template #footer>
  41. <div class="dialog-footer">
  42. <el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button>
  43. <el-button @click="modelVisible = false">取 消</el-button>
  44. </div>
  45. </template>
  46. </Dialog>
  47. </template>
  48. <script setup lang="ts">
  49. import { DICT_TYPE, getDictOptions } from '@/utils/dict'
  50. import * as SmsChannelApi from '@/api/system/sms/smsChannel'
  51. const { t } = useI18n() // 国际化
  52. const message = useMessage() // 消息弹窗
  53. const modelVisible = ref(false) // 弹窗的是否展示
  54. const modelTitle = ref('') // 弹窗的标题
  55. const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
  56. const formType = ref('') // 表单的类型:create - 新增;update - 修改
  57. const form = ref({
  58. id: undefined,
  59. signature: '',
  60. code: '',
  61. status: '',
  62. remark: '',
  63. apiKey: '',
  64. apiSecret: '',
  65. callbackUrl: ''
  66. })
  67. const rules = reactive({
  68. signature: [{ required: true, message: '短信签名不能为空', trigger: 'blur' }],
  69. code: [{ required: true, message: '渠道编码不能为空', trigger: 'blur' }],
  70. status: [{ required: true, message: '启用状态不能为空', trigger: 'blur' }],
  71. apiKey: [{ required: true, message: '短信 API 的账号不能为空', trigger: 'blur' }]
  72. })
  73. const formRef = ref() // 表单 Ref
  74. /** 打开弹窗 */
  75. const openModal = async (type: string, id?: number) => {
  76. modelVisible.value = true
  77. modelTitle.value = t('action.' + type)
  78. formType.value = type
  79. resetForm()
  80. // 修改时,设置数据
  81. if (id) {
  82. formLoading.value = true
  83. try {
  84. form.value = await SmsChannelApi.getSmsChannelApi(id)
  85. console.log(form)
  86. } finally {
  87. formLoading.value = false
  88. }
  89. }
  90. }
  91. defineExpose({ openModal }) // 提供 openModal 方法,用于打开弹窗
  92. /** 提交表单 */
  93. const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
  94. const submitForm = async () => {
  95. // 校验表单
  96. if (!formRef) return
  97. const valid = await formRef.value.validate()
  98. if (!valid) return
  99. // 提交请求
  100. formLoading.value = true
  101. try {
  102. const data = unref(formRef)?.formModel as SmsChannelApi.SmsChannelVO
  103. if (formType.value === 'create') {
  104. await SmsChannelApi.createSmsChannelApi(data)
  105. message.success(t('common.createSuccess'))
  106. } else {
  107. await SmsChannelApi.updateSmsChannelApi(data)
  108. message.success(t('common.updateSuccess'))
  109. }
  110. modelVisible.value = false
  111. // 发送操作成功的事件
  112. emit('success')
  113. } finally {
  114. formLoading.value = false
  115. }
  116. }
  117. /** 重置表单 */
  118. const resetForm = () => {
  119. form.value = {
  120. id: undefined,
  121. signature: '',
  122. code: '',
  123. status: '',
  124. remark: '',
  125. apiKey: '',
  126. apiSecret: '',
  127. callbackUrl: ''
  128. }
  129. formRef.value?.resetFields()
  130. }
  131. </script>