代码编织梦想

IHRM人力资源 - 项目搭建

一、项目搭建

1.1 项目搭建

拉取基础模板代码

 git clone https://github.com/PanJiaChen/vue-admin-template.git 

其他: core-js版本处理

  • 项目模版中的core-js的版本号有些滞后,需要将其版本号改为“3.25.5”再安装依赖

image-20240102174649927

安装依赖项

yarn

出现这种情况便是安装依赖成功

image-20240102182148728

启动项目

我们在package.json中设定的dev执行命令

yarn dev

image-20240102180054972

启动一下下

image-20240102181922541

image-20240102182326517

下载两个插件

image-20240102182657305

此插件的作用就是帮我们格式化代码,如下图所示,在代码的后面加了一个分号,便提示错误信息

这种格式化的错误很好修改,只需要“Ctrl+Alt+L”即可(使用的webstore),会自动消失

image-20240102182836182

如果是VSCode的话就下载ESLint和Vetur

1.2 项目目录

1.2.1 src 目录

image-20240108160201312

  • src:源代码目录。写的功能、测试都在此目录下4

除了src文件之外我们都可以理解为配置文件

image-20240108151412425

image-20240108151510792

  • api目录:请求模块

我们会把请求单独抽离出来放在api文件目录下

抽离出来有个好处,哪个模块想用直接引用就好了

比如user.js文件按需导出了一些方法

import request from '@/utils/request'

export function login(data) {
  return request({
    url: '/vue-admin-template/user/login',
    method: 'post',
    data
  })
}

export function getInfo(token) {
  return request({
    url: '/vue-admin-template/user/info',
    method: 'get',
    params: { token }
  })
}

export function logout() {
  return request({
    url: '/vue-admin-template/user/logout',
    method: 'post'
  })
}
  • assets 目录

存放静态资源,比如图片

image-20240108151901086

  • components 目录

存放组件文件

Breadcrumb 面包屑组件

Hamburger 汉堡组件

SvgIcon 图标组件

这三个组件是公用组件

image-20240108152012905

  • icons 图标目录

我们要实现图片注册、自动引用

  • layout 布局组件目录

  • router 路由目录

路由:地址和组件的映射。一个地址对应一个组件,但一个组件可能会对应多个地址

  • store 目录

VUEX是状态管理框架,在store目录中存放的就是VUEX

  • style 样式目录

存放一些全局样式

  • utils目录

存放工具类

  • views目录

也是存放组件的目录,但是区别与components目录文件夹

views目录存放路由器组件

在router目录index.js文件中地址对应组件,对应的组件就是路由器组件,在views目录中

  • App.vue组件

    汇总所有组件

https://blog.csdn.net/weixin_51351637/article/details/126733697

  • main.js组件

入口文件。当执行完npm run serve命令后会直接执行此文件

一般在这个文件引入一些我们常用的模块、实例化vue、指定容器、挂载路由、渲染根组件、注册Element-ui组件

https://blog.csdn.net/weixin_51351637/article/details/126733697

1.3 App.vue 根组件解析

main.js组件将我们的根组件App.vue渲染到了页面上

那到底做了什么样的工作能够显示我们的登录/首页/布局

如下所示,App.vue组件中代码

<template>
  <div id="app">
     <!--路由容器组件,一级路由-->
    <router-view />
  </div>
</template>

<script>
export default {
  name: 'App'
}
</script>

App.vue文件中有一个router-view一级路由容器,里面放置的是root里面的一级路由

image-20240108195520441

然后“/”中里面还有二级路由

image-20240108195620361

layout布局是怎么保证二级路由组件的显示呢

/**
 *  Layout @/在vue中代表路径别名
 *  @ 符号表示当前目录的src
 *  @/ 表示src下的layout,而layout又是一个目录,所以会拉取index.vue文件
 *  即index.vue组件就是我们的路由组件,会实现二级路由
* */
import Layout from '@/layout'
{
  path: '/',
  component: Layout,
  redirect: '/dashboard',
  children: [{
    path: 'dashboard',
    name: 'Dashboard',
    component: () => import('@/views/dashboard/index'),
    meta: { title: 'Dashboard', icon: 'dashboard' }
  }]
},

我们也可以分析一下layout中index.vue文件的代码,是如下所示的布局形式

image-20240108200759280

放到我们的页面三个结构如下所示

image-20240108201111746

app-main组件为什么可以展示二级路由

在layout目录的index.vue文件下如下图所示:

image-20240108201428346

我们可以再看一下components文件下AppMain.vue组件

并且在此处还有一个router-view组件(此时是二级组件)

image-20240108201555317

可以看一下layout布局组件的总结

image-20240108201745077

1.4 基础设置 settings.js

导出网站基础设置,保罗网站标题、固定header、显示logo

