Commit c0b029b2447e381436b83a35a2dcdbac680baf62
1 parent
0895ee7d
邮箱模块:完善 template 的单元测试
Showing
9 changed files
with
300 additions
and
22 deletions
yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/util/date/LocalDateTimeUtils.java
| ... | ... | @@ -41,6 +41,11 @@ public class LocalDateTimeUtils { |
| 41 | 41 | return LocalDateTime.of(year, mouth, day, 0, 0, 0); |
| 42 | 42 | } |
| 43 | 43 | |
| 44 | + public static LocalDateTime[] buildBetweenTime(int year1, int mouth1, int day1, | |
| 45 | + int year2, int mouth2, int day2) { | |
| 46 | + return new LocalDateTime[]{buildTime(year1, mouth1, day1), buildTime(year2, mouth2, day2)}; | |
| 47 | + } | |
| 48 | + | |
| 44 | 49 | /** |
| 45 | 50 | * 判断当前时间是否在该时间范围内 |
| 46 | 51 | * | ... | ... |
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/mail/MailTemplateServiceImpl.java
| ... | ... | @@ -12,6 +12,7 @@ import cn.iocoder.yudao.module.system.dal.dataobject.mail.MailTemplateDO; |
| 12 | 12 | import cn.iocoder.yudao.module.system.dal.mysql.mail.MailTemplateMapper; |
| 13 | 13 | import cn.iocoder.yudao.module.system.mq.producer.mail.MailProducer; |
| 14 | 14 | import com.google.common.annotations.VisibleForTesting; |
| 15 | +import lombok.Getter; | |
| 15 | 16 | import lombok.extern.slf4j.Slf4j; |
| 16 | 17 | import org.springframework.stereotype.Service; |
| 17 | 18 | import org.springframework.validation.annotation.Validated; |
| ... | ... | @@ -55,6 +56,7 @@ public class MailTemplateServiceImpl implements MailTemplateService { |
| 55 | 56 | * |
| 56 | 57 | * 这里声明 volatile 修饰的原因是,每次刷新时,直接修改指向 |
| 57 | 58 | */ |
| 59 | + @Getter | |
| 58 | 60 | private volatile Map<String, MailTemplateDO> mailTemplateCache; |
| 59 | 61 | |
| 60 | 62 | @Override | ... | ... |
yudao-module-system/yudao-module-system-biz/src/test/java/cn/iocoder/yudao/module/system/service/mail/MailTemplateServiceImplTest.java
0 → 100755
| 1 | +package cn.iocoder.yudao.module.system.service.mail; | |
| 2 | + | |
| 3 | +import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; | |
| 4 | +import cn.iocoder.yudao.framework.common.pojo.PageResult; | |
| 5 | +import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest; | |
| 6 | +import cn.iocoder.yudao.module.system.controller.admin.mail.vo.template.MailTemplateCreateReqVO; | |
| 7 | +import cn.iocoder.yudao.module.system.controller.admin.mail.vo.template.MailTemplatePageReqVO; | |
| 8 | +import cn.iocoder.yudao.module.system.controller.admin.mail.vo.template.MailTemplateUpdateReqVO; | |
| 9 | +import cn.iocoder.yudao.module.system.dal.dataobject.mail.MailAccountDO; | |
| 10 | +import cn.iocoder.yudao.module.system.dal.dataobject.mail.MailTemplateDO; | |
| 11 | +import cn.iocoder.yudao.module.system.dal.mysql.mail.MailTemplateMapper; | |
| 12 | +import cn.iocoder.yudao.module.system.mq.producer.mail.MailProducer; | |
| 13 | +import org.junit.jupiter.api.Test; | |
| 14 | +import org.springframework.boot.test.mock.mockito.MockBean; | |
| 15 | +import org.springframework.context.annotation.Import; | |
| 16 | + | |
| 17 | +import javax.annotation.Resource; | |
| 18 | + | |
| 19 | +import java.util.Map; | |
| 20 | + | |
| 21 | +import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.buildBetweenTime; | |
| 22 | +import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.buildTime; | |
| 23 | +import static cn.iocoder.yudao.framework.common.util.object.ObjectUtils.cloneIgnoreId; | |
| 24 | +import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; | |
| 25 | +import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; | |
| 26 | +import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomLongId; | |
| 27 | +import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; | |
| 28 | +import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.MAIL_TEMPLATE_NOT_EXISTS; | |
| 29 | +import static org.junit.jupiter.api.Assertions.*; | |
| 30 | + | |
| 31 | +/** | |
| 32 | +* {@link MailTemplateServiceImpl} 的单元测试类 | |
| 33 | +* | |
| 34 | +* @author 芋道源码 | |
| 35 | +*/ | |
| 36 | +@Import(MailTemplateServiceImpl.class) | |
| 37 | +public class MailTemplateServiceImplTest extends BaseDbUnitTest { | |
| 38 | + | |
| 39 | + @Resource | |
| 40 | + private MailTemplateServiceImpl mailTemplateService; | |
| 41 | + | |
| 42 | + @Resource | |
| 43 | + private MailTemplateMapper mailTemplateMapper; | |
| 44 | + | |
| 45 | + @MockBean | |
| 46 | + private MailProducer mailProducer; | |
| 47 | + | |
| 48 | + @Test | |
| 49 | + public void testInitLocalCache() { | |
| 50 | + MailTemplateDO templateDO01 = randomPojo(MailTemplateDO.class); | |
| 51 | + mailTemplateMapper.insert(templateDO01); | |
| 52 | + MailTemplateDO templateDO02 = randomPojo(MailTemplateDO.class); | |
| 53 | + mailTemplateMapper.insert(templateDO02); | |
| 54 | + | |
| 55 | + // 调用 | |
| 56 | + mailTemplateService.initLocalCache(); | |
| 57 | + // 断言 mailTemplateCache 缓存 | |
| 58 | + Map<String, MailTemplateDO> mailTemplateCache = mailTemplateService.getMailTemplateCache(); | |
| 59 | + assertPojoEquals(templateDO01, mailTemplateCache.get(templateDO01.getCode())); | |
| 60 | + assertPojoEquals(templateDO02, mailTemplateCache.get(templateDO02.getCode())); | |
| 61 | + } | |
| 62 | + | |
| 63 | + @Test | |
| 64 | + public void testCreateMailTemplate_success() { | |
| 65 | + // 准备参数 | |
| 66 | + MailTemplateCreateReqVO reqVO = randomPojo(MailTemplateCreateReqVO.class); | |
| 67 | + | |
| 68 | + // 调用 | |
| 69 | + Long mailTemplateId = mailTemplateService.createMailTemplate(reqVO); | |
| 70 | + // 断言 | |
| 71 | + assertNotNull(mailTemplateId); | |
| 72 | + // 校验记录的属性是否正确 | |
| 73 | + MailTemplateDO mailTemplate = mailTemplateMapper.selectById(mailTemplateId); | |
| 74 | + assertPojoEquals(reqVO, mailTemplate); | |
| 75 | + } | |
| 76 | + | |
| 77 | + @Test | |
| 78 | + public void testUpdateMailTemplate_success() { | |
| 79 | + // mock 数据 | |
| 80 | + MailTemplateDO dbMailTemplate = randomPojo(MailTemplateDO.class); | |
| 81 | + mailTemplateMapper.insert(dbMailTemplate);// @Sql: 先插入出一条存在的数据 | |
| 82 | + // 准备参数 | |
| 83 | + MailTemplateUpdateReqVO reqVO = randomPojo(MailTemplateUpdateReqVO.class, o -> { | |
| 84 | + o.setId(dbMailTemplate.getId()); // 设置更新的 ID | |
| 85 | + }); | |
| 86 | + | |
| 87 | + // 调用 | |
| 88 | + mailTemplateService.updateMailTemplate(reqVO); | |
| 89 | + // 校验是否更新正确 | |
| 90 | + MailTemplateDO mailTemplate = mailTemplateMapper.selectById(reqVO.getId()); // 获取最新的 | |
| 91 | + assertPojoEquals(reqVO, mailTemplate); | |
| 92 | + } | |
| 93 | + | |
| 94 | + @Test | |
| 95 | + public void testUpdateMailTemplate_notExists() { | |
| 96 | + // 准备参数 | |
| 97 | + MailTemplateUpdateReqVO reqVO = randomPojo(MailTemplateUpdateReqVO.class); | |
| 98 | + | |
| 99 | + // 调用, 并断言异常 | |
| 100 | + assertServiceException(() -> mailTemplateService.updateMailTemplate(reqVO), MAIL_TEMPLATE_NOT_EXISTS); | |
| 101 | + } | |
| 102 | + | |
| 103 | + @Test | |
| 104 | + public void testDeleteMailTemplate_success() { | |
| 105 | + // mock 数据 | |
| 106 | + MailTemplateDO dbMailTemplate = randomPojo(MailTemplateDO.class); | |
| 107 | + mailTemplateMapper.insert(dbMailTemplate);// @Sql: 先插入出一条存在的数据 | |
| 108 | + // 准备参数 | |
| 109 | + Long id = dbMailTemplate.getId(); | |
| 110 | + | |
| 111 | + // 调用 | |
| 112 | + mailTemplateService.deleteMailTemplate(id); | |
| 113 | + // 校验数据不存在了 | |
| 114 | + assertNull(mailTemplateMapper.selectById(id)); | |
| 115 | + } | |
| 116 | + | |
| 117 | + @Test | |
| 118 | + public void testDeleteMailTemplate_notExists() { | |
| 119 | + // 准备参数 | |
| 120 | + Long id = randomLongId(); | |
| 121 | + | |
| 122 | + // 调用, 并断言异常 | |
| 123 | + assertServiceException(() -> mailTemplateService.deleteMailTemplate(id), MAIL_TEMPLATE_NOT_EXISTS); | |
| 124 | + } | |
| 125 | + | |
| 126 | + @Test | |
| 127 | + public void testGetMailTemplatePage() { | |
| 128 | + // mock 数据 | |
| 129 | + MailTemplateDO dbMailTemplate = randomPojo(MailTemplateDO.class, o -> { // 等会查询到 | |
| 130 | + o.setName("源码"); | |
| 131 | + o.setCode("test_01"); | |
| 132 | + o.setAccountId(1L); | |
| 133 | + o.setStatus(CommonStatusEnum.ENABLE.getStatus()); | |
| 134 | + o.setCreateTime(buildTime(2023, 2, 3)); | |
| 135 | + }); | |
| 136 | + mailTemplateMapper.insert(dbMailTemplate); | |
| 137 | + // 测试 name 不匹配 | |
| 138 | + mailTemplateMapper.insert(cloneIgnoreId(dbMailTemplate, o -> o.setName("芋道"))); | |
| 139 | + // 测试 code 不匹配 | |
| 140 | + mailTemplateMapper.insert(cloneIgnoreId(dbMailTemplate, o -> o.setCode("test_02"))); | |
| 141 | + // 测试 accountId 不匹配 | |
| 142 | + mailTemplateMapper.insert(cloneIgnoreId(dbMailTemplate, o -> o.setAccountId(2L))); | |
| 143 | + // 测试 status 不匹配 | |
| 144 | + mailTemplateMapper.insert(cloneIgnoreId(dbMailTemplate, o -> o.setStatus(CommonStatusEnum.DISABLE.getStatus()))); | |
| 145 | + // 测试 createTime 不匹配 | |
| 146 | + mailTemplateMapper.insert(cloneIgnoreId(dbMailTemplate, o -> o.setCreateTime(buildTime(2023, 1, 5)))); | |
| 147 | + // 准备参数 | |
| 148 | + MailTemplatePageReqVO reqVO = new MailTemplatePageReqVO(); | |
| 149 | + reqVO.setName("源"); | |
| 150 | + reqVO.setCode("est_01"); | |
| 151 | + reqVO.setAccountId(1L); | |
| 152 | + reqVO.setStatus(CommonStatusEnum.ENABLE.getStatus()); | |
| 153 | + reqVO.setCreateTime(buildBetweenTime(2023, 2, 1, 2023, 2, 5)); | |
| 154 | + | |
| 155 | + // 调用 | |
| 156 | + PageResult<MailTemplateDO> pageResult = mailTemplateService.getMailTemplatePage(reqVO); | |
| 157 | + // 断言 | |
| 158 | + assertEquals(1, pageResult.getTotal()); | |
| 159 | + assertEquals(1, pageResult.getList().size()); | |
| 160 | + assertPojoEquals(dbMailTemplate, pageResult.getList().get(0)); | |
| 161 | + } | |
| 162 | + | |
| 163 | +} | ... | ... |
yudao-module-system/yudao-module-system-biz/src/test/resources/sql/clean.sql
yudao-module-system/yudao-module-system-biz/src/test/resources/sql/create_tables.sql
| ... | ... | @@ -568,17 +568,36 @@ CREATE TABLE IF NOT EXISTS "system_oauth2_code" ( |
| 568 | 568 | ) COMMENT 'OAuth2 刷新令牌'; |
| 569 | 569 | |
| 570 | 570 | CREATE TABLE IF NOT EXISTS "system_mail_account" ( |
| 571 | - "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, | |
| 572 | - "mail" varchar NOT NULL, | |
| 573 | - "username" varchar NOT NULL, | |
| 574 | - "password" varchar NOT NULL, | |
| 575 | - "host" varchar NOT NULL, | |
| 576 | - "port" int NOT NULL, | |
| 577 | - "ssl_enable" bit NOT NULL, | |
| 578 | - "creator" varchar DEFAULT '', | |
| 579 | - "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 580 | - "updater" varchar DEFAULT '', | |
| 581 | - "update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, | |
| 582 | - "deleted" bit NOT NULL DEFAULT FALSE, | |
| 583 | - PRIMARY KEY ("id") | |
| 571 | + "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, | |
| 572 | + "mail" varchar NOT NULL, | |
| 573 | + "username" varchar NOT NULL, | |
| 574 | + "password" varchar NOT NULL, | |
| 575 | + "host" varchar NOT NULL, | |
| 576 | + "port" int NOT NULL, | |
| 577 | + "ssl_enable" bit NOT NULL, | |
| 578 | + "creator" varchar DEFAULT '', | |
| 579 | + "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 580 | + "updater" varchar DEFAULT '', | |
| 581 | + "update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, | |
| 582 | + "deleted" bit NOT NULL DEFAULT FALSE, | |
| 583 | + PRIMARY KEY ("id") | |
| 584 | 584 | ) COMMENT '邮箱账号表'; |
| 585 | + | |
| 586 | +CREATE TABLE IF NOT EXISTS "system_mail_template" ( | |
| 587 | + "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY, | |
| 588 | + "name" varchar NOT NULL, | |
| 589 | + "code" varchar NOT NULL, | |
| 590 | + "account_id" bigint NOT NULL, | |
| 591 | + "nickname" varchar, | |
| 592 | + "title" varchar NOT NULL, | |
| 593 | + "content" varchar NOT NULL, | |
| 594 | + "params" varchar NOT NULL, | |
| 595 | + "status" varchar NOT NULL, | |
| 596 | + "remark" varchar, | |
| 597 | + "creator" varchar DEFAULT '', | |
| 598 | + "create_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, | |
| 599 | + "updater" varchar DEFAULT '', | |
| 600 | + "update_time" datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, | |
| 601 | + "deleted" bit NOT NULL DEFAULT FALSE, | |
| 602 | + PRIMARY KEY ("id") | |
| 603 | +) COMMENT '邮件模版表'; | ... | ... |
yudao-ui-admin/src/api/system/mail/template.js
yudao-ui-admin/src/api/system/sms/smsTemplate.js
yudao-ui-admin/src/views/system/mail/template/index.vue
| ... | ... | @@ -44,6 +44,7 @@ |
| 44 | 44 | <el-table-column label="模板编码" align="center" prop="code" /> |
| 45 | 45 | <el-table-column label="模板名称" align="center" prop="name" /> |
| 46 | 46 | <el-table-column label="模板标题" align="center" prop="title" /> |
| 47 | + <el-table-column label="模板内容" align="center" prop="content" :show-overflow-tooltip="true" /> | |
| 47 | 48 | <el-table-column label="邮箱账号" align="center" prop="accountId" width="200"> |
| 48 | 49 | <template v-slot="scope"> |
| 49 | 50 | {{ accountOptions.find(account => account.id === scope.row.accountId)?.mail }} |
| ... | ... | @@ -55,14 +56,15 @@ |
| 55 | 56 | <dict-tag :type="DICT_TYPE.COMMON_STATUS" :value="scope.row.status"/> |
| 56 | 57 | </template> |
| 57 | 58 | </el-table-column> |
| 58 | - <el-table-column label="备注" align="center" prop="remark" /> | |
| 59 | 59 | <el-table-column label="创建时间" align="center" prop="createTime" width="180"> |
| 60 | 60 | <template v-slot="scope"> |
| 61 | 61 | <span>{{ parseTime(scope.row.createTime) }}</span> |
| 62 | 62 | </template> |
| 63 | 63 | </el-table-column> |
| 64 | - <el-table-column label="操作" align="center" class-name="small-padding fixed-width"> | |
| 64 | + <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="150"> | |
| 65 | 65 | <template v-slot="scope"> |
| 66 | + <el-button size="mini" type="text" icon="el-icon-share" @click="handleSend(scope.row)" | |
| 67 | + v-hasPermi="['system:mail-template:send-mail']">测试</el-button> | |
| 66 | 68 | <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)" |
| 67 | 69 | v-hasPermi="['system:mail-template:update']">修改</el-button> |
| 68 | 70 | <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)" |
| ... | ... | @@ -112,11 +114,30 @@ |
| 112 | 114 | <el-button @click="cancel">取 消</el-button> |
| 113 | 115 | </div> |
| 114 | 116 | </el-dialog> |
| 117 | + | |
| 118 | + <!-- 对话框(发送邮件) --> | |
| 119 | + <el-dialog title="测试发送邮件" :visible.sync="sendOpen" width="500px" append-to-body> | |
| 120 | + <el-form ref="sendForm" :model="sendForm" :rules="sendRules" label-width="140px"> | |
| 121 | + <el-form-item label="模板内容" prop="content"> | |
| 122 | + <el-input v-model="sendForm.content" type="textarea" placeholder="请输入模板内容" readonly /> | |
| 123 | + </el-form-item> | |
| 124 | + <el-form-item label="收件邮箱" prop="mail"> | |
| 125 | + <el-input v-model="sendForm.mail" placeholder="请输入收件邮箱" /> | |
| 126 | + </el-form-item> | |
| 127 | + <el-form-item v-for="param in sendForm.params" :key="param" :label="'参数 {' + param + '}'" :prop="'templateParams.' + param"> | |
| 128 | + <el-input v-model="sendForm.templateParams[param]" :placeholder="'请输入 ' + param + ' 参数'" /> | |
| 129 | + </el-form-item> | |
| 130 | + </el-form> | |
| 131 | + <div slot="footer" class="dialog-footer"> | |
| 132 | + <el-button type="primary" @click="submitSendForm">确 定</el-button> | |
| 133 | + <el-button @click="cancelSend">取 消</el-button> | |
| 134 | + </div> | |
| 135 | + </el-dialog> | |
| 115 | 136 | </div> |
| 116 | 137 | </template> |
| 117 | 138 | |
| 118 | 139 | <script> |
| 119 | -import { createMailTemplate, updateMailTemplate, deleteMailTemplate, getMailTemplate, getMailTemplatePage } from "@/api/system/mail/template"; | |
| 140 | +import { createMailTemplate, updateMailTemplate, deleteMailTemplate, getMailTemplate, getMailTemplatePage, sendMail } from "@/api/system/mail/template"; | |
| 120 | 141 | import Editor from '@/components/Editor'; |
| 121 | 142 | import { CommonStatusEnum } from "@/utils/constants"; |
| 122 | 143 | import { getSimpleMailAccountList } from "@/api/system/mail/account"; |
| ... | ... | @@ -130,8 +151,6 @@ export default { |
| 130 | 151 | return { |
| 131 | 152 | // 遮罩层 |
| 132 | 153 | loading: true, |
| 133 | - // 导出遮罩层 | |
| 134 | - exportLoading: false, | |
| 135 | 154 | // 显示搜索条件 |
| 136 | 155 | showSearch: true, |
| 137 | 156 | // 总条数 |
| ... | ... | @@ -164,7 +183,18 @@ export default { |
| 164 | 183 | status: [{ required: true, message: "开启状态不能为空", trigger: "blur" }], |
| 165 | 184 | }, |
| 166 | 185 | // 邮箱账号 |
| 167 | - accountOptions: [] | |
| 186 | + accountOptions: [], | |
| 187 | + | |
| 188 | + // 发送邮箱 | |
| 189 | + sendOpen: false, | |
| 190 | + sendForm: { | |
| 191 | + params: [], // 模板的参数列表 | |
| 192 | + }, | |
| 193 | + sendRules: { | |
| 194 | + mail: [{ required: true, message: "收件邮箱不能为空", trigger: "blur" }], | |
| 195 | + templateCode: [{ required: true, message: "模版编码不能为空", trigger: "blur" }], | |
| 196 | + templateParams: { } | |
| 197 | + } | |
| 168 | 198 | }; |
| 169 | 199 | }, |
| 170 | 200 | created() { |
| ... | ... | @@ -263,7 +293,56 @@ export default { |
| 263 | 293 | this.getList(); |
| 264 | 294 | this.$modal.msgSuccess("删除成功"); |
| 265 | 295 | }).catch(() => {}); |
| 266 | - } | |
| 296 | + }, | |
| 297 | + /** 发送短息按钮 */ | |
| 298 | + handleSend(row) { | |
| 299 | + this.resetSend(row); | |
| 300 | + // 设置参数 | |
| 301 | + this.sendForm.content = row.content; | |
| 302 | + this.sendForm.params = row.params; | |
| 303 | + this.sendForm.templateCode = row.code; | |
| 304 | + this.sendForm.templateParams = row.params.reduce(function(obj, item) { | |
| 305 | + obj[item] = undefined; | |
| 306 | + return obj; | |
| 307 | + }, {}); | |
| 308 | + // 根据 row 重置 rules | |
| 309 | + this.sendRules.templateParams = row.params.reduce(function(obj, item) { | |
| 310 | + obj[item] = { required: true, message: '参数 ' + item + " 不能为空", trigger: "change" }; | |
| 311 | + return obj; | |
| 312 | + }, {}); | |
| 313 | + // 设置打开 | |
| 314 | + this.sendOpen = true; | |
| 315 | + }, | |
| 316 | + /** 重置发送邮箱的表单 */ | |
| 317 | + resetSend() { | |
| 318 | + // 根据 row 重置表单 | |
| 319 | + this.sendForm = { | |
| 320 | + content: undefined, | |
| 321 | + params: undefined, | |
| 322 | + mobile: undefined, | |
| 323 | + templateCode: undefined, | |
| 324 | + templateParams: {} | |
| 325 | + }; | |
| 326 | + this.resetForm("sendForm"); | |
| 327 | + }, | |
| 328 | + /** 取消发送邮箱 */ | |
| 329 | + cancelSend() { | |
| 330 | + this.sendOpen = false; | |
| 331 | + this.resetSend(); | |
| 332 | + }, | |
| 333 | + /** 提交按钮 */ | |
| 334 | + submitSendForm() { | |
| 335 | + this.$refs["sendForm"].validate(valid => { | |
| 336 | + if (!valid) { | |
| 337 | + return; | |
| 338 | + } | |
| 339 | + // 添加的提交 | |
| 340 | + sendMail(this.sendForm).then(response => { | |
| 341 | + this.$modal.msgSuccess("提交发送成功!发送结果,见发送日志编号:" + response.data); | |
| 342 | + this.sendOpen = false; | |
| 343 | + }); | |
| 344 | + }); | |
| 345 | + }, | |
| 267 | 346 | } |
| 268 | 347 | }; |
| 269 | 348 | </script> | ... | ... |
yudao-ui-admin/src/views/system/sms/smsTemplate.vue
| ... | ... | @@ -216,7 +216,7 @@ export default { |
| 216 | 216 | }, |
| 217 | 217 | sendSmsRules: { |
| 218 | 218 | mobile: [{ required: true, message: "手机不能为空", trigger: "blur" }], |
| 219 | - templateCode: [{ required: true, message: "手机不能为空", trigger: "blur" }], | |
| 219 | + templateCode: [{ required: true, message: "模版编码不能为空", trigger: "blur" }], | |
| 220 | 220 | templateParams: { } |
| 221 | 221 | } |
| 222 | 222 | }; | ... | ... |