PC行内编辑

点击编辑,行内编辑输入框出现,给列表的每条数据定义编辑标记,最后一定记得 v-model双向绑定,使数据回显。
步骤:
1、给行数据定义编辑标记
2、点击行编辑标记(isedit)
3、插槽根据标记渲染表单

 <el-table :data="list" border style="width: 100%" v-loading="loading">
  <el-table-column prop="name" label="角色" width="180">
     <template v-slot="{ row }">
       
       <el-input
         v-if="row.isEdit"
         size="mini"
         v-model="row.editRow.name"
       >el-input>
         
       <span v-else>{{ row.name }}span>
     template>
   el-table-column>
   <el-table-column prop="state" label="启用" width="180">
     <template v-slot="{ row }">
       
       <template v-if="row.isEdit">
         <el-switch
           size="mini"
           :active-value="1"
           :inactive-value="0"
           v-model="row.editRow.state"
         >el-switch>
       template>
         
       <template v-else>
         <span>{{
           row.state === 1 ? "已启用" : row.state === 0 ? "未启用" : "无"
         }}span>
       template>
     template>
   el-table-column>
   <el-table-column prop="description" label="描述">
     <template v-slot="{ row }">
       
       <el-input
         v-if="row.isEdit"
         size="mini"
         v-model="row.editRow.description"
       >el-input>
         
       <span v-else>{{ row.description }}span>
     template>
   el-table-column>
   <el-table-column label="操作">
     <template v-slot="{ row }">
       
       <template v-if="row.isEdit">
         <template>
           <el-button size="mini" type="primary"  @click="btnok(row)">确认el-button>
         template>
         <template>
           <el-button size="mini" @click="row.isEdit = false">取消el-button>
         template>
       template>
       
       <template v-else>
         <template>
           <el-button type="text">权限管理el-button>
         template>
         <template>
           <el-button type="text" @click="btnEditRow(row)"
             >编辑el-button
           >
         template>
          <template>
             <el-popconfirm
               title="这是一段内容确定删除吗?"
               @onConfirm="confirmDel(row.id)"
             >
               <el-button
                 slot="reference"
                 style="margin-left: 10px"
                 size="mini"
                 type="text"
                 >删除el-button
               >
             el-popconfirm>
           template>
       template>
     template>
   el-table-column>
 el-table>
import { getRoleList, addRole, updateRole, delRole } from "@/api/role.js";
export default {
  data() {
    return {
     formInfo: {
        name: "",
        description: "",
        state: 0,
      },
     }
    },
    methods:{
    async getRoleList() {
      this.loading = true;
      const { rows} = await getRoleList();
      this.list = rows;
      this.loading = false;
      this.list.forEach((item) => {
       // item.isEdit = false // 添加一个属性 初始值为false
        // 数据响应式的问题  数据变化 视图更新 
        // 添加的动态属性 不具备响应式特点
        // this.$set(目标对象, 属性名称, 初始值) 可以针对目标对象 添加的属性 添加响应式
        this.$set(item, "isEdit", false);
        this.$set(item, "editRow", {
          name: item.name,
          state: item.state,
          description: item.description,
        });
      });
    },
    //点击编辑
     btnEditRow(row) {
      row.isEdit = true // 改变行的编辑状态
      // 更新缓存数据
      row.editRow.name = row.name;
      row.editRow.state = row.state;
      row.editRow.description = row.description;
    },
     async btnok(row) {
      if (row.editRow.name && row.editRow.description) {
        await updateRole({ ...row.editRow, id: row.id });
        // 更新成功
        this.$message.success("更新成功");
        // 更新显示数据  退出编辑状态
        // row.name = row.editRow.name // eslint的一校验 误判
        Object.assign(row, {
          ...row.editRow,
          isEdit: false, // 退出编辑模式
        });
      } else {
        this.$message.warning("角色和描述不能为空");
      }
    },
     async confirmDel(id) {
      await delRole(id); // 后端删除
      this.$message.success("删除角色成功");
      // 删除的如果是最后一个,
      if (this.list.length === 1) {
        this.pageParams.page--;
      }
      this.getRoleList();
    },
  }
 }

点击编辑,数据回显
在这里插入图片描述
确认,取消
在这里插入图片描述

删除
PC行内编辑_第1张图片

你可能感兴趣的:(javascript,前端)