MsgTemplateLogForm.vue 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  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="appId" prop="appId">
  11. <el-input v-model="formData.appId" placeholder="请输入appId"/>
  12. </el-form-item>
  13. <el-form-item label="用户openid" prop="toUser">
  14. <el-input v-model="formData.toUser" placeholder="请输入用户openid"/>
  15. </el-form-item>
  16. <el-form-item label="公众号模板ID" prop="templateId">
  17. <el-input v-model="formData.templateId" placeholder="请输入公众号模板ID"/>
  18. </el-form-item>
  19. <el-form-item label="消息内容" prop="data">
  20. <el-input v-model="formData.data" placeholder="请输入消息内容"/>
  21. </el-form-item>
  22. <el-form-item label="链接" prop="url">
  23. <el-input v-model="formData.url" placeholder="请输入链接"/>
  24. </el-form-item>
  25. <el-form-item label="小程序appid" prop="miniProgramAppId">
  26. <el-input v-model="formData.miniProgramAppId" placeholder="请输入小程序appid"/>
  27. </el-form-item>
  28. <el-form-item label="小程序页面路径" prop="miniProgramPagePath">
  29. <el-input v-model="formData.miniProgramPagePath" placeholder="请输入小程序页面路径"/>
  30. </el-form-item>
  31. <el-form-item label="发送时间" prop="sendTime">
  32. <el-date-picker
  33. v-model="formData.sendTime"
  34. type="date"
  35. value-format="x"
  36. placeholder="选择发送时间"
  37. />
  38. </el-form-item>
  39. <el-form-item label="发送状态 0成功,1失败" prop="sendStatus">
  40. <el-radio-group v-model="formData.sendStatus">
  41. <el-radio value="1">请选择字典生成</el-radio>
  42. </el-radio-group>
  43. </el-form-item>
  44. <el-form-item label="发送结果" prop="sendResult">
  45. <el-input v-model="formData.sendResult" placeholder="请输入发送结果"/>
  46. </el-form-item>
  47. </el-form>
  48. <template #footer>
  49. <el-button @click="submitForm" type="primary" :disabled="formLoading">确 定</el-button>
  50. <el-button @click="dialogVisible = false">取 消</el-button>
  51. </template>
  52. </Dialog>
  53. </template>
  54. <script setup lang="ts">
  55. import {MsgTemplateLogApi, MsgTemplateLogVO} from '@/api/mp/template'
  56. /** 微信模版消息发送记录 表单 */
  57. defineOptions({name: 'MsgTemplateLogForm'})
  58. const {t} = useI18n() // 国际化
  59. const message = useMessage() // 消息弹窗
  60. const dialogVisible = ref(false) // 弹窗的是否展示
  61. const dialogTitle = ref('') // 弹窗的标题
  62. const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
  63. const formType = ref('') // 表单的类型:create - 新增;update - 修改
  64. const formData = ref({
  65. id: undefined,
  66. appId: undefined,
  67. toUser: undefined,
  68. templateId: undefined,
  69. data: undefined,
  70. url: undefined,
  71. miniProgramAppId: undefined,
  72. miniProgramPagePath: undefined,
  73. sendTime: undefined,
  74. sendStatus: undefined,
  75. sendResult: undefined,
  76. })
  77. const formRules = reactive({
  78. appId: [{required: true, message: 'appId不能为空', trigger: 'blur'}],
  79. })
  80. const formRef = ref() // 表单 Ref
  81. /** 打开弹窗 */
  82. const open = async (type: string, id?: number) => {
  83. dialogVisible.value = true
  84. dialogTitle.value = t('action.' + type)
  85. formType.value = type
  86. resetForm()
  87. // 修改时,设置数据
  88. if (id) {
  89. formLoading.value = true
  90. try {
  91. formData.value = await MsgTemplateLogApi.getMsgTemplateLog(id)
  92. } finally {
  93. formLoading.value = false
  94. }
  95. }
  96. }
  97. defineExpose({open}) // 提供 open 方法,用于打开弹窗
  98. /** 提交表单 */
  99. const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
  100. const submitForm = async () => {
  101. // 校验表单
  102. await formRef.value.validate()
  103. // 提交请求
  104. formLoading.value = true
  105. try {
  106. const data = formData.value as unknown as MsgTemplateLogVO
  107. if (formType.value === 'create') {
  108. await MsgTemplateLogApi.createMsgTemplateLog(data)
  109. message.success(t('common.createSuccess'))
  110. } else {
  111. await MsgTemplateLogApi.updateMsgTemplateLog(data)
  112. message.success(t('common.updateSuccess'))
  113. }
  114. dialogVisible.value = false
  115. // 发送操作成功的事件
  116. emit('success')
  117. } finally {
  118. formLoading.value = false
  119. }
  120. }
  121. /** 重置表单 */
  122. const resetForm = () => {
  123. formData.value = {
  124. id: undefined,
  125. appId: undefined,
  126. toUser: undefined,
  127. templateId: undefined,
  128. data: undefined,
  129. url: undefined,
  130. miniProgramAppId: undefined,
  131. miniProgramPagePath: undefined,
  132. sendTime: undefined,
  133. sendStatus: undefined,
  134. sendResult: undefined,
  135. }
  136. formRef.value?.resetFields()
  137. }
  138. </script>