用户添加和数据校验

用户添加和数据校验

子组件UserEdit.vue

<template>
  <div>
    <el-form :model="form" :rules="rules" ref="ruleForm">
      <el-form-item label="用户名" label-width="120px" prop="username">
        <el-input v-model="form.username"></el-input>
      </el-form-item>
      <el-form-item label="密码" label-width="120px">
        <el-input v-model="form.password"></el-input>
      </el-form-item>
      <el-form-item label="邮箱" label-width="120px">
        <el-input v-model="form.email" type="email"></el-input>
      </el-form-item>
      <el-form-item label="手机" label-width="120px">
        <el-input v-model="form.mobile" type="email"></el-input>
      </el-form-item>
      <el-form-item label="状态" label-width="120px">
        <el-switch
            v-model="form.status"
            active-color="#13ce66"
            :active-value="1"
            :inactive-value="0"
            inactive-color="#ff4949">
        </el-switch>

      </el-form-item>
      <el-form-item label="部门" label-width="120px">
        <el-select v-model="form.dept.deptId" placeholder="部门">
          <el-option v-for="d in deptList" :label="d.name" :value="d.deptId" :key="d.deptId+'option'"></el-option>

        </el-select>
      </el-form-item>
      <el-form-item label="角色" label-width="120px">
        <el-select multiple v-model="form.roleIds" placeholder="角色">
          <el-option v-for="r in roleList" :label="r.roleName" :value="r.roleId" :key="r.roleId+'option'"></el-option>

        </el-select>
      </el-form-item>
    </el-form>
    <div slot="footer" class="dialog-footer">
      <el-button @click="showDialog = false">取 消{{ userId }}</el-button>
      <el-button type="primary"  @click="submitForm('ruleForm')">确 定</el-button>
      {{ form }}
    </div>
  </div>
</template>

<script>
import request from "@/util/request";

export default {
  name: "UserEdit",
  // props:["userId"],
  props: {userId: {type: Number, default: 0}},//props用作接收从父组件传过来的参数
  async created() {
    this.deptList = await request("dept/findAll", {})
    this.roleList = await request("role/findAll", {})
  },
  data() {
    return {
      deptList: [],
      roleList: [],
      form: {
        status: 1,
        dept: {deptId: 1},
        roleIds: []
      },
      rules: {
        username: {required: true, message: '请输入用户名称', trigger: 'blur'}
      }
      ,
    }
  }, methods: {
    submitForm(formName) {
      this.$refs[formName].validate(async (valid) => {
        if (valid) {
          await request('/user/add',this.form)
          this.$message("添加成功")
          //关闭 子组件给父组件传值 必须通过自定义事件完成 close-dialogs事件名
          this.$emit("close-dialog",false)
        } else {
          console.log('error submit!!');
          return false;
        }
      });

    }
  },
}
</script>

<style scoped>

</style>

父组件UserManager.vue

<template>
  <div>
    <h1>用户管理</h1>
<!--    查询栏-->
    <el-form :inline="true" :model="formInline" size="medium" >
      <el-form-item>
        <el-button type="primary" size="medium" @click="showDialog=true">添加</el-button>
      </el-form-item>
      <el-form-item label="用户名">
        <el-input v-model="formInline.username" placeholder="用户名"></el-input>
      </el-form-item>
      <el-form-item label="电话">
        <el-input v-model="formInline.mobile" placeholder="电话"></el-input>
      </el-form-item>
      <el-form-item label="邮箱">
        <el-input v-model="formInline.email" placeholder="邮箱"></el-input>
      </el-form-item>
      <el-form-item>
        <el-button type="primary" size="small" @click="onSubmit">查询</el-button>
      </el-form-item>
    </el-form>
<!--    页面表格-->
<!--    @sort-change="sortChange",sortable="custom"用来做排序-->
    <el-table :data="tableData" @sort-change="sortChange">
      <el-table-column sortable="custom" prop="userId" label="用户ID" width="140">
      </el-table-column>
      <el-table-column sortable="custom" prop="username" label="用户名" width="120">
      </el-table-column>
      <el-table-column sortable="custom" prop="mobile" label="手机号">
      </el-table-column>
      <el-table-column sortable="custom" prop="email" label="邮箱">
      </el-table-column>
      <el-table-column sortable="custom" prop="createTime" label="创建时间">
      </el-table-column>
      <el-table-column  label="状态">
        <template v-slot="scope"><!--状态栏修改按钮 插槽表达式-->
          <el-switch
              @change="switchChange(scope.row)"
              v-model="scope.row.status"
              active-color="#13ce66"
              inactive-color="#ff4949"
              :active-value="1"
              :inactive-value="0">
          </el-switch>
        </template>
      </el-table-column>

      <el-table-column label="操作">
        <el-button type="info" size="mini" >修改</el-button>
        <el-button type="danger" size="mini">删除</el-button>
      </el-table-column>
    </el-table>
    <el-pagination
        @size-change="handleSizeChange"
        @current-change="handleCurrentChange"
        :current-page="page"
        :page-sizes="[2, 10, 20, 50]"
        :page-size="size"
        layout="total, sizes, prev, pager, next, jumper"
        :total="total">
    </el-pagination>

    <el-dialog title="用户添加/修改" :visible.sync="showDialog">
      <user-edit :user-id="userId" @close-dialog="changeShowDialog"></user-edit><!--传参数到子组件加:做数据绑定-->
    </el-dialog>
  </div>
</template>

<script>
import request from "@/util/request";
import UserEdit from "@/components/edit/UserEdit";

export default {
  name: "UserManger",
  components: {UserEdit},
  created() {
    this.loadData();
  },
  data() {
    return {
      page: 1,
      size: 2,
      tableData: [],
      total: 3,
      formInline:{},
      showDialog:false,//子组件传过来
      userId:0//被修改的用户id,如果是添加0
    }
  }, methods: {
    changeShowDialog(obj){
      this.showDialog = obj
      console.info(obj)
    },
    async loadData() {
      let data = await request(`user/findAll?page=${this.page}&size=${this.size}`, {}, )
      this.tableData = data.list;
      this.total=data.total;
    },
    handleSizeChange(obj) {
      this.size = obj;
      this.loadData();
    },
    handleCurrentChange(obj) {
      this.page = obj;
      this.loadData();
    },
    async onSubmit(){
      let data = await request(`user/findAll?page=${this.page}&size=${this.size}`, this.formInline)
      this.tableData = data.list;
      this.total=data.total;
    },
    async sortChange(obj){
      console.info(obj)
      let orderBy
      if (obj.order === "ascending"){
        orderBy = obj.prop + ' asc'
      }else {
        orderBy = obj.prop + ' desc'
      }
      let data = await request(`user/findAll?page=${this.page}&size=${this.size}&orderBy=${orderBy}`, this.formInline)
      this.tableData = data.list;
      this.total=data.total;
    },
    //上面传过来一个对象,但是不需要他的全部属性,打一个{}解构赋值:只取里面的XXX属性
    async switchChange({userId,status}){
      let data = await request("user/update",{userId,status})
      if (data){
        this.$message("修改成功")
      }
    }
  }
}
</script>

<style scoped>

</style>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值