3、vuex状态管理--新增、编辑、删除用户功能

2019-04-26  本文已影响0人  蕉下客_661a
GIF3.gif
<template>
    <div class="myorder">      
        <h3>3、新增内容</h3>
        <div>
            <button v-if="iShow" class="btn add" @click="iChangeShow">新增</button>
            <div v-else>
                <input type="text" v-model='newPeople' placeholder="请输入人员姓名" class="name_val" />
                <button class="btn confirm" @click="addPeople(newPeople)">确定</button>
            </div>
            <table class="tab">
                <tr>
                    <th>姓名</th>
                    <th>操作</th>
                </tr>
                <tr v-for="(people,index) in peopleList" :key="index">
                    <td>{{people}}</td>
                    <td>
                        <a href="javascript:;" @click="editPeople(index)">编辑</a>
                        <a href="javascript:;" @click="delPeople(index)">删除</a>
                    </td>
                </tr>
            </table>
            <div class="mask" v-if="showEidt">
                <div class="section_txt">
                    <input type="text" v-model='changePeople'/>
                    <div class="foot_btn clearfix">
                        <button class="btn fl" @click="cancelPeople">取消</button>
                        <button class="btn fr" @click='confirmPeople(changePeople)'>确定</button>
                    </div> 
                </div>
            </div>
        </div>
    </div>
</template>
<script>
import { mapState,mapMutations} from 'vuex'
export default{
    computed:{
        ...mapState({
            iShow:state => state.orderStatus.iShow,
            peopleList:state => state.orderStatus.peopleList,
            showEidt:state => state.orderStatus.showEidt
        }),
        newPeople: {
            get(){
                return this.$store.state.orderStatus.newPeople;
            },
            set(people){
                this.$store.commit("setNewPeople",people);
            }
        },
        changePeople:{
            get(){
                return this.$store.state.orderStatus.changePeople;
            },
            set(people){
                this.$store.commit('setChangePeople',people);
            }
        }
    },
    methods:{            ...mapMutations(['iChangeShow','addPeople','editPeople','delPeople','cancelPeople','confirmPeople'])
    },
}
</script>

vuex -- orderStatus.js模块 存放路径:store/modules/orderStatus.js

const state={
    iShow:true,
    newPeople:'',
    peopleList:['jack'],
    showEidt:false,
    changePeople:'', //编辑弹框重新改的内容
    editId:''
};
const getters={
};
const mutations={
     iChangeShow(state){  //新增按钮 切换 input输入框
        state.iShow = !state.iShow;
     },
     setNewPeople(state,people){ //设置newPeople 为input框的文本内容
        state.newPeople = people;        
     },
     addPeople(state,people){ //新增人员添加到peopleList数组中
      if(people.length){
         state.peopleList.push(people);
      }       
     },
     delPeople(state,index){//删除数组元素
       state.peopleList.splice(index,1);
     },
     editPeople(state,index){//编辑数组元素
        state.showEidt = !state.showEidt;  //遮罩显示
        state.changePeople = state.peopleList[index];
        state.editId = index;
     },
     cancelPeople(state){ //编辑弹框中取消按钮
      state.showEidt = false
     },
     confirmPeople(state,people){
      state.peopleList[state.editId] = people;
      state.showEidt = false;
     },
     setChangePeople(state,people){
        state.changePeople = people;
     }
 };
const actions={
};
export default {
     state,
     getters,
     mutations,
     actions
}

这是store 文件夹下的index.js

用modules写法
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)

import orderStatus from './modules/orderStatus'


export default new Vuex.Store({
    modules:{
        orderStatus
    }
})

css样式

 h3{
        margin-bottom:10px;
    }
    .btn{
        height:34px;
        background:#41b883;
        border-radius:4px;
        color:#fff;
        border: 1px solid transparent; 
        outline:none;
        cursor:pointer;
    }
    .add{
        padding:0px 60px;
    }
    .confirm{
        padding:0px 20px;
    }
    .name_val{
        padding:8px 10px;
        border:1px solid #999;
        margin-right:5px;
        background:#fff;
    }
    .tab th,.tab td{
        width:80px;
        padding:5px 20px;
    }
    .tab td{
        text-align:center;
    }
    .tab td a{
        display:inline-block;
        padding:0px 5px;
        color:#666;
    }
    .mask{
        position:fixed;
        left:0px;
        top:0px;
        width:100%;
        height:100%;
        background:rgba(0,0,0,0.3);
        text-align:center;
    }
    .section_txt{
        position:absolute;
        left:50%;
        top:50%;
        width:180px;        
    }
    .section_txt input{
        width:180px;
        padding:10px;
        box-sizing:border-box;
        background:#fff;
    }
    .foot_btn{
        margin-top:10px;
    }
    .foot_btn .btn{
        width:80px;
    }
上一篇下一篇

猜你喜欢

热点阅读