Commit e52f0b7dacbffb4b2023d807af08f861cf1c1c21

Authored by YunaiV
1 parent 4a407710

短信模板的 ui 初始化

ruoyi-ui/src/api/system/sms/smsTemplate.js 0 → 100644
  1 +import request from '@/utils/request'
  2 +
  3 +// 创建短信模板
  4 +export function createSmsTemplate(data) {
  5 + return request({
  6 + url: '/system/sms-template/create',
  7 + method: 'post',
  8 + data: data
  9 + })
  10 +}
  11 +
  12 +// 更新短信模板
  13 +export function updateSmsTemplate(data) {
  14 + return request({
  15 + url: '/system/sms-template/update',
  16 + method: 'put',
  17 + data: data
  18 + })
  19 +}
  20 +
  21 +// 删除短信模板
  22 +export function deleteSmsTemplate(id) {
  23 + return request({
  24 + url: '/system/sms-template/delete?id=' + id,
  25 + method: 'delete'
  26 + })
  27 +}
  28 +
  29 +// 获得短信模板
  30 +export function getSmsTemplate(id) {
  31 + return request({
  32 + url: '/system/sms-template/get?id=' + id,
  33 + method: 'get'
  34 + })
  35 +}
  36 +
  37 +// 获得短信模板分页
  38 +export function getSmsTemplatePage(query) {
  39 + return request({
  40 + url: '/system/sms-template/page',
  41 + method: 'get',
  42 + params: query
  43 + })
  44 +}
  45 +
  46 +// 导出短信模板 Excel
  47 +export function exportSmsTemplateExcel(query) {
  48 + return request({
  49 + url: '/system/sms-template/export-excel',
  50 + method: 'get',
  51 + params: query,
  52 + responseType: 'blob'
  53 + })
  54 +}
