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: {
      childMultileTable: {
        title: "",
        type: "table",
        form: {
          col:{span:24}, 
          props:{          
            table:{            
              component:{
                rowKey:'fid',
                height:'auto',
                'default-expand-all':true
              },
              props:{
                headerAlign:'center',
                showNumber:true,
                enabledFilter:true,
                enabledSort:true
              }, 
              columns:{                             
                name: {
                  title: "姓名",
                  type: "text",                   
                  props:{
                    filterData:selectData,
                    filterType:'multiple',
                  }
                },  
                mulitlHeader:{
                    title:'多级表头',
                    children:{
                        state:{
                            title:'状态',                 
                            type:'checkboxlist',                   
                            props:{
                                valueMember:'id',
                                textMember:'text',
                                filterData:dictData,
                                align:'center',
                                request:{
                                  getDataRequest:(query)=>{
                                    return {data:dictData}
                                  }
                                },
                            },
                            form:{
                            }
                        },
                        regdate:{
                            title:'日期',
                            type:'datetime'
                        }
                    }
                }, 
                isadmin:{
                  title:'复选框',
                  type:'switch',
                  props:{
                    align:'center'
                  }             
                }               
              },
              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;
                }                      
            }       
          }       
        }
      }
    }
  });
}

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

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

table API

参考 表格api

多级表头配置 API

PropsNameDescriptionTypeDefault
...key上级key,见tableapijson
└ table表格配置string
└└ columns列配置json
└└└ mulitlHeader列配置json
└└└└ title多级表头标题string
└└└└ children子列json
└└└└└ key字段key,参考tableapi-columns节点
└└└└└└ title标题string
└└└└└└ type类型,参考组件类型string