这个文件中导出了一个对象,里面有许多的属性是key:value的形式

module.exports = {

  /**
  * 标题
  */
  title: '人力资源后台管理系统',

  /**
   * 是否固定我们的头部组件
   */
  fixedHeader: false,

  /**
   * 是否显示侧边栏的logo
   */
  sidebarLogo: false
}

如下所示我们的title

image-20240108202242102

当fixedHeader的值是true时,下图所标注的地方不会随便下拉而看不到,而是一直固定在这里

image-20240108202342462

当sidebarLogo的值为true的时候,就可以看到如下图所示的图标

image-20240108202515981

1.5 导航守卫 permission.js

此文件为了完成权限拦截,负责路由导航守卫

路由守卫

其实就是下面两个函数,路由前置守卫和路由后置守卫

路由前置守卫:路由跳转之前执行

路由后置守卫:路由跳转之后执行

// to到哪个组件
//from从哪个组件来
//next是在执行完一系列判断逻辑之后必须要执行哪个函数,只有执行了next,路由才能完成正常的跳转,完成跳转之后会执行路由后置守卫
async(to, from, next)

image-20240108203047631

1.6 VUEX

VueX

VUEX向外暴露了两个属性,一个modules和一个getters

我们只暴露两个属性说明我们项目的VUEX都放在modules模块中,而getters是向外暴露一些便捷的访问属性,并没有我们常见的state、mutation和action

modules我们称之为模块

getters我们称之为VueX里面的计算属性

image-20240108204539930

index.js文件

import Vue from 'vue'
import Vuex from 'vuex'
import getters from './getters'
import app from './modules/app'
import settings from './modules/settings'
import user from './modules/user'

Vue.use(Vuex)

const store = new Vuex.Store({
  // 模块
  modules: {
    app,
    settings,
    user
  },
  // Vuex中的计算属性
  getters
})

export default store

app和settings控制我们左侧导航的伸缩、控制header的固定、左侧导航的logo展示

user是需要我们做用户权限信息的部分

image-20240108205115521

getters是模块属性的意思,而getters中属性都来自于modules模块中state属性

image-20240108205432951

然后我们可以看到getters.js文件中导出了一些属性

state是根状态

state.app.sidebar是取app模块属性

state.user.token是取user模块属性

所以说我们的getters只是做了一个便捷访问,更便捷的访问模块中的属性

image-20240108205513605

此项目中Vuex的设计思想

  • 页面交互状态(折叠侧边栏-固定头部)使用全局状态Vuex
  • 根据功能拆分成不同的模块(modules)进行状态管理
  • 通过getters建立对于模块中属性的快捷访问

二、 图标使用

图片和图标是有区别的

图片使用png或者gpg,而图标一般是svg形式

图标的目的是装饰和点缀,也没有其他的作用

2.1 图标使用

image-20240108210615027

我们将上面的图标进行使用的时候还需要借助一个组件,此组件已经将图标注册好了,图标就可以正常显示了

image-20240108210719834

<template>
  <div v-if="isExternal" :style="styleExternalIcon" class="svg-external-icon svg-icon" v-on="$listeners" />
  <svg v-else :class="svgClass" aria-hidden="true" v-on="$listeners">
    <use :xlink:href="iconName" />
  </svg>
</template>

<script>
// doc: https://panjiachen.github.io/vue-element-admin-site/feature/component/svg-icon.html#usage
import { isExternal } from '@/utils/validate'

export default {
  name: 'SvgIcon',
  props: {
    iconClass: {
      type: String,
      required: true
    },
    className: {
      type: String,
      default: ''
    }
  },
  computed: {
    isExternal() {
      return isExternal(this.iconClass)
    },
    iconName() {
      return `#icon-${this.iconClass}`
    },
    svgClass() {
      if (this.className) {
        return 'svg-icon ' + this.className
      } else {
        return 'svg-icon'
      }
    },
    styleExternalIcon() {
      return {
        mask: `url(${this.iconClass}) no-repeat 50% 50%`,
        '-webkit-mask': `url(${this.iconClass}) no-repeat 50% 50%`
      }
    }
  }
}
</script>

<style scoped>
.svg-icon {
  width: 1em;
  height: 1em;
  vertical-align: -0.15em;
  fill: currentColor;
  overflow: hidden;
}

.svg-external-icon {
  background-color: currentColor;
  mask-size: cover!important;
  display: inline-block;
}
</style>

怎么使用

<!--使用svg-incon组件-->
<!--设置iconClass属性=“文件名(没有后缀)”-->
<svg-icon icon-class="dashboard"></svg-icon>
  • src/icons/svg目录下的图标都可以使用

  • 图标文件名直接设置为svg-icon组件的iconClass属性

2.2 Icon 图标的解析

在main.js文件实际上我们引入了icon这个目录,并且在这个目录中有一个index.vue文件