ruoyi-ui/src/utils/dict.js
@@ -18,6 +18,7 @@ export const DICT_TYPE = { @@ -18,6 +18,7 @@ export const DICT_TYPE = {
18 SYS_LOGIN_RESULT: 'sys_login_result', 18 SYS_LOGIN_RESULT: 'sys_login_result',
19 SYS_CONFIG_TYPE: 'sys_config_type', 19 SYS_CONFIG_TYPE: 'sys_config_type',
20 SYS_SMS_CHANNEL_CODE: 'sys_sms_channel_code', 20 SYS_SMS_CHANNEL_CODE: 'sys_sms_channel_code',
  21 + SYS_SMS_TEMPLATE_TYPE: 'sys_sms_template_type',
21 22
22 INF_REDIS_TIMEOUT_TYPE: 'inf_redis_timeout_type', 23 INF_REDIS_TIMEOUT_TYPE: 'inf_redis_timeout_type',
23 INF_JOB_STATUS: 'inf_job_status', 24 INF_JOB_STATUS: 'inf_job_status',
ruoyi-ui/src/views/system/sms/smsTemplate.vue 0 → 100644
  1 +<template>
  2 + <div class="app-container">
  3 +
  4 + <!-- 搜索工作栏 -->
  5 + <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="150px">
  6 + <el-form-item label="短信类型" prop="type">
  7 + <el-select v-model="queryParams.type" placeholder="请选择短信签名" clearable size="small">
  8 + <el-option v-for="dict in this.getDictDatas(DICT_TYPE.SYS_SMS_TEMPLATE_TYPE)"
  9 + :key="dict.value" :label="dict.label" :value="dict.value"/>
  10 + </el-select>
  11 + </el-form-item>
  12 + <el-form-item label="开启状态" prop="status">
  13 + <el-select v-model="queryParams.status" placeholder="请选择开启状态" clearable size="small">
  14 + <el-option v-for="dict in this.getDictDatas(DICT_TYPE.SYS_COMMON_STATUS)"
  15 + :key="dict.value" :label="dict.label" :value="dict.value"/>
  16 + </el-select>
  17 + </el-form-item>
  18 + <el-form-item label="模板编码" prop="code">
  19 + <el-input v-model="queryParams.code" placeholder="请输入模板编码" clearable size="small" @keyup.enter.native="handleQuery"/>
  20 + </el-form-item>
  21 + <el-form-item label="短信 API 的模板编号" prop="apiTemplateId">
  22 + <el-input v-model="queryParams.apiTemplateId" placeholder="请输入短信 API 的模板编号" clearable size="small" @keyup.enter.native="handleQuery"/>
  23 + </el-form-item>
  24 + <el-form-item label="短信渠道编号" prop="channelId">
  25 + <el-select v-model="queryParams.channelId" placeholder="请选择短信渠道编号" clearable size="small">
  26 + <el-option label="请选择字典生成" value="" />
  27 + </el-select>
  28 + </el-form-item>
  29 + <el-form-item label="创建时间">
  30 + <el-date-picker v-model="dateRangeCreateTime" size="small" style="width: 240px" value-format="yyyy-MM-dd"
  31 + type="daterange" range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" />
  32 + </el-form-item>
  33 + <el-form-item>
  34 + <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
  35 + <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
  36 + </el-form-item>
  37 + </el-form>
  38 +
  39 + <!-- 操作工具栏 -->
  40 + <el-row :gutter="10" class="mb8">
  41 + <el-col :span="1.5">
  42 + <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
  43 + v-hasPermi="['system:sms-template:create']">新增</el-button>
  44 + </el-col>
  45 + <el-col :span="1.5">
  46 + <el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport"
  47 + v-hasPermi="['system:sms-template:export']">导出</el-button>
  48 + </el-col>
  49 + <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
  50 + </el-row>
  51 +
  52 + <!-- 列表 -->
  53 + <el-table v-loading="loading" :data="list">
  54 + <el-table-column label="模板编码" align="center" prop="code" />
  55 + <el-table-column label="模板名称" align="center" prop="name" />
  56 + <el-table-column label="模板内容" align="center" prop="content" width="300" />
  57 + <el-table-column label="短信类型" align="center" prop="type">
  58 + <template slot-scope="scope">
  59 + <span>{{ getDictDataLabel(DICT_TYPE.SYS_SMS_TEMPLATE_TYPE, scope.row.type) }}</span>
  60 + </template>
  61 + </el-table-column>>
  62 + <el-table-column label="开启状态" align="center" prop="status">
  63 + <template slot-scope="scope">
  64 + <span>{{ getDictDataLabel(DICT_TYPE.SYS_COMMON_STATUS, scope.row.status) }}</span>
  65 + </template>
  66 + </el-table-column>>
  67 + <el-table-column label="备注" align="center" prop="remark" />
  68 + <el-table-column label="短信 API 的模板编号" align="center" prop="apiTemplateId" width="180" />
  69 + <el-table-column label="短信签名" align="center">
  70 + <template slot-scope="scope">
  71 + <span>{{ getDictDataLabel(DICT_TYPE.SYS_SMS_CHANNEL_CODE, scope.row.channelCode) }}</span>
  72 + </template>
  73 + </el-table-column>
  74 + <el-table-column label="创建时间" align="center" prop="createTime" width="180">
  75 + <template slot-scope="scope">
  76 + <span>{{ parseTime(scope.row.createTime) }}</span>
  77 + </template>
  78 + </el-table-column>
  79 + <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
  80 + <template slot-scope="scope">
  81 + <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
  82 + v-hasPermi="['system:sms-template:update']">修改</el-button>
  83 + <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
  84 + v-hasPermi="['system:sms-template:delete']">删除</el-button>
  85 + </template>
  86 + </el-table-column>
  87 + </el-table>
  88 + <!-- 分页组件 -->
  89 + <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"
  90 + @pagination="getList"/>
  91 +
  92 + <!-- 对话框(添加 / 修改) -->
  93 + <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
  94 + <el-form ref="form" :model="form" :rules="rules" label-width="80px">
  95 + <el-form-item label="短信签名" prop="type">
  96 + <el-select v-model="form.type" placeholder="请选择短信签名">
  97 + <el-option v-for="dict in this.getDictDatas(DICT_TYPE.SYS_SMS_TEMPLATE_TYPE)"
  98 + :key="dict.value" :label="dict.label" :value="parseInt(dict.value)" />
  99 + </el-select>
  100 + </el-form-item>
  101 + <el-form-item label="开启状态">
  102 + <el-radio-group v-model="form.status">
  103 + <el-radio v-for="dict in this.getDictDatas(DICT_TYPE.SYS_COMMON_STATUS)"
  104 + :key="dict.value" :label="parseInt(dict.value)">{{dict.label}}</el-radio>
  105 + </el-radio-group>
  106 + </el-form-item>
  107 + <el-form-item label="模板编码" prop="code">
  108 + <el-input v-model="form.code" placeholder="请输入模板编码" />
  109 + </el-form-item>
  110 + <el-form-item label="模板名称" prop="name">
  111 + <el-input v-model="form.name" placeholder="请输入模板名称" />
  112 + </el-form-item>
  113 + <el-form-item label="模板内容">
  114 + <el-input type="textarea" v-model="form.content" placeholder="请输入模板内容" />
  115 + </el-form-item>
  116 + <el-form-item label="备注" prop="remark">
  117 + <el-input v-model="form.remark" placeholder="请输入备注" />
  118 + </el-form-item>
  119 + <el-form-item label="短信 API 的模板编号" prop="apiTemplateId">
  120 + <el-input v-model="form.apiTemplateId" placeholder="请输入短信 API 的模板编号" />
  121 + </el-form-item>
  122 + <el-form-item label="短信渠道编号" prop="channelId">
  123 + <el-select v-model="form.channelId" placeholder="请选择短信渠道编号">
  124 + <el-option label="请选择字典生成" value="" />
  125 + </el-select>
  126 + </el-form-item>
  127 + </el-form>
  128 + <div slot="footer" class="dialog-footer">
  129 + <el-button type="primary" @click="submitForm">确 定</el-button>
  130 + <el-button @click="cancel">取 消</el-button>
  131 + </div>
  132 + </el-dialog>
  133 + </div>
  134 +</template>
  135 +
  136 +<script>
  137 +import { createSmsTemplate, updateSmsTemplate, deleteSmsTemplate, getSmsTemplate, getSmsTemplatePage, exportSmsTemplateExcel } from "@/api/system/sms/smsTemplate";
  138 +import Editor from '@/components/Editor';
  139 +
  140 +export default {
  141 + name: "SmsTemplate",
  142 + components: {
  143 + Editor,
  144 + },
  145 + data() {
  146 + return {
  147 + // 遮罩层
  148 + loading: true,
  149 + // 显示搜索条件
  150 + showSearch: true,
  151 + // 总条数
  152 + total: 0,
  153 + // 短信模板列表
  154 + list: [],
  155 + // 弹出层标题
  156 + title: "",
  157 + // 是否显示弹出层
  158 + open: false,
  159 + dateRangeCreateTime: [],
  160 + // 查询参数
  161 + queryParams: {
  162 + pageNo: 1,
  163 + pageSize: 10,
  164 + type: null,
  165 + status: null,
  166 + code: null,
  167 + content: null,
  168 + apiTemplateId: null,
  169 + channelId: null,
  170 + },
  171 + // 表单参数
  172 + form: {},
  173 + // 表单校验
  174 + rules: {
  175 + type: [{ required: true, message: "短信签名不能为空", trigger: "change" }],
  176 + status: [{ required: true, message: "开启状态不能为空", trigger: "blur" }],
  177 + code: [{ required: true, message: "模板编码不能为空", trigger: "blur" }],
  178 + name: [{ required: true, message: "模板名称不能为空", trigger: "blur" }],
  179 + content: [{ required: true, message: "模板内容不能为空", trigger: "blur" }],
  180 + apiTemplateId: [{ required: true, message: "短信 API 的模板编号不能为空", trigger: "blur" }],
  181 + channelId: [{ required: true, message: "短信渠道编号不能为空", trigger: "change" }],
  182 + }
  183 + };
  184 + },
  185 + created() {
  186 + this.getList();
  187 + },
  188 + methods: {
  189 + /** 查询列表 */
  190 + getList() {
  191 + this.loading = true;
  192 + // 处理查询参数
  193 + let params = {...this.queryParams};
  194 + this.addBeginAndEndTime(params, this.dateRangeCreateTime, 'createTime');
  195 + // 执行查询
  196 + getSmsTemplatePage(params).then(response => {
  197 + this.list = response.data.list;
  198 + this.total = response.data.total;
  199 + this.loading = false;
  200 + });
  201 + },
  202 + /** 取消按钮 */
  203 + cancel() {
  204 + this.open = false;
  205 + this.reset();
  206 + },
  207 + /** 表单重置 */
  208 + reset() {
  209 + this.form = {
  210 + id: undefined,
  211 + type: undefined,
  212 + status: undefined,
  213 + code: undefined,
  214 + name: undefined,
  215 + content: undefined,
  216 + remark: undefined,
  217 + apiTemplateId: undefined,
  218 + channelId: undefined,
  219 + };
  220 + this.resetForm("form");
  221 + },
  222 + /** 搜索按钮操作 */
  223 + handleQuery() {
  224 + this.queryParams.pageNo = 1;
  225 + this.getList();
  226 + },
  227 + /** 重置按钮操作 */
  228 + resetQuery() {
  229 + this.dateRangeCreateTime = [];
  230 + this.resetForm("queryForm");
  231 + this.handleQuery();
  232 + },
  233 + /** 新增按钮操作 */
  234 + handleAdd() {
  235 + this.reset();
  236 + this.open = true;
  237 + this.title = "添加短信模板";
  238 + },
  239 + /** 修改按钮操作 */
  240 + handleUpdate(row) {
  241 + this.reset();
  242 + const id = row.id;
  243 + getSmsTemplate(id).then(response => {
  244 + this.form = response.data;
  245 + this.open = true;
  246 + this.title = "修改短信模板";
  247 + });
  248 + },
  249 + /** 提交按钮 */
  250 + submitForm() {
  251 + this.$refs["form"].validate(valid => {
  252 + if (!valid) {
  253 + return;
  254 + }
  255 + // 修改的提交
  256 + if (this.form.id != null) {
  257 + updateSmsTemplate(this.form).then(response => {
  258 + this.msgSuccess("修改成功");
  259 + this.open = false;
  260 + this.getList();
  261 + });
  262 + return;
  263 + }
  264 + // 添加的提交
  265 + createSmsTemplate(this.form).then(response => {
  266 + this.msgSuccess("新增成功");
  267 + this.open = false;
  268 + this.getList();
  269 + });
  270 + });
  271 + },
  272 + /** 删除按钮操作 */
  273 + handleDelete(row) {
  274 + const id = row.id;
  275 + this.$confirm('是否确认删除短信模板编号为"' + id + '"的数据项?', "警告", {
  276 + confirmButtonText: "确定",
  277 + cancelButtonText: "取消",
  278 + type: "warning"
  279 + }).then(function() {
  280 + return deleteSmsTemplate(id);
  281 + }).then(() => {
  282 + this.getList();
  283 + this.msgSuccess("删除成功");
  284 + })
  285 + },
  286 + /** 导出按钮操作 */
  287 + handleExport() {
  288 + // 处理查询参数
  289 + let params = {...this.queryParams};
  290 + params.pageNo = undefined;
  291 + params.pageSize = undefined;
  292 + this.addBeginAndEndTime(params, this.dateRangeCreateTime, 'createTime');
  293 + // 执行导出
  294 + this.$confirm('是否确认导出所有短信模板数据项?', "警告", {
  295 + confirmButtonText: "确定",
  296 + cancelButtonText: "取消",
  297 + type: "warning"
  298 + }).then(function() {
  299 + return exportSmsTemplateExcel(params);
  300 + }).then(response => {
  301 + this.downloadExcel(response, '短信模板.xls');
  302 + })
  303 + }
  304 + }
  305 +};
  306 +</script>
src/main/java/cn/iocoder/dashboard/modules/system/controller/sms/vo/template/SysSmsTemplateBaseVO.java
@@ -12,8 +12,8 @@ import javax.validation.constraints.NotNull; @@ -12,8 +12,8 @@ import javax.validation.constraints.NotNull;
12 @Data 12 @Data
13 public class SysSmsTemplateBaseVO { 13 public class SysSmsTemplateBaseVO {
14 14
15 - @ApiModelProperty(value = "短信签名", required = true, example = "1", notes = "参见 SysSmsTemplateTypeEnum 枚举类")  
16 - @NotNull(message = "短信签名不能为空") 15 + @ApiModelProperty(value = "短信类型", required = true, example = "1", notes = "参见 SysSmsTemplateTypeEnum 枚举类")
  16 + @NotNull(message = "短信类型不能为空")
17 private Integer type; 17 private Integer type;
18 18
19 @ApiModelProperty(value = "开启状态", required = true, example = "1", notes = "参见 CommonStatusEnum 枚举类") 19 @ApiModelProperty(value = "开启状态", required = true, example = "1", notes = "参见 CommonStatusEnum 枚举类")