From e52f0b7dacbffb4b2023d807af08f861cf1c1c21 Mon Sep 17 00:00:00 2001 From: YunaiV <zhijiantianya@gmail.com> Date: Wed, 7 Apr 2021 00:49:10 +0800 Subject: [PATCH] =?UTF-8?q?=E7=9F=AD=E4=BF=A1=E6=A8=A1=E6=9D=BF=E7=9A=84?= =?UTF-8?q?=20ui=20=E5=88=9D=E5=A7=8B=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-ui/src/api/system/sms/smsTemplate.js | 54 ++++ ruoyi-ui/src/utils/dict.js | 1 + ruoyi-ui/src/views/system/sms/smsTemplate.vue | 306 ++++++++++++++++++ .../sms/vo/template/SysSmsTemplateBaseVO.java | 4 +- 4 files changed, 363 insertions(+), 2 deletions(-) create mode 100644 ruoyi-ui/src/api/system/sms/smsTemplate.js create mode 100644 ruoyi-ui/src/views/system/sms/smsTemplate.vue diff --git a/ruoyi-ui/src/api/system/sms/smsTemplate.js b/ruoyi-ui/src/api/system/sms/smsTemplate.js new file mode 100644 index 000000000..b68998e1e --- /dev/null +++ b/ruoyi-ui/src/api/system/sms/smsTemplate.js @@ -0,0 +1,54 @@ +import request from '@/utils/request' + +// 创建短信模板 +export function createSmsTemplate(data) { + return request({ + url: '/system/sms-template/create', + method: 'post', + data: data + }) +} + +// 更新短信模板 +export function updateSmsTemplate(data) { + return request({ + url: '/system/sms-template/update', + method: 'put', + data: data + }) +} + +// 删除短信模板 +export function deleteSmsTemplate(id) { + return request({ + url: '/system/sms-template/delete?id=' + id, + method: 'delete' + }) +} + +// 获得短信模板 +export function getSmsTemplate(id) { + return request({ + url: '/system/sms-template/get?id=' + id, + method: 'get' + }) +} + +// 获得短信模板分页 +export function getSmsTemplatePage(query) { + return request({ + url: '/system/sms-template/page', + method: 'get', + params: query + }) +} + +// 导出短信模板 Excel +export function exportSmsTemplateExcel(query) { + return request({ + url: '/system/sms-template/export-excel', + method: 'get', + params: query, + responseType: 'blob' + }) +} diff --git a/ruoyi-ui/src/utils/dict.js b/ruoyi-ui/src/utils/dict.js index bf6d72587..1a61a989a 100644 --- a/ruoyi-ui/src/utils/dict.js +++ b/ruoyi-ui/src/utils/dict.js @@ -18,6 +18,7 @@ export const DICT_TYPE = { SYS_LOGIN_RESULT: 'sys_login_result', SYS_CONFIG_TYPE: 'sys_config_type', SYS_SMS_CHANNEL_CODE: 'sys_sms_channel_code', + SYS_SMS_TEMPLATE_TYPE: 'sys_sms_template_type', INF_REDIS_TIMEOUT_TYPE: 'inf_redis_timeout_type', INF_JOB_STATUS: 'inf_job_status', diff --git a/ruoyi-ui/src/views/system/sms/smsTemplate.vue b/ruoyi-ui/src/views/system/sms/smsTemplate.vue new file mode 100644 index 000000000..b8a3a7b17 --- /dev/null +++ b/ruoyi-ui/src/views/system/sms/smsTemplate.vue @@ -0,0 +1,306 @@ +<template> + <div class="app-container"> + + <!-- 搜索工作栏 --> + <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="150px"> + <el-form-item label="短信类型" prop="type"> + <el-select v-model="queryParams.type" placeholder="请选择短信签名" clearable size="small"> + <el-option v-for="dict in this.getDictDatas(DICT_TYPE.SYS_SMS_TEMPLATE_TYPE)" + :key="dict.value" :label="dict.label" :value="dict.value"/> + </el-select> + </el-form-item> + <el-form-item label="开启状态" prop="status"> + <el-select v-model="queryParams.status" placeholder="请选择开启状态" clearable size="small"> + <el-option v-for="dict in this.getDictDatas(DICT_TYPE.SYS_COMMON_STATUS)" + :key="dict.value" :label="dict.label" :value="dict.value"/> + </el-select> + </el-form-item> + <el-form-item label="模板编码" prop="code"> + <el-input v-model="queryParams.code" placeholder="请输入模板编码" clearable size="small" @keyup.enter.native="handleQuery"/> + </el-form-item> + <el-form-item label="短信 API 的模板编号" prop="apiTemplateId"> + <el-input v-model="queryParams.apiTemplateId" placeholder="请输入短信 API 的模板编号" clearable size="small" @keyup.enter.native="handleQuery"/> + </el-form-item> + <el-form-item label="短信渠道编号" prop="channelId"> + <el-select v-model="queryParams.channelId" placeholder="请选择短信渠道编号" clearable size="small"> + <el-option label="请选择字典生成" value="" /> + </el-select> + </el-form-item> + <el-form-item label="创建时间"> + <el-date-picker v-model="dateRangeCreateTime" size="small" style="width: 240px" value-format="yyyy-MM-dd" + type="daterange" range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" /> + </el-form-item> + <el-form-item> + <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button> + <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button> + </el-form-item> + </el-form> + + <!-- 操作工具栏 --> + <el-row :gutter="10" class="mb8"> + <el-col :span="1.5"> + <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd" + v-hasPermi="['system:sms-template:create']">新增</el-button> + </el-col> + <el-col :span="1.5"> + <el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" + v-hasPermi="['system:sms-template:export']">导出</el-button> + </el-col> + <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> + </el-row> + + <!-- 列表 --> + <el-table v-loading="loading" :data="list"> + <el-table-column label="模板编码" align="center" prop="code" /> + <el-table-column label="模板名称" align="center" prop="name" /> + <el-table-column label="模板内容" align="center" prop="content" width="300" /> + <el-table-column label="短信类型" align="center" prop="type"> + <template slot-scope="scope"> + <span>{{ getDictDataLabel(DICT_TYPE.SYS_SMS_TEMPLATE_TYPE, scope.row.type) }}</span> + </template> + </el-table-column>> + <el-table-column label="开启状态" align="center" prop="status"> + <template slot-scope="scope"> + <span>{{ getDictDataLabel(DICT_TYPE.SYS_COMMON_STATUS, scope.row.status) }}</span> + </template> + </el-table-column>> + <el-table-column label="备注" align="center" prop="remark" /> + <el-table-column label="短信 API 的模板编号" align="center" prop="apiTemplateId" width="180" /> + <el-table-column label="短信签名" align="center"> + <template slot-scope="scope"> + <span>{{ getDictDataLabel(DICT_TYPE.SYS_SMS_CHANNEL_CODE, scope.row.channelCode) }}</span> + </template> + </el-table-column> + <el-table-column label="创建时间" align="center" prop="createTime" width="180"> + <template slot-scope="scope"> + <span>{{ parseTime(scope.row.createTime) }}</span> + </template> + </el-table-column> + <el-table-column label="操作" align="center" class-name="small-padding fixed-width"> + <template slot-scope="scope"> + <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)" + v-hasPermi="['system:sms-template:update']">修改</el-button> + <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)" + v-hasPermi="['system:sms-template:delete']">删除</el-button> + </template> + </el-table-column> + </el-table> + <!-- 分页组件 --> + <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize" + @pagination="getList"/> + + <!-- 对话框(添加 / 修改) --> + <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body> + <el-form ref="form" :model="form" :rules="rules" label-width="80px"> + <el-form-item label="短信签名" prop="type"> + <el-select v-model="form.type" placeholder="请选择短信签名"> + <el-option v-for="dict in this.getDictDatas(DICT_TYPE.SYS_SMS_TEMPLATE_TYPE)" + :key="dict.value" :label="dict.label" :value="parseInt(dict.value)" /> + </el-select> + </el-form-item> + <el-form-item label="开启状态"> + <el-radio-group v-model="form.status"> + <el-radio v-for="dict in this.getDictDatas(DICT_TYPE.SYS_COMMON_STATUS)" + :key="dict.value" :label="parseInt(dict.value)">{{dict.label}}</el-radio> + </el-radio-group> + </el-form-item> + <el-form-item label="模板编码" prop="code"> + <el-input v-model="form.code" placeholder="请输入模板编码" /> + </el-form-item> + <el-form-item label="模板名称" prop="name"> + <el-input v-model="form.name" placeholder="请输入模板名称" /> + </el-form-item> + <el-form-item label="模板内容"> + <el-input type="textarea" v-model="form.content" placeholder="请输入模板内容" /> + </el-form-item> + <el-form-item label="备注" prop="remark"> + <el-input v-model="form.remark" placeholder="请输入备注" /> + </el-form-item> + <el-form-item label="短信 API 的模板编号" prop="apiTemplateId"> + <el-input v-model="form.apiTemplateId" placeholder="请输入短信 API 的模板编号" /> + </el-form-item> + <el-form-item label="短信渠道编号" prop="channelId"> + <el-select v-model="form.channelId" placeholder="请选择短信渠道编号"> + <el-option label="请选择字典生成" value="" /> + </el-select> + </el-form-item> + </el-form> + <div slot="footer" class="dialog-footer"> + <el-button type="primary" @click="submitForm">确 定</el-button> + <el-button @click="cancel">取 消</el-button> + </div> + </el-dialog> + </div> +</template> + +<script> +import { createSmsTemplate, updateSmsTemplate, deleteSmsTemplate, getSmsTemplate, getSmsTemplatePage, exportSmsTemplateExcel } from "@/api/system/sms/smsTemplate"; +import Editor from '@/components/Editor'; + +export default { + name: "SmsTemplate", + components: { + Editor, + }, + data() { + return { + // 遮罩层 + loading: true, + // 显示搜索条件 + showSearch: true, + // 总条数 + total: 0, + // 短信模板列表 + list: [], + // 弹出层标题 + title: "", + // 是否显示弹出层 + open: false, + dateRangeCreateTime: [], + // 查询参数 + queryParams: { + pageNo: 1, + pageSize: 10, + type: null, + status: null, + code: null, + content: null, + apiTemplateId: null, + channelId: null, + }, + // 表单参数 + form: {}, + // 表单校验 + rules: { + type: [{ required: true, message: "短信签名不能为空", trigger: "change" }], + status: [{ required: true, message: "开启状态不能为空", trigger: "blur" }], + code: [{ required: true, message: "模板编码不能为空", trigger: "blur" }], + name: [{ required: true, message: "模板名称不能为空", trigger: "blur" }], + content: [{ required: true, message: "模板内容不能为空", trigger: "blur" }], + apiTemplateId: [{ required: true, message: "短信 API 的模板编号不能为空", trigger: "blur" }], + channelId: [{ required: true, message: "短信渠道编号不能为空", trigger: "change" }], + } + }; + }, + created() { + this.getList(); + }, + methods: { + /** 查询列表 */ + getList() { + this.loading = true; + // 处理查询参数 + let params = {...this.queryParams}; + this.addBeginAndEndTime(params, this.dateRangeCreateTime, 'createTime'); + // 执行查询 + getSmsTemplatePage(params).then(response => { + this.list = response.data.list; + this.total = response.data.total; + this.loading = false; + }); + }, + /** 取消按钮 */ + cancel() { + this.open = false; + this.reset(); + }, + /** 表单重置 */ + reset() { + this.form = { + id: undefined, + type: undefined, + status: undefined, + code: undefined, + name: undefined, + content: undefined, + remark: undefined, + apiTemplateId: undefined, + channelId: undefined, + }; + this.resetForm("form"); + }, + /** 搜索按钮操作 */ + handleQuery() { + this.queryParams.pageNo = 1; + this.getList(); + }, + /** 重置按钮操作 */ + resetQuery() { + this.dateRangeCreateTime = []; + this.resetForm("queryForm"); + this.handleQuery(); + }, + /** 新增按钮操作 */ + handleAdd() { + this.reset(); + this.open = true; + this.title = "添加短信模板"; + }, + /** 修改按钮操作 */ + handleUpdate(row) { + this.reset(); + const id = row.id; + getSmsTemplate(id).then(response => { + this.form = response.data; + this.open = true; + this.title = "修改短信模板"; + }); + }, + /** 提交按钮 */ + submitForm() { + this.$refs["form"].validate(valid => { + if (!valid) { + return; + } + // 修改的提交 + if (this.form.id != null) { + updateSmsTemplate(this.form).then(response => { + this.msgSuccess("修改成功"); + this.open = false; + this.getList(); + }); + return; + } + // 添加的提交 + createSmsTemplate(this.form).then(response => { + this.msgSuccess("新增成功"); + this.open = false; + this.getList(); + }); + }); + }, + /** 删除按钮操作 */ + handleDelete(row) { + const id = row.id; + this.$confirm('是否确认删除短信模板编号为"' + id + '"的数据项?', "警告", { + confirmButtonText: "确定", + cancelButtonText: "取消", + type: "warning" + }).then(function() { + return deleteSmsTemplate(id); + }).then(() => { + this.getList(); + this.msgSuccess("删除成功"); + }) + }, + /** 导出按钮操作 */ + handleExport() { + // 处理查询参数 + let params = {...this.queryParams}; + params.pageNo = undefined; + params.pageSize = undefined; + this.addBeginAndEndTime(params, this.dateRangeCreateTime, 'createTime'); + // 执行导出 + this.$confirm('是否确认导出所有短信模板数据项?', "警告", { + confirmButtonText: "确定", + cancelButtonText: "取消", + type: "warning" + }).then(function() { + return exportSmsTemplateExcel(params); + }).then(response => { + this.downloadExcel(response, '短信模板.xls'); + }) + } + } +}; +</script> diff --git a/src/main/java/cn/iocoder/dashboard/modules/system/controller/sms/vo/template/SysSmsTemplateBaseVO.java b/src/main/java/cn/iocoder/dashboard/modules/system/controller/sms/vo/template/SysSmsTemplateBaseVO.java index f2ef6ac16..584050d55 100644 --- a/src/main/java/cn/iocoder/dashboard/modules/system/controller/sms/vo/template/SysSmsTemplateBaseVO.java +++ b/src/main/java/cn/iocoder/dashboard/modules/system/controller/sms/vo/template/SysSmsTemplateBaseVO.java @@ -12,8 +12,8 @@ import javax.validation.constraints.NotNull; @Data public class SysSmsTemplateBaseVO { - @ApiModelProperty(value = "短信签名", required = true, example = "1", notes = "参见 SysSmsTemplateTypeEnum 枚举类") - @NotNull(message = "短信签名不能为空") + @ApiModelProperty(value = "短信类型", required = true, example = "1", notes = "参见 SysSmsTemplateTypeEnum 枚举类") + @NotNull(message = "短信类型不能为空") private Integer type; @ApiModelProperty(value = "开启状态", required = true, example = "1", notes = "参见 CommonStatusEnum 枚举类")