js实战员工管理

html+js部分index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" type="text/css" href="index.css" />
</head>
<body>
    <section class="wrap">
        <header class="header">
            <h2 class="title">员工信息管理</h2>
            <a href="javascript:;" class="addBtn">添加</a>
        </header>
        <form class="add">
            <input type="text" class="name" placeholder="姓名" />
            <label class="genderWrap">
                <input type="checkbox" class="gender" />
                <div class="genderIco">
                    <div class="genderInner"><span>男</span><span>女</span></div>
                </div>
            </label>
            <input type="number" class="age" placeholder="年龄" step="1" min="18" max="80" />
            <label class="stateWrap">
                <input type="checkbox" class="state" />
                <div class="stateIco">
                    <div class="stateInner"><span>在职</span><span>离职</span></div>
                </div>
            </label>
            <button type="button" class="submit">录入信息</button>
        </form>
        <!-- <nav class="nav">
            <a href="javascript:;">所有员工信息</a>
            <a href="javascript:;">女员工信息</a>
            <a href="javascript:;">男员工信息</a>
            <a href="javascript:;">在职员工信息</a>
            <a href="javascript:;">离职员工信息</a>
        </nav> -->
        <ul class="list">
            <!-- <li>
                <span>
                    <input type="checkbox" class="checkAll" />
                </span>
                <span>姓名</span>
                <span>性别</span>
                <span>年龄</span>
                <span>状态</span>
                <span>操作</span>
            </li> -->
            <!-- <li>
                <span>
                    <input type="checkbox" class="checkAll" />
                </span>
                <span>Leo</span>
                <span>男</span>
                <span>40</span>
                <span><a href="javascript:;">在职</a></span>
                <span><a href="javascript:;">删除</a></span>
            </li>
            <li>
                <span>
                    <input type="checkbox" class="checkAll" />
                </span>
                <span>小美</span>
                <span>女</span>
                <span>18</span>
                <span><a href="javascript:;">在职</a></span>
                <span><a href="javascript:;">删除</a></span>
            </li>
            <li>
                <span>
                    <input type="checkbox" class="checkAll" />
                </span>
                <span>张三</span>
                <span>男</span>
                <span>24</span>
                <span><a href="javascript:;">在职</a></span>
                <span><a href="javascript:;">删除</a></span>
            </li> -->
        </ul>
        <p class="operate">
            <a href="javascript:;">删除选中项</a>
            <a href="javascript:;">入职选中项</a>
            <a href="javascript:;">离职选中项</a>
        </p>
    </section>
    <script type="text/javascript" src="data.js"></script>
    <script type="text/javascript">
    (function(){
        let list=document.querySelector('.list');
        let add=document.querySelector('.add');
        let operate=document.querySelector('.operate');
        let addBtn=document.querySelector('.addBtn');
        let addData=add.querySelectorAll('input');

        let showFrom=false;
        render();
        addBtn.onclick=function(){
            showFrom=!showFrom
            render();
        }
        add.children[4].onclick=function(){
            addInfo(addData[0].value,addData[2].value,addData[1].checked?"女":"男",!addData[3].checked)
        }
        // 添加数据
        // {
        //  id:Symbol(),
        //  name:"红五",
        //  age:"19",
        //  gender:"女",
        //  state:false,
        //  checked:false
        // },
        function addInfo(name,age,gender,state){
            data.push({
                id:Symbol(),
                name,
                age,
                gender,
                state,
                checked:false
            });
            render();
        }
        // 判断是否全选
        function isGroupChecked(){
            return data.length==getGroupChecked().length;
        }
       
        // 获取所有选中的
        function getGroupChecked(){
           return data.filter((item)=>item.checked);
        }
        // 切换全选和全不选状态
        function setGroupChecked(state){
            data.forEach((item)=>{
                item.checked=state
            })
            // console.log(data)
        }
        // 切换单条数据的选中和不选中
        function setChecked(id,state){
            data.forEach((item)=>{
                if(item.id==id){
                    item.checked=state;
                    
                }
                
            })
        }
        // 删除选中项
        function removeChecked(){
            data=data.filter((item)=>!item.checked);
        }
        // 切换选中项职位状态
        function changeCheckedState(state){
            getGroupChecked().forEach((item)=>{
                item.state=state
            })
        }
        // 根据数据生成视图
        function render(){
            if(data.length==0){
                showFrom=true;
                list.style.display="none";
            }else{
                list.style.display="block";
            }
            if(showFrom){
                add.style.display="flex";
                // list.style.display="none";
            }else{
                add.style.display="none";
                // list.style.display="block";
            }
            // 渲染列表
            list.innerHTML=`
                <li>
                    <span>
                        <input type="checkbox" ${isGroupChecked()?"checked":""} class="checkAll" />
                    </span>
                    <span>姓名</span>
                    <span>性别</span>
                    <span>年龄</span>
                    <span>状态</span>
                    <span>操作</span>
                </li>
            `;
            data.forEach((item,index)=>{
                list.innerHTML+=`
                    <li>
                        <span>
                            <input type="checkbox" ${item.checked?"checked":""} class="check" />
                        </span>
                        <span>${item.name}</span>
                        <span>${item.gender}</span>
                        <span>${item.age}</span>
                        <span><a href="javascript:;">${item.state?"在职":"离职"}</a></span>
                        <span><a href="javascript:;">删除</a></span>
                    </li>
                `;
                
            });
            // 添加事件
            let checkAll=document.querySelector('.checkAll');
            checkAll.onchange=function(){
                setGroupChecked(this.checked);
                render();
                // M(数据模型) V(视图) VM(数据视图-虚拟DOM)
            }
            let check=document.querySelectorAll('.check');

            check.forEach((item,index)=>{
                item.onchange=function(){
                    setChecked(data[index].id,this.checked);
                    render();
                }
            })
            // 渲染操作面板
            if(getGroupChecked().length>0){
                operate.style.display="flex";
            }else{
                operate.style.display="none";
            }
        }
        // 批量操作
        operate.children[0].onclick=function(){
            removeChecked()
            render();
        }
        operate.children[1].onclick=function(){
            changeCheckedState(true)
            render();
        }
        operate.children[2].onclick=function(){
            changeCheckedState(false)
            render();
        }
    })();
    </script>
