diff --git a/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/repository/manage/entity/WikiSpace.java b/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/repository/manage/entity/WikiSpace.java index b4a579c1..c5422d10 100644 --- a/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/repository/manage/entity/WikiSpace.java +++ b/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/repository/manage/entity/WikiSpace.java @@ -1,9 +1,10 @@ package com.zyplayer.doc.data.repository.manage.entity; import com.baomidou.mybatisplus.annotation.IdType; -import java.util.Date; import com.baomidou.mybatisplus.annotation.TableId; + import java.io.Serializable; +import java.util.Date; /** *

@@ -48,6 +49,16 @@ public class WikiSpace implements Serializable { */ private Integer treeLazyLoad; + /** + * 是否是开放文档 0=否 1=是 + */ + private Integer openDoc; + + /** + * 唯一UUID + */ + private String uuid; + /** * 创建人ID */ @@ -110,6 +121,20 @@ public class WikiSpace implements Serializable { public void setTreeLazyLoad(Integer treeLazyLoad) { this.treeLazyLoad = treeLazyLoad; } + public Integer getOpenDoc() { + return openDoc; + } + + public void setOpenDoc(Integer openDoc) { + this.openDoc = openDoc; + } + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } public Long getCreateUserId() { return createUserId; } @@ -148,6 +173,8 @@ public class WikiSpace implements Serializable { ", spaceExplain=" + spaceExplain + ", editType=" + editType + ", treeLazyLoad=" + treeLazyLoad + + ", openDoc=" + openDoc + + ", uuid=" + uuid + ", createUserId=" + createUserId + ", createUserName=" + createUserName + ", createTime=" + createTime + diff --git a/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/repository/manage/mapper/WikiSpaceMapper.java b/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/repository/manage/mapper/WikiSpaceMapper.java index 094f8264..26bfcdea 100644 --- a/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/repository/manage/mapper/WikiSpaceMapper.java +++ b/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/repository/manage/mapper/WikiSpaceMapper.java @@ -9,7 +9,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; *

* * @author 暮光:城中城 - * @since 2019-03-11 + * @since 2019-03-13 */ public interface WikiSpaceMapper extends BaseMapper { diff --git a/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/service/manage/WikiSpaceService.java b/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/service/manage/WikiSpaceService.java index e0873543..aecdd80d 100644 --- a/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/service/manage/WikiSpaceService.java +++ b/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/service/manage/WikiSpaceService.java @@ -9,7 +9,7 @@ import com.baomidou.mybatisplus.extension.service.IService; *

* * @author 暮光:城中城 - * @since 2019-03-11 + * @since 2019-03-13 */ public interface WikiSpaceService extends IService { diff --git a/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/service/manage/impl/WikiSpaceServiceImpl.java b/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/service/manage/impl/WikiSpaceServiceImpl.java index 5f0781cd..257d8933 100644 --- a/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/service/manage/impl/WikiSpaceServiceImpl.java +++ b/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/service/manage/impl/WikiSpaceServiceImpl.java @@ -12,7 +12,7 @@ import org.springframework.stereotype.Service; *

* * @author 暮光:城中城 - * @since 2019-03-11 + * @since 2019-03-13 */ @Service public class WikiSpaceServiceImpl extends ServiceImpl implements WikiSpaceService { diff --git a/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/framework/config/security/WebSecurityConfig.java b/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/framework/config/security/WebSecurityConfig.java index 3a0f5f2c..f93bd5be 100644 --- a/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/framework/config/security/WebSecurityConfig.java +++ b/zyplayer-doc-manage/src/main/java/com/zyplayer/doc/manage/framework/config/security/WebSecurityConfig.java @@ -49,6 +49,7 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter { "/login/**", "/static/manage/login.html", // 开放接口的静态文件和接口 "/open-doc.html", "/webjars/open-doc/**", "/swagger-mg-ui/open-doc/**", + "/open-wiki.html", "/webjars/doc-wiki/**", "/zyplayer-doc-wiki/open-api/**", // http代理请求接口,有白名单限制,也不怕随便请求到内网资源了 "/swagger-mg-ui/http/**", // 静态资源 diff --git a/zyplayer-doc-manage/src/main/resources/sql/zyplayer_doc_manage.1.0.1.sql b/zyplayer-doc-manage/src/main/resources/sql/zyplayer_doc_manage.1.0.1.sql index 5a46f4c1..61fac84e 100644 --- a/zyplayer-doc-manage/src/main/resources/sql/zyplayer_doc_manage.1.0.1.sql +++ b/zyplayer-doc-manage/src/main/resources/sql/zyplayer_doc_manage.1.0.1.sql @@ -1,17 +1,17 @@ /* Navicat Premium Data Transfer - Source Server : localhost + Source Server : 127.0.0.1 Source Server Type : MySQL - Source Server Version : 50725 - Source Host : localhost:3306 + Source Server Version : 50724 + Source Host : 127.0.0.1:3306 Source Schema : zyplayer_doc_manage Target Server Type : MySQL - Target Server Version : 50725 + Target Server Version : 50724 File Encoding : 65001 - Date: 11/03/2019 23:20:13 + Date: 13/03/2019 19:36:34 */ SET NAMES utf8mb4; @@ -116,17 +116,18 @@ CREATE TABLE `wiki_page` ( `update_time` datetime(0) NULL DEFAULT NULL COMMENT '修改时间', `del_flag` tinyint(4) NOT NULL DEFAULT 0 COMMENT '0=有效 1=删除', PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 7 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; +) ENGINE = InnoDB AUTO_INCREMENT = 9 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of wiki_page -- ---------------------------- -INSERT INTO `wiki_page` VALUES (1, 1, '关于zyplayer-doc工具', 0, 0, 0, 1, 1, '暮光:城中城', '2019-03-09 14:01:41', 1, '暮光:城中城', '2019-03-09 15:30:22', 0); -INSERT INTO `wiki_page` VALUES (2, 1, '开发规划', 0, 0, 0, 1, 1, '暮光:城中城', '2019-03-09 14:14:02', 1, '暮光:城中城', '2019-03-09 15:43:58', 0); -INSERT INTO `wiki_page` VALUES (3, 1, '升级日志', 0, 0, 0, 1, 1, '暮光:城中城', '2019-03-09 14:16:20', 1, '暮光:城中城', '2019-03-09 15:46:05', 0); -INSERT INTO `wiki_page` VALUES (4, 1, '贡献人员列表', 0, 0, 0, 1, 1, '暮光:城中城', '2019-03-09 15:16:15', 1, '暮光:城中城', '2019-03-11 23:19:15', 0); -INSERT INTO `wiki_page` VALUES (5, 1, 'zyplayer-doc-swagger', 0, 0, 0, 1, 1, '暮光:城中城', '2019-03-09 15:33:14', NULL, NULL, NULL, 0); -INSERT INTO `wiki_page` VALUES (6, 1, '如何使用', 5, 0, 0, 1, 1, '暮光:城中城', '2019-03-09 15:33:33', 1, '暮光:城中城', '2019-03-09 15:33:46', 0); +INSERT INTO `wiki_page` VALUES (1, 1, '关于zyplayer-doc工具', 0, 0, 0, 0, 1, '暮光:城中城', '2019-03-09 14:01:41', 1, '暮光:城中城', '2019-03-09 15:30:22', 0); +INSERT INTO `wiki_page` VALUES (2, 1, '开发规划', 0, 0, 0, 0, 1, '暮光:城中城', '2019-03-09 14:14:02', 1, '暮光:城中城', '2019-03-09 15:43:58', 0); +INSERT INTO `wiki_page` VALUES (3, 1, '升级日志', 0, 0, 0, 0, 1, '暮光:城中城', '2019-03-09 14:16:20', 1, '暮光:城中城', '2019-03-09 15:46:05', 0); +INSERT INTO `wiki_page` VALUES (4, 1, '贡献人员列表', 0, 0, 0, 0, 1, '暮光:城中城', '2019-03-09 15:16:15', 1, '暮光:城中城', '2019-03-13 17:43:12', 0); +INSERT INTO `wiki_page` VALUES (5, 1, 'zyplayer-doc-swagger', 0, 0, 0, 0, 1, '暮光:城中城', '2019-03-09 15:33:14', NULL, NULL, NULL, 0); +INSERT INTO `wiki_page` VALUES (6, 1, '如何使用', 5, 0, 0, 0, 1, '暮光:城中城', '2019-03-09 15:33:33', 1, '暮光:城中城', '2019-03-09 15:33:46', 0); +INSERT INTO `wiki_page` VALUES (7, 2, '所有格式测试', 0, 0, 0, 0, 1, '暮光:城中城', '2019-03-12 12:21:26', NULL, NULL, NULL, 0); -- ---------------------------- -- Table structure for wiki_page_comment @@ -161,17 +162,19 @@ CREATE TABLE `wiki_page_content` ( `update_time` datetime(0) NULL DEFAULT NULL COMMENT '修改时间', PRIMARY KEY (`id`) USING BTREE, UNIQUE INDEX `uk_page_id`(`page_id`) USING BTREE COMMENT '页面ID' -) ENGINE = InnoDB AUTO_INCREMENT = 7 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; +) ENGINE = InnoDB AUTO_INCREMENT = 9 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of wiki_page_content -- ---------------------------- + INSERT INTO `wiki_page_content` VALUES (1, 1, '

一入开源深似海


源码地址:https://gitee.com/zyplayer/zyplayer-doc

体验地址:http://doc.zyplayer.com/zyplayer-doc-manage/static/manage/home.html 账号:zyplayer 密码:123456


更多实用功能请提交评论或加群交流!谢谢!

QQ群:466363173

tips:想要编辑本文请修改表:wiki_page的edit_type字段值为0才行哦~


有什么问题可以来评论本文章哦!当然,如果你是部署在你们自己本地的我肯定看不到此文章的评论

可以到本工具官网下评论此文章,我会随时去查看的!

唯一官网地址:http://doc.zyplayer.com


欢迎提交各种变态无理的要求~

', 1, '暮光:城中城', '2019-03-09 14:01:41', 1, '暮光:城中城', '2019-03-09 15:30:22'); INSERT INTO `wiki_page_content` VALUES (2, 2, '

zyplayer-doc-manage:

1、首页做大的调整优化,希望使用element重构一下

2、人员导入方案,权限优化,人员管理细化

 

zyplayer-doc-wiki:

1、支持页面权限控制,包括查看、编辑、删除、评论的权限

2支持把一个空间里的文档一键同步到git的wiki上,统一管理文档

3、支持微信文章拉取保存

4、支持历史记录查看

5、支持提供多种编辑器选择,更大的选择空间

6、支持全局搜索、文章内搜索等,当前只支持标题搜索,尴尬

7、支持开放一个空间里的文档无需登录即可访问

8、url动态变动,这样就可以复制指定文章的地址了

9、参考https://www.kancloud.cn,取其精华


欢迎加入开发!

如果您觉得哪里不好用也可以拉取源码下来改了后提交PR

源码地址:https://gitee.com/zyplayer/zyplayer-doc


更多实用功能请提交评论或加群交流!谢谢!

QQ群:466363173

', 1, '暮光:城中城', '2019-03-09 14:14:02', 1, '暮光:城中城', '2019-03-09 15:43:58'); INSERT INTO `wiki_page_content` VALUES (3, 3, '

V1.0.1 2019-03-09

1、增加zyplayer-doc-wiki模块

  • 支持空间隔离
  • 支持附件上传
  • 拖动可以改变wiki顺序
  • 基本的文档创建、编辑、评论、删除、搜索等功能

2、dubbo文档支持使用元数据生成参数和返回值,dubbo2.7.0新特性

3、框架进行了大的拆分,表修改较多

4、增加升级通知

5、细节优化


V1.0.0 2019-02-15

第一个版本发布

1、zyplayer-doc-swagger,swagger接口文档展示方案,在之前的项目中有许多改进,坚持文档生成和展示分离,有较多需要服务端支持的功能,不对各项目做过多的入侵即可使用,可动态对文档进行开放访问
2、zyplayer-doc-dubbo,支持对dubbo服务的自动扫描,直观展示所有的服务,文档的展示、文档编辑和在线接口调试,不需要对已有的服务做任何改动,支持zookeeper、nacos注册中心的服务扫描
3、zyplayer-doc-db,数据库文档工具,具有数据库表、字段文档的查看/修改,文档导出等功能,支持mysql和sqlserver数据库
4、zyplayer-doc-manage,管理以上几个服务,spring boot项目,spring security做权限管理,可直接运行

', 1, '暮光:城中城', '2019-03-09 14:16:20', 1, '暮光:城中城', '2019-03-09 15:46:05'); -INSERT INTO `wiki_page_content` VALUES (4, 4, '

开发人员列表:

暮光:城中城


', 1, '暮光:城中城', '2019-03-09 15:16:15', 1, '暮光:城中城', '2019-03-11 23:19:15'); +INSERT INTO `wiki_page_content` VALUES (4, 4, '

开发人员列表:

暮光:城中城

', 1, '暮光:城中城', '2019-03-09 15:16:15', 1, '暮光:城中城', '2019-03-13 17:43:12'); INSERT INTO `wiki_page_content` VALUES (5, 5, '

zyplayer-doc-swagger 使用文档目录

', 1, '暮光:城中城', '2019-03-09 15:33:14', NULL, NULL, NULL); INSERT INTO `wiki_page_content` VALUES (6, 6, '

最不喜欢写文档了。。。

', 1, '暮光:城中城', '2019-03-09 15:33:33', 1, '暮光:城中城', '2019-03-09 15:33:46'); +INSERT INTO `wiki_page_content` VALUES (7, 7, '

H2

加粗

字体大小

宋体宋体宋体宋体宋体 

斜体斜体斜体

下划线下划线下划线

删除线删除线删除线

字体颜色

背景颜色

链接:百度一下

  1. 有序列表
  2. xxx
  3. xxx
  • 无序列表
  • xxx
  • xxx

文字居中

文字靠右

xxxxx

表情:\"[坏笑]\"

表格:

 ID 名字 邮箱 说明 时间
 xx xx xx xx xx
     

代码:

public static void main(String[] args) {
System.out.println(\"hello world\");
}


', 1, '暮光:城中城', '2019-03-12 12:21:26', NULL, NULL, NULL); -- ---------------------------- -- Table structure for wiki_page_file @@ -207,13 +210,12 @@ CREATE TABLE `wiki_page_zan` ( `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', `yn` tinyint(4) NULL DEFAULT NULL COMMENT '是否有效 0=无效 1=有效', PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; +) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of wiki_page_zan -- ---------------------------- INSERT INTO `wiki_page_zan` VALUES (1, 1, NULL, 1, '暮光:城中城', '2019-03-09 22:19:44', 0); -INSERT INTO `wiki_page_zan` VALUES (2, 2, NULL, 1, '暮光:城中城', '2019-03-11 23:18:43', 0); -- ---------------------------- -- Table structure for wiki_space @@ -226,18 +228,21 @@ CREATE TABLE `wiki_space` ( `space_explain` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '描述', `edit_type` tinyint(4) NOT NULL DEFAULT 0 COMMENT '编辑类型 0=可编辑 1=不允许编辑', `tree_lazy_load` tinyint(4) NOT NULL DEFAULT 0 COMMENT '目录延迟加载 0=否 1=是', + `open_doc` tinyint(4) NOT NULL DEFAULT 0 COMMENT '是否是开放文档 0=否 1=是', + `uuid` varchar(40) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '唯一UUID', `create_user_id` bigint(20) NULL DEFAULT NULL COMMENT '创建人ID', `create_user_name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '创建人名字', `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', `del_flag` tinyint(4) NOT NULL DEFAULT 0 COMMENT '删除标记 0=正常 1=已删除', PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; +) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of wiki_space -- ---------------------------- -INSERT INTO `wiki_space` VALUES (1, 'zyplayer-doc交流专用', 1, '交流本工具的空间', 1, 0, 1, '暮光:城中城', '2019-03-09 13:59:14', 0); -INSERT INTO `wiki_space` VALUES (2, '体验专用空间', 1, '', 1, 0, 1, '暮光:城中城', '2019-03-09 14:24:30', 0); +INSERT INTO `wiki_space` VALUES (1, 'zyplayer-doc交流专用', 1, '', 0, 0, 1, '23f3f59a60824d21af9f7c3bbc9bc3cb', 1, '暮光:城中城', '2019-03-09 13:59:14', 0); +INSERT INTO `wiki_space` VALUES (2, '体验专用空间', 2, '', 0, 0, 0, '91995a9a67bf45db9b5e58266517393e', 1, '暮光:城中城', '2019-03-09 14:24:30', 0); +INSERT INTO `wiki_space` VALUES (3, 'xxx', 1, '', 0, 0, 0, 'cb2f5ff14d8d4066a79249d317eaa449', 1, '暮光:城中城', '2019-03-13 17:44:53', 1); -- ---------------------------- -- Table structure for zyplayer_storage @@ -246,14 +251,15 @@ DROP TABLE IF EXISTS `zyplayer_storage`; CREATE TABLE `zyplayer_storage` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键自增ID', `doc_key` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '参数名字', - `doc_value` varchar(2048) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '参数值', + `doc_value` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '参数值', `creation_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', PRIMARY KEY (`id`) USING BTREE, UNIQUE INDEX `key`(`doc_key`) USING BTREE COMMENT 'key唯一索引' -) ENGINE = InnoDB AUTO_INCREMENT = 48 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '存储网页上相关的数据' ROW_FORMAT = Compact; +) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '存储网页上相关的数据' ROW_FORMAT = Compact; -- ---------------------------- -- Records of zyplayer_storage -- ---------------------------- + SET FOREIGN_KEY_CHECKS = 1; diff --git a/zyplayer-doc-wiki/src/main/java/com/zyplayer/doc/wiki/controller/WikiOpenApiController.java b/zyplayer-doc-wiki/src/main/java/com/zyplayer/doc/wiki/controller/WikiOpenApiController.java new file mode 100644 index 00000000..4cc53966 --- /dev/null +++ b/zyplayer-doc-wiki/src/main/java/com/zyplayer/doc/wiki/controller/WikiOpenApiController.java @@ -0,0 +1,114 @@ +package com.zyplayer.doc.wiki.controller; + +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.zyplayer.doc.core.json.DocResponseJson; +import com.zyplayer.doc.core.json.ResponseJson; +import com.zyplayer.doc.data.repository.manage.entity.WikiPage; +import com.zyplayer.doc.data.repository.manage.entity.WikiPageContent; +import com.zyplayer.doc.data.repository.manage.entity.WikiPageFile; +import com.zyplayer.doc.data.repository.manage.entity.WikiSpace; +import com.zyplayer.doc.data.service.manage.WikiPageContentService; +import com.zyplayer.doc.data.service.manage.WikiPageFileService; +import com.zyplayer.doc.data.service.manage.WikiPageService; +import com.zyplayer.doc.data.service.manage.WikiSpaceService; +import com.zyplayer.doc.wiki.controller.vo.WikiPageContentVo; +import com.zyplayer.doc.wiki.controller.vo.WikiPageVo; +import org.dozer.Mapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.stream.Collectors; + +/** + * 文档控制器 + * + * @author 暮光:城中城 + * @since 2019年2月17日 + */ +@RestController +@RequestMapping("/zyplayer-doc-wiki/open-api") +public class WikiOpenApiController { + private static Logger logger = LoggerFactory.getLogger(WikiOpenApiController.class); + + @Resource + WikiPageService wikiPageService; + @Resource + WikiSpaceService wikiSpaceService; + @Resource + WikiPageContentService wikiPageContentService; + @Resource + WikiPageFileService wikiPageFileService; + @Resource + Mapper mapper; + + @PostMapping("/page/list") + public ResponseJson> list(String space) { + UpdateWrapper wrapperSpace = new UpdateWrapper<>(); + wrapperSpace.eq("uuid", space); + WikiSpace wikiSpace = wikiSpaceService.getOne(wrapperSpace); + // 不存在或未开放 + if (wikiSpace == null || wikiSpace.getOpenDoc() != 1) { + return DocResponseJson.warn("未找到该文档"); + } + UpdateWrapper wrapper = new UpdateWrapper<>(); + wrapper.eq("del_flag", 0); + wrapper.eq("space_id", wikiSpace.getId()); + List authList = wikiPageService.list(wrapper); + Map> listMap = authList.stream().map(val -> mapper.map(val, WikiPageVo.class)).collect(Collectors.groupingBy(WikiPageVo::getParentId)); + List nodePageList = listMap.get(0L); + this.setChildren(listMap, nodePageList); + return DocResponseJson.ok(nodePageList); + } + + @PostMapping("/page/detail") + public ResponseJson detail(String space, Long pageId) { + UpdateWrapper wrapperSpace = new UpdateWrapper<>(); + wrapperSpace.eq("uuid", space); + WikiSpace wikiSpace = wikiSpaceService.getOne(wrapperSpace); + // 不存在或未开放 + if (wikiSpace == null || wikiSpace.getOpenDoc() != 1) { + return DocResponseJson.warn("未找到该文档"); + } + WikiPage wikiPageSel = wikiPageService.getById(pageId); + // 不存在或不属于该空间 + if (wikiPageSel == null || !Objects.equals(wikiPageSel.getSpaceId(), wikiSpace.getId())) { + return DocResponseJson.warn("未找到该文档"); + } + UpdateWrapper wrapper = new UpdateWrapper<>(); + wrapper.eq("page_id", pageId); + WikiPageContent pageContent = wikiPageContentService.getOne(wrapper); + UpdateWrapper wrapperFile = new UpdateWrapper<>(); + wrapperFile.eq("page_id", pageId); + wrapperFile.eq("del_flag", 0); + List pageFiles = wikiPageFileService.list(wrapperFile); + for (WikiPageFile pageFile : pageFiles) { + pageFile.setFileUrl("zyplayer-doc-wiki/common/file?uuid=" + pageFile.getUuid()); + } + WikiPageContentVo vo = new WikiPageContentVo(); + vo.setWikiPage(wikiPageSel); + vo.setPageContent(pageContent); + vo.setFileList(pageFiles); + return DocResponseJson.ok(vo); + } + + private void setChildren(Map> listMap, List nodePageList) { + if (nodePageList == null || listMap == null) { + return; + } + for (WikiPageVo page : nodePageList) { + List wikiPageVos = listMap.get(page.getId()); + if (wikiPageVos != null && wikiPageVos.size() > 0) { + page.setChildren(wikiPageVos); + this.setChildren(listMap, wikiPageVos); + } + } + } +} + diff --git a/zyplayer-doc-wiki/src/main/java/com/zyplayer/doc/wiki/controller/WikiPageController.java b/zyplayer-doc-wiki/src/main/java/com/zyplayer/doc/wiki/controller/WikiPageController.java index 3f8be220..72600d0e 100644 --- a/zyplayer-doc-wiki/src/main/java/com/zyplayer/doc/wiki/controller/WikiPageController.java +++ b/zyplayer-doc-wiki/src/main/java/com/zyplayer/doc/wiki/controller/WikiPageController.java @@ -24,10 +24,7 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; -import java.util.Date; -import java.util.List; -import java.util.Map; -import java.util.Objects; +import java.util.*; import java.util.stream.Collectors; /** @@ -106,7 +103,8 @@ public class WikiPageController { DocUserDetails currentUser = DocUserUtil.getCurrentUser(); WikiPageContent pageContent = new WikiPageContent(); pageContent.setContent(content); - if (wikiPage.getDelFlag() == 0 && StringUtils.isBlank(wikiPage.getName())) { + Integer delFlag = Optional.ofNullable(wikiPage.getDelFlag()).orElse(0); + if (delFlag == 0 && StringUtils.isBlank(wikiPage.getName())) { return DocResponseJson.warn("标题不能为空!"); } Long id = wikiPage.getId(); diff --git a/zyplayer-doc-wiki/src/main/java/com/zyplayer/doc/wiki/controller/WikiSpaceController.java b/zyplayer-doc-wiki/src/main/java/com/zyplayer/doc/wiki/controller/WikiSpaceController.java index d592f85b..86db9f9f 100644 --- a/zyplayer-doc-wiki/src/main/java/com/zyplayer/doc/wiki/controller/WikiSpaceController.java +++ b/zyplayer-doc-wiki/src/main/java/com/zyplayer/doc/wiki/controller/WikiSpaceController.java @@ -1,5 +1,6 @@ package com.zyplayer.doc.wiki.controller; +import cn.hutool.core.util.RandomUtil; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.zyplayer.doc.core.json.DocResponseJson; import com.zyplayer.doc.core.json.ResponseJson; @@ -37,14 +38,8 @@ public class WikiSpaceController { DocUserDetails currentUser = DocUserUtil.getCurrentUser(); UpdateWrapper wrapper = new UpdateWrapper<>(); wrapper.eq("del_flag", 0); - if(wikiSpace.getType() == null) { - wrapper.in("type", 1, 2); - } else if(wikiSpace.getType() == 1 || wikiSpace.getType() == 2) { - wrapper.eq(wikiSpace.getType() != null, "type", wikiSpace.getType()); - wrapper.eq(Objects.equals(wikiSpace.getType(), 2), "create_user_id", wikiSpace.getCreateUserId()); - } else if(wikiSpace.getType() == 3) { - wrapper.eq("create_user_id", currentUser.getUserId()); - } + wrapper.in("type", 1, 2); + //wrapper.or().eq("type", 3).eq("create_user_id", currentUser.getUserId()); List authList = wikiSpaceService.list(wrapper); return DocResponseJson.ok(authList); } @@ -57,9 +52,11 @@ public class WikiSpaceController { if (Objects.equals(wikiSpaceSel.getEditType(), 1)) { return DocResponseJson.warn("当前空间不允许编辑!"); } + wikiSpace.setUuid(null); wikiSpaceService.updateById(wikiSpace); } else { DocUserDetails currentUser = DocUserUtil.getCurrentUser(); + wikiSpace.setUuid(RandomUtil.simpleUUID()); wikiSpace.setCreateTime(new Date()); wikiSpace.setCreateUserId(currentUser.getUserId()); wikiSpace.setCreateUserName(currentUser.getUsername()); diff --git a/zyplayer-doc-wiki/src/main/resources/doc-wiki.html b/zyplayer-doc-wiki/src/main/resources/doc-wiki.html index c01caae9..2690c83c 100644 --- a/zyplayer-doc-wiki/src/main/resources/doc-wiki.html +++ b/zyplayer-doc-wiki/src/main/resources/doc-wiki.html @@ -33,7 +33,9 @@ + :expand-on-click-node="false" :default-expanded-keys="wikiPageExpandedKeys" + node-key="id" + style="background-color: #fafafa;"> @@ -168,9 +170,28 @@ - + + + + + + + + + + + + + + + + + + + + 保存修改 立即创建 @@ -184,6 +205,12 @@ + + + @@ -254,7 +281,7 @@ nowSpaceShow: {}, newSpaceDialogVisible: false, manageSpaceDialogVisible: false, - newSpaceForm: {id: '', name: '', spaceExplain: '', treeLazyLoad: 0}, + newSpaceForm: {id: '', name: '', spaceExplain: '', treeLazyLoad: 0, openDoc: 0, uuid: '', type: 1}, newSpaceFormRules: { name: [ {required: true, message: '请输入空间名', trigger: 'blur'}, @@ -272,6 +299,7 @@ // 页面展示相关 wikiPageList:[], wikiPage: {}, + wikiPageExpandedKeys: [], pageContent: {}, pageFileList: [], uploadFileList: [], @@ -282,14 +310,33 @@ commentTextInput: "", commentList: [], recommentInfo: {}, + // 页面跳转相关 + initOver: false, + urlParam: { + pageId: 0 + }, } }, watch: { - + urlParam: { + handler(newVal, oldVal) { + if (!this.initOver) return; + var params = urlToParam(newVal).slice(1); + window.history.pushState(null, null, '?' + params); + console.log(newVal, oldVal, params); + var oldPageId = oldVal.pageId || 0; + if (!!newVal.pageId && newVal.pageId > 0 && newVal.pageId !== oldPageId) { + this.wikiPageExpandedKeys = [parseInt(newVal.pageId)]; + this.loadPageDetail(newVal.pageId); + } + }, + deep: true, immediate: true + } }, mounted: function () { this.init(); this.loadSpaceList(); + this.initOver = true; }, methods: { filterPageNode(value, data) { @@ -299,7 +346,7 @@ editSpaceInfo(row) { app.newSpaceForm = { id: row.id, name: row.name, spaceExplain: row.spaceExplain, - treeLazyLoad: row.treeLazyLoad + treeLazyLoad: row.treeLazyLoad, openDoc: row.openDoc, type: row.type }; app.newSpaceDialogVisible = true; }, @@ -356,6 +403,8 @@ var param = { id: app.newSpaceForm.id, name: app.newSpaceForm.name, + type: app.newSpaceForm.type, + openDoc: app.newSpaceForm.openDoc, spaceExplain: app.newSpaceForm.spaceExplain, treeLazyLoad: app.newSpaceForm.treeLazyLoad, }; @@ -374,7 +423,7 @@ app.rightContentType = 0; app.doGetPageList(null); } - app.newSpaceForm = {id: '', name: '', spaceExplain: '', treeLazyLoad: 0}; + app.newSpaceForm = {id: '', name: '', spaceExplain: '', treeLazyLoad: 0, openDoc: 0, uuid: '', type: 1}; app.newSpaceDialogVisible = false; } }); @@ -493,7 +542,7 @@ cancelButtonText: '继续编辑', type: 'warning' }).then(() => { - if (isEmpty(this.lastClickNode.label)) { + if (isEmpty(this.lastClickNode.name)) { this.rightContentType = 0; } else { this.rightContentType = 1; @@ -541,7 +590,7 @@ }, spaceChangeEvents(data) { if (data == 0) { - app.newSpaceForm = {id: '', name: '', spaceExplain: '', treeLazyLoad: 0}; + app.newSpaceForm = {id: '', name: '', spaceExplain: '', treeLazyLoad: 0, openDoc: 0, uuid: '', type: 1}; app.choiceSpace = app.nowSpaceId; app.newSpaceDialogVisible = true; } else if (data == -1) { @@ -590,6 +639,7 @@ app.pageContent = json.data.pageContent || {}; app.pageFileList = json.data.fileList || []; app.uploadFormData = {pageId: app.wikiPage.id}; + app.urlParam.pageId = app.wikiPage.id; } }); this.loadCommentList(pageId); @@ -681,6 +731,23 @@ page.newPageContentEditor.customConfig.zIndex = 100; page.newPageContentEditor.customConfig.pasteFilterStyle = false; page.newPageContentEditor.create(); + // 初始化页面参数 + var url = document.location.toString(); + if (url.indexOf("?") >= 0) { + var urlParam = {}; + for (var key in this.urlParam) { + urlParam[key] = this.urlParam[key]; + } + var params = url.split("?")[1]; + var paramArr = params.split("&"); + for (var i = 0; i < paramArr.length; i++) { + if (paramArr[i].indexOf("=") > 0) { + var param = paramArr[i].split("="); + urlParam[param[0]] = param[1]; + } + } + this.urlParam = urlParam; + } } } }); diff --git a/zyplayer-doc-wiki/src/main/resources/open-wiki.html b/zyplayer-doc-wiki/src/main/resources/open-wiki.html new file mode 100644 index 00000000..862bcdfa --- /dev/null +++ b/zyplayer-doc-wiki/src/main/resources/open-wiki.html @@ -0,0 +1,310 @@ + + + + + + wiki文档管理系统 + + + + + +
+ + +
+ + + + + +
本文档使用zyplayer-doc构建
+
+
+ + + +
欢迎使用在线文档
+
+ {{nowSpaceShow.name}} + · {{nowSpaceShow.spaceExplain}} +
+
+ + +
+
{{wikiPage.name}}
+
+ 最后修改:{{wikiPage.updateTime}} +
+
+ + + + + + +
+
+
+
+
+
+
+
+
+ + + + + zyplayer-doc + + + 暮光:城中城 + + + 欢迎加群讨论,QQ群号:466363173,欢迎提交需求,欢迎使用和加入开发! + + + +
+ + + + + + + + + + + + + + + diff --git a/zyplayer-doc-wiki/src/main/resources/webjars/doc-wiki/js/common.js b/zyplayer-doc-wiki/src/main/resources/webjars/doc-wiki/js/common.js index 7af28afc..a32af8bf 100644 --- a/zyplayer-doc-wiki/src/main/resources/webjars/doc-wiki/js/common.js +++ b/zyplayer-doc-wiki/src/main/resources/webjars/doc-wiki/js/common.js @@ -35,6 +35,21 @@ function validateResult(result) { return false; } +function urlToParam(param, key, encode) { + if (param == null) return ''; + var paramStr = ''; + var t = typeof (param); + if (t == 'string' || t == 'number' || t == 'boolean') { + paramStr += '&' + key + '=' + ((encode == null || encode) ? encodeURIComponent(param) : param); + } else { + for (var i in param) { + var k = key == null ? i : key + (param instanceof Array ? '[' + i + ']' : '.' + i); + paramStr += urlToParam(param[i], k, encode); + } + } + return paramStr; +} + function getNowDate() { var date = new Date(); var month = date.getMonth() + 1;