目录:
(1)操作员页面设计
(2)操作员功能实现
(3)操作员角色更新功能实现
(4)员工资料工具栏页面
(5)员工展示
(6)分页展示员工
(7)添加员工页面绘制
(8)添加员工页面绘制2
(9)添加员工下拉框数据处理、最大工号
(10)员工添加数据检验
(11)员工删除及更新
(12)封装文件的下载请求
(13)高级搜索页面设计
(14)高级搜索动画特效
(15)高级搜索功能实现
(1)操作员页面设计




(2)操作员功能实现
搜索框搜索:还是在初始化列表里面添加一个关键字keywords:



删除操作员方法:



状态开关事件:




在次登录:


(3)操作员角色更新功能实现




SysAdmin.vue详细代码:
- <template>
- <div>
- <div style="margin-top: 10px;display: flex;justify-content: center">
- <el-input placeholder="通过用户名搜索用户..." prefix-icon="el-icon-search" v-model="keywords"
- style="width: 400px;margin-right: 10px" @keydown.enter.native="doSearch">el-input>
- <el-button type="primary" icon="wl-icon-search" @click="doSearch">搜索el-button>
- div>
- <div class="admin-container">
-
- <el-card class="admin-card" v-for="(admin,index) in admins" :key="index">
- <div slot="header" class="clearfix">
- <span>{{admin.name}}span>
- <el-button style="float: right;padding: 3px 0;color: #ff0000" type="text" icon="el-icon-delete"
- @click="deleteAdmin(admin)">el-button>
- div>
- <div>
-
- <div class="img-container">
- <img :src="admin.userFace" :alt="admin.name" :title="admin.name" class="userface-img">
- div>
- div>
-
- <div class="userinfo-container">
- <div>用户名:{{admin.name}}div>
- <div>手机号码:{{admin.phone}}div>
- <div>电话号码:{{admin.telephone}}div>
- <div>地址:{{admin.address}}div>
- <div>用户状态:
- <el-switch
- v-model="admin.enabled"
- active-color="#13ce66"
- inactive-color="#ff4949"
- @change="enabledChange(admin)"
- active-text="启用"
- inactive-text="禁用">
- el-switch>
- div>
- <div>用户角色:
- <el-tag type="success" style="margin-right: 4px" v-for="(role,indexj) in admin.roles" :key="indexj">
- {{role.nameZh}}
- el-tag>
-
- <el-popover
- placement="right"
- title="角色列表"
- @show="showPop(admin)"
- @hide="hidePop(admin)"
- width="200"
- trigger="click">
-
- <el-select v-model="selectedRoles" multiple placeholder="请选择...">
- <el-option
- v-for="(r,indexk) in allRoles"
- :key="indexk"
- :label="r.nameZh"
- :value="r.id">el-option>
- el-select>
- <el-button slot="reference" icon="el-icon-more" type="text">el-button>
- el-popover>
-
- div>
-
- <div>备注:{{admin.remark}}div>
- div>
- el-card>
- div>
- div>
- template>
-
- <script>
- export default {
- name: "SysAdmin",
- data() {
- return {
- keywords: '',
- //操作员数组
- admins: [],
- allRoles: [],
- //选中的角色
- selectedRoles: []
- }
- },
- //当页面刚加载的时候调用initAdmins方法调用后端接口,获取所有操作员列表
- mounted() {
- this.initAdmins();
- },
- methods: {
- //获取所有操作员列表方法
- initAdmins() {
- this.getRequest('/system/admin/?keywords=' + this.keywords).then(resp => {
- if (resp) {
- //把返回的数据赋值给数组
- this.admins = resp;
- }
- })
- },
- //搜索框搜索
- doSearch() {
- this.initAdmins();
- },
- //删除操作员方法
- deleteAdmin(admin) {
- this.$confirm('此操作将永久删除该【' + admin.name + '】用户, 是否继续?', '提示', {
- confirmButtonText: '确定',
- cancelButtonText: '取消',
- type: 'warning'
- }).then(() => {
- //调用后端接口:/system/admin
- this.deleteRequest('/system/admin/' + admin.id).then(resp => {
- //删除成功之后重新调用获取操作员列表的方法
- this.initAdmins();
- })
- }).catch(() => {
- this.$message({
- type: 'info',
- message: '已取消删除'
- });
- });
- },
- //更新操作员状态
- enabledChange(admin) {
- //调用后端接口/system/admin
- this.putRequest('/system/admin/', admin).then(resp => {
- if (resp) {
- //成功之后重新调用获取操作员列表的方法,更新一下
- this.initAdmins();
- }
- })
- },
- //弹出框隐藏时触发的事件
- hidePop(admin) {
- let roles = [];
- Object.assign(roles, admin.roles);
- let flag = false;
- if (roles.length != this.selectedRoles.length) {
- flag = true;
- } else {
- for (let i = 0; i < roles.length; i++) {
- let role = roles[i];
- for (let j = 0; j < this.selectedRoles.length; j++) {
- let sr = this.selectedRoles[j];
- if (role.id == sr) {
- roles.splice(i, 1);
- i--;
- break;
- }
- }
- }
- if (roles.length != 0) {
- flag = true;
- }
- }
- if (flag) {
- let url = '/system/admin/role?adminId=' + admin.id;
- this.selectedRoles.forEach(sr => {
- url += '&rids=' + sr;
- })
- this.putRequest(url).then(resp => {
- if (resp) {
- this.initAdmins();
- }
- })
- }
- },
- //弹出框显示事件
- showPop(admin) {
- //拿到所有角色列表
- this.initAllRoles();
- //选中的角色
- let roles = admin.roles;
- this.selectedRoles = [];
- roles.forEach(r => {
- this.selectedRoles.push(r.id);
- })
- },
- //获取所有角色方法
- initAllRoles() {
- this.getRequest('/system/admin/roles').then(resp => {
- if (resp) {
- this.allRoles = resp;
- }
- })
- }
- }
- }
- script>
-
- <style>
- .userinfo-container div {
- font-size: 12px;
- color: #409eff;
- }
-
- .userinfo-container {
- margin-top: 20px;
- }
-
- .img-container {
- width: 100%;
- display: flex;
- justify-content: center;
- }
-
- .userface-img {
- width: 72px;
- height: 72px;
- border-radius: 72px;
- }
-
- .admin-container {
- margin-top: 10px;
- display: flex;
- justify-content: space-around;
- flex-wrap: wrap;
- }
-
- .admin-card {
- width: 300px;
- margin-bottom: 20px;
- }
- style>
(4)员工资料工具栏页面