image-20240108211840613

查看一下icon目录下index.vue文件

import Vue from 'vue'
import SvgIcon from '@/components/SvgIcon'// svg component

// 全局注册组件。这也就是为什么后面我们可以直接使用svg-icon
Vue.component('svg-icon', SvgIcon)

//require.context(要扫描的目标目录,是否扫描子目录,要扫描的目标文件,是一个正则表达式,以.svg结尾的文件) 扫描目录中的文件
//最终返回值req是是一个函数
const req = require.context('./svg', false, /\.svg$/)

//requireAll一个函数
//req.keys()的值是我们所扫描的所有的文件
//map是循环每一个项,也就是每一个svg图片,并且map的参数是一个回调函数
//req函数能够引用图片到项目中,如果svg有一百个,那这个map就执行100次
const requireAll = requireContext => requireContext.keys().map(requireContext)

//调用了函数
//将所有的svg都引用到项目中
requireAll(req)
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_51351637/article/details/135596371

跨域处理与分布式id_「已注销」的博客-爱代码爱编程

跨域是什么?浏览器从一个域名的网页去请求另一个域名的资源时,域名、端口、协议任一不同,都是跨域 。我们是采用前后端分离开发的,也是前后端分离部署的,必然会存在跨域问题。 怎么解决跨域?很简单,只需要在controller类上

saas-hrm--第5章_权限管理与shiro入门_小飞侠v科比的博客-爱代码爱编程

第5章 权限管理与Shiro入门 学习目标: 理解前端权限控制思路 理解有状态服务和无状态服务通过拦截器实现JWT鉴权 能够理解shiro以及shiro的认证和授权 1前端权限控制 1.1需求分析 1.1.1需求说明

【接口测试 】day4-postman高级用法2(附项目实战)_小慌慌的博客-爱代码爱编程

目录 课程大纲 昨日回顾 今日目标 Postman高级用法 一、批量执行测试用例(掌握) 二、读取外部文件实现参数化(理解) 三、Postman测试报告(掌握)  课程大纲 【接口测试 】Day1-接口测试基础(附项目实战)_小慌慌的博客-CSDN博客_接口测试项目目录课程目标课程大纲接口测试基础接口及接口测试概念1.接口2.接口

【接口测试】ihrm项目实战_小慌慌的博客-爱代码爱编程

  目录 回顾之前学的4节内容 今日目标--IHRM项目 IHRM项目实战  1、初始化工作 1.1 创建测试用例结构 1.2 设置环境变量 2、实现测试用例  2.1 登录——登录成功  2.2 员工管理  3、生成测试报告  回顾之前学的4节内容 详见前面4个文章 【接口测试 】Day1-接口测试基础(附项目实战)_

【接口测试】day8-爱代码爱编程

目录 IHRM项目实战 一、搭建接口测试框架 二、封装被测试系统接口 1 登录 2 员工管理 三、定义接口测试用例 1 登录 2 员工管理 IHRM项目实战 学习目标 能够对IHRM系统中的登录接口实现接口对象的封装能够对IHRM系统中的员工管理接口实现接口对象的封装能够对IHRM系统中的登录接口实现测试脚本的编写(接口对象调

接口测试-爱代码爱编程

项目简介 1、熟悉项目功能 2、了解项目架构 IHRM 人力资源管理系统 功能模块 组织管理员工管理招聘管理劳动合同培训管理考勤管理绩效管理福利管理工资管理 项目架构 技术栈 前端:以Node.js为核心的Vu

【博学谷学习记录】超强总结,用心分享|软件测试第五阶段接口ihrm测试项目总结_ihrm人力资源管理系统项目-爱代码爱编程

目录 接口测试小项目1. 说明1.1 项目介绍1.2 项目架构1.3 项目目录结构1.4 IHRM项目API文档解析 2. 代码实现2.1 封装被测试系统的接口2.2 参数化数据2.3 Unittest

vue2实现ihrm人力资源后台管理_ihrm人力资源管理系统项目-爱代码爱编程

一小池勺 “音乐会治愈我,运动会治愈我,风景会治愈我,阅读会治愈我,做饭也会治愈我,还有阴雨天的被窝,周末可以肆无忌惮的赖床,我的意思是,我们应该热爱生活。” WeChat 文章目录

2.1 ihrm人力资源 -爱代码爱编程

一、登录页结构与表单开发 我们要实现的登录界面 目前的登录界面 1.1 登录页结构 复制下面的代码到views/login/index.vue页面下 <template> <div

ihrm项目结构详解-爱代码爱编程

大体介绍 云服务的三种模式 Iaas:基础设施即服务 Pass:平台即服务 Saas:软件即服务 系统设计 主键id生成策略 lombok @data = @setter + @getter +@noArg