vhr项目学习笔记 Day13--2020/02/09

员工管理

员工添加

工号、所属部门、添加、数据校验

<template>
    <div>
        <div style="display: flex;justify-content: space-between">
            <div>
                <el-input style="width: 300px; margin-right: 10px" placeholder="请输入员工名进行搜索,可以直接回车搜索..."
                          @keydown.enter.native="initEmployees"
                          clearable
                          @clear="initEmployees"
                          prefix-icon="el-icon-search" v-model="keyword"></el-input>
                <el-button icon="el-icon-search" type="primary" @click="initEmployees">搜索</el-button>
                <el-button type="primary">高级搜索
                    <i class="fa fa-angle-double-down" aria-hidden="true"></i>
                </el-button>
            </div>
            <div>
                <el-button type="success">导入数据
                    <i class="fa fa-level-up" aria-hidden="true"></i>
                </el-button>
                <el-button type="success">导出数据
                    <i class="fa fa-level-down" aria-hidden="true"></i>
                </el-button>
                <el-button type="primary" icon="el-icon-plus" @click="showAddView">添加员工</el-button>
            </div>
        </div>
        <div style="margin-top: 10px">
            <el-table
                    :data="employees"
                    border
                    stripe
                    style="width: 100%">
                <el-table-column
                        type="selection"
                        width="55">
                </el-table-column>
                <el-table-column
                        prop="name"
                        label="姓名"
                        fixed
                        align="left"
                        width="100">
                </el-table-column>
                <el-table-column
                        prop="workId"
                        label="工号"
                        align="left"
                        width="95">
                </el-table-column>
                <el-table-column
                        prop="gender"
                        label="性别"
                        align="left"
                        width="85">
                </el-table-column>
                <el-table-column
                        prop="birthday"
                        label="出生日期"
                        align="left"
                        width="100">
                </el-table-column>
                <el-table-column
                        prop="idCard"
                        label="身份证号"
                        align="left"
                        width="200">
                </el-table-column>
                <el-table-column
                        prop="wedlock"
                        label="婚姻状况"
                        align="left"
                        width="70">
                </el-table-column>
                <el-table-column
                        prop="nation.name"
                        label="民族"
                        align="left"
                        width="50">
                </el-table-column>
                <el-table-column
                        prop="nativePlace"
                        label="籍贯"
                        align="left"
                        width="80">
                </el-table-column>
                <el-table-column
                        prop="politicsstatus.name"
                        label="政治面貌">
                </el-table-column>
                <el-table-column
                        prop="email"
                        label="邮箱"
                        align="left"
                        width="180">
                </el-table-column>
                <el-table-column
                        prop="phone"
                        label="电话号码"
                        align="left"
                        width="100">
                </el-table-column>
                <el-table-column
                        prop="address"
                        label="联系地址"
                        align="left"
                        width="220">
                </el-table-column>
                <el-table-column
                        prop="department.name"
                        label="所属部门"
                        align="left"
                        width="100">
                </el-table-column>
                <el-table-column
                        prop="position.name"
                        label="职位"
                        align="left"
                        width="100">
                </el-table-column>
                <el-table-column
                        prop="jobLevel.name"
                        label="职称"
                        align="left"
                        width="100">
                </el-table-column>
                <el-table-column
                        prop="engageForm"
                        label="聘用形式"
                        align="left"
                        width="100">
                </el-table-column>
                <el-table-column
                        prop="beginDate"
                        label="入职日期"
                        align="left"
                        width="100">
                </el-table-column>
                <el-table-column
                        prop="conversionTime"
                        label="转正日期"
                        align="left"
                        width="100">
                </el-table-column>
                <el-table-column
                        prop="beginContract"
                        label="合同起始日期"
                        align="left"
                        width="105">
                </el-table-column>
                <el-table-column
                        prop="endContract"
                        label="合同终止日期"
                        align="left"
                        width="105">
                </el-table-column>
                <el-table-column
                        prop="contractTerm"
                        label="合同期限"
                        align="left"
                        width="85">
                </el-table-column>
                <el-table-column
                        prop="tiptopDegree"
                        label="最高学历">
                </el-table-column>
                <el-table-column
                        label="操作"
                        width="200"
                        fixed="right">
                    <template slot-scope="scope">
                        <el-button style="padding: 3px" size="mini">编辑</el-button>
                        <el-button style="padding: 3px" size="mini" type="primary">查看高级资料</el-button>
                        <el-button style="padding: 3px" size="mini" type="danger">删除</el-button>
                    </template>
                </el-table-column>

            </el-table>
            <div>
                <el-pagination style="display: flex;justify-content: flex-end;"
                               background
                               @current-change="currentChange"
                               @size-change="sizeChange"
                               layout="sizes, prev, pager, next, jumper, ->, total, slot"
                               :total="total">
                </el-pagination>
            </div>
        </div>
        <el-dialog
                title="添加员工"
                :visible.sync="dialogVisible"
                width="80%">
            <div>
                <el-form :model="emp"
                         :rules="rules"
                         ref="doAddForm">
                    <el-row>
                        <el-col :span="6">
                            <el-form-item label="姓名:" prop="name">
                                <el-input style="width: 150px" v-model="emp.name" placeholder="请输入员工姓名"
                                          prefix-icon="el-icon-edit"></el-input>
                            </el-form-item>
                        </el-col>
                        <el-col :span="6">
                            <el-form-item label="性别:" prop="gender">
                                <el-radio-group v-model="emp.gender">
                                    <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"
                                        type="date"
                                        value-format="yyyy-MM-dd"
                                        placeholder="出生日期">
                                </el-date-picker>
                            </el-form-item>
                        </el-col>
                        <el-col :span="6">
                            <el-form-item label="政治面貌:" prop="politicId">
                                <el-select v-model="emp.politicId" placeholder="请选择">
                                    <el-option
                                            v-for="item in politicstatus"
                                            :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 style="width: 150px" v-model="emp.nationId" placeholder="请选择">
                                    <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="6">
                            <el-form-item label="籍贯:" prop="nativePlace">
                                <el-input style="width: 150px" 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 style="width: 250px" v-model="emp.email" placeholder="请输入邮箱地址"
                                          prefix-icon="el-icon-edit"></el-input>
                            </el-form-item>
                        </el-col>
                        <el-col :span="6">
                            <el-form-item label="联系地址:" prop="address">
                                <el-input style="width: 250px" 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 style="width: 150px" v-model="emp.posId" placeholder="请选择">
                                    <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="6">
                            <el-form-item label="职称:" prop="jobLevelId">
                                <el-select style="width: 150px" v-model="emp.jobLevelId" placeholder="请选择">
                                    <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="popVisible">
                                    <el-tree default-expand-all :data="allDeps" :props="defaultProps"
                                             @node-click="handleNodeClick"></el-tree>
                                    <div @click="showDepView" slot="reference" style="width: 150px;display: inline-flex;
