用 Laravel 开发的一款文档管理系统

Wizard 是一款开源文档管理系统,项目地址为 https://github.com/mylxsw/wizard。这个项目是 在2017年就开始开发的,起初只是想做一款能够在公司内部把Swagger文档管理起来的工具,但在这近两年的时间里,一直断断续续的为其添加各种功能,现在终于下决心发布1.0版本了,目前支持三种类型的文档管理

  • Markdown:也是Wizard最主要的文档类型,研发团队日常工作中交流所采用的最常用文档类型,在 Wizard 中,对 Editor.md 项目进行了功能扩展,增加了文档模板,Json 转表格,图片粘贴上传等功能

    -w590

  • Swagger:支持 OpenAPI 3.0 规范,嵌入了 Swagger 官方的编辑器,通过定制开发,使其融入到 Wizard 项目当中,支持文档模板,全屏编辑,文档自动同步功能

    -w594

  • Table:这种文档类型是类似于 Excel 电子表格,采用了 x-spreadsheet 项目,将该项目嵌入到了 Wizard 中,目前还不是很完善

    -w592

目前主要包含以下功能

  • Swagger,Markdown,Table 类型的文档管理
  • 文档修改历史管理
  • 文档修改差异对比
  • 用户权限管理
  • 项目分组管理
  • LDAP 统一身份认证
  • 文档搜索,标签搜索
  • 阅读模式
  • 文档评论
  • 消息通知
  • 文档分享
  • 统计功能

如果想快速体验一下Wizard的功能,有两种方式

  • 在线体验请访问 http://wizard.aicode.cc/ ,目前只提供部分功能的体验,功能预览和使用说明请参考 Wiki
  • 使用Docker来创建一个完整的Wizard服务

    进入项目的根目录,执行 docker-compose up,就可以快速创建一个Wizard服务了,访问地址 http://localhost:8080

起源

为了鼓励大家写开发文档,最开始我们选择了 ShowDoc 项目来作为文档管理工具,当时团队规模也非常的小,大家都是直接用 Markdown 写一些简单的开发文档。后来随着团队的壮大,前后端分离,团队分工的细化,仅仅采用 Markdown 开始变得捉襟见肘,这时候,我们首先想到了使用开源界比较流行的 Swagger 来创建开发文档。但是 Swagger 文档多了,总得有个地方维护起来吧?

项目中的文档仅仅用Swagger也是不够的,它只适应于API文档的管理,还有很多其它文档,比如设计文档,流程图,架构文档,技术方案,数据库变更等各种文档需要一起维护起来。因此,我决定利用业余时间开发一款 支持 Markdown 和 Swagger 的文档管理工具,也就是 Wizard 项目了。

起初打算用 Go 语言来开发,但是没过几天发现使用 Golang 来做 Web 项目开发效率太低(快速开发效率,并非指性能,Golang做API接口开发还是很不错的),很多常用的功能都需要自己去实现,遂放弃使用 Golang,转而使用 PHP 的 Laravel 框架来开发。所以虽然项目创建的时间为 2017年7月27日,但是实际上真正开始的时间应该算是 2017年7月31日。

-w986

起初Wizard项目的想法比较简单,只是用来将 Markdown 文档和 Swagger 文档放在一起,提供一个简单的管理界面就足够了,但是随着在团队中展开使用后,发现在企业中作为一款文档管理工具来说,只提供简单的文档管理功能是不够的,比如说权限控制,文档修改历史,文档搜索,文档分类等功能需求不断的被提出来,因此也促成了 Wizard 项目的功能越来越完善。

  • 用户权限管理 参考了 Gitlab 的权限管理方式,在用户的身份上只区分了 管理员普通用户,通过创建用户组来对用户的权限进行细致的管理,同时每个项目都支持单独的为用户赋予读写权限。
  • 项目分组 在 Wizard 中,文档是以项目为单位进行组织的,刚开始的时候发现这样是OK的,后来项目越来越多,项目分组功能应运而生,以目录的形式来组织项目结构。
  • 文档修改历史 每次对文档的修改,Wizard 都会记录一个快照,避免错误的修改了文档而造成损失,可以通过文档历史快速的恢复文档,对文档的修改,新增,删除等关键操作都会记录审计日志,以最近活动的形式展示出来。
  • 文档差异对比 在团队协助中,经常会出现很多人修改同一份文档,为了避免冲突,文档修改后,其它人在提交旧的历史版本时,系统会提示用户文档内容发生了变更,用户可以通过文档比对功能找出文档中有哪些内容发生了修改。
  • 阅读模式 当使用投影仪展示文档来过技术方案的时候,为了减少不必要的干扰,使用阅读模式,只展示文档内容部分,提供更好的展示体验。
  • 文档搜索 通过搜索功能快速查找需要的文档,目前支持通过文档标题来搜素文档,后续会增加全文检索功能。
  • LDAP支持 很多公司都会使用 LDAP 来统一的管理公司员工的账号,员工的在公司内部的所有系统中都是用同一套帐号来登录各种系统比如 Jira,Wiki,Gitlab 等,Wizard 也提供了对 LDAP 的支持,只需要简单的几个配置,就可以快速的接入公司的统一帐号体系。
  • 文档附件文档分享统计文档排序模板管理文档评论 ...

关于代码

项目采用了 Laravel 框架开发,目前版本已经升级到最新的 5.8(最开始为5.4,一路升级过来)。为了提高开发效率,保持架构的简洁,在开发过程中,一直避免引入过多的外部组件,尽可能的利用 Laravel 提供的各种组件,比如 AuthenticationAuthorizationEventsMailNotifications 等,非常适合用来学习 Laravel 框架。

总结

如果你在为公司寻找一款开源免费的 开发文档/API文档管理 工具,不妨考虑一下 Wizard 项目,一定不会让你失望的。如果你是一名 PHP 或者 Laravel 新手,想找个项目学习一下如何用 Laravel 做 Web 开发,这个项目更加不能错过!

最后,也是本文最核心的部分,赶紧去 Star 一下,顺便给我个 Star 啊 !如果再能贡献点 Issues 或者P R,那就更好啦 ?!

本作品采用《CC 协议》,转载必须注明作者和本文链接
本帖由系统于 7年前 自动加精
Image
mylxsw
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 8

文档修改历史管理文档修改差异对比
请问这两个功能是怎么处理的呢

7年前 评论

好项目 star一下下班细看

7年前 评论

支持。 公司一直使用MinDoc,但是markdown编写不友好,性能有点差。 可以尝试一下楼主的项目。

7年前 评论
命中水

已star!

7年前 评论

可能支持 ShowDoc 的文档导入。感觉你这个很不错~

7年前 评论
jcc123

@生活无限好 应该是每一次保存记录new_valueold_value然后比较这两个值
octobercms,自带版本控制

它的数据结构

字段名称 字段类型 字段含义
id
user_id int(10) unsigned DEFAULT NULL
field varchar(191) COLLATE utf8mb4_unicode_ci DEFAULT NULL
cast varchar(191) COLLATE utf8mb4_unicode_ci DEFAULT NULL
old_value text COLLATE utf8mb4_unicode_ci
new_value text COLLATE utf8mb4_unicode_ci
revisionable_type varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL
revisionable_id int(11) NOT NULL
created_at timestamp NULL DEFAULT NULL
updated_at timestamp NULL DEFAULT NULL
system_revisions_revisionable_id_revisionable_type_index (revisionable_id
system_revisions_user_id_index (user_id)
7年前 评论

@jcc123 一直想知道 github 里面这种功能是怎样实现的。。

file

7年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!