vue使用抽屉添加用户

170 阅读1分钟

页面渲染

 <template>
 <div class="users">
   <el-row>
     <el-button @click="drawer = true" type="primary" style="margin-left: 16px;">
  点我打开
</el-button>
</el-row>

<el-drawer
  title="我是标题"
  :visible.sync="drawer"
  :direction="direction"
  :before-close="handleClose">
  <add-users></add-users>
</el-drawer>
  <el-table :data="tableData">
    <el-table-column prop="create_time" label="创建日期">
      <template slot-scope='scope'>
      <div>
        <div>{{scope.row.create_time|getData}}</div>
      </div>
    </template> </el-table-column>
    <el-table-column prop="email" label="电子邮箱" > </el-table-column>
    <el-table-column prop="mobile" label="手机号码"> </el-table-column>
    <el-table-column prop="role_name" label="角色名称"> </el-table-column>
    <el-table-column prop="username" label="用户名"> </el-table-column>
   </el-table>
   </div>
</template>

  <script>
import axios from "axios";
import AddUsers from '@/components/AddUsers.vue'
export default {
  components:{
    AddUsers
  },
  data() {
    return {
      tableData: [],
      direction:"rtl",
      drawer:false,
    };
  },
  created(){
    this.getTableData()
  },
 
  methods: {
    addok(){
      this.getTableData(),
      setTimeout(()=>{
        this.drawer = false;
      },500)
      
    },
    getTableData() {
      axios
        .get("********", {
          headers: {
            Authorization: localStorage.token,
          },
          params: {
            pagenum: 1,
            pagesize: 10,
          },
        })
        .then((res) => {
          console.log(res);
          let { data, meta } = res.data;
          if (meta.status == 200) {
            this.tableData = data.users;
          } else {
            this.$message.error(meta.msg);
          }
        })
        .catch((err) => {
          console.log(err);
        });
    },
  },
};
</script>
<style lang="scss" scoped>
  .users{
    padding: 20px;
  }
</style>

创建子组件,在子组件里面使用抽屉,插入到上面

<template>
  <div class="add-users">
    <el-form
      :model="ruleForm"
      :rules="rules"
      ref="ruleForm"
      label-width="100px"
    >
      <el-form-item label="用户名称" prop="username">
        <el-input v-model="ruleForm.username"></el-input>
      </el-form-item>

      <el-form-item label="用户密码" prop="password">
        <el-input v-model="ruleForm.password" type="password"></el-input>
      </el-form-item>

      <el-form-item label="电子邮箱" prop="email">
        <el-input v-model="ruleForm.email"></el-input>
      </el-form-item>

      <el-form-item label="手机号" prop="mobile">
        <el-input v-model="ruleForm.mobile"></el-input>
      </el-form-item>

      <el-form-item>
        <el-button type="primary" @click="submitForm('ruleForm')"
          >立即添加</el-button
        >
        <el-button @click="resetForm('ruleForm')">重置</el-button>
      </el-form-item>
    </el-form>
  </div>
</template>
<script>
import axios from 'axios'
export default {
  data() {
    return {
      ruleForm: {
        username: "",
        password: "",
        email:"",
        mobile:""
      },
      rules: {
        username: [
          { required: true, message: "请输入用户名称", trigger: "blur" },
          { min: 3, max: 12, message: "长度在 3 到 12 个字符", trigger: "blur" },
        ],
        password: [
          { required: true, message: "请输入用户密码", trigger: "blur" },
          { min: 3, max: 12, message: "长度在 3 到 12 个字符", trigger: "blur" },
        ],
      },
    };
  },
  methods: {
    submitForm(formName) {
      this.$refs[formName].validate((valid) => {
        if (valid) {
          axios({
            method:'post',
            url:'*********',
            data:{
              username:this.ruleForm.username,
              password:this.ruleForm.password,
              email:this.ruleForm.email,
              mobile:this.ruleForm.mobile,
            },
            headers: {
              Authorization: localStorage.token,
            },
          })
          .then(res=>{
            let {meta} = res.data;
            if(meta.status==201){
              this.$message.success(meta.msg);
              this.$emit('addok')
            }else{
              this.$message.error(meta.msg);
            }
          })
          
        } else {
          this.$message.error("校验失败,请重试");
          return false;
        }
      });
    },
    resetForm(formName) {
      this.$refs[formName].resetFields();
    },
  },
};
</script>
<style lang="scss" scoped>
.add-users {
  padding: 20px;
}
</style>