font-size:13px;border-radius: 5px;border: 1px solid #dedede; height: 38px;cursor: pointer;align-items: center;padding-left: 8px">
                                        {{inputDepName}}
                                    </div>
                                </el-popover>
                            </el-form-item>
                        </el-col>
                        <el-col :span="6">
                            <el-form-item label="电话号码:" prop="phone">
                                <el-input style="width: 250px" v-model="emp.phone" 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="workId">
                                <el-input style="width: 150px" v-model="emp.workId"
                                          disabled
                                          prefix-icon="el-icon-edit"></el-input>
                            </el-form-item>
                        </el-col>
                        <el-col :span="6">
                            <el-form-item label="学历:" prop="tiptopDegree">
                                <el-select style="width: 150px" v-model="emp.tiptopDegree" placeholder="请选择">
                                    <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 style="width: 150px" v-model="emp.school"
                                          prefix-icon="el-icon-edit"></el-input>
                            </el-form-item>
                        </el-col>
                        <el-col :span="6">
                            <el-form-item label="专业名称:" prop="specialty">
                                <el-input style="width: 250px" v-model="emp.specialty"
                                          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"
                                        type="date"
                                        value-format="yyyy-MM-dd"
                                        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"
                                        type="date"
                                        value-format="yyyy-MM-dd"
                                        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"
                                        type="date"
                                        value-format="yyyy-MM-dd"
                                        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"
                                        type="date"
                                        value-format="yyyy-MM-dd"
                                        placeholder="合同结束日期">
                                </el-date-picker>
                            </el-form-item>
                        </el-col>
                    </el-row>
                    <el-row>
                        <el-col :span="6">
                            <el-form-item label="身份证号:" prop="idCard">
                                <el-input style="width: 250px" v-model="emp.idCard" placeholder="请输入身份证号"
                                          prefix-icon="el-icon-edit"></el-input>
                            </el-form-item>
                        </el-col>
                        <el-col :span="6">
                            <el-form-item label="聘用形式" prop="engageForm">
                                <el-radio-group v-model="emp.engageForm">
                                    <el-radio label="劳动合同">劳动合同</el-radio>
                                    <el-radio label="劳务合同">劳务合同</el-radio>
                                </el-radio-group>
                            </el-form-item>
                        </el-col>
                        <el-col :span="12">
                            <el-form-item label="婚姻状况" prop="wedlock">
                                <el-radio-group v-model="emp.wedlock">
                                    <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 {
                allDeps: [],
                popVisible: false,
                employees: [],
                total: 0,
                page: 1,
                size: 10,
                keyword: '',
                dialogVisible: false,
                emp: {
                    name: '',
                    gender: "男",
                    birthday: "1990-01-01",
                    idCard: "610122199001011256",
                    wedlock: "已婚",
                    nationId: 1,
                    nativePlace: "陕西",
                    politicId: 13,
                    email: "[email protected]",
                    phone: "18565558897",
                    address: "深圳市南山区",
                    departmentId: null,
                    jobLevelId: 9,
                    posId: 29,
                    engageForm: "劳务合同",
                    tiptopDegree: "本科",
                    specialty: "信息管理与信息系统",
                    school: "深圳大学",
                    beginDate: "2018-01-01",
                    workState: "在职",
                    workId: "00000001",
                    contractTerm: 2,
                    conversionTime: "2018-04-01",
                    notworkDate: null,
                    beginContract: "2018-01-01",
                    endContract: "2020-01-01",
                    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:'邮箱格式错误'}],
                    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'}],
                    contractTerm: [{required: true, message: '请输入合同年限', trigger: 'blur'}],
                    conversionTime: [{required: true, message: '请选择转正日期', trigger: 'blur'}],
                    beginContract: [{required: true, message: '请选择合同开始日期', trigger: 'blur'}],
                    endContract: [{required: true, message: '请选择合同结束日期', trigger: 'blur'}],
                },
                defaultProps: {
                    children: 'children',
                    label: 'name'
                },
                inputDepName: '',
                nations: [],
                joblevels: [],
                politicstatus: [],
                positions: [],
                tiptopdegrees: ['本科', '大专', '硕士', '博士', '高中', '初中', '小学', '其他']
            }
        },
        methods: {
            doAddEmp() {
                this.$refs['doAddForm'].validate(valid => {
                    if (valid) {
                        this.postRequest("/emp/basic/", this.emp).then(resp => {
                            if (resp) {
                                dialogVisible = false
                                this.initEmployees()
                            }
                        })
                    }
                })
            },
            handleNodeClick(data) {
                this.inputDepName = data.name
                this.emp.departmentId = data.id
                this.popVisible = !this.popVisible
            },
            showDepView() {
                this.popVisible = !this.popVisible
            },
            initPosition() {
                this.getRequest("/emp/basic/position").then(resp => {
                    if (resp) {
                        this.positions = resp
                    }
                })
            },
            getMaxWorkID() {
                this.getRequest("/emp/basic/maxWorkID").then(resp => {
                    if (resp) {
                        this.emp.workId = resp.obj;
                    }
                })
            },
            initData() {
                if (!window.sessionStorage.getItem("nations")) {
                    this.getRequest("/emp/basic/nation").then(resp => {
                        if (resp) {
                            this.nations = resp;
                            window.sessionStorage.setItem("nations", JSON.stringify(resp));
                        }
                    })
                } else {
                    this.nations = JSON.parse(window.sessionStorage.getItem("nations"))
                }

                if (!window.sessionStorage.getItem("joblevels")) {
                    this.getRequest("/emp/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"))
                }
                if (!window.sessionStorage.getItem("politicstatus")) {
                    this.getRequest("/emp/basic/politicsstatus").then(resp => {
                        if (resp) {
                            this.politicstatus = resp;
                            window.sessionStorage.setItem("politicstatus", JSON.stringify(resp));
                        }
                    })
                } else {
                    this.politicstatus = JSON.parse(window.sessionStorage.getItem("politicstatus"))
                }
                if (!window.sessionStorage.getItem("allDeps")) {
                    this.getRequest("/emp/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"))
                }
            },
            showAddView() {
                this.dialogVisible = true
                this.initPosition()
                this.getMaxWorkID()
            },
            sizeChange(currentSize) {
                this.size = currentSize
                this.initEmployees()
            },
            currentChange(currentPage) {
                this.page = currentPage
                this.initEmployees()
            },
            initEmployees() {
                this.getRequest("/emp/basic/?page=" + this.page + "&size=" + this.size + "&keyword=" + this.keyword).then(resp => {
                    if (resp) {
                        this.employees = resp.data;
                        this.total = resp.total
                    }
                })
            }
        }
        ,
        mounted() {
            this.initEmployees()
            this.initData()
        }
    }
