一、项目架构介绍

项目技术栈:Go+Vue+PGSQL

开发工具:IDEA2021.1
后端开发语言:Go
前端框架:Vue3.0(集成ElementUI组件)
后端框架:Gin、Gorm
数据库:PostgreSQL13

1.1 Go语言

Go(又称 Golang)是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 开发的一种静态强类型、编译型语言。Go 语言语法与 C 相近,但功能上有:内存安全,GC(垃圾回收),结构形态及 CSP-style 并发计算。

1.2 Vue框架

Vue 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与现代化的工具链以及各种支持类库结合使用时,Vue 也完全能够为复杂的单页应用提供驱动。

1.3 Gin框架

Gin 是一个基于 Go 语言编写的 Web 框架,与 martini 框架类似,但拥有更好的性能,借助高性能的 httprouter,速度提升了近 40 倍。

1.4 Gorm框架

基于GoLand语言的 ORM(Object Relation Mapping),对象关系映射,实际上就是对数据库的操作进行封装,对上层开发人员屏蔽数据操作的细节,开发人员看到的就是一个个对象,大大简化了开发工作,提高了生产效率。

1.5 PGSQL数据库

PostgreSQL是一个功能强大的开源对象关系型数据库系统,他使用和扩展了SQL语言,并结合了许多安全存储和扩展最复杂数据工作负载的功能。PostgreSQL的起源可以追溯到1986年,作为加州大学伯克利分校POSTGRES项目的一部分,并且在核心平台上进行了30多年的积极开发。

二、项目地址

项目源代码我放在码云了点击跳转,下载到本地之后先配置前后端的依赖和数据库配置,再运行项目。
项目展示我已放在云服务器上点击跳转,总裁账号20210001密码123456,主管账号20210002密码123456,员工账号20210008密码123456

三、项目概述

3.1 模块说明

3.1.1 前端模块说明

  • Vue组件共47个,包含了总裁、主管、员工身份登录系统的全部功能
  • 引入动态路由,实现三种身份的权限分离,每个身份对应不同的Vue组件和路由

3.1.2 后端模块说明

  • Config层:负责项目的配置
  • Controller层:项目大体逻辑的实现与控制
  • Global层:项目的全局设置
  • Mapper层:实现三种身份的路由监听
  • Middleware层:解决跨域问题
  • Model层:实现项目所需的各种结构的定义
  • main层:项目的入口

3.2 项目部分运行截图

3.2.1 主页

在这里插入图片描述

3.2.2 加入人才库

在这里插入图片描述

3.2.3 总裁登录

  • 基本资料在这里插入图片描述实现基本搜索、高级搜索、入职日期查询、导入导出数据、批量删除、手动添加用户、所有员工的增删改查等操作
  • 部门信息在这里插入图片描述实现已有部门的增删改查和新部门新岗位的添加
  • 申请新岗位在这里插入图片描述员工可以申请调动到本部门的其他岗位或跨部门调动
  • 申请离职在这里插入图片描述除了总裁,其他员工都可以申请离职,无需审批
  • 离职员工在这里插入图片描述总裁可以查看公司所有的离职员工信息并可以导出数据
  • 开除员工在这里插入图片描述总裁可以开除公司任何一个的员工
  • 部门调动在这里插入图片描述总裁可以查看跨部门调动信息并可以导出数据
  • 岗位调动在这里插入图片描述总裁可以查看所有部门的内部调岗信息并可以导出数据
  • 查看岗位申请在这里插入图片描述总裁可以查看、审批、拒绝所有人提出的岗位申请
  • 查看人才库申请在这里插入图片描述总裁可以查看、审批、拒绝所有申请加入公司的人员信息
  • 个人中心在这里插入图片描述总裁可以编辑自己的个人信息

3.2.4 主管登录

  • 员工资料在这里插入图片描述作为部门主管,只能够管理自己部门下的员工,包括基本搜索、高级搜索、入职日期查询、导入导出数据、批量删除、手动添加用户、部门下所有员工的增删改查等操作
  • 查询部门信息在这里插入图片描述作为主管,只能够查看公司的所有部门及岗位,无权做删除、修改、添加等操作
  • 申请新岗位在这里插入图片描述员工可以申请调动到本部门的其他岗位或跨部门调动
  • 申请离职在这里插入图片描述作为主管,可以同员工一样申请离职,无需审批
  • 离职员工在这里插入图片描述主管可以查看自己部门的离职员工信息并导出数据
  • 查看岗位申请在这里插入图片描述主管可以查看、审批、拒绝所有申请自己部门下的岗位的申请信息,若申请的是其他部门,则此部门主管无权查看
  • 查看人才库申请在这里插入图片描述主管可以查看、审批、拒绝所有申请自己部门下的岗位的人才申请信息,若申请的是其他部门,则此部门主管无权查看
  • 个人信中心在这里插入图片描述主管同样可以修改自己的个人信息

3.2.5 员工登录

  • 员工资料在这里插入图片描述作为员工,只能够查看自己部门同事的基本信息,且会屏蔽掉登陆密码、身份证号码等敏感信息,只能有基本的查询操作
  • 查询部门信息在这里插入图片描述作为员工,只能够查看公司的所有部门及岗位,无权做删除、修改、添加等操作
  • 申请新岗位在这里插入图片描述员工可以申请部门调动或岗位调动,需等待上级主管或总裁同意后才会进行调动
  • 申请离职在这里插入图片描述员工可以申请离职,无需上级同意就可以申请,离职后强制退出系统且无法再登录系统
  • 个人中心在这里插入图片描述员工可以修改自己的个人信息

