填补大佬文档的空白 umyui组件做出可编辑表格效果

填补大佬文档的空白 umyui组件做出可编辑表格效果

1.功能需求

1.1 功能原图

在这里插入图片描述
需要在操作列加上编辑等功能(现在只有删除功能)

1.2 编辑表格效果

废话不多说直接上改完后的效果图,我们可以看到上面的图片在没点击编辑按钮之前是不可编辑状态,整个表格只是处于展示数据的状态,按下编辑按钮之后表格变为可编辑状态,并且点击其他地方编辑状态不会消失,不管你是点空白处,还是点其他编辑按钮,只有点击取消的按钮才能解除编辑状态,效果如下图所示:
在这里插入图片描述
再说一遍,这里的除了可编辑表格这一行,其他行的编辑,转个人,取消按钮都是不可点击的
做这个umyui的大佬实例里面只给我们展示了编辑表格的基础写法,没有实现虚拟表格可编辑,所以在此补充,如果想要看umyui文档的童鞋可以移步,传送门http://www.umyui.com/umycomponent/manualTrigger

2基础表格的图片展示

2.1 基础表格效果图

在这里插入图片描述

2.2示例代码

 <ux-grid
   //其他可以绑定的属性忽略,自己看文档,这里只展示切换**可编辑的属性**
   :edit-config="{trigger: 'manual', mode: 'row'}
 >
  <ux-table-column type="checkbox" width="60"></ux-table-column>
  <ux-table-column type="index" width="80"></ux-table-column>
  <ux-table-column field="name" title="名字" width="140" edit-render>
      <template v-slot:edit="scope">
         <el-input v-model="scope.row.name"></el-input>
      </template>
  </ux-table-column>
  <ux-table-column field="age" title="年龄"  width="160" edit-render>
    <template v-slot:header="{ column }">
       <span>{{ column.title }}</span>
    </template>
    <template v-slot:edit="{ row }">
       <el-input
        v-model="row.age"
         type="number"
         placeholder="请输入内容"
         @input="updateFooterEvent(row.age)"
         style="width: 100%"></el-input>
     </template>
 </ux-table-column>
 //注意ux-table-column 这个标签的后面一定要绑定edit-render不然无法实现编辑功能,控制台打开会报错
<ux-table-column field="sex" title="性别" min-width="140" edit-render>
<template v-slot:edit="scope">
	<el-select v-model="scope.row.sex" @change="$refs.plxTable.updateStatus(scope)">
	 <el-option v-for="item in sexList" :key="item.value" :label="item.label" :value="item.value"></el-option>
	</el-select>
</template>
 <template v-slot="{ row }">{{ getLabel(row.sex) }}</template>
</ux-table-column>
<ux-table-column title="操作" width="200">
  <template v-slot="{ row }">
     <!--判断行是否激活了, 编辑按钮执行的方式就是为了去激活-->
  <template v-if="$refs.plxTable.isActiveByRow(row)">
   <el-button @click="saveEvent(row)" type="primary">保存</el-button>
   <el-button @click="cancelRowEvent(row)">取消</el-button>
   </template>
<template v-else>
   <el-button @click="editRowEvent(row)">编辑</el-button>
</template>
</template>
</ux-table-column>
</ux-grid>

注意template在vue模板解析的时候会不生产dom树,并且一个最外面的template只能包一个div(这是vue的知识)
注意: ux-grid edit-config绑定之后, ux-table-column一定要绑定edit-render !!!!!!!!!!!!!!!!!!!!非常重要

2.3 改进后的可编辑表格代码(达到企业级开发需求)