</body>
</html>

css部分index.css

h2{
    margin: 0;
}
ul{
    margin: 0;
    padding: 0;
    list-style: none;
}
.wrap{
    position: relative;
    width: 600px;
    margin: 30px auto;
    font: 12px "宋体";
}
.addBtn{
    position: absolute;
    right: 0;
    top: 0;
}
input{
    margin: 0;
}
a{
    color: #337ab7;
    text-decoration: none;
}
a:hover{
    columns: #23527c;
}
a.selected{
    color: #ccc;
}
.header{
    border-bottom: 2px solid #666;
}
.title{
    text-align: center;
    font: 14px/32px "宋体";
}
.nav{
    display: flex;
    font: 12px/26px "宋体";
    justify-content: space-between;
    border-bottom: 2px solid #666;
}
.add{
    display: flex;
    height: 40px;
    align-items: center;
    font: 12px/24px "宋体";
    justify-content: space-between;
    border-bottom: 2px solid #666;
}
.name,
.age,
.submit{
    width: 80px;
    text-align: center;
    height: 24px;
    padding: 0;
    border: 1px solid #ccc;
}
.genderWrap,
.stateWrap{
    width: 44px;
    padding: 1px;
    border: 1px solid #ccc;
}
.stateWrap{
    width: 88px;
}
.gender,
.state{
    display: none;
}
.genderIco,
.stateIco{
    width: 22px;
    height: 22px;
    background: #666;
    overflow: hidden;
    transition: .3s;
}
.stateIco{
    width: 44px;
}
.genderInner,
.stateInner{
    transition: .3s;
    display: flex;
    width: 44px;
    font: 12px/22px "宋体";
    color: #fff;
}
.stateInner{
    width: 88px;
}
.genderInner span,
.stateInner span{
    margin: auto;
}
.gender:checked ~ .genderIco{
    margin-left: 22px;
}
.gender:checked ~ .genderIco .genderInner{
    margin-left: -22px;
}
.state:checked ~ .stateIco{
    margin-left: 44px;
}
.state:checked ~ .stateIco .stateInner{
    margin-left: -44px;
}
.list{
    margin: 0 auto;
    width: 90%;
}
.list li{
    display: flex;
    font: 12px/24px "宋体";
    border-bottom: 1px solid #ccc;
}
.list span{
    display: block;
    margin: 0 auto;
    flex: 1;
    text-align: center;
}
.list li span:nth-of-type(1){
    width: 40px;
    flex: none;
}
.operate{
    display: flex;
    justify-content: space-around;
    font: 12px/24px "宋体";
    border-top: 2px solid #000;
}

数据部分data.js

let data=[
    {
        id:Symbol(),
        name:"张三",
        age:"18",
        gender:"男",
        state:true,
        checked:false
    },
    {
        id:Symbol(),
        name:"李四",
        age:"19",
        gender:"男",
        state:false,
        checked:false
    },
    {
        id:Symbol(),
        name:"红五",
        age:"19",
        gender:"女",
        state:false,
        checked:false
    },

]

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值