(5)员工展示

...


(6)分页展示员工

点2:

换成每页20条:




搜索性王的:
当点击清空按钮时:


(7)添加员工页面绘制





(8)添加员工页面绘制2


...

(9)添加员工下拉框数据处理、最大工号
政治面貌、职称、职位、下拉框内容展示





(10)员工添加数据检验

先做一个数据校验,校验是否输入了内容:


(11)员工删除及更新



点击编辑:
修改学校为北京大学

在次打开:


删掉这向记录:


(12)封装文件的下载请求
实现导入数据导出数据
axios并不提供下载的功能,我们提供一个插件:先安装:

封装一下做文件下载请求的

download.js:
- import axios from 'axios'
-
- const service = axios.create({
- //默认类型
- responseType: 'arraybuffer'
- })
- //请求拦截器
- service.interceptors.request.use(config => {
- //判断是否登录,有token
- config.headers['Authorization'] = window.sessionStorage.getItem('tokenStr');
- return config
- }, error => {
- console.log(error)
- });
- //响应拦截器
- service.interceptors.response.use(
- resp => {
- const headers = resp.headers;//拿头部信息
- let reg = RegExp(/application\/json/);//定义正则表达式
- if (headers['content-type'].match(reg)) {//判断head是否跟正则表达式相匹配
- //调用方法转换为json字符串
- resp.data = uintToString(resp.data);
- } else {
- //不匹配的话返回stream流
- let fileDownload = require('js-file-download');//获取download插件
- let fileName = headers["content-disposition"].split(";")
- [1].split("filename=")[1];//获取名字
- let contentType = headers["content-type"];//获取contentType
- fileName = decodeURIComponent(fileName);//转换文件名,防止中文乱码
- fileDownload(resp.data, fileName, contentType)
- }
- },error => {
- console.log(error);
- }
- );
- //定义请求
- let base = '';
- export const downloadRequest = (url, params) => {
- return service({
- method: 'get',
- url: `${base}${url}`,
- data: params
- })
- }
- function uintToString(uintArray) {
- //编码
- let encodedString = String.fromCharCode.apply(null, new
- Uint8Array(uintArray)),
- //解码
- decodedString = decodeURIComponent(escape(encodedString));
- return JSON.parse(decodedString);
- }
- //暴露service
- export default service
在main.js引入:

(13)员工数据的导入导出

使用elementUI 的上传文件的组件:

(13)高级搜索页面设计

...
(14)高级搜索动画特效
点击高级搜索:

(15)高级搜索功能实现