<ux-grid
     ref="plxTable_manage"
     keep-source
     :height="height"
     show-overflow="tooltip"
     :highlight-current-row="false"
     :cell-class-name="cellClassName"
     :data="tableDataList"
     show-summary
     :edit-config="{trigger:'manual',mode:'row'}"   //这里配置可编辑是一行编辑还是一个cell可编辑
     @table-body-scroll="scroll"
     @edit-closed="editClosedEvent"        //这里可以编辑失去焦点事件
   >
   <ux-table-column
      v-for="item in tableColumns"
      :key="item.prop"
      :title="item.label"
      :field="item.prop"
      :sortable="item.sortable"
      :width="item.width?item.width:'220'"
      :edit-render="item.editRender"  //设置是否编辑与v-slot:edit配合(这个是绑定一行是否可编辑)
      align="center"
   >
   <template v-if="['bondCodeOuter','bondName','bondType'].includes(item.prop)" slot="header">
       <!--这里是弹出搜索框-->
       <i class="el-icon-search" @click="toggleSearchInput(item.prop,item.label)"></i>  
       <span style="margin-left: 10px">{{item.label}}</span>
   </template>   
   <template v-if="item.editRender" v-slot:edit="scope">
       <!--这里可以根据绑定的item.type来选择是输入框还是下拉框-->
       <el-inupt v-if="item.type=='input'" v-model="scope.row[item.prop]"></el-inupt>
       <!--这边与data中的tableColumns中的type属性对应,如果是input则是输入框,如果是
         item.type是select则是选择框
       -->
       <el-select v-if="item.type=='select'" v-model="scope.row[item.prop]" aria-placeholder="请选择">
         <el-option
           v-for="item in options"
           :key="item.value"
           :label="item.label"
           :value="item.label"
          >
          </el-option>
       </el-select>
   </template>              
   </ux-table-column>
   <ux-table-column title="操作" width="130">   
      <template v-slot="{row}">
         <template v-if="$refs.plxTable_manage&&$refs.plxTable_manage.isActiveByRow(row)"> 
            <el-link @click="saveBond(row,'1','0')"  type="primary">保存</el-link>
            <el-link @click="cancelRowEventOne(row)">取消</el-link>
     </template>
     <template v-else>
      <el-link @click="editRowEventP(row)" type="primary">编辑</el-link>
      <el-link @click="convertToAll(row,'0')" type="primary">转全员</el-link> 
       <el-popover
        placement="top"
        width="150"
        v-model="row.visible2">
        <p>确认删除吗?</p>
        <div style="text-align: right;margin: 0">
        <el-button size="mini" type="text" @click="handleDelete(row,'-1','0')">取消</el-button>             
        <el-button type="primary" size="mini" @click="handleDelete(row,'0','0')">确认</el-button>  
         </div>     
         <el-link slot="reference" type="primary">删除</el-link>
         </el-popover>   
     </template>  
    </template>    
   </ux-table-column>
  </ux-grid>


export default un.component(
{
   data(){
      return{
      //editRender为true的地方表示这些字段可以编辑,可以控制哪几列要编辑
         tableColumns:[
              {label:"债券代码",prop:"bondCodeOuter",width:"",sortable:true,type:'input'},
              {label:"债券简称",prop:"bondName",width:"",sortable:true,type:'input'},
              {label:"债券类型",prop:"bondType",width:"",sortable:true,type:'input'},
              {label:"债券发行人",prop:"issuerCname",width:"",sortable:true,type:'input'},
              {label:"剩余期限(年)",prop:"bondTerm",width:"",sortable:true,type:'select',editRender:true},
              {label:"债券活跃度分类",prop:"bondActivity",width:"",sortable:true,type:'input',editRender:true},
              {label:"最大单笔报价量(万元)",prop:"maxQuoteVolume",width:"",sortable:true,type:'input',editRender:true},
              {label:"最大空头头寸(万元)",prop:"maxLongPosition",width:"",sortable:true,type:'input',editRender:true},
              {label:"单笔默认询价量",prop:"maxShortPosition",width:"",sortable:true,type:'input',editRender:true},
              {label:"单笔默认询价量",prop:"defaultInquiryVolume",width:"",sortable:true,type:'input',editRender:true},
          ], 

      }
   },
   methods:{
       <!--这边还要求在编辑一行的时候,点击其他地方不能使编辑失效,就要用到失去焦点的时候,还是保持编辑状态,并在<el-link @click="editRowEventP(row)" type="primary">编辑</el-link>
      <el-link @click="convertToAll(row,'0')" type="primary">转全员</el-link> 
       <el-popover
        placement="top"
        width="150"
        v-model="row.visible2">
        <p>确认删除吗?</p>
        <div style="text-align: right;margin: 0">
        <el-button size="mini" type="text" @click="handleDelete(row,'-1','0')">取消</el-button>             
        <el-button type="primary" size="mini" @click="handleDelete(row,'0','0')">确认</el-button>  
         </div>     
         <el-link slot="reference" type="primary">删除</el-link>
         </el-popover>中的el-link和el-popover标签里面加上:disabled="editStatus=='edit'"-->
       <!--用edit来判断有焦点和失去焦点-->
       editClosedEvent({row}){
           if(this.editStatus=="edit"){
                 //当为编辑状态时聚焦
                this.$refs.plxTable_manage.setActiveRow(row);       
           }else{
               //其他时候失去焦点
              this.editStatus = ""
            }
       },
       <!--但是这样会出现一个问题,在点击其他按钮刷新时会锁住所有的按钮,因为按钮标签的地方加上
         :disabled="editStatus=='edit'",所以必须要在刷新方法中加上this.editStatus=""将
         editStatus置为""
          -->
       <!--:loadList()重新查询数据方法-->
       loadList(){
            this.editStatus=""
            //其他查询逻辑
       }


   }

})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值