# grape **Repository Path**: huskar007/grape ## Basic Information - **Project Name**: grape - **Description**: No description available - **Primary Language**: Java - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 15 - **Created**: 2020-03-09 - **Last Updated**: 2021-09-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 项目介绍 基于SpringBoot2.x、SpringCloud和SpringCloudAlibaba的后台管理系统,前后端分离。 后端springboot微服务:swagger接口文档、表单验证、MyBatisPlus、oauth2、jwt、lombok、mapstruct。 前端基于vue、element-ui、qiankun、single-spa的微前端模式,前端vue项目单独开发和发布。 集成了[Nepxion Discovery](https://github.com/Nepxion/Discovery)以方便实现灰度路由功能,这样可以共享服务器资源而本地只需要启动开发的模块。Nepxion Discovery还支持灰度发布、链路追踪等。 ## 当前主要功能 ### 当前主要功能-基础部分 1. 用户管理:用户CURD、分配角色等,用户是系统操作者,该功能主要完成系统用户配置。 2. 部门(组织)管理:部门CURD,支持部门上下级设置,部门是用户的归属,默认有组织树,具体用户的归属性质。 3. 公司管理:公司CURD,支持公司上下级设置,公司是部门和用户的归属。注意:公司不是租户的概念。 4. 岗位管理:岗位CURD,启用/禁用。 5. 职务管理:职务CURD。 6. 职级管理:职级CURD。 7. 用户岗位管理:配置用户在什么公司什么部门担任什么岗位,职务和职级是什么等。 8. 组织树管理:组织树CURD,将默认组织树即部门重新组织成一颗树,用于其它业务树如:报表按同的组织查看 9. 组织树名称管理:组织树名称CURD,给组织树关联一个名称。 10. 菜单(功能)管理:菜单(功能)CURD,配置系统菜单,操作权限,按钮权限标识等。 11. 角色管理:角色CURD,启用/禁用,支持角色上下级设置。 12. 字典管理:字典CURD,采用上下级设置,根据类型区分字典项或字典组,主要是系统中经常使用的一些较为固定的数据集合,用于下拉或其它。 13. 应用管理:应用CURD,用于将菜单(功能)按模块或业务进行分类 14. 区域管理:区域CURD,对省市区进行管理,添加了百度地址经纬度。 15. 通知公告:系统通知公告信息发布维护。 16. 参数配置管理:参数配置CURD,可以设置一些固定变量以作为系统配置。 17. 数据对象管理:数据对象CURD,要实现数据权限控制,按本系现在代码,需添加一个数据对象,数据对象一般对应一张表如:用户、部门等等。 18. 数据范围约束管理:数据范围约束CURD,一个数据对象定义不同的约束条件,以实现不同的用户/角色/岗位查询不同的数据对象以达到数据权限的控制。 19. 消息管理:发送消息所有消息的发送查看入口,目前尚不完善。 20. 消息模板管理:消息模板CURD,code唯一。 21. 其它功能:意见反馈、广告、bannert管理等等基本都是CURD ### 当前主要功能-认证部分 1. 服务客户端管理: 服务客户端CRUD,主要操作的是spring-oauth2的客户端详细表,clientId,clientSecret等数据。 ### 当前主要功能-考勤部分 1. 假期配置管理: 假期配置。 2. 班次配置 3. 打卡配置 4. 加班配置 5. 考勤组配置 6. 打卡服务 7. 我的考勤 8. 假期余额 9. 假期申请 以上是菜单项,考勤模块实现了考勤相关的主要功能 ### 当前主要功能-工作流部分 工作流部分,集成了flowable工作流引擎和其ui管理功能,具体如下: 1. flowable ui modeler模型管理 2. 自定义的流程模型设置列表 可方便部署流程 3. 自定义的表单模型设计列表 可方便部署表单 4. flowable ui admin管理,主要流程定义等 5. flowable ui task管理,主要功能是审批流程,启动流程 6. 待办任务 7. 已办任务 8. 待签收任务 9. 无法认领任务 主要用来解决查询无法认领的任务,重新分配人员 10. 我发起的流程 任务ui task发起流程暂没有记录 11. 自定义发起流程 支持动态表单,外置表单和普通表单 ## 在线体验 1.由于服务器资源有限,本演示采用后台main-one模块单机部署 2.前端分了两种演示模式: 由于前端都是用的同一种vue技术栈,为了开发方便(当前也可以线上使用),特添加了前端单机聚合项目 主要改动就是每个项目添加了env环境变量做控制,src/config.js有一项配置(portalOneBackend)用来配置后台是单机还是微服务 web/main-one单机模式 [http://one.grape.ahbdz.com/login](http://one.grape.ahbdz.com/login) 微前端模式 [http://grape.ahbdz.com/login](http://grape.ahbdz.com/login) 帐号/密码:superadmin/123456 ## 模块介绍 项目采用maven管理,基本上所有的模块都会分为一个-rest和-service结尾模块,-service模块可以被-rest模块依赖,这样如果用dubbo的话service模块可以单独启动 grape -- 父项目,公共依赖 │ ├─common -- 公共模块父工程,供其它模块maven依赖 │ │ ├─common-core -- 所有模块都可能依赖的公共模块,异常基类和其它一些公共工具类 │ │ ├─common-rest -- 所有web api(提供rest接口)模块的公共依赖模块,自动配置了一些web api通过方便的功能 │ │ ├─common-serve -- 所有service层模块的公共依赖模块 集成mybatisplus,写了一些基类和通用pojo,封装数据库通用操作逻辑 │ │─dockerfile -- docerfile文件夹,由于服务器有限可能经常换,写一些dockerfile以方便快速换服务器 │ │─modules -- 主要的模块的父级 │ │ │ ├─main-one-server -- 单机运行启动模块 │ │ ├─attend -- 考勤功能的简单模块 │ │ │ ├─attend-rest -- 考勤模块web api │ │ │ ├─attend-rest-server -- 考勤服务启动模块 │ │ │ ├─attend-service -- 考勤服务模块,父级 │ │ │ │ ├─attend-service-api -- 考勤模块接口、po等 │ │ │ │ ├─attend-service-impl -- 考勤模块接口的实现 │ │ ├─auth -- 基于spring-oauth2的认证模块 │ │ │ ├─auth-rest -- 认证模块web api │ │ │ ├─auth-rest-server -- 认证服务启动模块 │ │ │ ├─auth-rest-client -- auth-rest的远程调用客户端模块 │ │ │ ├─auth-service -- (类似dubbo拆分,方便集成dubbo如有必要,其它模块类似)认证模块逻辑服务模块,目前主要是CURD客户端详情表 │ │ │ │ ├─auth-service-api -- 认证模块接口、po等 │ │ │ │ ├─auth-service-impl -- 认证模块接口的实现 │ │ ├─base -- 基础模块,上面提到的主要功能基础部分全部来自这里的接口 │ │ │ ├─base-rest -- 基础模块web api │ │ │ ├─base-rest-server -- 基础模块web启动模块 │ │ │ ├─base-rest-client -- base-rest的远程调用客户端模块 │ │ │ ├─base-rest-client-impl -- base-rest-client的实体类模块,目前仅供单机运行(main-one模块)依赖 │ │ │ ├─base-service -- 基础模块逻辑服务模块,父级 │ │ │ │ ├─base-service-api -- 基础模块接口、po等 │ │ │ │ ├─base-service-impl -- 基础模块接口的实现 │ │ ├─file -- 文件模块,提供文件上传与下载,里面已经实现的本地存储、阿里云OSS、七牛云、腾讯云 │ │ │ ├─file-rest -- 文件模块web api │ │ │ ├─file-rest-server -- 文件模块web启动模块 │ │ │ ├─file-service -- 文件模块逻辑服务模块,父级 │ │ │ │ ├─file-service-api -- 文件模块接口、po等 │ │ │ │ ├─file-service-impl -- 文件模块接口的实现 │ │ ├─gateway-- spring gateway网关,当前网关仅用于类似nginx转发功能,由于使用的是jwt,鉴权和自动登录配置已在common-rest中添加 │ │ ├─mq -- 只是添加了模块,还没有实现什么东西,暂时没用到 │ │ ├─workflow -- 集成工作流flowable │ │ │ ├─workflow-rest -- 工作流web api │ │ │ ├─workflow-rest-server -- 工作流web启动模块 │ │ │ ├─workflow-rest-client -- workflow-rest的远程调用客户端模块 │ │ │ ├─workflow-rest-client-impl -- workflow-rest-client的实体类模块,目前仅供单机运行(main-one模块)依赖 │ │ │ ├─workflow-service -- 工作流服务模块,父级 │ │ │ │ ├─workflow-service-api -- 工作流模块接口、po等 │ │ │ │ ├─workflow-service-impl -- 工作流模块接口的实现 │ ├─mybatis-plus-generator -- 基于mybatisplus的代码生成模块,可以生成后台和vue页面常用的CURD,但生成完成的需要手动干预修改 │ ├─web -- 前端项目父目录,各个子项目都是vue cli创建的 │ │ ├─auth -- 认证管理,vue项目,主要实现auth-rest接口的功能,依赖common-util │ │ ├─base -- 基础管理,vue项目,主要实现base-rest接口的功能,依赖common-util,由于该模块在被main-one模块link的时候命名跟已有的库名冲突,所以该项目package.json的配置名称改为了grape-base │ │ ├─common-nav -- 导航vue项目,主要实现一个左边是菜单树右边是工作区的后台常用布局,依赖common-util │ │ ├─common-util -- 公共依赖项目,也是一个vue cli创建的,不单独启动,其它项目需要npm link ../common-util来依赖 │ │ ├─main-one -- 前端单机运行聚合项目,依赖common-util、auth、base、common-nav、portal │ │ ├─portal -- 整个后台管理门户入口,vue项目,微前端的入口,portal加载common-nav,common-nav加载base、auth及其它后期开发的模块,依赖common-util ### 关于前端common-util依赖的说明 :exclamation: 前端模块的依赖已改为相对路径,不再需要npm link操作 :exclamation: 前端模块的依赖已改为相对路径,不再需要npm link操作 :exclamation: 前端模块的依赖已改为相对路径,不再需要npm link操作 以下说明在不方便使用相对路径依赖时可以使用。 1.前端依赖common-util的项目已在上面模块介绍中说明了依赖关系 2.举例说明:web/auth项目依赖了common-util,那么需要如下命令进行依赖 ``` cd web/auth npm install npm link ../common-util ``` 3.使用代码片段如下: ``` import Container from 'common-util/src/components/page/Container.vue' import Form from 'common-util/src/components/page/Form.vue' import Table from 'common-util/src/components/page/Table.vue' export default { components:{ Form, Table, Container }, ``` 4.如果auth项目重新install了那么需要重新执行npm link ../common-util进行关联依赖,重新install后link建立的关联关系好像就丢失了,所以需要重新参考2步骤 5.说明:common-util的改动一般情况下不需要任何操作,只需要刷新页面(页面一般会自动刷新)就是修改后效果了 6. 在执行npm link ../common-util命令的时候会先preinstall,这样会很慢,可参考如下: a.先在common-util模块执行 npm link 命令(或在base模块目录执行npm link ../common-util) b.其它模块项目再依赖的时候直接执行npm link common-util(在不是npm link ../common-util) ## 演示图 登录,背景图片来自网络 ![登录,背景图片来自网络](https://images.gitee.com/uploads/images/2020/0409/165420_28759cda_1206030.jpeg "login.jpg") 登录成功后选择应用 ![登录成功后选择应用](https://images.gitee.com/uploads/images/2020/0714/135713_9e38c78c_1206030.png "selectApplication.png") 用户管理列表 ![用户管理列表](https://images.gitee.com/uploads/images/2020/0409/165936_6cf79709_1206030.png "userManage.png") 用户分配功能,基本上所有的树展示为懒加载 ![用户分配功能](https://images.gitee.com/uploads/images/2020/0409/165956_52158069_1206030.png "userAssignFunc.png") 部门管理列表 ![部门管理列表](https://images.gitee.com/uploads/images/2020/0409/170028_7b208286_1206030.png "deptManage.png") 功能菜单管理列表 ![功能菜单管理列表](https://images.gitee.com/uploads/images/2020/0409/170101_22935309_1206030.png "funcManage.png") 数据范围约束列表 ![数据范围约束列表](https://images.gitee.com/uploads/images/2020/0409/170125_73c5ffbf_1206030.png "dataScopeManage.png") 字典添加页 ![字典添加页](https://images.gitee.com/uploads/images/2020/0409/170151_fceb3b7c_1206030.png "dictAdd.png") 考勤 ![打卡](https://images.gitee.com/uploads/images/2020/0714/134749_ec541dfc_1206030.png "userclock.png") ![我的考勤](https://images.gitee.com/uploads/images/2020/0714/134818_de282fd8_1206030.png "myattend.png") ![假期申请](https://images.gitee.com/uploads/images/2020/0714/134833_da1ca6b5_1206030.png "myleaveapplication.png") 工作流 ui模型设计 ![ui模型设计](https://images.gitee.com/uploads/images/2020/0714/134911_68524372_1206030.png "workflowUiModeler.png") ui定义管理 ![ui定义管理](https://images.gitee.com/uploads/images/2020/0714/135017_cf98697d_1206030.png "workflowUiAdmin.png") ui任务管理 ![ui任务管理](https://images.gitee.com/uploads/images/2020/0714/135350_2870a682_1206030.png "workflowUiTask.png") 待办列表 ![待办列表](https://images.gitee.com/uploads/images/2020/0714/135039_82665709_1206030.png "workflowTaskToDo.png")