</script>

<style scoped>

</style>

员工删除

 <el-button style="padding: 3px" size="mini" type="danger" @click="deleteEmp(scope.row)">删除</el-button>

 deleteEmp(data){
                this.$confirm('此操作将永久删除【' + data.name+ '】该员工, 是否继续?', '提示', {
                    confirmButtonText: '确定',
                    cancelButtonText: '取消',
                    type: 'warning'
                }).then(() => {
                    this.deleteRequest("/employee/basic/"+data.id).then(resp => {
                        if (resp) {
                            this.initEmployees()
                        }
                    })
                }).catch(() => {
                    this.$message({
                        type: 'info',
                        message: '已取消删除'
                    });
                });
            },

 @DeleteMapping("/{id}")
    public RespBean deleteEmp(@PathVariable Integer id){
        if (employeeService.deleteEmp(id)==1){
            return RespBean.ok("删除成功");
        }else{
            return RespBean.error("删除失败");
        }
    }

员工信息更新

@PutMapping("/")
    public RespBean updateEmp(@RequestBody Employee employee) {
        if (employeeService.updateEmp(employee) == 1) {
            return RespBean.ok("更新成功");
        } else {
            return RespBean.error("更新失败");
        }
    }

<el-dialog   :title="title"
         
           data() {
            return {
                title: '',
           }
            methods: {
            emptyEmp(){
                this.emp= {
                        name: '',
                        gender: "",
                        birthday: "",
                        idCard: "",
                        wedlock: "",
                        nationId: null,
                        nativePlace: "",
                        politicId: null,
                        email: "",
                        phone: "",
                        address: "",
                        departmentId: null,
                        jobLevelId: null,
                        posId: null,
                        engageForm: "",
                        tiptopDegree: "",
                        specialty: "",
                        school: "",
                        beginDate: "",
                        workState: "",
                        workId: "",
                        contractTerm: null,
                        conversionTime: "",
                        notworkDate: null,
                        beginContract: "",
                        endContract: "",
                        workAge: null
                }
                this.inputDepName= ''
            }, doAddEmp() {
                if (this.emp.id) {
                    this.$refs['doAddForm'].validate(valid => {
                        if (valid) {
                            this.putRequest("/employee/basic/", this.emp).then(resp => {
                                if (resp) {
                                    dialogVisible = false
                                    this.initEmployees()
                                }
                            })
                        }
                    })
                } else {
                    this.$refs['doAddForm'].validate(valid => {
                        if (valid) {
                            this.postRequest("/employee/basic/", this.emp).then(resp => {
                                if (resp) {
                                    dialogVisible = false
                                    this.initEmployees()
                                }
                            })
                        }
                    })
                }
            },showEditView(data) {
                this.initPosition()
                this.title = '编辑员工信息'
                this.emp = data
                this.inputDepName=data.department.name
                this.dialogVisible = true
            },
            showAddView() {
                this.emptyEmp()
                this.title = '添加员工'
                this.dialogVisible = true
                this.initPosition()
                this.getMaxWorkID()
            },
发布了11 篇原创文章 · 获赞 0 · 访问量 262

猜你喜欢

转载自blog.csdn.net/sinat_40558934/article/details/104240384