Skip to content

单元格编辑 表格

单元格编辑

基本用法

  • 点击单元格进行编辑
<template>
    <dn-page>     
      <dn-form ref="formRef" v-bind="formOptions"></dn-form>
    </dn-page>   
  </template>
  
<script lang="jsx">
import {ref,defineComponent, onMounted} from "vue";
import { useForm,dn } from "@sdevnet/devnet-form";

const formRef = ref();
const formOptions = ref();

let data=[];
for(var i=0;i<8;i++){
    let row = {
        fid:(i+1),
        name:'User Name'+i,
        regcap:i + 35.67893,
        regdate:new Date(),
        isadmin: i % 2==0 ?1:0,
        remark:'备注'+i,
        state: i % 2==0 ?'0':"1",
    };   
    data.push(row)
}
let selectData=[];
for(var i=0;i<10;i++){
  selectData.push({
    value:(i+1),
    text:'Name'+i
  })
}

let dictData=[
  {id:"1",text:'打开',type:'primary'},
  {id:"0",text:'关闭',type:'danger'}
];

function createFormOptions() {  
  const { buildFormOptions } = useForm();
  return buildFormOptions({
    columns: {
        childHandleTable: {
        title: "",
        type: "table",
        form: {
          col:{span:24}, 
          props:{          
            table:{            
              component:{
                rowKey:'fid',
                height:'auto'
              },
              props:{
                headerAlign:'center',
                showNumber:true,
                enabledFilter:true,
                enabledSort:true,
                enabledEdit:true,
                editMode:'cell'
              }, 
              columns:{                             
                name: {
                  title: "姓名",
                  type: "text",                
                  props:{
                    filterData:selectData,
                    filterType:'multiple'                    
                  }
                },                  
                state:{
                    title:'状态',                 
                    type:'select',                   
                    props:{
                        valueMember:'id',
                        textMember:'text',
                        filterData:dictData,
                        request:{
                          getDataRequest:(query)=>{
                            return {data:dictData}
                          }
                        },
                        align:'center'
                    },
                    form:{
                    }
                }              
              },     
              tableToolbar:{
                show:true,
                title:'表格编辑' ,                
                position:'top',
                buttons:{
                  add:{
                    show:true,  
                  },                 
                  delete:{
                    show:true,
                  },
                  save:{
                    show:true,
                  }                  
                }          
              },              
              data:[]            
            },               
            request:{
              getDataRequest:(query)=>{  
                  let sort= query.sort;             
                  let sortName='fid';
                  let order='asc';
                  if(sort && sort.length>0){                    
                     sortName=sort[0]['sortname'] ?? 'fid';
                     order = sort[0]['sortorder'] ?? 'asc';
                  }                  
                  data.sort((a,b)=>{
                    if(a[sortName]<b[sortName]){
                      return order==='asc'? -1 : 1;
                    }
                    if(a[sortName]>b[sortName]){
                      return order==='asc'? 1 : -1;
                    }
                    return 0;
                  });
                  
                  var ret={data:[]};
                  for(var i=((query.pageIndex-1) * query.pageSize);
                        i<((query.pageIndex) * query.pageSize);
                        i++){
                      if(i<data.length){
                        ret.data.push(data[i]);
                      }
                  }
                  var pcount= parseInt(data.length / query.pageSize);
                  if((data.length % query.pageSize) !== 0){
                    pcount++;
                  }                  
                  ret.pageindex=query.pageIndex;
                  ret.pagesize=query.pageSize;
                  ret.rowcount=data.length;
                  ret.pagecount=pcount;     
                  dn.message.success('模拟数据哦');
                  return ret;
                },
                saveRequest:({row,rows,key})=>{
                    console.log(rows);
                    //返回主键json
                    return {fid:999};
                },
                deleteRequest:({rows,rowIds})=>{
                  //rowIds: 逗号连接的主键
                  //rows:删的行数据
                },                      
            }               
          }       
        }
      }
    }
  });
}

function initFormOptions() { 
  formOptions.value = createFormOptions();
  formOptions.value.initData = { fid:1,childHandleTable:[]};
  
  return {
    formOptions,   
    formRef
  };
}

export default defineComponent({
  setup(props,ctx) {  
    onMounted(()=>{
      formRef.value.children.childHandleTable.refresh();       
    });
   
     return {
      ...initFormOptions()
     }
  }
});
</script>
  • 所有单元格进入编辑状态
<template>
    <dn-page>     
      <dn-form ref="formRef" v-bind="formOptions"></dn-form>
    </dn-page>   
  </template>
  
