Commit 188d8802391a100c14e451a73864d8795cf9b71e

Authored by YunaiV
1 parent 431569fd

mp:增加【图片】素材的选择

Showing 23 changed files with 187 additions and 1076 deletions
yudao-module-mp/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/controller/admin/material/MpMaterialController.http
  1 +### 请求 /mp/material/page 接口 => 成功
  2 +GET {{baseUrl}}/mp/material/page?permanent=true&pageNo=1&pageSize=10
  3 +Content-Type: application/json
  4 +Authorization: Bearer {{token}}
  5 +tenant-id: {{adminTenentId}}
... ...
yudao-module-mp/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/controller/admin/material/MpMaterialController.java
1 1 package cn.iocoder.yudao.module.mp.controller.admin.material;
2 2  
3 3 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
4   -import cn.iocoder.yudao.module.mp.controller.admin.material.vo.MpMaterialUploadPermanentReqVO;
5   -import cn.iocoder.yudao.module.mp.controller.admin.material.vo.MpMaterialUploadRespVO;
6   -import cn.iocoder.yudao.module.mp.controller.admin.material.vo.MpMaterialUploadTemporaryReqVO;
  4 +import cn.iocoder.yudao.framework.common.pojo.PageResult;
  5 +import cn.iocoder.yudao.module.mp.controller.admin.material.vo.*;
7 6 import cn.iocoder.yudao.module.mp.convert.material.MpMaterialConvert;
8 7 import cn.iocoder.yudao.module.mp.dal.dataobject.material.MpMaterialDO;
9 8 import cn.iocoder.yudao.module.mp.service.material.MpMaterialService;
10 9 import io.swagger.annotations.Api;
11 10 import io.swagger.annotations.ApiOperation;
12 11 import org.springframework.validation.annotation.Validated;
  12 +import org.springframework.web.bind.annotation.GetMapping;
13 13 import org.springframework.web.bind.annotation.PostMapping;
14 14 import org.springframework.web.bind.annotation.RequestMapping;
15 15 import org.springframework.web.bind.annotation.RestController;
... ... @@ -45,4 +45,11 @@ public class MpMaterialController {
45 45 return success(MpMaterialConvert.INSTANCE.convert(material));
46 46 }
47 47  
  48 + @ApiOperation("获得素材分页")
  49 + @GetMapping("/page")
  50 + public CommonResult<PageResult<MpMaterialRespVO>> getMaterialPage(@Valid MpMaterialPageReqVO pageReqVO) {
  51 + PageResult<MpMaterialDO> pageResult = mpMaterialService.getMaterialPage(pageReqVO);
  52 + return success(MpMaterialConvert.INSTANCE.convertPage(pageResult));
  53 + }
  54 +
48 55 }
... ...
yudao-module-mp/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/controller/admin/material/vo/MpMaterialPageReqVO.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mp.controller.admin.material.vo;
  2 +
  3 +import cn.iocoder.yudao.framework.common.pojo.PageParam;
  4 +import io.swagger.annotations.ApiModel;
  5 +import io.swagger.annotations.ApiModelProperty;
  6 +import lombok.Data;
  7 +import lombok.EqualsAndHashCode;
  8 +import lombok.ToString;
  9 +
  10 +@ApiModel("管理后台 - 公众号素材的分页 Request VO")
  11 +@Data
  12 +@EqualsAndHashCode(callSuper = true)
  13 +@ToString(callSuper = true)
  14 +public class MpMaterialPageReqVO extends PageParam {
  15 +
  16 + @ApiModelProperty(value = "是否永久", example = "true")
  17 + private Boolean permanent;
  18 +
  19 + @ApiModelProperty(value = "文件类型", example = "image", notes = "参见 WxConsts.MediaFileType 枚举")
  20 + private String type;
  21 +
  22 +}
... ...
yudao-module-mp/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/controller/admin/material/vo/MpMaterialRespVO.java 0 → 100644
  1 +package cn.iocoder.yudao.module.mp.controller.admin.material.vo;
  2 +
  3 +import io.swagger.annotations.ApiModel;
  4 +import io.swagger.annotations.ApiModelProperty;
  5 +import lombok.Data;
  6 +
  7 +@ApiModel("管理后台 - 公众号素材 Response VO")
  8 +@Data
  9 +public class MpMaterialRespVO {
  10 +
  11 + @ApiModelProperty(value = "主键", required = true, example = "1024")
  12 + private Long id;
  13 +
  14 + @ApiModelProperty(value = "公众号账号的编号", required = true, example = "1")
  15 + private Long accountId;
  16 + @ApiModelProperty(value = "公众号账号的 appId", required = true, example = "wx1234567890")
  17 + private String appId;
  18 +
  19 + @ApiModelProperty(value = "素材的 media_id", required = true, example = "123")
  20 + private String mediaId;
  21 +
  22 + @ApiModelProperty(value = "文件类型", required = true, example = "image", notes = "参见 WxConsts.MediaFileType 枚举")
  23 + private String type;
  24 +
  25 + @ApiModelProperty(value = "是否永久", required = true, example = "true", notes = "true - 永久;false - 临时")
  26 + private Boolean permanent;
  27 +
  28 + @ApiModelProperty(value = "素材的 URL", required = true, example = "https://www.iocoder.cn/1.png")
  29 + private String url;
  30 +
  31 +
  32 + @ApiModelProperty(value = "名字", example = "yunai.png")
  33 + private String name;
  34 +
  35 + @ApiModelProperty(value = "公众号文件 URL", example = "https://mmbiz.qpic.cn/xxx.mp3", notes = "只有【永久素材】使用")
  36 + private String mpUrl;
  37 +
  38 + @ApiModelProperty(value = "视频素材的标题", example = "我是标题", notes = "只有【永久素材】使用")
  39 + private String title;
  40 + @ApiModelProperty(value = "视频素材的描述", example = "我是介绍", notes = "只有【永久素材】使用")
  41 + private String introduction;
  42 +}
... ...
yudao-module-mp/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/convert/material/MpMaterialConvert.java
1 1 package cn.iocoder.yudao.module.mp.convert.material;
2 2  
  3 +import cn.iocoder.yudao.framework.common.pojo.PageResult;
  4 +import cn.iocoder.yudao.module.mp.controller.admin.material.vo.MpMaterialRespVO;
3 5 import cn.iocoder.yudao.module.mp.controller.admin.material.vo.MpMaterialUploadRespVO;
4 6 import cn.iocoder.yudao.module.mp.dal.dataobject.account.MpAccountDO;
5 7 import cn.iocoder.yudao.module.mp.dal.dataobject.material.MpMaterialDO;
... ... @@ -20,8 +22,10 @@ public interface MpMaterialConvert {
20 22 @Mapping(target = "id", ignore = true),
21 23 @Mapping(source = "account.id", target = "accountId"),
22 24 @Mapping(source = "account.appId", target = "appId"),
  25 + @Mapping(source = "name", target = "name")
23 26 })
24   - MpMaterialDO convert(String mediaId, String type, String url, MpAccountDO account);
  27 + MpMaterialDO convert(String mediaId, String type, String url, MpAccountDO account,
  28 + String name);
