{"id":13487701,"url":"https://github.com/Imfdj/egg-beehive","last_synced_at":"2025-03-27T23:31:25.905Z","repository":{"id":41066397,"uuid":"317737420","full_name":"Imfdj/egg-beehive","owner":"Imfdj","description":"🖖基于Vue+Egg.js的JS全栈项目。动态菜单，RBAC权限模型，Websocket实现站内信。","archived":false,"fork":false,"pushed_at":"2025-03-22T00:44:34.000Z","size":418,"stargazers_count":406,"open_issues_count":3,"forks_count":122,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-03-22T01:29:31.859Z","etag":null,"topics":["eggjs","mysql","nodejs","rbac","redis","sequelize","vue","vue-router","vuex"],"latest_commit_sha":null,"homepage":"https://beehives.imfdj.top","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Imfdj.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-12-02T03:22:35.000Z","updated_at":"2025-03-22T00:44:38.000Z","dependencies_parsed_at":"2022-08-10T01:41:31.305Z","dependency_job_id":null,"html_url":"https://github.com/Imfdj/egg-beehive","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Imfdj%2Fegg-beehive","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Imfdj%2Fegg-beehive/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Imfdj%2Fegg-beehive/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Imfdj%2Fegg-beehive/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Imfdj","download_url":"https://codeload.github.com/Imfdj/egg-beehive/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245944050,"owners_count":20697944,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["eggjs","mysql","nodejs","rbac","redis","sequelize","vue","vue-router","vuex"],"created_at":"2024-07-31T18:01:02.377Z","updated_at":"2025-03-27T23:31:25.891Z","avatar_url":"https://github.com/Imfdj.png","language":"JavaScript","funding_links":[],"categories":["应用"],"sub_categories":["插件"],"readme":"\u003cp align=\"center\"\u003e\u003ca href=\"https://beehive.imfdj.top\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e\u003cimg width=\"100\" src=\"https://qiniucdn.imfdj.top/vue-beehive/logo.png\" alt=\"Beehive logo\"\u003e\u003c/a\u003e\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\u003ca href=\"https://choosealicense.com/licenses/mit/\"\u003e\u003cimg alt=\"License MIT\" src=\"https://img.shields.io/badge/licence-MIT-blue.svg?style=flat-square\"\u003e\u003c/a\u003e\u003cimg alt=\"Current version\" src=\"https://img.shields.io/badge/build-passing-brightgreen\"\u003e\u003cimg alt=\"Current version\" src=\"https://img.shields.io/badge/version-1.0.0-brightgreen\"\u003e\u003c/p\u003e\n\n\u003ch2 align=\"center\"\u003eBeehive\u003c/h2\u003e\n\n## 前言\n\nBeehive 是一个项目管理系统。参考于Teambetion、PearProject，实现部分功能。\n\n这是一个Vue+Node.js的js全栈项目。基于RBAC模型做权限控制，动态配置菜单，前端实现页面元素级别的权限控制。通过WebSocket实现站内信功能，任务看板中，实现更新同步推送。一旦其他项目成员有对我们当前查看的项目任务做任何的操作，页面都将立即同步更新，并向此任务的所有参与者（除了操作者）发送消息通知。注册和找回密码需要通过邮箱验证码验证，可以通过github授权登陆（不是很稳定）。\n\nNode.js框架选用的是Egg.js，配合sequelize，自己写了一个小工具。可以通过填写表字段的配置，执行npm run generator-entity自动生成一整套文件，包括Swagger、数据校验validate、Sequelize需要的model、controller、service、router。并自动创建数据库表，包括每个字段的类型、长度、是否能为空、默认值、注释、索引、甚至是外键都能搞定。因为加了权限控制，所以还要到前端的资源管理中添加一下新增的资源，并在角色中点选分配一下，就完成了一张表的CRUD了，包括新增、修改、详情、批量删除、分页列表。当然这还是有很多可以优化的空间的，但也基本够用了。为了优化鉴权消耗，以及满足WebSocket的可靠性设计需要，系统引入Redis做缓存。\n\n密码是加盐存储的，且在传输过程中使用了RSA做了非对称加密。Jwt认证使用Access Token + Refresh Token，配合黑名单。\n\n\n## 效果演示\n\n预发布环境：超级管理员账号：test-super ，密码：test-super123 \u003ca href=\"https://beehives.imfdj.top\" target=\"_blank\"\u003e预发布环境地址：beehives.imfdj.top\u003c/a\u003e\n\n预发布环境：普通用户账号：test-user ，密码：test-user123\n\n生产环境：普通用户账号：test-user ，密码：test-user123 \u003ca href=\"https://beehive.imfdj.top\" target=\"_blank\"\u003e生产环境地址：beehive.imfdj.top\u003c/a\u003e\n\n\n## 技术栈\n\n前端：Vue2全家桶 + Element-ui + Axios + Vue-socket.io + Sass \u003ca href=\"https://github.com/Imfdj/vue-beehive\" target=\"_blank\"\u003e前端项目github地址\u003c/a\u003e\n\n后端：Egg.js + Sequelize + Jwt + Mysql + Redis + Socket + Swagger \u003ca href=\"https://github.com/Imfdj/egg-beehive\" target=\"_blank\"\u003e后端项目github地址\u003c/a\u003e\n\n\n## 说明\n\n\u003e  如果对您有帮助，您可以点右上角 \"Star\" 支持一下 谢谢！ ^_^\n\n\u003e  或者您可以 \"follow\" 一下，我会不断开源更多的有趣的项目。如：Vue3 + NestJS + TypeScript ✨\n\n\u003e  如有问题请直接在 Issues 中提，或者您发现问题并有非常好的解决方案，欢迎 PR 👍\n\n\n\n## 目标功能\n- [x] 登录、注册 -- 完成\n- [x] github授权登录 -- 完成\n- [x] 找回密码 -- 完成\n- [x] 滑块验证 -- 完成\n- [x] 邮箱验证 -- 完成\n- [x] 动态首页 -- 完成\n- [x] 个人设置 -- 完成\n\n- [x] 用户管理 -- 完成\n- [x] 角色管理 -- 完成\n- [x] 菜单管理 -- 完成\n- [x] 资源管理 -- 完成\n- [x] 操作日志 -- 完成\n- [x] 动态菜单 -- 完成\n- [x] 部门管理 -- 完成\n\n- [x] 项目列表 -- 完成\n- [x] 任务看板 -- 完成\n- [x] 任务列表 -- 完成\n- [x] 项目文件 -- 完成\n- [x] 项目概览 -- 完成\n- [x] 项目成员 -- 完成\n- [x] 项目邀请 -- 完成\n- [x] 项目设置 -- 完成\n- [x] 项目回收站 -- 完成\n- [x] 任务筛选 -- 完成\n- [x] 任务详情 -- 完成\n- [x] 任务标签 -- 完成\n- [x] 任务参与者 -- 完成\n- [x] 任务动态 -- 完成\n- [x] 任务工时 -- 完成\n- [x] 任务关联文件 -- 完成\n- [x] 任务更新即时同步 -- 完成\n- [x] 公开项目的业务权限控制（非项目成员不可编辑项目） -- 完成\n\n- [x] 项目模板 -- 完成\n- [x] 消息提醒 -- 完成\n\n- [x] 工作台 -- 完成\n- [x] 站内信 -- 完成\n- [x] 页面元素权限控制 -- 完成\n\n- [ ] 项目版本 -- 待开发\n- [ ] 项目日程 -- 待开发\n\n\n\n\n## 部分截图\n\n\n\n\n\u003cimg src=\"example/home-page.gif\" style=\"margin-bottom: 5px\"/\u003e\n\n\u003cimg src=\"example/2021-09-12_115100.png\" style=\"margin-bottom: 5px\"/\u003e\n\n\u003cimg src=\"example/2021-09-12_115127.png\" style=\"margin-bottom: 5px\"/\u003e\n\n\u003cimg src=\"example/2021-09-12_112646.png\" style=\"margin-bottom: 5px\"/\u003e\n\n\u003cimg src=\"example/2021-09-12_113236.png\" style=\"margin-bottom: 5px\"/\u003e\n\n\u003cimg src=\"example/2021-09-12_113312.png\" style=\"margin-bottom: 5px\"/\u003e\n\n\u003cimg src=\"example/2021-09-12_113341.png\" style=\"margin-bottom: 5px\"/\u003e\n\n\u003cimg src=\"example/2021-09-13_021734.png\" style=\"margin-bottom: 5px\"/\u003e\n\n\u003cimg src=\"example/2021-09-12_113612.png\" style=\"margin-bottom: 5px\"/\u003e\n\n\u003cimg src=\"example/2021-09-12_114307.png\" style=\"margin-bottom: 5px\"/\u003e\n\n\u003cimg src=\"example/2021-09-12_115228.png\" style=\"margin-bottom: 5px\"/\u003e\n\n\u003cimg src=\"example/2021-09-12_113839.png\" style=\"margin-bottom: 5px\"/\u003e\n\n\n\n\n\n\n\n## 后端egg项目部署\n\n#### 运行环境：\n\nNode.js \u003e= v10; Mysql \u003e= 5.7; Redis \u003e= 5.0; \n\n```\ngit clone https://github.com/Imfdj/egg-beehive.git\n\ncd egg-beehive\n\nnpm install 或 yarn(推荐)\n\n将database目录下的egg-beehive-dev.sql和egg-beehive-test.sql导入mysql（推荐navicat）。\n\n在config目录下的config.local.js和config.unittest.js中的exports.sequelize、exports.redis、exports.io.redis下填入Mysql和Redis的配置参数\n\nnpm run dev\n\nnpm run test-local (单元测试)\n\n```\n\n#### 如何快速CRUD：\n\n```\n在generator文件夹中的config.js文件中定义各个字段的描述，完成后执行npm run generator-entity。\n里面还有很多config-*.js的配置文件可供参考。也可以在template文件夹中自定义各个文件的模板。\n\n// 这是一个字段的描述模板\nfieldsItemExample: {\n    name: 'xx_id',\n    type: 'INTEGER',\n    length: 11,\n    min: 1,\n    max: 1,\n    required: true,\n    description: '这里是描述', // 供swagger使用\n    primaryKey: false, // 是否为主键\n    unique: false, // 是否唯一\n    allowNull: false, // 是否允许为空\n    autoIncrement: false, // 是否自增\n    defaultValue: '', // 数据库表中字段的默认值\n    comment: '外键', // 数据库表中字段的描述\n    references: {\n      // 外键设置\n      model: 'xxxs', // 外键关联表\n      key: 'id', // 外键字段名\n    },\n    onUpdate: 'NO ACTION', // 外键更新约束 CASCADE RESTRICT SET NULL SET DEFAULT NO ACTION\n    onDelete: 'NO ACTION', // 外键删除约束 CASCADE RESTRICT SET NULL SET DEFAULT NO ACTION\n}\n\n```\n\n\n## 前端vue项目部署\n\n```\ngit clone https://github.com/Imfdj/vue-beehive.git\n\ncd vue-beehive\n\nnpm install 或 yarn(推荐)\n\nnpm run serve\n\n```\n\n\n## 功能设计\n\n\u003cimg src=\"example/Beehive功能设计.jpg\"/\u003e\n\n## 后端设计\n\n\u003cimg src=\"example/Beehive后端设计.jpg\"/\u003e\n\n## 数据库设计\n\n\u003cimg src=\"example/Beehive-data-model.jpg\"/\u003e\n\n\n### License\n\n[MIT](https://github.com/Imfdj/egg-beehive/blob/master/LICENSE)\n\nCopyright (c) 2021 Imfdj\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FImfdj%2Fegg-beehive","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FImfdj%2Fegg-beehive","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FImfdj%2Fegg-beehive/lists"}