<script lang="jsx">
import {ref,defineComponent, onMounted} from "vue";
import { useForm,dn } from "@sdevnet/devnet-form";

const formRef = ref();
const formOptions = ref();

let data=[];
for(var i=0;i<8;i++){
    let row = {
        fid:(i+1),
        name:'User Name'+i,
        regcap:i + 35.67893,
        regdate:new Date(),
        isadmin: i % 2==0 ?1:0,
        remark:'备注'+i,
        state: i % 2==0 ?'0':"1",
    };   
    data.push(row)
}
let selectData=[];
for(var i=0;i<10;i++){
  selectData.push({
    value:(i+1),
    text:'Name'+i
  })
}

let dictData=[
  {id:"1",text:'打开',type:'primary'},
  {id:"0",text:'关闭',type:'danger'}
];

function createFormOptions() {  
  const { buildFormOptions } = useForm();
  return buildFormOptions({
    columns: {
        childHandleTable: {
        title: "",
        type: "table",
        form: {
          col:{span:24}, 
          props:{          
            table:{            
              component:{
                rowKey:'fid',
                height:'auto'
              },
              props:{
                headerAlign:'center',
                showNumber:true,
                enabledFilter:true,
                enabledSort:true,
                enabledEdit:true,
                editMode:'full'
              }, 
              columns:{                             
                name: {
                  title: "姓名",
                  type: "text",                
                  props:{
                    filterData:selectData,
                    filterType:'multiple'                    
                  }
                },                  
                state:{
                    title:'状态',                 
                    type:'select',                   
                    props:{
                        valueMember:'id',
                        textMember:'text',
                        filterData:dictData,
                        request:{
                          getDataRequest:(query)=>{
                            return {data:dictData}
                          }
                        },
                        align:'center'
                    },
                    form:{
                    }
                }              
              },     
              tableToolbar:{
                show:true,
                title:'表格编辑' ,                
                position:'top',
                buttons:{
                  add:{
                    show:true,  
                  },                 
                  delete:{
                    show:true,
                  },
                  save:{
                    show:true,
                  }                  
                }          
              },              
              data:[]            
            },               
            request:{
              getDataRequest:(query)=>{  
                  let sort= query.sort;             
                  let sortName='fid';
                  let order='asc';
                  if(sort && sort.length>0){                    
                     sortName=sort[0]['sortname'] ?? 'fid';
                     order = sort[0]['sortorder'] ?? 'asc';
                  }                  
                  data.sort((a,b)=>{
                    if(a[sortName]<b[sortName]){
                      return order==='asc'? -1 : 1;
                    }
                    if(a[sortName]>b[sortName]){
                      return order==='asc'? 1 : -1;
                    }
                    return 0;
                  });
                  
                  var ret={data:[]};
                  for(var i=((query.pageIndex-1) * query.pageSize);
                        i<((query.pageIndex) * query.pageSize);
                        i++){
                      if(i<data.length){
                        ret.data.push(data[i]);
                      }
                  }
                  var pcount= parseInt(data.length / query.pageSize);
                  if((data.length % query.pageSize) !== 0){
                    pcount++;
                  }                  
                  ret.pageindex=query.pageIndex;
                  ret.pagesize=query.pageSize;
                  ret.rowcount=data.length;
                  ret.pagecount=pcount;     
                  dn.message.success('模拟数据哦');
                  return ret;
                },
                saveRequest:({row,rows,key})=>{
                    console.log(rows);
                    //返回主键json
                    return {fid:999};
                },
                deleteRequest:({rows,rowIds})=>{
                  //rowIds: 逗号连接的主键
                  //rows:删的行数据
                },                      
            }               
          }       
        }
      }
    }
  });
}

function initFormOptions() { 
  formOptions.value = createFormOptions();
  formOptions.value.initData = { fid:1,childHandleTable:[]};
  
  return {
    formOptions,   
    formRef
  };
}

export default defineComponent({
  setup(props,ctx) {  
    onMounted(()=>{
      formRef.value.children.childHandleTable.refresh();       
    });
   
     return {
      ...initFormOptions()
     }
  }
});
</script>

table API

参考 表格api

单元格编辑 API

PropsNameDescriptionTypeDefault
...key上级key,见tableapijson
└ table表格配置string
└└ props按钮列配置json
└└└ enabledEdit是否启用编辑boolean
└└└ editMode编辑模式
└└ columns按钮列配置json
└└└ keyjson
└└└└ props属性配置json
└└└└└ enabledEdit启用编辑boolean