EmpBasic.vue:详细代码:
- <template>
- <div>
- <div>
- <div style="display: flex;justify-content: space-between">
- <div>
-
- <el-input prefix-icon="el-icon-search"
- placeholder="请输入员工名进行搜索..."
- v-model="empName"
- @keydown.enter.native="initEmps"
- clearable
- @clear="initEmps"
- :disabled="showAdvanceSearchVisible"
- style="width: 300px;margin-right: 10px">el-input>
- <el-button type="primary"
- icon="el-icon-search"
- @click="initEmps"
- :disabled="showAdvanceSearchVisible">搜索
- el-button>
- <el-button type="primary"
- @click="showAdvanceSearchView">
- <i :class="showAdvanceSearchVisible?'fa fa-angle-doubleup':'fa fa-angle-double-down'"
- aria-hidden="true">i>
- 高级搜索
- el-button>
- div>
- <div>
-
- <el-upload
- action="/employee/basic/import"
- :before-upload="beforeUpload"
- :headers="headers"
- :on-success="onSuccess"
- :on-error="onError"
- :disabled="importDataDisabled"
- style="display: inline-flex;margin-right: 8px"
- :show-file-list="false">
- <el-button :disabled="importDataDisabled" type="success"
- :icon="importDataBtnIcon">
- {{importDataBtnText}}
- el-button>
- el-upload>
- <el-button type="success" @click="exportData" icon="el-icondownload">
- 导出数据
- el-button>
- <el-button type="primary" icon="el-icon-plus" @click="showAddEmpView">
- 添加用户
- el-button>
- div>
- div>
-
- <transition name="slide-fade">
- <div v-show="showAdvanceSearchVisible"
- style="border: 1px solid #409eff;border-radius: 5px;box-sizing:border-box;padding: 5px;margin: 10px 0px">
- <el-row>
- <el-col :span="5">
- 政治面貌:
- <el-select v-model="searchValue.politicId"
- placeholder="政治面貌" size="mini"
- style="width: 130px">
- <el-option
- v-for="item in politicsstatus"
- :key="item.id"
- :label="item.name"
- :value="item.id">
- el-option>
- el-select>
- el-col>
- <el-col :span="4">
- 民族:
- <el-select v-model="searchValue.nationId"
- placeholder="民族" size="mini" style="width: 130px">
- <el-option
- v-for="item in nations"
- :key="item.id"
- :label="item.name"
- :value="item.id">
- el-option>
- el-select>
- el-col>
- <el-col :span="4">
- 职位:
- <el-select v-model="searchValue.posId"
- placeholder="职位" size="mini" style="width: 130px">
- <el-option
- v-for="item in positions"
- :key="item.id"
- :label="item.name"
- :value="item.id">
- el-option>
- el-select>
- el-col>
- <el-col :span="4">
- 职称:
- <el-select v-model="searchValue.jobLevelId"
- placeholder="职称" size="mini"
- style="width: 130px">
- <el-option
- v-for="item in joblevels"
- :key="item.id"
- :label="item.name"
- :value="item.id">
- el-option>
- el-select>
- el-col>
- <el-col :span="7">
- 聘用形式:
- <el-radio-group v-model="searchValue.engageForm">
- <el-radio label="劳动合同">劳动合同el-radio>
- <el-radio label="劳务合同">劳务合同el-radio>
- el-radio-group>
- el-col>
- el-row>
- <el-row style="margin-top: 10px">
- <el-col :span="5">
- 所属部门:
- <el-popover
- placement="right"
- title="请选择部门"
- width="200"
- trigger="manual"
- v-model="visable2">
- <el-tree :data="allDeps" :props="defaultProps"
- default-expand-all
- @node-click="searchHandleNodeClick">
- el-tree>
- <div slot="reference"
- style="width: 130px;display: inline-flex;
- font-size: 13px;border: 1px solid #dedede;height: 24px;border-radius:
- 5px;cursor: pointer;align-items: center;padding-left: 8px;box-sizing: border-box;
- margin-left: 3px"
- @click="showDepView2">
- {{inputDepName}}
- div>
- el-popover>
- el-col>
- <el-col :span="10">
- 入职日期:
- <el-date-picker
- v-model="searchValue.beginDateScope"
- size="mini"
- type="daterange"
- value-format="yyyy-MM-dd"
- unlink-panels
- range-separator="至"
- start-placeholder="开始日期"
- end-placeholder="结束日期">
- el-date-picker>
- el-col>
- <el-col :span="5" :offset="4">
- <el-button>取消el-button>
- <el-button type="primary"
- @click="initEmps('advanced')">搜索
- el-button>
- el-col>
- el-row>
- div>
- transition>
-
- div>
-
-
-
- <div style="margin-top: 10px">
- <el-table
- :data="emps"
- stripe
- border
- v-loading="loading"
- element-loading-text="正在加载..."
- element-loading-spinner="el-icon-loading"
- element-loading-background="rgba(0, 0, 0, 0.8)"
- style="width: 100%">
- <el-table-column
- type="selection"
- width="55">
- el-table-column>
- <el-table-column
- prop="name"
- label="姓名"
- fixed
- align="left"
- width="90">
- el-table-column>
- <el-table-column
- prop="workID"
- label="工号"
- align="left"
- width="85">
- el-table-column>
- <el-table-column
- prop="gender"
- label="性别"
- width="85">
- el-table-column>
- <el-table-column
- prop="birthday"
- align="left"
- width="95"
- label="出生日期">
- el-table-column>
- <el-table-column
- prop="idCard"
- align="left"
- width="150"
- label="身份证号码">
- el-table-column>
- <el-table-column
- prop="wedlock"
- width="70"
- label="婚姻状况">
- el-table-column>
- <el-table-column
- prop="nation.name"
- width="50"
- label="民族">
- el-table-column>
- <el-table-column
- prop="nativePlace"
- width="80"
- label="籍贯">
- el-table-column>
- <el-table-column
- prop="politicsStatus.name"
- label="政治面貌">
- el-table-column>
- <el-table-column
- prop="email"
- align="left"
- width="180"
- label="电子邮件">
- el-table-column>
- <el-table-column
- prop="phone"
- align="left"
- width="100"
- label="电话号码">
- el-table-column>
- <el-table-column
- prop="address"
- align="left"
- width="220"
- label="联系地址">
- el-table-column>
- <el-table-column
- prop="department.name"
- align="left"
- width="100"
- label="所属部门">
- el-table-column>
- <el-table-column
- prop="position.name"
- width="100"
- label="职位">
- el-table-column>
- <el-table-column
- prop="joblevel.name"
- width="100"
- label="职称">
- el-table-column>
- <el-table-column
- prop="engageForm"
- align="left"
- width="100"
- label="聘用形式">
- el-table-column>
- <el-table-column
- prop="tiptopDegree"
- label="最高学历">
- el-table-column>
- <el-table-column
- prop="school"
- align="left"
- width="150"
- label="毕业院校">
- el-table-column>
- <el-table-column
- prop="specialty"
- align="left"
- width="150"
- label="专业">
- el-table-column>
- <el-table-column
- prop="workState"
- align="left"
- width="70"
- label="在职状态">
- el-table-column>
- <el-table-column
- prop="beginDate"
- align="left"
- width="95"
- label="入职日期">
- el-table-column>
- <el-table-column
- prop="conversionTime"
- align="left"
- width="95"
- label="转正日期">
- el-table-column>
- <el-table-column
- prop="beginContract"
- align="left"
- width="95"
- label="合同起始日期">
- el-table-column>
- <el-table-column
- prop="endContract"
- align="left"
- width="95"
- label="合同截止日期">
- el-table-column>
- <el-table-column
- align="left"
- width="100"
- label="合同期限">
- <template slot-scope="scope">
- <el-tag>{{scope.row.contractTerm}}el-tag>
- 年
- template>
- el-table-column>
- <el-table-column
- fixed="right"
- width="200"
- label="操作">
- <template slot-scope="scope">
- <el-button style="padding: 3px" size="mini"
- @click="showEditEmpView(scope.row)">编辑
- el-button>
- <el-button style="padding: 3px" size="mini"
- type="primary">查看高级资料
- el-button>
- <el-button style="padding: 3px" size="mini"
- type="danger" @click="deleteEmp(scope.row)">删除
- el-button>
- template>
- el-table-column>
- el-table>
-
- <div style="display: flex;justify-content: flex-end">
-
- <el-pagination
- background
- @current-change="currentChange"
- @size-change="sizeChange"
- layout="sizes,prev,pager,next,jumper,->,total,slot" :total="total">
- el-pagination>
- div>
- div>
-
- <el-dialog
- :title="title"
- :visible.sync="dialogVisible"
- width="80%">
- <div>
-
- <el-form :model="emp" :rules="rules" ref="empForm">
-
-
- <el-row>
- <el-col :span="6">
- <el-form-item label="姓名:" prop="name">
- <el-input size="mini" style="width: 150px" v-model="emp.name" placeholder="请输入员工姓名"
- prefix-icon="el-icon-edit">el-input>
- el-form-item>
- el-col>
- <el-col :span="5">
- <el-form-item label="性别:" prop="gender">
- <el-radio-group v-model="emp.gender" style="margin-top:8px">
- <el-radio label="男">男el-radio>
- <el-radio label="女">女el-radio>
- el-radio-group>
- el-form-item>
- el-col>
- <el-col :span="6">
- <el-form-item label="出生日期:" prop="birthday">
- <el-date-picker
- v-model="emp.birthday"
- size="mini"
- type="date"
- value-format="yyyy-MM-dd"
- style="width: 150px"
- placeholder="出生日期">
- el-date-picker>
- el-form-item>
- el-col>
- <el-col :span="7">
- <el-form-item label="政治面貌:" prop="politicId">
- <el-select v-model="emp.politicId"
- placeholder="政治面貌" size="mini" style="width: 200px">
- <el-option
- v-for="item in politicsstatus"
- :key="item.id"
- :label="item.name"
- :value="item.id">
- el-option>
- el-select>
- el-form-item>
- el-col>
- el-row>
-
- <el-row>
- <el-col :span="6">
- <el-form-item label="民族:" prop="nationId">
- <el-select v-model="emp.nationId"
- placeholder="民族" size="mini" style="width: 150px">
- <el-option
- v-for="item in nations"
- :key="item.id"
- :label="item.name"
- :value="item.id">
- el-option>
- el-select>
- el-form-item>
- el-col>
- <el-col :span="5">
- <el-form-item label="籍贯:" prop="nativePlace">
- <el-input size="mini" style="width: 120px" v-model="emp.nativePlace" placeholder="请输入籍贯"
- prefix-icon="el-icon-edit">el-input>
- el-form-item>
- el-col>
- <el-col :span="6">
- <el-form-item label="电子邮箱:" prop="email">
- <el-input size="mini" style="width: 150px" v-model="emp.email" placeholder="请输入电子邮箱"
- prefix-icon="el-icon-message">el-input>
- el-form-item>
- el-col>
- <el-col :span="7">
- <el-form-item label="联系地址:" prop="address">
- <el-input size="mini" style="width: 200px" v-model="emp.address" placeholder="请输入联系地址"
- prefix-icon="el-icon-edit">el-input>
- el-form-item>
- el-col>
- el-row>
-
- <el-row>
- <el-col :span="6">
- <el-form-item label="职位:" prop="posId">
- <el-select v-model="emp.posId" placeholder="职位"
- size="mini" style="width: 150px">
- <el-option
- v-for="item in positions"
- :key="item.id"
- :label="item.name"
- :value="item.id">
- el-option>
- el-select>
- el-form-item>
- el-col>
- <el-col :span="5">
- <el-form-item label="职称:" prop="jobLevelId">
- <el-select v-model="emp.jobLevelId"
- placeholder="职称" size="mini" style="width: 150px">
- <el-option
- v-for="item in joblevels"
- :key="item.id"
- :label="item.name"
- :value="item.id">
- el-option>
- el-select>
- el-form-item>
- el-col>
- <el-col :span="6">
- <el-form-item label="所属部门:" prop="departmentId">
- <el-popover
- placement="right"
- title="请选择部门"
- width="200"
- trigger="manual"
- v-model="visable">
-
- <el-tree :data="allDeps"
- :props="defaultProps" default-expand-all
- @node-click="handleNodeClick">
- el-tree>
- <div slot="reference"
- style="width: 150px;display: inline-flex;
- font-size: 13px;border: 1px solid #dedede;height: 24px;border-radius:
- 5px;cursor: pointer;align-items: center;padding-left: 8px;box-sizing: border-box"
- @click="showDepView">
- {{inputDepName}}
- div>
- el-popover>
- el-form-item>
- el-col>
- <el-col :span="7">
- <el-form-item label="电话号码:" prop="phone">
- <el-input size="mini" style="width: 200px" v-model="emp.phone" placeholder="请输入电话号码"
- prefix-icon="el-icon-phone">el-input>
- el-form-item>
- el-col>
- el-row>
-
- <el-row>
- <el-col :span="6">
- <el-form-item label="工号:" prop="workID">
- <el-input size="mini" style="width: 150px" v-model="emp.workID" placeholder="请输入工号"
- prefix-icon="el-icon-edit" disabled>
- el-input>
- el-form-item>
- el-col>
- <el-col :span="5">
- <el-form-item label="学历:" prop="tiptopDegree">
- <el-select v-model="emp.tiptopDegree"
- placeholder="学历" size="mini" style="width: 150px">
- <el-option
- v-for="item in tiptopDegrees"
- :key="item"
- :label="item"
- :value="item">
- el-option>
- el-select>
- el-form-item>
- el-col>
- <el-col :span="6">
- <el-form-item label="毕业院校:" prop="school">
- <el-input size="mini" style="width: 150px" v-model="emp.school" placeholder="请输入毕业院校"
- prefix-icon="el-icon-edit">el-input>
- el-form-item>
- el-col>
- <el-col :span="7">
- <el-form-item label="专业名称:" prop="specialty">
- <el-input size="mini" style="width: 200px" v-model="emp.specialty" placeholder="请输入专业名称"
- prefix-icon="el-icon-edit">el-input>
- el-form-item>
- el-col>
- el-row>
-
- <el-row>
- <el-col :span="6">
- <el-form-item label="入职日期:" prop="beginDate">
- <el-date-picker
- v-model="emp.beginDate"
- size="mini"
- type="date"
- value-format="yyyy-MM-dd"
- style="width: 130px"
- placeholder="入职日期">
- el-date-picker>
- el-form-item>
- el-col>
- <el-col :span="6">
- <el-form-item label="转正日期:"
- prop="conversionTime">
- <el-date-picker
- v-model="emp.conversionTime"
- size="mini"
- type="date"
- value-format="yyyy-MM-dd"
- style="width: 130px"
- placeholder="转正日期">
- el-date-picker>
- el-form-item>
- el-col>
- <el-col :span="6">
- <el-form-item label="合同起始日期:"
- prop="beginContract">
- <el-date-picker
- v-model="emp.beginContract"
- size="mini"
- type="date"
- value-format="yyyy-MM-dd"
- style="width: 130px"
- placeholder="合同起始日期">
- el-date-picker>
- el-form-item>
- el-col>
- <el-col :span="6">
- <el-form-item label="合同截止日期:"
- prop="endContract">
- <el-date-picker
- v-model="emp.endContract"
- size="mini"
- type="date"
- value-format="yyyy-MM-dd"
- style="width: 130px"
- placeholder="合同截止日期">
- el-date-picker>
- el-form-item>
- el-col>
- el-row>
-
- <el-row>
- <el-col :span="8">
- <el-form-item label="身份证号码:" prop="idCard">
- <el-input size="mini" style="width: 180px" v-model="emp.idCard" placeholder="请输入身份证号码"
- prefix-icon="el-icon-edit">el-input>
- el-form-item>
- el-col>
- <el-col :span="8">
- <el-form-item label="聘用形式:" prop="engageForm">
- <el-radio-group v-model="emp.engageForm" style="margin-top:8px">
- <el-radio label="劳动合同">劳动合同el-radio>
- <el-radio label="劳务合同">劳务合同el-radio>
- el-radio-group>
- el-form-item>
- el-col>
- <el-col :span="8">
- <el-form-item label="婚姻状况:" prop="wedlock">
- <el-radio-group v-model="emp.wedlock" style="margin-top:8px">
- <el-radio label="已婚">已婚el-radio>
- <el-radio label="未婚">未婚el-radio>
- <el-radio label="离异">离异el-radio>
- el-radio-group>
- el-form-item>
- el-col>
- el-row>
- el-form>
- div>
- <span slot="footer" class="dialog-footer">
- <el-button @click="dialogVisible = false">取 消el-button>
- <el-button type="primary" @click="doAddEmp">确 定el-button>
- span>
- el-dialog>
- div>
- template>
-
- <script>
- export default {
- name: "EmpBasic",
- data(){
- return{
- searchValue: {
- politicId: null,
- nationId: null,
- jobLevelId: null,
- posId: null,
- engageForm: '',
- departmentId: null,
- beginDateScope: null
- },
- //员工数组
- emps:[],
- loading:false,
- //总条数
- total:0,
- //当前页
- currentPage:1,
- size:10,
- //员工名
- empName:'',
- //弹出框是否弹出默认是false
- dialogVisible:false,
- //民族
- nations:[],
- //职称
- joblevels:[],
- //政治面貌
- politicsstatus:[],
- //职位
- positions:[],
- //固定学历的下拉列表
- tiptopDegrees: ['本科', '大专', '硕士', '博士', '高中', '初中', '小学', '其他'],
- //树形列表默认为不可见
- visable:false,
- visable2:false,
- //树形列表的对应属性
- defaultProps:{
- children:'children',
- label:'name'
- },
- //部门数据
- allDeps:[],
- //回显数据
- inputDepName:'',
- //弹出框标题
- title:'',
- importDataBtnText:'导入数据',
- importDataBtnIcon:'el-icon-upload2',
- //正在导入时的属性
- importDataDisabled:false,
- headers:{
- Authorization:window.sessionStorage.getItem('tokenStr')
- },
- //高级搜索属性显示
- showAdvanceSearchVisible:false,
- //添加员工对象
- emp: {
- id:null,
- name: '',
- gender: '',
- birthday: '',
- idCard: '',
- wedlock: '',
- nationId: null,
- nativePlace: '',
- politicId: null,
- email: '',
- phone: '',
- address: '',
- departmentId: null,
- jobLevelId: null,
- posId: null,
- engageForm: '',
- tiptopDegree: '',
- specialty: '',
- school: '',
- beginDate: '',
- workID: '',
- contractTerm: null,
- conversionTime: '',
- notWorkDate: '',
- beginContract: '',
- endContract: '',
- workAge: null
- },
- rules: {
- name: [{
- required: true, message: '请输入员工姓名', trigger:
- 'blur'
- }],
- gender: [{
- required: true, message: '请输入性别', trigger:
- 'blur'
- }],
- birthday: [{
- required: true, message: '请输入出生日期',
- trigger: 'blur'
- }],
- idCard: [{
- required: true, message: '请输入身份证号码', trigger:
- 'blur'
- }, {
- pattern: /(^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$)|(^[1-9]\d{5}\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{2}$)/,
- message: '身份证号码格式不正确',
- trigger: 'blur'
- }],
- wedlock: [{
- required: true, message: '请输入婚姻状况', trigger:
- 'blur'
- }],
- nationId: [{
- required: true, message: '请输入民族', trigger:
- 'blur'
- }],
- nativePlace: [{
- required: true, message: '请输入籍贯', trigger:
- 'blur'
- }],
- politicId: [{
- required: true, message: '请输入政治面貌',
- trigger: 'blur'
- }],
- email: [{
- required: true, message: '请输入邮箱地址', trigger:
- 'blur'
- }, {
- type: 'email',
- message: '邮箱格式不正确',
- trigger: 'blur'
- }],
- phone: [{
- required: true, message: '请输入电话号码', trigger:
- 'blur'
- }],
- address: [{
- required: true, message: '请输入员工地址', trigger:
- 'blur'
- }],
- departmentId: [{
- required: true, message: '请输入部门名称',
- trigger: 'blur'
- }],
- jobLevelId: [{
- required: true, message: '请输入职称', trigger:
- 'blur'
- }],
- posId: [{
- required: true, message: '请输入职位', trigger:
- 'blur'
- }],
- engageForm: [{
- required: true, message: '请输入聘用形式',
- trigger: 'blur'
- }],
- tiptopDegree: [{
- required: true, message: '请输入学历',
- trigger: 'blur'
- }],
- specialty: [{
- required: true, message: '请输入专业', trigger:
- 'blur'
- }],
- school: [{
- required: true, message: '请输入毕业院校', trigger:
- 'blur'
- }],
- beginDate: [{
- required: true, message: '请输入入职日期',
- trigger: 'blur'
- }],
- workState: [{
- required: true, message: '请输入工作状态',
- trigger: 'blur'
- }],
- workID: [{
- required: true, message: '请输入工号', trigger:
- 'blur'
- }],
- contractTerm: [{
- required: true, message: '请输入合同期限',
- trigger: 'blur'
- }],
- conversionTime: [{
- required: true, message: '请输入转正日期',
- trigger: 'blur'
- }],
- notWorkDate: [{
- required: true, message: '请输入离职日期',
- trigger: 'blur'
- }],
- beginContract: [{
- required: true, message: '请输入合同起始日期',
- trigger: 'blur'
- }],
- endContract: [{
- required: true, message: '请输入合同结束日期',
- trigger: 'blur'
- }],
- workAge: [{
- required: true, message: '请输入工龄', trigger:
- 'blur'
- }],
- }
- }
- },
- //当页面刚加载的时候调用initEmps方法调用后端接口,获取所有员工列表列表
- mounted(){
- this.initEmps();//获取员工列表
- this.initData();//获取职位、民族等列表
- this.initPositions();//获取职位
- },
- methods:{
- //获取员工列表方法
- initEmps(type) {
- this.loading = true;
- let url = '/employee/basic/?currentPage=' + this.currentPage + '&size=' + this.size;
- if (type && type == 'advanced') {
- if (this.searchValue.politicId) {
- url += '&politicId=' + this.searchValue.politicId;
- }
- if (this.searchValue.nationId) {
- url += '&nationId=' + this.searchValue.nationId;
- }
- if (this.searchValue.jobLevelId) {
- url += '&jobLevelId=' + this.searchValue.jobLevelId;
- }
- if (this.searchValue.posId) {
- url += '&posId=' + this.searchValue.posId
- }
- if (this.searchValue.engageForm) {
- url += '&engageForm=' + this.searchValue.engageForm;
- }
- if (this.searchValue.departmentId) {
- url += '&departmentId=' + this.searchValue.departmentId;
- }
- if (this.searchValue.beginDateScope) {
- url += '&beginDateScope=' + this.searchValue.beginDateScope;
- }
- } else {
- url += '&name=' + this.empName;
- }
- this.getRequest(url).then(resp => {
- this.loading = false;
- if (resp) {
- this.emps = resp.data;
- this.total = resp.total;
- }
- })
- },
- //每页条数改变时触发
- sizeChange(currentSize) {
- this.size = currentSize;
- this.initEmps();
- },
- //当前页改变方法
- currentChange(currentPage) {
- this.currentPage = currentPage;
- //当前也改变,之后调用列表方法
- this.initEmps();
- },
- //显示弹出框方法
- showAddEmpView() {
- this.title = '添加员工';
- //清空员工数据
- this.emp = {
- id: null,
- name: '',
- gender: '',
- birthday: '',
- idCard: '',
- wedlock: '',
- nationId: null,
- nativePlace: '',
- politicId: null,
- email: '',
- phone: '',
- address: '',
- departmentId: null,
- jobLevelId: null,
- posId: null,
- engageForm: '',
- tiptopDegree: '',
- specialty: '',
- school: '',
- beginDate: '',
- workID: '',
- contractTerm: null,
- conversionTime: '',
- notWorkDate: '',
- beginContract: '',
- endContract: '',
- workAge: null
- }
- //清空所处部门
- this.inputDepName = '';
- //显示弹出框
- this.dialogVisible = true;
- this.getMaxWorkID();
- this.initPositions();
- },
- //获取去下拉框中的内容 获取职位、民族、职称等列表
- initData() {
- //首先判断sessionStorage里面有没有民族
- if (!window.sessionStorage.getItem("nations")) {
- this.getRequest('/employee/basic/nation').then(resp => {
- if (resp) {
- this.nations = resp;
- //存入sessionStorage里面
- window.sessionStorage.setItem("nations", JSON.stringify(resp));
- }
- })
- } else {
- //存在直接获取
- this.nations = JSON.parse(window.sessionStorage.getItem("nations"))
- }
- //首先判断sessionStorage里面有没有职称
- if (!window.sessionStorage.getItem("joblevels")) {
- this.getRequest('/employee/basic/joblevel').then(resp => {
- if (resp) {
- this.joblevels = resp;
- window.sessionStorage.setItem("joblevels", JSON.stringify(resp));
- }
- })
- } else {
- this.joblevels = JSON.parse(window.sessionStorage.getItem("joblevels"))
- }
- //首先判断sessionStorage里面有没有政治面貌
- if (!window.sessionStorage.getItem("politicsstatus")) {
- this.getRequest('/employee/basic/politicsStatus').then(resp => {
- if (resp) {
- this.politicsstatus = resp;
- window.sessionStorage.setItem("politicsstatus", JSON.stringify(resp));
- }
- })
- } else {
- this.politicsstatus = JSON.parse(window.sessionStorage.getItem("politicsstatus"))
- }
- //首先判断sessionStorage里面有没有部门
- if (!window.sessionStorage.getItem("allDeps")) {
- this.getRequest('/employee/basic/deps').then(resp => {
- if (resp) {
- this.allDeps = resp;
- window.sessionStorage.setItem("allDeps", JSON.stringify(resp));
- }
- })
- } else {
- this.allDeps =
- JSON.parse(window.sessionStorage.getItem("allDeps"))
- }
- },
- //获取职位
- initPositions() {
- this.getRequest('/employee/basic/position').then(resp => {
- if (resp) {
- this.positions = resp;
- }
- })
- },
- //获取最大工号
- getMaxWorkID() {
- this.getRequest('/employee/basic/maxWorkID').then(resp => {
- if (resp) {
- this.emp.workID = resp.obj;
- }
- })
- },
- //显示部门按钮
- showDepView() {
- this.visable = !this.visable;
- },
- //关闭部门按钮
- handleNodeClick(data) {
- this.inputDepName = data.name;
- this.emp.departmentId = data.id;
- this.visable = !this.visable;
- },
- //添加员工方法
- doAddEmp() {
- //判断是否有id,有id是更新
- if (this.emp.id) {
- //进行验证验证通过进行更新操作
- this.$refs['empForm'].validate(valid => {
- if (valid) {
- this.putRequest('/employee/basic/', this.emp).then(resp => {
- if (resp) {
- //将弹出框隐藏
- this.dialogVisible = false;
- this.initEmps();
- }
- })
- }
- })
- } else {
- //进行验证验证通过进行添加操作
- this.$refs['empForm'].validate(valid => {
- if (valid) {
- this.postRequest('/employee/basic/', this.emp).then(resp => {
- if (resp) {
- this.dialogVisible = false;
- this.initEmps();
- }
- })
- }
- })
- }
- },
- //删除员工事件
- deleteEmp(data) {
- this.$confirm('此操作将永久删除该【' + data.name + '】, 是否继续?', '提示', {
- confirmButtonText: '确定',
- cancelButtonText: '取消',
- type: 'warning'
- }).then(() => {
- this.deleteRequest('/employee/basic/' + data.id).then(resp => {
- if (resp) {
- //删除完初始化数据
- this.initEmps();
- }
- });
- }).catch(() => {
- this.$message({
- type: 'info',
- message: '已取消删除'
- });
- });
- },
- //修改员工方法
- showEditEmpView(data) {
- this.title = '编辑员工';
- this.emp = data;//展示数据
- this.inputDepName = data.department.name;//展示所处部门
- this.initPositions();
- this.dialogVisible = true;//弹出框显示
- },
- //导出数据
- exportData() {
- this.downloadRequest('/employee/basic/export')
- },
- //导入数据的时的显示方法
- beforeUpload() {
- this.importDataBtnText = '正在导入';
- this.importDataBtnIcon = 'el-icon-loading';
- this.importDataDisabled = true;//正在导入时为true,禁用状态
- },
- //文件上传失败的钩子函数
- onError() {
- this.importDataBtnText = '导入数据';
- this.importDataBtnIcon = 'el-icon-upload2';
- this.importDataDisabled = false;//导入成功开启状态false
- },
- //文件上传成功的钩子函数
- onSuccess() {
- this.importDataBtnText = '导入数据';
- this.importDataBtnIcon = 'el-icon-upload2';
- this.importDataDisabled = false;
- this.initEmps();
- },
- //高级搜索框显示的方法
- showAdvanceSearchView() {
- this.showAdvanceSearchVisible = !this.showAdvanceSearchVisible;
- this.searchValue = {
- politicId: null,
- nationId: null,
- jobLevelId: null,
- posId: null,
- engageForm: '',
- departmentId: null,
- beginDateScope: null
- }
- },
- //高级搜索中的部门列表
- searchHandleNodeClick(data) {
- this.inputDepName = data.name;
- this.searchValue.departmentId = data.id;
- this.visable2 = !this.visable2;
- },
- //显示部门按钮2
- showDepView2() {
- this.visable2 = !this.visable2;
- },
- }
- }
- script>
-
- <style scoped>
-
- style>