25 29  
26 30 @Mappings({
27 31 @Mapping(target = "id", ignore = true),
... ... @@ -38,4 +42,6 @@ public interface MpMaterialConvert {
38 42 return new WxMpMaterial(name, file, title, introduction);
39 43 }
40 44  
  45 + PageResult<MpMaterialRespVO> convertPage(PageResult<MpMaterialDO> page);
  46 +
41 47 }
... ...
yudao-module-mp/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/dal/dataobject/material/MpMaterialDO.java
... ... @@ -69,9 +69,13 @@ public class MpMaterialDO extends BaseDO {
69 69 /**
70 70 * 名字
71 71 *
72   - * 只有【永久素材】使用
  72 + * 永久素材:非空
  73 + * 临时素材:可能为空。
  74 + * 1. 为空的情况:用户主动发送的图片、语音等
  75 + * 2. 非空的情况:主动发送给用户的图片、语音等
73 76 */
74 77 private String name;
  78 +
75 79 /**
76 80 * 公众号文件 URL
77 81 *
... ...
yudao-module-mp/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/dal/mysql/material/MpMaterialMapper.java
1 1 package cn.iocoder.yudao.module.mp.dal.mysql.material;
2 2  
  3 +import cn.iocoder.yudao.framework.common.pojo.PageResult;
3 4 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
  5 +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
  6 +import cn.iocoder.yudao.module.mp.controller.admin.material.vo.MpMaterialPageReqVO;
4 7 import cn.iocoder.yudao.module.mp.dal.dataobject.material.MpMaterialDO;
5 8 import org.apache.ibatis.annotations.Mapper;
6 9  
... ... @@ -12,4 +15,10 @@ public interface MpMaterialMapper extends BaseMapperX&lt;MpMaterialDO&gt; {
12 15 MpMaterialDO::getMediaId, mediaId);
13 16 }
14 17  
  18 + default PageResult<MpMaterialDO> selectPage(MpMaterialPageReqVO pageReqVO) {
  19 + return selectPage(pageReqVO, new LambdaQueryWrapperX<MpMaterialDO>()
  20 + .eqIfPresent(MpMaterialDO::getPermanent, pageReqVO.getPermanent())
  21 + .eqIfPresent(MpMaterialDO::getType, pageReqVO.getType()));
  22 + }
  23 +
15 24 }
... ...
yudao-module-mp/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/service/material/MpMaterialService.java
1 1 package cn.iocoder.yudao.module.mp.service.material;
2 2  
  3 +import cn.iocoder.yudao.framework.common.pojo.PageResult;
  4 +import cn.iocoder.yudao.module.mp.controller.admin.material.vo.MpMaterialPageReqVO;
3 5 import cn.iocoder.yudao.module.mp.controller.admin.material.vo.MpMaterialUploadPermanentReqVO;
4 6 import cn.iocoder.yudao.module.mp.controller.admin.material.vo.MpMaterialUploadTemporaryReqVO;
5 7 import cn.iocoder.yudao.module.mp.dal.dataobject.material.MpMaterialDO;
... ... @@ -45,4 +47,12 @@ public interface MpMaterialService {
45 47 */
46 48 MpMaterialDO uploadPermanentMaterial(@Valid MpMaterialUploadPermanentReqVO reqVO) throws IOException;
47 49  
  50 + /**
  51 + * 获得素材分页
  52 + *
  53 + * @param pageReqVO 分页请求
  54 + * @return 素材分页
  55 + */
  56 + PageResult<MpMaterialDO> getMaterialPage(MpMaterialPageReqVO pageReqVO);
  57 +
48 58 }
... ...
yudao-module-mp/yudao-module-mp-biz/src/main/java/cn/iocoder/yudao/module/mp/service/material/MpMaterialServiceImpl.java
... ... @@ -4,7 +4,9 @@ import cn.hutool.core.io.FileTypeUtil;
4 4 import cn.hutool.core.io.FileUtil;
5 5 import cn.hutool.core.util.ObjUtil;
6 6 import cn.hutool.core.util.StrUtil;
  7 +import cn.iocoder.yudao.framework.common.pojo.PageResult;
7 8 import cn.iocoder.yudao.module.infra.api.file.FileApi;
  9 +import cn.iocoder.yudao.module.mp.controller.admin.material.vo.MpMaterialPageReqVO;
8 10 import cn.iocoder.yudao.module.mp.controller.admin.material.vo.MpMaterialUploadPermanentReqVO;
9 11 import cn.iocoder.yudao.module.mp.controller.admin.material.vo.MpMaterialUploadTemporaryReqVO;
10 12 import cn.iocoder.yudao.module.mp.convert.material.MpMaterialConvert;
... ... @@ -67,7 +69,7 @@ public class MpMaterialServiceImpl implements MpMaterialService {
67 69 return null;
68 70 }
69 71 MpAccountDO account = mpAccountService.getRequiredAccount(accountId);
70   - material = MpMaterialConvert.INSTANCE.convert(mediaId, type, url, account)
  72 + material = MpMaterialConvert.INSTANCE.convert(mediaId, type, url, account, null)
71 73 .setPermanent(false);
72 74 mpMaterialMapper.insert(material);
73 75  
... ... @@ -100,8 +102,8 @@ public class MpMaterialServiceImpl implements MpMaterialService {
100 102  
101 103 // 第二步,存储到数据库
102 104 MpAccountDO account = mpAccountService.getRequiredAccount(reqVO.getAccountId());
103   - MpMaterialDO material = MpMaterialConvert.INSTANCE.convert(mediaId, reqVO.getType(), url, account)
104   - .setPermanent(false);
  105 + MpMaterialDO material = MpMaterialConvert.INSTANCE.convert(mediaId, reqVO.getType(), url, account,
  106 + reqVO.getFile().getName()).setPermanent(false);
105 107 mpMaterialMapper.insert(material);
106 108 return material;
107 109 }
... ... @@ -139,6 +141,11 @@ public class MpMaterialServiceImpl implements MpMaterialService {
139 141 return material;
140 142 }
141 143  
  144 + @Override
  145 + public PageResult<MpMaterialDO> getMaterialPage(MpMaterialPageReqVO pageReqVO) {
  146 + return mpMaterialMapper.selectPage(pageReqVO);
  147 + }
  148 +
142 149 /**
143 150 * 下载微信媒体文件的内容,并上传到文件服务
144 151 *
... ...
yudao-ui-admin/src/api/mp/material.js 0 → 100644
  1 +import request from '@/utils/request'
  2 +
  3 +// 获得公众号素材分页
  4 +export function getMaterialPage(query) {
  5 + return request({
  6 + url: '/mp/material/page',
  7 + method: 'get',
  8 + params: query
  9 + })
  10 +}
... ...
yudao-ui-admin/src/api/wechatMp/wxFansMsgRes.js deleted
1   -import request from '@/utils/request'
2   -
3   -// 创建回复粉丝消息历史表
4   -export function createWxFansMsgRes(data) {
5   - return request({
6   - url: '/wechatMp/wx-fans-msg-res/create',
7   - method: 'post',
8   - data: data
9   - })
10   -}
11   -
12   -// 更新回复粉丝消息历史表
13   -export function updateWxFansMsgRes(data) {
14   - return request({
15   - url: '/wechatMp/wx-fans-msg-res/update',
16   - method: 'put',
17   - data: data
18   - })
19   -}
20   -
21   -// 删除回复粉丝消息历史表
22   -export function deleteWxFansMsgRes(id) {
23   - return request({
24   - url: '/wechatMp/wx-fans-msg-res/delete?id=' + id,
25   - method: 'delete'
26   - })
27   -}
28   -
29   -// 获得回复粉丝消息历史表
30   -export function getWxFansMsgRes(id) {
31   - return request({
32   - url: '/wechatMp/wx-fans-msg-res/get?id=' + id,
33   - method: 'get'
34   - })
35   -}
36   -
37   -// 获得回复粉丝消息历史表 分页
38   -export function getWxFansMsgResPage(query) {
39   - return request({
40   - url: '/wechatMp/wx-fans-msg-res/page',
41   - method: 'get',
42   - params: query
43   - })
44   -}
45   -
46   -// 导出回复粉丝消息历史表 Excel
47   -export function exportWxFansMsgResExcel(query) {
48   - return request({
49   - url: '/wechatMp/wx-fans-msg-res/export-excel',
50   - method: 'get',
51   - params: query,
52   - responseType: 'blob'
53   - })
54   -}
yudao-ui-admin/src/api/wechatMp/wxMediaUpload.js deleted
1   -import request from '@/utils/request'
2   -
3   -// 创建微信素材上传表
4   -export function createWxMediaUpload(data) {
5   - return request({
6   - url: '/wechatMp/wx-media-upload/create',
7   - method: 'post',
8   - data: data
9   - })
10   -}
11   -
12   -// 更新微信素材上传表
13   -export function updateWxMediaUpload(data) {
14   - return request({
15   - url: '/wechatMp/wx-media-upload/update',
16   - method: 'put',
17   - data: data
18   - })
19   -}
20   -
21   -// 删除微信素材上传表
22   -export function deleteWxMediaUpload(id) {
23   - return request({
24   - url: '/wechatMp/wx-media-upload/delete?id=' + id,
25   - method: 'delete'
26   - })
27   -}
28   -
29   -// 获得微信素材上传表
30   -export function getWxMediaUpload(id) {
31   - return request({
32   - url: '/wechatMp/wx-media-upload/get?id=' + id,
33   - method: 'get'
34   - })
35   -}
36   -
37   -// 获得微信素材上传表 分页
38   -export function getWxMediaUploadPage(query) {
39   - return request({
40   - url: '/wechatMp/wx-media-upload/page',
41   - method: 'get',
42   - params: query
43   - })
44   -}
45   -
46   -// 导出微信素材上传表 Excel
47   -export function exportWxMediaUploadExcel(query) {
48   - return request({
49   - url: '/wechatMp/wx-media-upload/export-excel',
50   - method: 'get',
51   - params: query,
52   - responseType: 'blob'
53   - })
54   -}
yudao-ui-admin/src/api/wechatMp/wxMenu.js deleted
1   -import request from '@/utils/request'
2   -
3   -// 创建微信菜单
4   -export function createWxMenu(data) {
5   - return request({
6   - url: '/wechatMp/wx-menu/create',
7   - method: 'post',
8   - data: data
9   - })
10   -}
11   -
12   -// 更新微信菜单
13   -export function updateWxMenu(data) {
14   - return request({
15   - url: '/wechatMp/wx-menu/update',
16   - method: 'put',
17   - data: data
18   - })
19   -}
20   -
21   -// 删除微信菜单
22   -export function deleteWxMenu(id) {
23   - return request({
24   - url: '/wechatMp/wx-menu/delete?id=' + id,
25   - method: 'delete'
26   - })
27   -}
28   -
29   -// 获得微信菜单
30   -export function getWxMenu(id) {
31   - return request({
32   - url: '/wechatMp/wx-menu/get?id=' + id,
33   - method: 'get'
34   - })
35   -}
36   -
37   -// 获得微信菜单分页
38   -export function getWxMenuPage(query) {
39   - return request({
40   - url: '/wechatMp/wx-menu/page',
41   - method: 'get',
42   - params: query
43   - })
44   -}
45   -
46   -// 导出微信菜单 Excel
47   -export function exportWxMenuExcel(query) {
48   - return request({
49   - url: '/wechatMp/wx-menu/export-excel',
50   - method: 'get',
51   - params: query,
52   - responseType: 'blob'
53   - })
54   -}
yudao-ui-admin/src/api/wechatMp/wxNewsArticleItem.js deleted
1   -import request from '@/utils/request'
2   -
3   -// 创建图文消息文章列表表
4   -export function createWxNewsArticleItem(data) {
5   - return request({
6   - url: '/wechatMp/wx-news-article-item/create',
7   - method: 'post',
8   - data: data
9   - })
10   -}
11   -
12   -// 更新图文消息文章列表表
13   -export function updateWxNewsArticleItem(data) {
14   - return request({
15   - url: '/wechatMp/wx-news-article-item/update',
16   - method: 'put',
17   - data: data
18   - })
19   -}
20   -
21   -// 删除图文消息文章列表表
22   -export function deleteWxNewsArticleItem(id) {
23   - return request({
24   - url: '/wechatMp/wx-news-article-item/delete?id=' + id,
25   - method: 'delete'
26   - })
27   -}
28   -
29   -// 获得图文消息文章列表表
30   -export function getWxNewsArticleItem(id) {
31   - return request({
32   - url: '/wechatMp/wx-news-article-item/get?id=' + id,
33   - method: 'get'
34   - })
35   -}
36   -
37   -// 获得图文消息文章列表表 分页
38   -export function getWxNewsArticleItemPage(query) {
39   - return request({
40   - url: '/wechatMp/wx-news-article-item/page',
41   - method: 'get',
42   - params: query
43   - })
44   -}
45   -
46   -// 导出图文消息文章列表表 Excel
47   -export function exportWxNewsArticleItemExcel(query) {
48   - return request({
49   - url: '/wechatMp/wx-news-article-item/export-excel',
50   - method: 'get',
51   - params: query,
52   - responseType: 'blob'
53   - })
54   -}
yudao-ui-admin/src/api/wechatMp/wxNewsTemplate.js deleted
1   -import request from '@/utils/request'
2   -
3   -// 创建图文消息模板
4   -export function createWxNewsTemplate(data) {
5   - return request({
6   - url: '/wechatMp/wx-news-template/create',
7   - method: 'post',
8   - data: data
9   - })
10   -}
11   -
12   -// 更新图文消息模板
13   -export function updateWxNewsTemplate(data) {
14   - return request({
15   - url: '/wechatMp/wx-news-template/update',
16   - method: 'put',
17   - data: data
18   - })
19   -}
20   -
21   -// 删除图文消息模板
22   -export function deleteWxNewsTemplate(id) {
23   - return request({
24   - url: '/wechatMp/wx-news-template/delete?id=' + id,
25   - method: 'delete'
26   - })
27   -}
28   -
29   -// 获得图文消息模板
30   -export function getWxNewsTemplate(id) {
31   - return request({
32   - url: '/wechatMp/wx-news-template/get?id=' + id,
33   - method: 'get'
34   - })
35   -}
36   -
37   -// 获得图文消息模板分页
38   -export function getWxNewsTemplatePage(query) {
39   - return request({
40   - url: '/wechatMp/wx-news-template/page',
41   - method: 'get',
42   - params: query
43   - })
44   -}
45   -
46   -// 导出图文消息模板 Excel
47   -export function exportWxNewsTemplateExcel(query) {
48   - return request({
49   - url: '/wechatMp/wx-news-template/export-excel',
50   - method: 'get',
51   - params: query,
52   - responseType: 'blob'
53   - })
54   -}
yudao-ui-admin/src/api/wechatMp/wxReceiveText.js deleted
1   -import request from '@/utils/request'
2   -
3   -// 创建回复关键字
4   -export function createWxReceiveText(data) {
5   - return request({
6   - url: '/wechatMp/wx-receive-text/create',
7   - method: 'post',
8   - data: data
9   - })
10   -}
11   -
12   -// 更新回复关键字
13   -export function updateWxReceiveText(data) {
14   - return request({
15   - url: '/wechatMp/wx-receive-text/update',
16   - method: 'put',
17   - data: data
18   - })
19   -}
20   -
21   -// 删除回复关键字
22   -export function deleteWxReceiveText(id) {
23   - return request({
24   - url: '/wechatMp/wx-receive-text/delete?id=' + id,
25   - method: 'delete'
26   - })
27   -}
28   -
29   -// 获得回复关键字
30   -export function getWxReceiveText(id) {
31   - return request({
32   - url: '/wechatMp/wx-receive-text/get?id=' + id,
33   - method: 'get'
34   - })
35   -}
36   -
37   -// 获得回复关键字分页
38   -export function getWxReceiveTextPage(query) {
39   - return request({
40   - url: '/wechatMp/wx-receive-text/page',
41   - method: 'get',
42   - params: query
43   - })
44   -}
45   -
46   -// 导出回复关键字 Excel
47   -export function exportWxReceiveTextExcel(query) {
48   - return request({
49   - url: '/wechatMp/wx-receive-text/export-excel',
50   - method: 'get',
51   - params: query,
52   - responseType: 'blob'
53   - })
54   -}
yudao-ui-admin/src/api/wechatMp/wxSubscribeText.js deleted
1   -import request from '@/utils/request'
2   -
3   -// 创建关注欢迎语
4   -export function createWxSubscribeText(data) {
5   - return request({
6   - url: '/wechatMp/wx-subscribe-text/create',
7   - method: 'post',
8   - data: data
9   - })
10   -}
11   -
12   -// 更新关注欢迎语
13   -export function updateWxSubscribeText(data) {
14   - return request({
15   - url: '/wechatMp/wx-subscribe-text/update',
16   - method: 'put',
17   - data: data
18   - })
19   -}
20   -
21   -// 删除关注欢迎语
22   -export function deleteWxSubscribeText(id) {
23   - return request({
24   - url: '/wechatMp/wx-subscribe-text/delete?id=' + id,
25   - method: 'delete'
26   - })
27   -}
28   -
29   -// 获得关注欢迎语
30   -export function getWxSubscribeText(id) {
31   - return request({
32   - url: '/wechatMp/wx-subscribe-text/get?id=' + id,
33   - method: 'get'
34   - })
35   -}
36   -
37   -// 获得关注欢迎语分页
38   -export function getWxSubscribeTextPage(query) {
39   - return request({
40   - url: '/wechatMp/wx-subscribe-text/page',
41   - method: 'get',
42   - params: query
43   - })
44   -}
45   -
46   -// 导出关注欢迎语 Excel
47   -export function exportWxSubscribeTextExcel(query) {
48   - return request({
49   - url: '/wechatMp/wx-subscribe-text/export-excel',
50   - method: 'get',
51   - params: query,
52   - responseType: 'blob'
53   - })
54   -}
yudao-ui-admin/src/api/wechatMp/wxTextTemplate.js deleted
1   -import request from '@/utils/request'
2   -
3   -// 创建文本模板
4   -export function createWxTextTemplate(data) {
5   - return request({
6   - url: '/wechatMp/wx-text-template/create',
7   - method: 'post',
8   - data: data
9   - })
10   -}
11   -
12   -// 更新文本模板
13   -export function updateWxTextTemplate(data) {
14   - return request({
15   - url: '/wechatMp/wx-text-template/update',
16   - method: 'put',
17   - data: data
18   - })
19   -}
20   -
21   -// 删除文本模板
22   -export function deleteWxTextTemplate(id) {
23   - return request({
24   - url: '/wechatMp/wx-text-template/delete?id=' + id,
25   - method: 'delete'
26   - })
27   -}
28   -
29   -// 获得文本模板
30   -export function getWxTextTemplate(id) {
31   - return request({
32   - url: '/wechatMp/wx-text-template/get?id=' + id,
33   - method: 'get'
34   - })
35   -}
36   -
37   -// 获得文本模板分页
38   -export function getWxTextTemplatePage(query) {
39   - return request({
40   - url: '/wechatMp/wx-text-template/page',
41   - method: 'get',
42   - params: query
43   - })
44   -}
45   -
46   -// 导出文本模板 Excel
47   -export function exportWxTextTemplateExcel(query) {
48   - return request({
49   - url: '/wechatMp/wx-text-template/export-excel',
50   - method: 'get',
51   - params: query,
52   - responseType: 'blob'
53   - })
54   -}
yudao-ui-admin/src/views/mp/components/wx-material-select/main.vue
... ... @@ -5,8 +5,8 @@
5 5 <template>
6 6 <!-- 类型:图片 -->
7 7 <div v-if="objData.type === 'image'">
8   - <div class="waterfall" v-loading="tableLoading">
9   - <div class="waterfall-item" v-for="item in tableData" :key="item.mediaId">
  8 + <div class="waterfall" v-loading="loading">
  9 + <div class="waterfall-item" v-for="item in list" :key="item.mediaId">
10 10 <img class="material-img" :src="item.url">
11 11 <p class="item-name">{{item.name}}</p>
12 12 <el-row class="ope-row">
... ... @@ -16,16 +16,14 @@
16 16 </el-row>
17 17 </div>
18 18 </div>
19   - <div v-if="tableData.length <= 0 && !tableLoading" class="el-table__empty-block">
  19 + <!-- 分页组件 -->
  20 + <div v-if="list.length <= 0 && !loading" class="el-table__empty-block">
20 21 <span class="el-table__empty-text">暂无数据</span>
21 22 </div>
22   - <span slot="footer" class="dialog-footer">
23   - <el-pagination @size-change="sizeChange" @current-change="currentChange" :current-page.sync="page.currentPage"
24   - :page-sizes="[10, 20]" :page-size="page.pageSize" layout="total, sizes, prev, pager, next, jumper"
25   - :total="page.total" class="pagination" />
26   - </span>
  23 + <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"
  24 + @pagination="getMaterialPage"/>
27 25 </div>
28   - <div v-else-if="objData.repType == 'voice'">
  26 + <div v-else-if="objData.type == 'voice'">
29 27 <!-- TODO 芋艿:需要翻译 -->
30 28 <!-- <avue-crud ref="crud"-->
31 29 <!-- :page="page"-->
... ... @@ -45,7 +43,7 @@
45 43 <!-- </template>-->
46 44 <!-- </avue-crud>-->
47 45 </div>
48   - <div v-else-if="objData.repType == 'video'">
  46 + <div v-else-if="objData.type == 'video'">
49 47 <!-- TODO 芋艿:需要翻译 -->
50 48 <!-- <avue-crud ref="crud"-->
51 49 <!-- :page="page"-->
... ... @@ -65,16 +63,16 @@
65 63 <!-- </template>-->
66 64 <!-- </avue-crud>-->
67 65 </div>
68   - <div v-else-if="objData.repType == 'news'">
69   - <div class="waterfall" v-loading="tableLoading">
70   - <div class="waterfall-item" v-for="item in tableData" :key="item.mediaId" v-if="item.content && item.content.articles">
  66 + <div v-else-if="objData.type == 'news'">
  67 + <div class="waterfall" v-loading="loading">
  68 + <div class="waterfall-item" v-for="item in list" :key="item.mediaId" v-if="item.content && item.content.articles">
71 69 <WxNews :objData="item.content.articles"></WxNews>
72 70 <el-row class="ope-row">
73 71 <el-button size="mini" type="success" @click="selectMaterial(item)">选择<i class="el-icon-circle-check el-icon--right"></i></el-button>
74 72 </el-row>
75 73 </div>
76 74 </div>
77   - <div v-if="tableData.length <=0 && !tableLoading" class="el-table__empty-block">
  75 + <div v-if="list.length <=0 && !loading" class="el-table__empty-block">
78 76 <span class="el-table__empty-text">暂无数据</span>
79 77 </div>
80 78 <span slot="footer" class="dialog-footer">
... ... @@ -93,12 +91,13 @@
93 91 </template>
94 92  
95 93 <script>
96   - import { getPage, getMaterialVideo } from '@/api/wxmp/wxmaterial'
  94 +
97 95 // import { tableOptionVoice } from '@/const/crud/wxmp/wxmaterial_voice'
98 96 // import { tableOptionVideo } from '@/const/crud/wxmp/wxmaterial_video'
99 97 import WxNews from '@/views/mp/components/wx-news/main.vue';
100   - import {getPage as getPageNews} from '@/api/wxmp/wxfreepublish'
101   - import {getPage as getPageNewsDraft} from '@/api/wxmp/wxdraft'
  98 + import { getMaterialPage } from "@/api/mp/material";
  99 + // import {getPage as getPageNews} from '@/api/wxmp/wxfreepublish'
  100 + // import {getPage as getPageNewsDraft} from '@/api/wxmp/wxdraft'
102 101  
103 102 export default {
104 103 name: "wxMaterialSelect",
... ... @@ -118,14 +117,16 @@
118 117 },
119 118 data() {
120 119 return {
121   - tableLoading: false,
122   - tableData: [],
123   - page: {
124   - total: 0, // 总页数
125   - currentPage: 1, // 当前页数
126   - pageSize: 20, // 每页显示多少条
127   - ascs:[],//升序字段
128   - descs:[]//降序字段
  120 + // 遮罩层
  121 + loading: false,
  122 + // 总条数
  123 + total: 0,
  124 + // 数据列表
  125 + list: [],
  126 + // 查询参数
  127 + queryParams: {
  128 + pageNo: 1,
  129 + pageSize: 10,
129 130 },
130 131 // tableOptionVoice: tableOptionVoice,
131 132 // tableOptionVideo: tableOptionVideo,
... ... @@ -139,8 +140,8 @@
139 140 this.$emit('selectMaterial', item)
140 141 },
141 142 getPage(page, params) {
142   - this.tableLoading = true
143   - if(this.objData.repType == 'news'){
  143 + this.loading = true
  144 + if(this.objData.type == 'news'){ // 【图文】
144 145 if(this.newsType == '1'){
145 146 getPageNews(Object.assign({
146 147 current: page.currentPage,
... ... @@ -152,11 +153,11 @@
152 153 item.mediaId = item.articleId
153 154 item.content.articles = item.content.newsItem
154 155 })
155   - this.tableData = tableData
  156 + this.list = tableData
156 157 this.page.total = response.data.totalCount
157 158 this.page.currentPage = page.currentPage
158 159 this.page.pageSize = page.pageSize
159   - this.tableLoading = false
  160 + this.loading = false
160 161 })
161 162 }else if(this.newsType == '2'){
162 163 getPageNewsDraft(Object.assign({
... ... @@ -169,28 +170,28 @@
169 170 item.mediaId = item.mediaId
170 171 item.content.articles = item.content.newsItem
171 172 })
172   - this.tableData = tableData
  173 + this.list = tableData
173 174 this.page.total = response.data.totalCount
174 175 this.page.currentPage = page.currentPage
175 176 this.page.pageSize = page.pageSize
176   - this.tableLoading = false
  177 + this.loading = false
177 178 })
178 179 }
179   - }else{
180   - getPage(Object.assign({
181   - current: page.currentPage,
182   - size: page.pageSize,
183   - appId:this.appId,
184   - type:this.objData.repType
185   - }, params)).then(response => {
186   - this.tableData = response.data.items
187   - this.page.total = response.data.totalCount
188   - this.page.currentPage = page.currentPage
189   - this.page.pageSize = page.pageSize
190   - this.tableLoading = false
191   - })
  180 + } else { // 【素材】
  181 + this.getMaterialPage();
192 182 }
193 183 },
  184 + getMaterialPage() {
  185 + getMaterialPage({
  186 + ...this.queryParams,
  187 + type: this.objData.type
  188 + }).then(response => {
  189 + this.list = response.data.list
  190 + this.total = response.data.total
  191 + }).finally(() => {
  192 + this.loading = false
  193 + })
  194 + },
194 195 sizeChange(val) {
195 196 this.page.currentPage = 1
196 197 this.page.pageSize = val
... ...
yudao-ui-admin/src/views/mp/components/wx-msg/main.vue
... ... @@ -81,21 +81,21 @@
81 81 </div>
82 82 </div>
83 83 <div class="msg-send" v-loading="sendLoading">
84   - <wx-reply-select :objData="objData" />
  84 + <wx-reply-select ref="replySelect" :objData="objData" />
85 85 <el-button type="success" size="small" class="send-but" @click="sendMsg">发送(S)</el-button>
86 86 </div>
87 87 </div>
88 88 </template>
89 89  
90 90 <script>
91   -import {getMessagePage, sendMessage} from '@/api/mp/message'
  91 +import { getMessagePage, sendMessage } from '@/api/mp/message'
92 92 import WxReplySelect from '@/views/mp/components/wx-reply/main.vue'
93 93 import WxVideoPlayer from '@/views/mp/components/wx-video-play/main.vue';
94 94 import WxVoicePlayer from '@/views/mp/components/wx-voice-play/main.vue';
95 95 import WxNews from '@/views/mp/components/wx-news/main.vue';
96 96 import WxLocation from '@/views/mp/components/wx-location/main.vue';
97 97 import WxMusic from '@/views/mp/components/wx-music/main.vue';
98   -import {getUser} from "@/api/mp/user";
  98 +import { getUser } from "@/api/mp/user";
99 99  
100 100 export default {
101 101 name: "wxMsg",
... ... @@ -176,6 +176,7 @@ import {getUser} from &quot;@/api/mp/user&quot;;
176 176 this.tableData = [...this.tableData , ...[response.data] ]
177 177 this.scrollToBottom()
178 178 // 重置 objData 状态
  179 + this.$refs['replySelect'].deleteObj(); // 重置,避免 tab 的数据未清理
179 180 this.objData = {
180 181 type: 'text',
181 182 content: '',
... ...
yudao-ui-admin/src/views/mp/components/wx-reply/main.vue
... ... @@ -29,7 +29,9 @@
29 29 <el-row style="text-align: center">
30 30 <!-- 选择素材 -->
31 31 <el-col :span="12" class="col-select">
32   - <el-button type="success" @click="openMaterial">素材库选择<i class="el-icon-circle-check el-icon--right"></i></el-button>
  32 + <el-button type="success" @click="openMaterial">
  33 + 素材库选择<i class="el-icon-circle-check el-icon--right"></i>
  34 + </el-button>
33 35 </el-col>
34 36 <!-- 文件上传 -->
35 37 <el-col :span="12" class="col-add">
... ... @@ -43,7 +45,7 @@
43 45 </div>
44 46 <!-- 点击选择素材,会打开下面的弹窗 -->
45 47 <el-dialog title="选择图片" :visible.sync="dialogImageVisible" width="90%" append-to-body>
46   - <WxMaterialSelect :objData="objData" @selectMaterial="selectMaterial"></WxMaterialSelect>
  48 + <wx-material-select :obj-data="objData" @selectMaterial="selectMaterial" />
47 49 </el-dialog>
48 50 </el-row>
49 51 </el-tab-pane>
... ... @@ -155,16 +157,16 @@
155 157  
156 158 <script>
157 159 // import { getPage, getMaterialVideo } from '@/api/wxmp/wxmaterial'
  160 + import {getAccessToken} from '@/utils/auth'
158 161 import WxNews from '@/views/mp/components/wx-news/main.vue'
159   - // import WxMaterialSelect from '@/components/wx-material-select/main.vue'
  162 + import WxMaterialSelect from '@/views/mp/components/wx-material-select/main.vue'
160 163 import WxVoicePlayer from '@/views/mp/components/wx-voice-play/main.vue';
161   - import {getAccessToken} from '@/utils/auth'
162 164  
163 165 export default {
164 166 name: "wxReplySelect",
165 167 components: {
166 168 WxNews,
167   - // WxMaterialSelect,
  169 + WxMaterialSelect,
168 170 WxVoicePlayer
169 171 },
170 172 props: {
... ... @@ -403,8 +405,7 @@
403 405 // TODO 芋艿,待实现
404 406 } else if(this.objData.type === 'image'
405 407 || this.objData.type === 'voice') {
406   - this.$delete(this.objData, 'url')
407   - this.$delete(this.objData, 'mediaId')
  408 + this.selectMaterial({}) // 选择一个空的素材
408 409 } else if(this.objData.type === 'video') {
409 410 // TODO 芋艿,待实现
410 411 }
... ...
yudao-ui-admin/src/views/wechatMp/wxMediaUpload/index.vue deleted
1   -<template>
2   - <div class="app-container">
3   -
4   - <!-- 搜索工作栏 -->
5   - <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
6   - <el-form-item label="类型" prop="type">
7   - <el-select v-model="queryParams.type" placeholder="请选择类型" clearable size="small">
8   - <el-option label="请选择字典生成" value=""/>
9   - </el-select>
10   - </el-form-item>
11   - <el-form-item label="图片URL" prop="url">
12   - <el-input v-model="queryParams.url" placeholder="请输入图片URL" clearable @keyup.enter.native="handleQuery"/>
13   - </el-form-item>
14   - <el-form-item label="素材ID" prop="mediaId">
15   - <el-input v-model="queryParams.mediaId" placeholder="请输入素材ID" clearable @keyup.enter.native="handleQuery"/>
16   - </el-form-item>
17   - <el-form-item label="缩略图素材ID" prop="thumbMediaId">
18   - <el-input v-model="queryParams.thumbMediaId" placeholder="请输入缩略图素材ID" clearable
19   - @keyup.enter.native="handleQuery"/>
20   - </el-form-item>
21   - <el-form-item label="微信账号ID" prop="wxAccountId">
22   - <el-input v-model="queryParams.wxAccountId" placeholder="请输入微信账号ID" clearable
23   - @keyup.enter.native="handleQuery"/>
24   - </el-form-item>
25   - <el-form-item label="创建时间">
26   - <el-date-picker v-model="dateRangeCreateTime" style="width: 240px" value-format="yyyy-MM-dd"
27   - type="daterange" range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期"/>
28   - </el-form-item>
29   - <el-form-item>
30   - <el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
31   - <el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
32   - </el-form-item>
33   - </el-form>
34   -
35   - <!-- 操作工具栏 -->
36   - <el-row :gutter="10" class="mb8">
37   - <el-col :span="1.5">
38   - <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
39   - v-hasPermi="['wechatMp:wx-media-upload:create']">新增
40   - </el-button>
41   - </el-col>
42   - <el-col :span="1.5">
43   - <el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport"
44   - :loading="exportLoading"
45   - v-hasPermi="['wechatMp:wx-media-upload:export']">导出
46   - </el-button>
47   - </el-col>
48   - <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
49   - </el-row>
50   -
51   - <!-- 列表 -->
52   - <el-table v-loading="loading" :data="list">
53   - <el-table-column label="主键" align="center" prop="id"/>
54   - <el-table-column label="类型" align="center" prop="type"/>
55   - <el-table-column label="图片URL" align="center" prop="url"/>
56   - <el-table-column label="素材ID" align="center" prop="mediaId"/>
57   - <el-table-column label="缩略图素材ID" align="center" prop="thumbMediaId"/>
58   - <el-table-column label="微信账号ID" align="center" prop="wxAccountId"/>
59   - <el-table-column label="创建时间" align="center" prop="createTime" width="180">
60   - <template slot-scope="scope">
61   - <span>{{ parseTime(scope.row.createTime) }}</span>
62   - </template>
63   - </el-table-column>
64   - <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
65   - <template slot-scope="scope">
66   - <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
67   - v-hasPermi="['wechatMp:wx-media-upload:update']">修改
68   - </el-button>
69   - <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
70   - v-hasPermi="['wechatMp:wx-media-upload:delete']">删除
71   - </el-button>
72   - </template>
73   - </el-table-column>
74   - </el-table>
75   - <!-- 分页组件 -->
76   - <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"
77   - @pagination="getList"/>
78   -
79   - <!-- 对话框(添加 / 修改) -->
80   - <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
81   - <el-form ref="form" :model="form" :rules="rules" label-width="80px">
82   - <el-form-item label="类型" prop="type">
83   - <el-select v-model="form.type" placeholder="请选择类型">
84   - <el-option label="请选择字典生成" value=""/>
85   - </el-select>
86   - </el-form-item>
87   - <el-form-item label="图片URL" prop="url">
88   - <el-input v-model="form.url" placeholder="请输入图片URL"/>
89   - </el-form-item>
90   - <el-form-item label="素材ID" prop="mediaId">
91   - <el-input v-model="form.mediaId" placeholder="请输入素材ID"/>
92   - </el-form-item>
93   - <el-form-item label="缩略图素材ID" prop="thumbMediaId">
94   - <el-input v-model="form.thumbMediaId" placeholder="请输入缩略图素材ID"/>
95   - </el-form-item>
96   - <el-form-item label="微信账号ID" prop="wxAccountId">
97   - <el-input v-model="form.wxAccountId" placeholder="请输入微信账号ID"/>
98   - </el-form-item>
99   - </el-form>
100   - <div slot="footer" class="dialog-footer">
101   - <el-button type="primary" @click="submitForm">确 定</el-button>
102   - <el-button @click="cancel">取 消</el-button>
103   - </div>
104   - </el-dialog>
105   - </div>
106   -</template>
107   -
108   -<script>
109   - import {
110   - createWxMediaUpload,
111   - updateWxMediaUpload,
112   - deleteWxMediaUpload,
113   - getWxMediaUpload,
114   - getWxMediaUploadPage,
115   - exportWxMediaUploadExcel
116   - } from "@/api/wechatMp/wxMediaUpload";
117   -
118   - export default {
119   - name: "WxMediaUpload",
120   - components: {},
121   - data() {
122   - return {
123   - // 遮罩层
124   - loading: true,
125   - // 导出遮罩层
126   - exportLoading: false,
127   - // 显示搜索条件
128   - showSearch: true,
129   - // 总条数
130   - total: 0,
131   - // 微信素材上传表 列表
132   - list: [],
133   - // 弹出层标题
134   - title: "",
135   - // 是否显示弹出层
136   - open: false,
137   - dateRangeCreateTime: [],
138   - // 查询参数
139   - queryParams: {
140   - pageNo: 1,
141   - pageSize: 10,
142   - type: null,
143   - url: null,
144   - mediaId: null,
145   - thumbMediaId: null,
146   - wxAccountId: null,
147   - },
148   - // 表单参数
149   - form: {},
150   - // 表单校验
151   - rules: {}
152   - };
153   - },
154   - created() {
155   - this.getList();
156   - },
157   - methods: {
158   - /** 查询列表 */
159   - getList() {
160   - this.loading = true;
161   - // 处理查询参数
162   - let params = {...this.queryParams};
163   - this.addBeginAndEndTime(params, this.dateRangeCreateTime, 'createTime');
164   - // 执行查询
165   - getWxMediaUploadPage(params).then(response => {
166   - this.list = response.data.list;
167   - this.total = response.data.total;
168   - this.loading = false;
169   - });
170   - },
171   - /** 取消按钮 */
172   - cancel() {
173   - this.open = false;
174   - this.reset();
175   - },
176   - /** 表单重置 */
177   - reset() {
178   - this.form = {
179   - id: undefined,
180   - type: undefined,
181   - url: undefined,
182   - mediaId: undefined,
183   - thumbMediaId: undefined,
184   - wxAccountId: undefined,
185   - };
186   - this.resetForm("form");
187   - },
188   - /** 搜索按钮操作 */
189   - handleQuery() {
190   - this.queryParams.pageNo = 1;
191   - this.getList();
192   - },
193   - /** 重置按钮操作 */
194   - resetQuery() {
195   - this.dateRangeCreateTime = [];
196   - this.resetForm("queryForm");
197   - this.handleQuery();
198   - },
199   - /** 新增按钮操作 */
200   - handleAdd() {
201   - this.reset();
202   - this.open = true;
203   - this.title = "添加微信素材上传表 ";
204   - },
205   - /** 修改按钮操作 */
206   - handleUpdate(row) {
207   - this.reset();
208   - const id = row.id;
209   - getWxMediaUpload(id).then(response => {
210   - this.form = response.data;
211   - this.open = true;
212   - this.title = "修改微信素材上传表 ";
213   - });
214   - },
215   - /** 提交按钮 */
216   - submitForm() {
217   - this.$refs["form"].validate(valid => {
218   - if (!valid) {
219   - return;
220   - }
221   - // 修改的提交
222   - if (this.form.id != null) {
223   - updateWxMediaUpload(this.form).then(response => {
224   - this.$modal.msgSuccess("修改成功");
225   - this.open = false;
226   - this.getList();
227   - });
228   - return;
229   - }
230   - // 添加的提交
231   - createWxMediaUpload(this.form).then(response => {
232   - this.$modal.msgSuccess("新增成功");
233   - this.open = false;
234   - this.getList();
235   - });
236   - });
237   - },
238   - /** 删除按钮操作 */
239   - handleDelete(row) {
240   - const id = row.id;
241   - this.$modal.confirm('是否确认删除微信素材上传表 编号为"' + id + '"的数据项?').then(function () {
242   - return deleteWxMediaUpload(id);
243   - }).then(() => {
244   - this.getList();
245   - this.$modal.msgSuccess("删除成功");
246   - }).catch(() => {
247   - });
248   - },
249   - /** 导出按钮操作 */
250   - handleExport() {
251   - // 处理查询参数
252   - let params = {...this.queryParams};
253   - params.pageNo = undefined;
254   - params.pageSize = undefined;
255   - this.addBeginAndEndTime(params, this.dateRangeCreateTime, 'createTime');
256   - // 执行导出
257   - this.$modal.confirm('是否确认导出所有微信素材上传表 数据项?').then(() => {
258   - this.exportLoading = true;
259   - return exportWxMediaUploadExcel(params);
260   - }).then(response => {
261   - this.$download.excel(response, '微信素材上传表 .xls');
262   - this.exportLoading = false;
263   - }).catch(() => {
264   - });
265   - }
266   - }
267   - };
268   -</script>
yudao-ui-admin/src/views/wechatMp/wxMenu/index.vue deleted
1   -<template>
2   - <div class="app-container">
3   -
4   - <!-- 搜索工作栏 -->
5   - <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
6   - <el-form-item label="父ID" prop="parentId">
7   - <el-input v-model="queryParams.parentId" placeholder="请输入父ID" clearable @keyup.enter.native="handleQuery"/>
8   - </el-form-item>
9   - <el-form-item label="菜单名称" prop="menuName">
10   - <el-input v-model="queryParams.menuName" placeholder="请输入菜单名称" clearable @keyup.enter.native="handleQuery"/>
11   - </el-form-item>
12   - <el-form-item label="菜单类型 1文本消息;2图文消息;3网址链接;4小程序" prop="menuType">
13   - <el-select v-model="queryParams.menuType" placeholder="请选择菜单类型 1文本消息;2图文消息;3网址链接;4小程序" clearable size="small">
14   - <el-option label="请选择字典生成" value=""/>
15   - </el-select>
16   - </el-form-item>
17   - <el-form-item label="菜单等级" prop="menuLevel">
18   - <el-input v-model="queryParams.menuLevel" placeholder="请输入菜单等级" clearable @keyup.enter.native="handleQuery"/>
19   - </el-form-item>
20   - <el-form-item label="模板ID" prop="tplId">
21   - <el-input v-model="queryParams.tplId" placeholder="请输入模板ID" clearable @keyup.enter.native="handleQuery"/>
22   - </el-form-item>
23   - <el-form-item label="菜单URL" prop="menuUrl">
24   - <el-input v-model="queryParams.menuUrl" placeholder="请输入菜单URL" clearable @keyup.enter.native="handleQuery"/>
25   - </el-form-item>
26   - <el-form-item label="排序" prop="menuSort">
27   - <el-input v-model="queryParams.menuSort" placeholder="请输入排序" clearable @keyup.enter.native="handleQuery"/>
28   - </el-form-item>
29   - <el-form-item label="微信账号ID" prop="wxAccountId">
30   - <el-input v-model="queryParams.wxAccountId" placeholder="请输入微信账号ID" clearable
31   - @keyup.enter.native="handleQuery"/>
32   - </el-form-item>
33   - <el-form-item label="小程序appid" prop="miniprogramAppid">
34   - <el-input v-model="queryParams.miniprogramAppid" placeholder="请输入小程序appid" clearable
35   - @keyup.enter.native="handleQuery"/>
36   - </el-form-item>
37   - <el-form-item label="小程序页面路径" prop="miniprogramPagepath">
38   - <el-input v-model="queryParams.miniprogramPagepath" placeholder="请输入小程序页面路径" clearable
39   - @keyup.enter.native="handleQuery"/>
40   - </el-form-item>
41   - <el-form-item label="创建时间">
42   - <el-date-picker v-model="dateRangeCreateTime" style="width: 240px" value-format="yyyy-MM-dd"
43   - type="daterange" range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期"/>
44   - </el-form-item>
45   - <el-form-item>
46   - <el-button type="primary" icon="el-icon-search" @click="handleQuery">搜索</el-button>
47   - <el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
48   - </el-form-item>
49   - </el-form>
50   -
51   - <!-- 操作工具栏 -->
52   - <el-row :gutter="10" class="mb8">
53   - <el-col :span="1.5">
54   - <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd"
55   - v-hasPermi="['wechatMp:wx-menu:create']">新增
56   - </el-button>
57   - </el-col>
58   - <el-col :span="1.5">
59   - <el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport"
60   - :loading="exportLoading"
61   - v-hasPermi="['wechatMp:wx-menu:export']">导出
62   - </el-button>
63   - </el-col>
64   - <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
65   - </el-row>
66   -
67   - <!-- 列表 -->
68   - <el-table v-loading="loading" :data="list">
69   - <el-table-column label="主键" align="center" prop="id"/>
70   - <el-table-column label="父ID" align="center" prop="parentId"/>
71   - <el-table-column label="菜单名称" align="center" prop="menuName"/>
72   - <el-table-column label="菜单类型 1文本消息;2图文消息;3网址链接;4小程序" align="center" prop="menuType"/>
73   - <el-table-column label="菜单等级" align="center" prop="menuLevel"/>
74   - <el-table-column label="模板ID" align="center" prop="tplId"/>
75   - <el-table-column label="菜单URL" align="center" prop="menuUrl"/>
76   - <el-table-column label="排序" align="center" prop="menuSort"/>
77   - <el-table-column label="微信账号ID" align="center" prop="wxAccountId"/>
78   - <el-table-column label="小程序appid" align="center" prop="miniprogramAppid"/>
79   - <el-table-column label="小程序页面路径" align="center" prop="miniprogramPagepath"/>
80   - <el-table-column label="创建时间" align="center" prop="createTime" width="180">
81   - <template slot-scope="scope">
82   - <span>{{ parseTime(scope.row.createTime) }}</span>
83   - </template>
84   - </el-table-column>
85   - <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
86   - <template slot-scope="scope">
87   - <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)"
88   - v-hasPermi="['wechatMp:wx-menu:update']">修改
89   - </el-button>
90   - <el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(scope.row)"
91   - v-hasPermi="['wechatMp:wx-menu:delete']">删除
92   - </el-button>
93   - </template>
94   - </el-table-column>
95   - </el-table>
96   - <!-- 分页组件 -->
97   - <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"
98   - @pagination="getList"/>
99   -
100   - <!-- 对话框(添加 / 修改) -->
101   - <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
102   - <el-form ref="form" :model="form" :rules="rules" label-width="80px">
103   - <el-form-item label="父ID" prop="parentId">
104   - <el-input v-model="form.parentId" placeholder="请输入父ID"/>
105   - </el-form-item>
106   - <el-form-item label="菜单名称" prop="menuName">
107   - <el-input v-model="form.menuName" placeholder="请输入菜单名称"/>
108   - </el-form-item>
109   - <el-form-item label="菜单类型 1文本消息;2图文消息;3网址链接;4小程序" prop="menuType">
110   - <el-select v-model="form.menuType" placeholder="请选择菜单类型 1文本消息;2图文消息;3网址链接;4小程序">
111   - <el-option label="请选择字典生成" value=""/>
112   - </el-select>
113   - </el-form-item>
114   - <el-form-item label="菜单等级" prop="menuLevel">
115   - <el-input v-model="form.menuLevel" placeholder="请输入菜单等级"/>
116   - </el-form-item>
117   - <el-form-item label="模板ID" prop="tplId">
118   - <el-input v-model="form.tplId" placeholder="请输入模板ID"/>
119   - </el-form-item>
120   - <el-form-item label="菜单URL" prop="menuUrl">
121   - <el-input v-model="form.menuUrl" placeholder="请输入菜单URL"/>
122   - </el-form-item>
123   - <el-form-item label="排序" prop="menuSort">
124   - <el-input v-model="form.menuSort" placeholder="请输入排序"/>
125   - </el-form-item>
126   - <el-form-item label="微信账号ID" prop="wxAccountId">
127   - <el-input v-model="form.wxAccountId" placeholder="请输入微信账号ID"/>
128   - </el-form-item>
129   - <el-form-item label="小程序appid" prop="miniprogramAppid">
130   - <el-input v-model="form.miniprogramAppid" placeholder="请输入小程序appid"/>
131   - </el-form-item>
132   - <el-form-item label="小程序页面路径" prop="miniprogramPagepath">
133   - <el-input v-model="form.miniprogramPagepath" placeholder="请输入小程序页面路径"/>
134   - </el-form-item>
135   - </el-form>
136   - <div slot="footer" class="dialog-footer">
137   - <el-button type="primary" @click="submitForm">确 定</el-button>
138   - <el-button @click="cancel">取 消</el-button>
139   - </div>
140   - </el-dialog>
141   - </div>
142   -</template>
143   -
144   -<script>
145   - import {
146   - createWxMenu,
147   - updateWxMenu,
148   - deleteWxMenu,
149   - getWxMenu,
150   - getWxMenuPage,
151   - exportWxMenuExcel
152   - } from "@/api/wechatMp/wxMenu";
153   -
154   - export default {
155   - name: "WxMenu",
156   - components: {},
157   - data() {
158   - return {
159   - // 遮罩层
160   - loading: true,
161   - // 导出遮罩层
162   - exportLoading: false,
163   - // 显示搜索条件
164   - showSearch: true,
165   - // 总条数
166   - total: 0,
167   - // 微信菜单列表
168   - list: [],
169   - // 弹出层标题
170   - title: "",
171   - // 是否显示弹出层
172   - open: false,
173   - dateRangeCreateTime: [],
174   - // 查询参数
175   - queryParams: {
176   - pageNo: 1,
177   - pageSize: 10,
178   - parentId: null,
179   - menuName: null,
180   - menuType: null,
181   - menuLevel: null,
182   - tplId: null,
183   - menuUrl: null,
184   - menuSort: null,
185   - wxAccountId: null,
186   - miniprogramAppid: null,
187   - miniprogramPagepath: null,
188   - },
189   - // 表单参数
190   - form: {},
191   - // 表单校验
192   - rules: {}
193   - };
194   - },
195   - created() {
196   - this.getList();
197   - },
198   - methods: {
199   - /** 查询列表 */
200   - getList() {
201   - this.loading = true;
202   - // 处理查询参数
203   - let params = {...this.queryParams};
204   - this.addBeginAndEndTime(params, this.dateRangeCreateTime, 'createTime');
205   - // 执行查询
206   - getWxMenuPage(params).then(response => {
207   - this.list = response.data.list;
208   - this.total = response.data.total;
209   - this.loading = false;
210   - });
211   - },
212   - /** 取消按钮 */
213   - cancel() {
214   - this.open = false;
215   - this.reset();
216   - },
217   - /** 表单重置 */
218   - reset() {
219   - this.form = {
220   - id: undefined,
221   - parentId: undefined,
222   - menuName: undefined,
223   - menuType: undefined,
224   - menuLevel: undefined,
225   - tplId: undefined,
226   - menuUrl: undefined,
227   - menuSort: undefined,
228   - wxAccountId: undefined,
229   - miniprogramAppid: undefined,
230   - miniprogramPagepath: undefined,
231   - };
232   - this.resetForm("form");
233   - },
234   - /** 搜索按钮操作 */
235   - handleQuery() {
236   - this.queryParams.pageNo = 1;
237   - this.getList();
238   - },
239   - /** 重置按钮操作 */
240   - resetQuery() {
241   - this.dateRangeCreateTime = [];
242   - this.resetForm("queryForm");
243   - this.handleQuery();
244   - },
245   - /** 新增按钮操作 */
246   - handleAdd() {
247   - this.reset();
248   - this.open = true;
249   - this.title = "添加微信菜单";
250   - },
251   - /** 修改按钮操作 */
252   - handleUpdate(row) {
253   - this.reset();
254   - const id = row.id;
255   - getWxMenu(id).then(response => {
256   - this.form = response.data;
257   - this.open = true;
258   - this.title = "修改微信菜单";
259   - });
260   - },
261   - /** 提交按钮 */
262   - submitForm() {
263   - this.$refs["form"].validate(valid => {
264   - if (!valid) {
265   - return;
266   - }
267   - // 修改的提交
268   - if (this.form.id != null) {
269   - updateWxMenu(this.form).then(response => {
270   - this.$modal.msgSuccess("修改成功");
271   - this.open = false;
272   - this.getList();
273   - });
274   - return;
275   - }
276   - // 添加的提交
277   - createWxMenu(this.form).then(response => {
278   - this.$modal.msgSuccess("新增成功");
279   - this.open = false;
280   - this.getList();
281   - });
282   - });
283   - },
284   - /** 删除按钮操作 */
285   - handleDelete(row) {
286   - const id = row.id;
287   - this.$modal.confirm('是否确认删除微信菜单编号为"' + id + '"的数据项?').then(function () {
288   - return deleteWxMenu(id);
289   - }).then(() => {
290   - this.getList();
291   - this.$modal.msgSuccess("删除成功");
292   - }).catch(() => {
293   - });
294   - },
295   - /** 导出按钮操作 */
296   - handleExport() {
297   - // 处理查询参数
298   - let params = {...this.queryParams};
299   - params.pageNo = undefined;
300   - params.pageSize = undefined;
301   - this.addBeginAndEndTime(params, this.dateRangeCreateTime, 'createTime');
302   - // 执行导出
303   - this.$modal.confirm('是否确认导出所有微信菜单数据项?').then(() => {
304   - this.exportLoading = true;
305   - return exportWxMenuExcel(params);
306   - }).then(response => {
307   - this.$download.excel(response, '微信菜单.xls');
308   - this.exportLoading = false;
309   - }).catch(() => {
310   - });
311   - }
312   - }
313   - };
314   -</script>