人力资源智能化管理项目(day07:员工详情)

学习源码可以看我的个人前端学习笔记 (github.com):qdxzw/humanResourceIntelligentManagementProject

页面结构和路由

<template><div class="dashboard-container"><div class="app-container"><div class="edit-form"><el-form ref="userForm" label-width="220px"><!-- 姓名 部门 --><el-row><el-col :span="12"><el-form-item label="姓名" prop="username"><el-input size="mini" class="inputW" /></el-form-item></el-col></el-row><!-- 工号 入职时间 --><el-row><el-col :span="12"><el-form-item label="工号" prop="workNumber"><el-input size="mini" class="inputW" /></el-form-item></el-col></el-row><!--手机 聘用形式  --><el-row><el-col :span="12"><el-form-item label="手机" prop="mobile"><el-input size="mini" class="inputW" /></el-form-item></el-col></el-row><el-row><el-col :span="12"><el-form-item label="部门" prop="departmentId"><!-- 放置及联部门组件 --></el-form-item></el-col></el-row><el-row><el-col :span="12"><el-form-item label="聘用形式" prop="formOfEmployment"><el-select size="mini" class="inputW" /></el-form-item></el-col></el-row><el-row><el-col :span="12"><el-form-item label="入职时间" prop="timeOfEntry"><el-date-pickersize="mini"type="date"value-format="yyyy-MM-dd"class="inputW"/></el-form-item></el-col></el-row><el-row><el-col :span="12"><el-form-item label="转正时间"><el-date-picker size="mini" type="date" class="inputW" /></el-form-item></el-col></el-row><!-- 员工照片 --><el-row><el-col :span="12"><el-form-item label="员工头像"><!-- 放置上传图片 --></el-form-item></el-col></el-row><!-- 保存个人信息 --><el-row type="flex"><el-col :span="12" style="margin-left: 220px"><el-button size="mini" type="primary">保存更新</el-button></el-col></el-row></el-form></div></div></div>
</template><script>
export default {}
</script><style scoped lang="scss">
.edit-form {background: #fff;padding: 20px;.inputW {width: 380px;}
}
</style>
    {path: '/employee/detail', // 员工详情的地址component: () => import('@/views/employee/detail.vue'),hidden: true, // 表示隐藏在左侧菜单meta: {title: '员工详情'}}

数据和校验

<template><div class="dashboard-container"><div class="app-container"><div class="edit-form"><el-formref="userForm":model="userInfo":rules="rules"label-width="220px"><!-- 姓名 部门 --><el-row><el-col :span="12"><el-form-item label="姓名" prop="username"><el-input v-model="userInfo.username" size="mini" class="inputW" /></el-form-item></el-col></el-row><!-- 工号 入职时间 --><el-row><el-col :span="12"><el-form-item label="工号" prop="workNumber"><!-- 工号是系统生成的 禁用这个组件 --><el-input v-model="userInfo.workNumber" disabled size="mini" class="inputW" /></el-form-item></el-col></el-row><!--手机 聘用形式  --><el-row><el-col :span="12"><el-form-item label="手机" prop="mobile"><el-input v-model="userInfo.mobile " size="mini" class="inputW" /></el-form-item></el-col></el-row><el-row><el-col :span="12"><el-form-item label="部门" prop="departmentId"><!-- 放置及联部门组件 --></el-form-item></el-col></el-row><el-row><el-col :span="12"><el-form-item label="聘用形式" prop="formOfEmployment"><el-select v-model="userInfo.formOfEmployment" size="mini" class="inputW"><el-option label="正式" :value="1" /><el-option label="非正式" :value="2" /></el-select></el-form-item></el-col></el-row><el-row><el-col :span="12"><el-form-item label="入职时间" prop="timeOfEntry"><el-date-pickerv-model="userInfo.timeOfEntry"size="mini"type="date"value-format="yyyy-MM-dd"class="inputW"/></el-form-item></el-col></el-row><el-row><el-col :span="12"><el-form-item label="转正时间" prop="correctionTime"><el-date-picker v-model="userInfo.correctionTime" size="mini" type="date" class="inputW" /></el-form-item></el-col></el-row><!-- 员工照片 --><el-row><el-col :span="12"><el-form-item label="员工头像"><!-- 放置上传图片 --></el-form-item></el-col></el-row><!-- 保存个人信息 --><el-row type="flex"><el-col :span="12" style="margin-left: 220px"><el-button size="mini" type="primary" @click="saveData">保存更新</el-button></el-col></el-row></el-form></div</div></div></div></template><script>
export default {data() {return {userInfo: {username: '', // 员工名字mobile: '', // 员工手机号formOfEmployment: null, // 员工聘用形式workNumber: '', // 员工工号departmentId: null, // 员工部门idtimeOfEntry: '', // 员工入职时间correctionTime: '' // 员工转正日期},rules: {username: [{ required: true, message: '请输入员工姓名', trigger: 'blur' },{ min: 1, max: 4, message: '长度在 1 到 4 个字符', trigger: 'blur' }], mobile: [{ required: true, message: '请输入电话号码', trigger: 'blur' },{ pattern: /^1[3-9]\d{9}$/,message: '手机号格式不正确',trigger: 'blur' }], formOfEmployment: [{required: true, message: '请输入聘用形式', trigger: 'blur'}], departmentId: [{required: true, message: '请输入部门', trigger: 'blur'}], timeOfEntry: [{required: true, message: '请选择入职时间', trigger: 'blur'}], correctionTime: [{required: true, message: '请选择转正时间', trigger: 'blur'}, {validator: (rule, value, callback) => {if (this.userInfo.timeOfEntry) {if (new Date(this.userInfo.timeOfEntry) > new Date(value)) {callback(new Error('转正时间不能小于入职时间'))return}}callback()}}]}}}, methods: {saveData() {this.$refs.userForm.validate()}}
}
</script><style scoped lang="scss">
.edit-form {background: #fff;padding: 20px;.inputW {width: 380px;}
}
</style>

封装部门级联组件

<template><!-- element-ui级联组件 --><el-cascader separator="-" :props="props" :options="treeData" size="mini" />
</template>
<script>
import { getDepartment } from '@/api/department'
import { transListToTreeData } from '@/utils/index'
export default {data () {return {treeData: [], // 赋值给级联组件的optionsprops: {label: 'name', // 要展示的字段value: 'id' // 要存储的字段}}},created () {this.getDepartment()},methods: {async getDepartment () {// 将组织架构的数据转化为树形赋值给treeDatathis.treeData = transListToTreeData(await getDepartment(), 0)}}
}
</script>
<el-row><el-col :span="12"><el-form-item label="部门" prop="departmentId"><!-- 放置及联部门组件 --><select-tree class="inputW" /></el-form-item></el-col></el-row>

Cascader级联组件的特性

options为一个树形结构的数据源

props可以设置数据源中的字段如label(展示)value(存取)

separator为展示的分隔符

级联组件-双向绑定

  <!-- element-ui级联组件 --><el-cascader:value="value"separator="-":props="props":options="treeData"size="mini"@change="changeValue"/>props: {value: {type: Number, // 存储的是部门的iddefault: null}}changeValue (list) {// 取到数组的最后一个值if (list.length > 0) {// 将最后一位的id取出来 传出去this.$emit('input', list[list.length - 1])} else {// 如果长度为0 说明值为空this.$emit('input', null)}}<!-- 放置及联部门组件 --><select-tree v-model="userInfo.departmentId" class="inputW" />

新增员工

/**** 增加员工**/
export function addEmployee (data) {return request({url: '/sys/user',method: 'POST',data})
}saveData() {this.$refs.userForm.validate(async isOk => {// 如果校验成功if (isOk) {await addEmployee(this.userInfo)this.$message.success('新增员工成功')// 跳转到员工页面this.$router.push('/employee')}})}

编辑员工-查看员工

/**** 获取-员工-基本信息**/
export function getEmployeeDetail (id) {return request({url: `/sys/user/${id}`,method: 'GET'})
}{path: '/employee/detail/:id?', // 员工详情的地址component: () => import('@/views/employee/detail.vue'),hidden: true, // 表示隐藏在左侧菜单meta: {title: '员工详情'}}created() {this.$route.params.id && this.getEmployeeDetail()}async getEmployeeDetail() {this.userInfo = await getEmployeeDetail(this.$route.params.id)}<el-buttonsize="mini"type="text"@click="$router.push(`/employee/detail/${row.id}`)">查看</el-button>

编辑员工-保存

/**** 修改-员工-基本信息**/
export function updateEmployee (data) {return request({url: `/sys/user/${data.id}`,method: 'PUT',data})
}<el-input v-model="userInfo.mobile" :disabled="!!$route.params.id" size="mini" class="inputW" />saveData() {this.$refs.userForm.validate(async isOk => {// 如果校验成功if (isOk) {// 判断是否编辑模式if (this.$route.params.id) {await updateEmployee(this.userInfo)this.$message.success('修改员工信息成功')} else {// 新增模式await addEmployee(this.userInfo)this.$message.success('新增员工成功')}// 跳转到员工页面this.$router.push('/employee')}})}

上传员工头像封装

<template><!-- (自动上传)action是上传地址 人资项目不需要 人资项目(手动上传) --><!-- show-file-list不展示列表 --><el-uploadclass="avatar-uploader"action="":show-file-list="false":before-upload="beforeAvatarUpload"><img v-if="value" :src="value" class="avatar" /><i v-else class="el-icon-plus avatar-uploader-icon" /></el-upload>
</template><script>
export default {props: {value: {type: String,default: ''}},methods: {// 检查函数 判断文件的类型还有大小 return true(继续上传)/false(停止上传)beforeAvatarUpload (file) {const isJPG = ['image/jpeg','image/png','image/gif','image/bmp'].includes(file.type)const isLt2M = file.size / 1024 / 1024 < 5if (!isJPG) {this.$message.error('上传头像图片只能是 JPG PNG GIF BMP 格式!')}if (!isLt2M) {this.$message.error('上传头像图片大小不能超过 5MB!')}return isJPG && isLt2M}}
}
</script>
<style>
.avatar-uploader .el-upload {border: 1px dashed #d9d9d9;border-radius: 6px;cursor: pointer;position: relative;overflow: hidden;
}
.avatar-uploader .el-upload:hover {border-color: #409eff;
}
.avatar-uploader-icon {font-size: 28px;color: #8c939d;width: 178px;height: 178px;line-height: 178px;text-align: center;
}
.avatar {width: 178px;height: 178px;display: block;
}
</style>
<!-- 员工照片 --><el-row><el-col :span="12"><el-form-item label="员工头像"><!-- 放置上传图片 --><imageUpload v-model="userInfo.staffPhoto" /></el-form-item></el-col></el-row>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/681993.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用python给程序添加授权码,设置授权时间、撤销授权和管理授权

文章目录 引言思路1思路2思路3客户端逻辑注册机逻辑服务器逻辑源码引言 有很多同学在开发程序的同时想要保护自己的源码不被他人窃取,这时候给程序添加授权就显得非常有必要了,下面主要分三块来讲述下如何开发,可以直接嵌入在你的程序中。 思路1 软件授权方案大概分成两个…

【实战】一、Jest 前端自动化测试框架基础入门(三) —— 前端要学的测试课 从Jest入门到TDD BDD双实战(三)

文章目录 一、Jest 前端自动化测试框架基础入门7.异步代码的测试方法8.Jest 中的钩子函数9.钩子函数的作用域 学习内容来源&#xff1a;Jest入门到TDD/BDD双实战_前端要学的测试课 相对原教程&#xff0c;我在学习开始时&#xff08;2023.08&#xff09;采用的是当前最新版本&a…

python 通过ssh增量同步文件夹

要通过 SSH 使用 Python 进行文件夹的增量同步&#xff0c;你可以使用 paramiko 库来创建 SSH 连接并执行文件传输操作。paramiko 是一个 Python 实现的 SSHv2 协议库&#xff0c;可以用于进行 SSH 连接、文件传输等任务。 以下是一个简单的示例&#xff0c;展示如何使用 para…

ES实战-高级聚合

多桶型聚合 1.词条聚合–terms 2.范围聚合–range 3,直方图聚合–histogram 4.嵌套聚合 5.地理距离聚合 include(包含)exclude(不包含) GET /get-together/_search?pretty {"size": 0,"aggs": {"tags": {"terms": {"field"…

【教3妹学编程-算法题】捕获黑皇后需要的最少移动次数

3妹&#xff1a;2哥&#xff0c;新年好鸭~ 2哥 : 新年好&#xff0c;3妹这么早啊 3妹&#xff1a;是啊&#xff0c;新年第一天要起早&#xff0c;这样就可以起早一整年 2哥 :得&#xff0c;我还不了解你&#xff0c;每天晒到日上三竿 3妹&#xff1a;嘿嘿嘿嘿&#xff0c;一年是…

LeetCode、901. 股票价格跨度【中等,单调栈】

文章目录 前言LeetCode、901. 股票价格跨度【中等&#xff0c;单调栈】题目链接及分类思路思路1&#xff1a;暴力思路2&#xff1a;单调栈写法优化&#xff1a;单调栈简化写法(数组替代栈集合) 资料获取 前言 博主介绍&#xff1a;✌目前全网粉丝2W&#xff0c;csdn博客专家、…

别人卖了 2W 的一套 ChatGPT 自动身份提示词!

别人卖了 2W 的一套 ChatGPT 自动身份提示词! 英文版 You are an Expert level ChatGPT Prompt Engineer with expertise in various subject matters. Throughout our interaction, you will refer to me as (your name). Lets collaborate to create the best possible Cha…

深度学习-吴恩达L1W2作业

作业1&#xff1a;吴恩达《深度学习》L1W2作业1 - Heywhale.com 作业2&#xff1a;吴恩达《深度学习》L1W2作业2 - Heywhale.com 作业1 你需要记住的内容&#xff1a; -np.exp&#xff08;x&#xff09;适用于任何np.array x并将指数函数应用于每个坐标 -sigmoid函数及其梯度…

springboot180基于spring boot的医院挂号就诊系统

医院挂号就诊系统设计与实现 摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装医院挂号就诊系统软件来发挥其…

Excel练习:折线图突出最大最小值

Excel练习&#xff1a;折线图突出最大最小值 ​​ 要点&#xff1a;NA值在折现图中不会被绘制&#xff0c;看似一条线&#xff0c;实际是三条线。换成0值和""都不行。 ‍ 查看所有已分享Excel文件-阿里云 ‍ 学习的这个视频&#xff1a;Excel折线图&#xff0c…

使用文件读取的open 函数,让你的csv pandas 尾部插入快如闪电

文章目录 简介1. pandas loc 尾部插入方法loc 尾部插入的速度 2. open 方法open方法 处理csv的速度open方法 处理csv代码 简介 笔者在处理稍大型(几十万条)的csv文件时&#xff0c;发现在csv文件中&#xff0c;使用panda的loc方法进行拼接&#xff0c;速度太过于缓慢。 笔者提…

盐值1111

盐值处理简介 1.1 定义与概述 "盐值"是一个术语&#xff0c;通常在密码哈希中使用。当存储或传输密码时&#xff0c;系统不会&#xff08;或不应&#xff09;直接存储或传输用户的明文密码。相反&#xff0c;会通过哈希函数将密码转换成哈希值。问题在于&#xff0…

【面试】国家公务员考试复试,面试内容准备方向(非技术面试考察点)

【面试】国家公务员考试复试&#xff0c;面试内容准备方向&#xff08;非技术面试考察点&#xff09; 说明&#xff1a; csdn无法发部分考试相关例题&#xff08;提示涉z&#xff09;&#xff0c;所以本文主要还是针对评分标准和仪表等相关因素。 文章目录 1、面试试卷与评分1.…

前端架构: 实现脚手架处理简单的命令注册和参数解析

实现简单的命令注册和参数解析 1 &#xff09;概述 这里不会使用任何第三方工具&#xff0c;而是给大家讲解一下参数解析的一个实现原理实现两个目标 第一目标是注册一个命令 $ xyzcli init 这个命令就可以完成一个自己的操作第二个是实现参数解析 希望能够实现 --version 的一…

春节专题|产业7问:区块链厂商的现在和未来——基础设施厂商

2023转瞬即逝&#xff0c;不同于加密领域沉寂一整年后在年末集中爆发&#xff0c;对于我国的区块链厂商而言&#xff0c;稳中求胜才是关键词&#xff0c;在平稳发展的基调下&#xff0c;产业洗牌也悄无声息的到来。 从产业总体而言&#xff0c;在经过了接近3年的快速发展后&…

C语言系列1——详解C语言:变量、常量与数据类型

目录 写在开始1. 变量与常量的概念1.1. 变量1.2. 常量1.3. 变量与常量的比较1.4. 选择变量还是常量 2. C语言中的基本数据类型2.1. 整型&#xff08;Integer Types&#xff09;2.2. 浮点型&#xff08;Floating-Point Types&#xff09;2.3. 字符型&#xff08;Character Type&…

android studio下开发flutter

文章目录 1. 配置环境 https://flutter.cn/docs/get-started/install2. android studio下开发flutter 1. 配置环境 https://flutter.cn/docs/get-started/install 2. android studio下开发flutter 打开Android Studio -> File -> Settings -> Plugins 搜索Dart插件 …

Linux和Windows文件共享实现方式

安装 samba 服务 sudo apt-get install samba samba-common新增用户 groupadd sfp -g 6000 useradd sfp -u 6000 -g 6000 -s /sbin/nologin -d /dev/null设置密码 sudo smbpasswd -a sfp修改配置文件 sudo vi /etc/samba/smb.conf追加参数 [file]comment sfpfile #说明…

C++ 动态规划 计数类DP 整数划分

一个正整数 n 可以表示成若干个正整数之和&#xff0c;形如&#xff1a;nn1n2…nk &#xff0c;其中 n1≥n2≥…≥nk,k≥1 。 我们将这样的一种表示称为正整数 n 的一种划分。 现在给定一个正整数 n &#xff0c;请你求出 n 共有多少种不同的划分方法。 输入格式 共一行&…

【vue3学习笔记】shallowReactive与shallowRef;readOnly与shallowReadOnly;toRaw与markRaw

尚硅谷Vue2.0Vue3.0全套教程丨vuejs从入门到精通 课程 P158节 《shallowReactive与shallowRef》笔记&#xff1a; reactive()与shallowReactive()&#xff1a;reactive()处理后的数据是响应式的&#xff0c;对象内嵌套的深层结构全部是响应式的。shallowReactive()处理后的数据…