template-edit.vue 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. <template>
  2. <el-dialog
  3. title="添加短信模板"
  4. v-model="visible"
  5. width="600px"
  6. destroy-on-close
  7. >
  8. <el-form
  9. ref="formRef"
  10. :model="form"
  11. :rules="rules"
  12. label-width="100px"
  13. @keyup.enter="handleSubmit"
  14. >
  15. <el-form-item label="模板名称" prop="name">
  16. <el-input
  17. v-model="form.name"
  18. placeholder="请输入"
  19. clearable
  20. />
  21. </el-form-item>
  22. <el-form-item label="签名名称" prop="sign">
  23. <el-input
  24. v-model="form.sign"
  25. placeholder="请输入"
  26. clearable
  27. />
  28. </el-form-item>
  29. <el-form-item label="短信内容" prop="content">
  30. <el-input
  31. v-model="form.content"
  32. type="textarea"
  33. :rows="6"
  34. placeholder="请输入"
  35. />
  36. </el-form-item>
  37. <el-form-item label="备注">
  38. <el-input
  39. v-model="form.remark"
  40. placeholder="请输入"
  41. clearable
  42. />
  43. </el-form-item>
  44. <el-form-item label="推送方式" prop="pushWay">
  45. <el-checkbox-group v-model="form.pushWay">
  46. <el-checkbox label="1">小程序站内推送</el-checkbox>
  47. <el-checkbox label="2">公众号推送</el-checkbox>
  48. <el-checkbox label="3">短信推送</el-checkbox>
  49. </el-checkbox-group>
  50. </el-form-item>
  51. </el-form>
  52. <template #footer>
  53. <el-button @click="visible = false">取 消</el-button>
  54. <el-button type="primary" :loading="loading" @click="handleSubmit">
  55. 确 定
  56. </el-button>
  57. </template>
  58. </el-dialog>
  59. </template>
  60. <script setup>
  61. import { ref, reactive } from 'vue';
  62. import { EleMessage } from 'ele-admin-plus/es';
  63. import request from '@/utils/request';
  64. defineOptions({ name: 'TemplateEdit' });
  65. const emit = defineEmits(['success']);
  66. const visible = ref(false);
  67. const loading = ref(false);
  68. const formRef = ref(null);
  69. const editId = ref(null);
  70. const form = reactive({
  71. name: '',
  72. sign: '',
  73. content: '',
  74. remark: '',
  75. pushWay: []
  76. });
  77. const rules = {
  78. name: [
  79. { required: true, message: '请输入模板名称', trigger: 'blur' }
  80. ],
  81. sign: [{ required: true, message: '请输入签名名称', trigger: 'blur' }],
  82. content: [
  83. { required: true, message: '请输入短信内容', trigger: 'blur' }
  84. ]
  85. };
  86. // 打开弹窗
  87. function handleOpen(row) {
  88. visible.value = true;
  89. editId.value = null;
  90. form.name = '';
  91. form.sign = '';
  92. form.content = '';
  93. form.remark = '';
  94. form.pushWay = [];
  95. if (row) {
  96. Object.assign(form, row);
  97. editId.value = row.id;
  98. if (typeof form.pushWay === 'string') {
  99. form.pushWay = form.pushWay.split(',');
  100. }
  101. }
  102. }
  103. // 提交表单
  104. async function handleSubmit() {
  105. if (loading.value) return;
  106. try {
  107. const valid = await formRef.value?.validate();
  108. if (!valid) return;
  109. loading.value = true;
  110. const params = {
  111. name: form.name,
  112. sign: form.sign,
  113. content: form.content,
  114. remark: form.remark,
  115. pushWay: form.pushWay.join(','),
  116. status: 1
  117. };
  118. if (editId.value) {
  119. params.id = editId.value;
  120. }
  121. const url = editId.value ? '/message/templetemsg/update' : '/message/templetemsg/add';
  122. const { data } = await request.post(url, params);
  123. if (data.code === 200) {
  124. EleMessage.success(editId.value ? '修改成功' : '添加成功');
  125. visible.value = false;
  126. emit('success');
  127. } else {
  128. EleMessage.error(data.msg);
  129. }
  130. } catch (e) {
  131. EleMessage.error(e.message);
  132. } finally {
  133. loading.value = false;
  134. }
  135. }
  136. defineExpose({ handleOpen });
  137. </script>