mp:增加【自动回复】的分页接口

This commit is contained in:
YunaiV 2023-01-16 22:16:23 +08:00
parent 26ca97d2f6
commit ab41c96641
23 changed files with 296 additions and 24 deletions

View File

@ -63,9 +63,9 @@ public class MpMenuBaseVO {
// ========== 消息内容 ==========
@ApiModelProperty(value = "消息类型", example = "text",
@ApiModelProperty(value = "回复的消息类型", example = "text",
notes = "枚举 TEXT、IMAGE、VOICE、VIDEO、NEWS、MUSIC")
@NotEmpty(message = "消息类型不能为空", groups = {ClickButtonGroup.class, ScanCodeWaitMsgButtonGroup.class})
@NotEmpty(message = "回复的消息类型不能为空", groups = {ClickButtonGroup.class, ScanCodeWaitMsgButtonGroup.class})
private String replyMessageType;
@ApiModelProperty(value = "回复的消息内容", example = "欢迎关注")
@ -104,7 +104,7 @@ public class MpMenuBaseVO {
@Valid
private List<MpMessageDO.Article> replyArticles;
@ApiModelProperty(value = "音乐链接", example = "https://www.iocoder.cn/xxx.mp3")
@ApiModelProperty(value = "回复的音乐链接", example = "https://www.iocoder.cn/xxx.mp3")
@NotEmpty(message = "回复的音乐链接不能为空", groups = MusicMessageGroup.class)
@URL(message = "回复的高质量音乐链接格式不正确", groups = MusicMessageGroup.class)
private String replyMusicUrl;

View File

@ -0,0 +1,5 @@
### 请求 /mp/message/page 接口 => 成功
GET {{baseUrl}}/mp/auto-reply/page?accountId=1&pageNo=1&pageSize=10
Content-Type: application/json
Authorization: Bearer {{token}}
tenant-id: {{adminTenentId}}

View File

@ -0,0 +1,40 @@
package cn.iocoder.yudao.module.mp.controller.admin.message;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.mp.controller.admin.message.vo.autoreply.MpAutoReplyRespVO;
import cn.iocoder.yudao.module.mp.controller.admin.message.vo.message.MpMessagePageReqVO;
import cn.iocoder.yudao.module.mp.convert.message.MpAutoReplyConvert;
import cn.iocoder.yudao.module.mp.dal.dataobject.message.MpAutoReplyDO;
import cn.iocoder.yudao.module.mp.service.message.MpAutoReplyService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import javax.validation.Valid;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
@Api(tags = "管理后台 - 公众号自动回复")
@RestController
@RequestMapping("/mp/auto-reply")
@Validated
public class MpAutoReplyController {
@Resource
private MpAutoReplyService mpAutoReplyService;
@GetMapping("/page")
@ApiOperation("获得公众号自动回复分页")
@PreAuthorize("@ss.hasPermission('mp:auto-reply:query')")
public CommonResult<PageResult<MpAutoReplyRespVO>> getAutoReplyPage(@Valid MpMessagePageReqVO pageVO) {
PageResult<MpAutoReplyDO> pageResult = mpAutoReplyService.getAutoReplyPage(pageVO);
return success(MpAutoReplyConvert.INSTANCE.convertPage(pageResult));
}
}

View File

@ -2,9 +2,9 @@ package cn.iocoder.yudao.module.mp.controller.admin.message;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.mp.controller.admin.message.vo.MpMessagePageReqVO;
import cn.iocoder.yudao.module.mp.controller.admin.message.vo.MpMessageRespVO;
import cn.iocoder.yudao.module.mp.controller.admin.message.vo.MpMessageSendReqVO;
import cn.iocoder.yudao.module.mp.controller.admin.message.vo.message.MpMessagePageReqVO;
import cn.iocoder.yudao.module.mp.controller.admin.message.vo.message.MpMessageRespVO;
import cn.iocoder.yudao.module.mp.controller.admin.message.vo.message.MpMessageSendReqVO;
import cn.iocoder.yudao.module.mp.convert.message.MpMessageConvert;
import cn.iocoder.yudao.module.mp.dal.dataobject.message.MpMessageDO;
import cn.iocoder.yudao.module.mp.service.message.MpMessageService;
@ -19,7 +19,7 @@ import javax.validation.Valid;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
@Api(tags = "管理后台 - 粉丝消息")
@Api(tags = "管理后台 - 公众号消息")
@RestController
@RequestMapping("/mp/message")
@Validated

View File

@ -0,0 +1,110 @@
package cn.iocoder.yudao.module.mp.controller.admin.message.vo.autoreply;
import cn.hutool.core.util.ObjectUtil;
import cn.iocoder.yudao.module.mp.dal.dataobject.message.MpMessageDO;
import cn.iocoder.yudao.module.mp.enums.message.MpAutoReplyTypeEnum;
import cn.iocoder.yudao.module.mp.framework.mp.core.util.MpUtils.*;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import me.chanjar.weixin.common.api.WxConsts;
import org.hibernate.validator.constraints.URL;
import javax.validation.Valid;
import javax.validation.constraints.AssertTrue;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.util.List;
/**
* 公众号自动回复 Base VO提供给添加修改详细的子 VO 使用
* 如果子 VO 存在差异的字段请不要添加到这里影响 Swagger 文档生成
*/
@Data
public class MpAutoReplyBaseVO {
@ApiModelProperty(value = "回复类型", example = "1", notes = "参见 MpAutoReplyTypeEnum 枚举")
@NotNull(message = "回复类型不能为空")
private Integer type;
// ==================== 请求消息 ====================
@ApiModelProperty(value = "请求的关键字", example = "关键字", notes = "当 type 为 MpAutoReplyTypeEnum#KEYWORD 时,必填")
private String requestKeyword;
@ApiModelProperty(value = "请求的关键字", example = "关键字", notes = "当 type 为 MpAutoReplyTypeEnum#KEYWORD 时,必填")
private Integer requestMatch;
@ApiModelProperty(value = "请求的消息类型", example = "text", notes = "当 type 为 MpAutoReplyTypeEnum#MESSAGE 时,必填")
private String requestMessageType;
// ==================== 响应消息 ====================
@ApiModelProperty(value = "回复的消息类型", example = "text",
notes = "枚举 TEXT、IMAGE、VOICE、VIDEO、NEWS、MUSIC")
@NotEmpty(message = "回复的消息类型不能为空")
private String responseMessageType;
@ApiModelProperty(value = "回复的消息内容", example = "欢迎关注")
@NotEmpty(message = "回复的消息内容不能为空", groups = TextMessageGroup.class)
private String responseContent;
@ApiModelProperty(value = "回复的媒体 id", example = "123456")
@NotEmpty(message = "回复的消息 mediaId 不能为空",
groups = {ImageMessageGroup.class, VoiceMessageGroup.class, VideoMessageGroup.class})
private String responseMediaId;
@ApiModelProperty(value = "回复的媒体 URL", example = "https://www.iocoder.cn/xxx.jpg")
@NotEmpty(message = "回复的消息 mediaId 不能为空",
groups = {ImageMessageGroup.class, VoiceMessageGroup.class, VideoMessageGroup.class})
private String responseMediaUrl;
@ApiModelProperty(value = "缩略图的媒体 id", example = "123456")
@NotEmpty(message = "回复的消息 thumbMediaId 不能为空", groups = {MusicMessageGroup.class})
private String responseThumbMediaId;
@ApiModelProperty(value = "缩略图的媒体 URL",example = "https://www.iocoder.cn/xxx.jpg")
@NotEmpty(message = "回复的消息 thumbMedia 地址不能为空", groups = {MusicMessageGroup.class})
private String responseThumbMediaUrl;
@ApiModelProperty(value = "回复的标题", example = "视频标题")
@NotEmpty(message = "回复的消息标题不能为空", groups = VideoMessageGroup.class)
private String responseTitle;
@ApiModelProperty(value = "回复的描述", example = "视频描述")
@NotEmpty(message = "消息描述不能为空", groups = VideoMessageGroup.class)
private String responseDescription;
/**
* 回复的图文消息
*
* 消息类型为 {@link WxConsts.XmlMsgType} NEWS
*/
@NotNull(message = "回复的图文消息不能为空", groups = {NewsMessageGroup.class, ViewLimitedButtonGroup.class})
@Valid
private List<MpMessageDO.Article> responseArticles;
@ApiModelProperty(value = "回复的音乐链接", example = "https://www.iocoder.cn/xxx.mp3")
@NotEmpty(message = "回复的音乐链接不能为空", groups = MusicMessageGroup.class)
@URL(message = "回复的高质量音乐链接格式不正确", groups = MusicMessageGroup.class)
private String responseMusicUrl;
@ApiModelProperty(value = "高质量音乐链接", example = "https://www.iocoder.cn/xxx.mp3")
@NotEmpty(message = "回复的高质量音乐链接不能为空", groups = MusicMessageGroup.class)
@URL(message = "回复的高质量音乐链接格式不正确", groups = MusicMessageGroup.class)
private String responseHqMusicUrl;
@AssertTrue(message = "请求的关键字不能为空")
public boolean isRequestKeywordValid() {
return ObjectUtil.notEqual(type, MpAutoReplyTypeEnum.KEYWORD)
|| requestKeyword != null;
}
@AssertTrue(message = "请求的关键字的匹配不能为空")
public boolean isRequestMatchValid() {
return ObjectUtil.notEqual(type, MpAutoReplyTypeEnum.KEYWORD)
|| requestMatch != null;
}
@AssertTrue(message = "请求的消息类型不能为空")
public boolean isRequestMessageTypeValid() {
return ObjectUtil.notEqual(type, MpAutoReplyTypeEnum.MESSAGE)
|| requestMessageType != null;
}
}

View File

@ -0,0 +1,25 @@
package cn.iocoder.yudao.module.mp.controller.admin.message.vo.autoreply;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import javax.validation.constraints.NotNull;
@ApiModel("管理后台 - 公众号自动回复的创建 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class MpAutoReplyCreateReqVO extends MpAutoReplyBaseVO {
@ApiModelProperty(value = "微信公众号 ID", required = true, example = "1024")
@NotNull(message = "微信公众号 ID不能为空")
private Long accountId;
@ApiModelProperty(value = "回复类型", required = true, example = "1", notes = "参见 MpAutoReplyTypeEnum 枚举")
@NotNull(message = "回复类型不能为空")
private Integer type;
}

View File

@ -0,0 +1,22 @@
package cn.iocoder.yudao.module.mp.controller.admin.message.vo.autoreply;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import javax.validation.constraints.NotNull;
@ApiModel("管理后台 - 公众号自动回复的分页 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class MpAutoReplyPageReqVO extends PageParam {
@ApiModelProperty(value = "公众号账号的编号", required = true, example = "1")
@NotNull(message = "公众号账号的编号不能为空")
private Long accountId;
}

View File

@ -0,0 +1,23 @@
package cn.iocoder.yudao.module.mp.controller.admin.message.vo.autoreply;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
@ApiModel("管理后台 - 公众号自动回复 Response VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class MpAutoReplyRespVO extends MpAutoReplyBaseVO {
@ApiModelProperty(value = "主键", required = true, example = "1024")
private Long id;
@ApiModelProperty(value = "微信公众号 ID", required = true, example = "1024")
private Long accountId;
@ApiModelProperty(value = "微信公众号 appid", required = true, example = "wx1234567890")
private String appId;
}

View File

@ -0,0 +1,21 @@
package cn.iocoder.yudao.module.mp.controller.admin.message.vo.autoreply;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import javax.validation.constraints.NotNull;
@ApiModel("管理后台 - 公众号自动回复的更新 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class MpAutoReplyUpdateReqVO extends MpAutoReplyBaseVO {
@ApiModelProperty(value = "主键", required = true, example = "1024")
@NotNull(message = "主键不能为空")
private Long id;
}

View File

@ -1,4 +1,4 @@
package cn.iocoder.yudao.module.mp.controller.admin.message.vo;
package cn.iocoder.yudao.module.mp.controller.admin.message.vo.message;
import cn.iocoder.yudao.module.mp.dal.dataobject.account.MpAccountDO;
import cn.iocoder.yudao.module.mp.dal.dataobject.message.MpMessageDO;

View File

@ -1,4 +1,4 @@
package cn.iocoder.yudao.module.mp.controller.admin.message.vo;
package cn.iocoder.yudao.module.mp.controller.admin.message.vo.message;
import lombok.*;

View File

@ -1,4 +1,4 @@
package cn.iocoder.yudao.module.mp.controller.admin.message.vo;
package cn.iocoder.yudao.module.mp.controller.admin.message.vo.message;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;

View File

@ -1,4 +1,4 @@
package cn.iocoder.yudao.module.mp.controller.admin.message.vo;
package cn.iocoder.yudao.module.mp.controller.admin.message.vo.message;
import cn.iocoder.yudao.module.mp.dal.dataobject.message.MpMessageDO;
import cn.iocoder.yudao.module.mp.framework.mp.core.util.MpUtils.*;

View File

@ -1,5 +1,7 @@
package cn.iocoder.yudao.module.mp.convert.message;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.mp.controller.admin.message.vo.autoreply.MpAutoReplyRespVO;
import cn.iocoder.yudao.module.mp.dal.dataobject.message.MpAutoReplyDO;
import cn.iocoder.yudao.module.mp.service.message.bo.MpMessageSendOutReqBO;
import org.mapstruct.Mapper;
@ -23,4 +25,6 @@ public interface MpAutoReplyConvert {
})
MpMessageSendOutReqBO convert(String openid, MpAutoReplyDO reply);
PageResult<MpAutoReplyRespVO> convertPage(PageResult<MpAutoReplyDO> page);
}

View File

@ -1,8 +1,8 @@
package cn.iocoder.yudao.module.mp.convert.message;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.mp.controller.admin.message.vo.MpMessageRespVO;
import cn.iocoder.yudao.module.mp.controller.admin.message.vo.MpMessageSendReqVO;
import cn.iocoder.yudao.module.mp.controller.admin.message.vo.message.MpMessageRespVO;
import cn.iocoder.yudao.module.mp.controller.admin.message.vo.message.MpMessageSendReqVO;
import cn.iocoder.yudao.module.mp.dal.dataobject.account.MpAccountDO;
import cn.iocoder.yudao.module.mp.dal.dataobject.message.MpMessageDO;
import cn.iocoder.yudao.module.mp.dal.dataobject.user.MpUserDO;

View File

@ -9,7 +9,6 @@ import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
@ -133,4 +132,5 @@ public class MpAutoReplyDO extends BaseDO {
*/
@TableField(typeHandler = MpMessageDO.ArticleTypeHandler.class)
private List<MpMessageDO.Article> responseArticles;
}

View File

@ -1,7 +1,9 @@
package cn.iocoder.yudao.module.mp.dal.mysql.message;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.module.mp.controller.admin.message.vo.message.MpMessagePageReqVO;
import cn.iocoder.yudao.module.mp.dal.dataobject.message.MpAutoReplyDO;
import cn.iocoder.yudao.module.mp.enums.message.MpAutoReplyMatchEnum;
import cn.iocoder.yudao.module.mp.enums.message.MpAutoReplyTypeEnum;
@ -12,6 +14,12 @@ import java.util.List;
@Mapper
public interface MpAutoReplyMapper extends BaseMapperX<MpAutoReplyDO> {
default PageResult<MpAutoReplyDO> selectPage(MpMessagePageReqVO pageVO) {
return selectPage(pageVO, new LambdaQueryWrapperX<MpAutoReplyDO>()
.eq(MpAutoReplyDO::getAccountId, pageVO.getAccountId())
.eqIfPresent(MpAutoReplyDO::getType, pageVO.getType()));
}
default List<MpAutoReplyDO> selectListByAppIdAndKeywordAll(String appId, String requestKeyword) {
return selectList(new LambdaQueryWrapperX<MpAutoReplyDO>()
.eq(MpAutoReplyDO::getAppId, appId)

View File

@ -3,7 +3,7 @@ package cn.iocoder.yudao.module.mp.dal.mysql.message;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.module.mp.controller.admin.message.vo.MpMessagePageReqVO;
import cn.iocoder.yudao.module.mp.controller.admin.message.vo.message.MpMessagePageReqVO;
import cn.iocoder.yudao.module.mp.dal.dataobject.message.MpMessageDO;
import org.apache.ibatis.annotations.Mapper;

View File

@ -1,5 +1,8 @@
package cn.iocoder.yudao.module.mp.service.message;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.mp.controller.admin.message.vo.message.MpMessagePageReqVO;
import cn.iocoder.yudao.module.mp.dal.dataobject.message.MpAutoReplyDO;
import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage;
import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage;
@ -10,6 +13,14 @@ import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage;
*/
public interface MpAutoReplyService {
/**
* 获得公众号自动回复分页
*
* @param pageVO 分页请求
* @return 自动回复分页结果
*/
PageResult<MpAutoReplyDO> getAutoReplyPage(MpMessagePageReqVO pageVO);
/**
* 当收到消息时自动回复
*
@ -27,5 +38,4 @@ public interface MpAutoReplyService {
* @return 回复的消息
*/
WxMpXmlOutMessage replyForSubscribe(String appId, WxMpXmlMessage wxMessage);
}

View File

@ -2,6 +2,8 @@ package cn.iocoder.yudao.module.mp.service.message;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.lang.Assert;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.mp.controller.admin.message.vo.message.MpMessagePageReqVO;
import cn.iocoder.yudao.module.mp.convert.message.MpAutoReplyConvert;
import cn.iocoder.yudao.module.mp.dal.dataobject.account.MpAccountDO;
import cn.iocoder.yudao.module.mp.dal.dataobject.message.MpAutoReplyDO;
@ -37,6 +39,11 @@ public class MpAutoReplyServiceImpl implements MpAutoReplyService {
@Resource
private MpAutoReplyMapper mpAutoReplyMapper;
@Override
public PageResult<MpAutoReplyDO> getAutoReplyPage(MpMessagePageReqVO pageVO) {
return mpAutoReplyMapper.selectPage(pageVO);
}
@Override
public WxMpXmlOutMessage replyForMessage(String appId, WxMpXmlMessage wxMessage) {
// 第一步匹配自动回复

View File

@ -1,8 +1,8 @@
package cn.iocoder.yudao.module.mp.service.message;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.mp.controller.admin.message.vo.MpMessagePageReqVO;
import cn.iocoder.yudao.module.mp.controller.admin.message.vo.MpMessageSendReqVO;
import cn.iocoder.yudao.module.mp.controller.admin.message.vo.message.MpMessagePageReqVO;
import cn.iocoder.yudao.module.mp.controller.admin.message.vo.message.MpMessageSendReqVO;
import cn.iocoder.yudao.module.mp.dal.dataobject.message.MpMessageDO;
import cn.iocoder.yudao.module.mp.service.message.bo.MpMessageSendOutReqBO;
import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage;

View File

@ -3,8 +3,8 @@ package cn.iocoder.yudao.module.mp.service.message;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.StrUtil;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.mp.controller.admin.message.vo.MpMessagePageReqVO;
import cn.iocoder.yudao.module.mp.controller.admin.message.vo.MpMessageSendReqVO;
import cn.iocoder.yudao.module.mp.controller.admin.message.vo.message.MpMessagePageReqVO;
import cn.iocoder.yudao.module.mp.controller.admin.message.vo.message.MpMessageSendReqVO;
import cn.iocoder.yudao.module.mp.convert.message.MpMessageConvert;
import cn.iocoder.yudao.module.mp.dal.dataobject.account.MpAccountDO;
import cn.iocoder.yudao.module.mp.dal.dataobject.message.MpMessageDO;

View File

@ -53,7 +53,6 @@ SOFTWARE.
<el-tab-pane name="1">
<span slot="label"><i class="el-icon-star-off"></i> 关注时回复</span>
<el-table v-loading="loading" :data="list">
<el-table-column label="编号" align="center" prop="id"/>
<el-table-column label="回复消息类型" align="center" prop="responseMessageType"/>
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
<template slot-scope="scope">
@ -75,7 +74,6 @@ SOFTWARE.
<el-tab-pane name="2">
<span slot="label"><i class="el-icon-chat-line-round"></i> 消息回复</span>
<el-table v-loading="loading" :data="list">
<el-table-column label="编号" align="center" prop="id"/>
<el-table-column label="请求消息类型" align="center" prop="requestMessageType"/>
<el-table-column label="回复消息类型" align="center" prop="responseMessageType"/>
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
@ -98,7 +96,6 @@ SOFTWARE.
<el-tab-pane name="3">
<span slot="label"><i class="el-icon-news"></i> 关键词回复</span>
<el-table v-loading="loading" :data="list">
<el-table-column label="编号" align="center" prop="id"/>
<el-table-column label="关键词" align="center" prop="requestKeyword"/>
<el-table-column label="匹配类型" align="center" prop="requestMatch"/>
<el-table-column label="回复消息类型" align="center" prop="responseMessageType"/>
@ -175,7 +172,7 @@ export default {
data() {
return {
// tab 123
type:'1',
type: '3',
//
loading: true,
//