四、关键技术

4.1 权限分离

根据总裁、主管、员工三种身份,实现不同的前台导航栏和监听路由

  • 总裁的导航栏
    在这里插入图片描述
  • 总裁的监听路由
func AdminMapper(re *gin.Engine)  {
	re.POST("/AdminLogin", Controller.AdminLogin)
	re.POST("/AllMenu", Controller.AllMenu)
	re.POST("/EmployeeBasic", Controller.EmployeeBasic)
	re.POST("/EmployeeBasic/Update", Controller.EmployeeBasicUpdate)
	re.POST("/EmployeeBasic/Delete", Controller.EmployeeBasicDelete)
	re.POST("/EmployeeBasic/MultiDelete", Controller.EmployeeBasicMultiDelete)
	re.POST("/EmployeeBasic/Add", Controller.EmployeeBasicAdd)
	re.POST("/EmployeeBasic/Search", Controller.EmployeeBasicSearch)
	re.POST("/EmployeeBasic/SearchDate", Controller.EmployeeBasicSearchDate)
	re.POST("/EmployeeBasic/SearchAdvance", Controller.EmployeeBasicSearchAdvance)
	re.POST("/EmployeeBasic/Import", Controller.EmployeeBasicImport)
	re.POST("/EmployeeBasic/Export", Controller.EmployeeBasicExport)
	re.POST("/DepartmentTransfer", Controller.DepartmentTransfer)
	re.POST("/DepartmentTransfer/Search", Controller.DepartmentTransferSearch)
	re.POST("/PostTransfer", Controller.PostTransfer)
	re.POST("/PostTransfer/Search", Controller.PostTransferSearch)
	re.POST("/EmployeeQuit", Controller.EmployeeQuit)
	re.POST("/EmployeeQuit/SearchByDate", Controller.EmployeeQuitSearchByDate)
	re.POST("/ExpelEmployee", Controller.ExpelEmployee)
	re.POST("/AdminInitExamine", Controller.AdminInitExamine)
	re.POST("/TalentPool/Add", Controller.TalentPoolAdd)
	re.POST("/Edit", Controller.Edit)
	re.POST("/TalentApply", Controller.TalentApply)
	re.POST("/TalentAgreeApply", Controller.TalentAgreeApply)
	re.POST("/TalentRefuseApply", Controller.TalentRefuseApply)
	re.POST("/Department/Basic", Controller.DepartmentBasic)
	re.POST("/Department/Init", Controller.DepartmentInit)
	re.POST("/Department/Post", Controller.DepartmentPost)
	re.POST("/Department/Update", Controller.DepartmentUpdate)
	re.POST("/Department/Delete", Controller.DepartmentDelete)
	re.POST("/Department/Add", Controller.DepartmentAdd)
	re.POST("/Post/Init", Controller.PostInit)
	re.POST("/Post/Add", Controller.PostAdd)
	re.POST("/Post/Update", Controller.PostUpdate)
	re.POST("/Post/Delete", Controller.PostDelete)
	re.POST("/SearchByDepartmentNumber", Controller.SearchByDepartmentNumber)
	re.POST("/SearchByPostNumber", Controller.SearchByPostNumber)
	re.POST("/DepartmentTransfer/SearchByDate", Controller.DepartmentTransferSearchByDate)
	re.POST("/PostTransfer/SearchByDate", Controller.PostTransferSearchByDate)
}
  • 主管的导航栏
    在这里插入图片描述

  • 主管的监听路由

func DirectorMapper(re *gin.Engine)  {
	re.POST("/DirectorDepartment", Controller.DirectorDepartment)
	re.POST("/DirectorInitExamine", Controller.DirectorInitExamine)
	re.POST("/DirectorAgreeApply", Controller.DirectorAgreeApply)
	re.POST("/DirectorRefuseApply", Controller.DirectorRefuseApply)
	re.POST("/EmployeeBasicByDirector", Controller.EmployeeBasicByDirector)
	re.POST("/EmployeeBasic/SearchByDirector", Controller.EmployeeBasicSearchByDirector)
	re.POST("/EmployeeBasic/SearchDateByDirector", Controller.EmployeeBasicSearchDateByDirector)
	re.POST("/EmployeeQuitByDirector", Controller.EmployeeQuitByDirector)
	re.POST("/EmployeeQuitByDirector/SearchByDate", Controller.EmployeeBasicByDirectorBySearchByDate)
	re.POST("/GetDepartmentName", Controller.GetDepartmentName)
	re.POST("/TalentApplyPart", Controller.TalentApplyPart)

}
  • 员工的导航栏
    在这里插入图片描述

  • 员工的监听路由

func EmployeeMapper(re *gin.Engine)  {
	re.POST("/ApplyPostInformation", Controller.ApplyPostInformation)
	re.POST("/ApplyNewPost", Controller.ApplyNewPost)
	re.POST("/ApplyResignedInformation", Controller.ApplyResignedInformation)
	re.POST("/ApplyResigned", Controller.ApplyResigned)
	re.POST("/EmployeeBasicByEmployee", Controller.EmployeeBasicByEmployee)
	re.POST("/EmployeeBasic/SearchByEmployee", Controller.EmployeeBasicSearchByEmployee)
	re.POST("/EmployeeBasic/SearchDateByEmployee", #Controller.EmployeeBasicSearchDateByEmployee)
}

注:本文是博主软件工程课程设计的总结,不支持任何商用,转载请注明出处!如果你也对Go语言开发大型项目的学习有一定的兴趣和理解,欢迎随时找博主交流~

Logo

前往低代码交流专区

更多推荐