Skip to content

DetailsList-DEMO


vue
<fv-DetailsList v-model="value" :head="head">
    <template v-slot:column_0="x">
        <p>{{x.item.name}}</p>
    </template>
    <template v-slot:column_1="x">
        <p class="sec">{{x.item.publisher}}</p>
    </template>
    <template v-slot:column_2="x">
        <p class="sec">{{x.item.publish_time}}</p>
    </template><template v-slot:column_3="x">
        <p class="sec">{{x.item.prop}}</p>
    </template>
    <template v-slot:column_4="x">
        <p class="sec">{{x.item.userInfo.name}}</p>
    </template>
  </fv-DetailsList>

DetailsList-Allow Drag


vue
<fv-DetailsList
  v-model="value"
  :head="head"
  :multiSelection="true"
  :compact="compact"
  :allowDrag="true"
>
      <template v-slot:column_0="x">
          <p>{{x.item.name}}</p>
      </template>
      <template v-slot:column_1="x">
          <p class="sec">{{x.item.publisher}}</p>
      </template>
      <template v-slot:column_2="x">
          <p class="sec">{{x.item.publish_time}}</p>
      </template><template v-slot:column_3="x">
          <p class="sec">{{x.item.prop}}</p>
      </template>
      <template v-slot:column_4="x">
          <p class="sec">{{x.item.userInfo.name}}</p>
      </template>
</fv-DetailsList>

DetailsList-Grouped


vue
<fv-DetailsList
  v-model="value"
  :head="head"
  :multiSelection="multiSelection"
  :compact="compact"
  :group="group"
  :showGroup="true"
>
    <template v-slot:column_0="x">
        <p>{{x.item.name}}</p>
    </template>
    <template v-slot:column_1="x">
        <p class="sec">{{x.item.publisher}}</p>
    </template>
    <template v-slot:column_2="x">
        <p class="sec">{{x.item.publish_time}}</p>
    </template><template v-slot:column_3="x">
        <p class="sec">{{x.item.prop}}</p>
    </template>
    <template v-slot:column_4="x">
        <p class="sec">{{x.item.userInfo.name}}</p>
    </template>
  </fv-DetailsList>

DetailsList-Dark Theme


vue
<fv-DetailsList
  v-model="value"
  :head="head"
  :multiSelection="multiSelection"
  :compact="compact"
>
    <template v-slot:column_0="x">
        <p>{{x.item.name}}</p>
    </template>
    <template v-slot:column_1="x">
        <p>{{x.item.publisher}}</p>
    </template>
    <template v-slot:column_2="x">
        <p>{{x.item.publish_time}}</p>
    </template><template v-slot:column_3="x">
        <p>{{x.item.prop}}</p>
    </template>
    <template v-slot:column_4="x">
        <p>{{x.item.userInfo.name}}</p>
    </template>
  </fv-DetailsList>

DetailsList Customize Row CSS


vue
<fv-DetailsList v-model="value" :head="head" :filter="filter" :multiSelection="multiSelection" :compact="compact" rowCss="fv-row-css">
    <template v-slot:column_0="x">
        <p>{{x.item.name}}</p>
    </template>
    <template v-slot:column_1="x">
        <p class="sec">{{x.item.publisher}}</p>
    </template>
    <template v-slot:column_2="x">
        <p class="sec">{{x.item.publish_time}}</p>
    </template><template v-slot:column_3="x">
        <p class="sec">{{x.item.prop}}</p>
    </template>
    <template v-slot:column_4="x">
        <p class="sec">{{x.item.userInfo.name}}</p>
    </template>
</fv-DetailsList>
scss
.fv-row-css
{
    &:nth-child(odd)
    {
        background: rgba(239, 239, 239, 1);
    }

    &:nth-child(even)
    {
        background: rgba(245, 245, 245, 1);
    }
}

Propoties


属性(attr)类型(type)必填(required)默认值(default)说明(statement)
valueArrayYesN/A列表数据, 数据格式详见数据格式表
headArrayYesN/A表头数据, 数据格式详见数据格式表
groupArrayNoN/A分组数据, 数据格式详见数据格式表
filterStringNoN/A搜索筛选, 数据格式详见数据格式表, 控制表显示哪些搜索字段
showGroupBooleanNofalse是否开启按组分割显示, 开启后排序功能将失效, 默认不开启, 若 group 为空, 则开启后表格内容为空
autoHeightBooleanNofalse是否开启自动高度
foreground[string(color)]NoN/A表格前景色
headBackground[string(color)]NoN/A表头背景, 不会修改点燃颜色, 若要修改点燃颜色请自定义 fv-custom-head 类样式
compactBooleanNofalse是否开启收缩模式
multiSelectionBooleanNofalse是否开启多选模式
allowDragBooleanNofalse是否开启拖动排序
rowCSSStringNoN/A客制化每一行的样式
rightMenuWidthNumberNo200右键菜单宽度设置
themeStringNosystem主题样式, 包含light, dark, system, custom几种样式

Events


事件名(Name)参数类型(args)说明(statement)
change-value修改后的 value在列表内部的 value 发生改变后会触发事件并返回修改后的 value
choose-itemscurrentChoose在选择某行数据后返回被选中的数据
lazyload修改后的 value滚动到底部加载数据, 返回列表内部的 value
rightclick当前选中的 row-item右键菜单返回当前选择的项目
drop-items返回对象包含transfervalue项目拖拽释放后触发事件, transfer包含拖拽项目, value包含列表内部的value

Slot


  1. Head

默认情况下用户可直接在head中定义content来应用默认样式, 不需要修改此模板, 可缺省 用户自定义样式时, 包含以下可选属性

  • item: 当前项
  • index: 当前项索引
vue
<template v-slot:head="x">
  <p class="default-title">{{ x.item.content }}</p>
</template>
  1. Column

用户根据head中的数量通过column_[数字]的方式来定义每一列的模板 默认情况下利用<p>标签来表示正文, 通过class="sec"来表示附属文本 用户自定义样式时, 包含以下可选属性

  • item: 当前项
  • row_index: 当前项行号
  • col_index: 当前项列号
vue
<template v-slot:column_0="x">
  <p>{{ x.item.name }}</p>
</template>
<template v-slot:column_1="x">
  <p class="sec">{{ x.item.publisher }}</p>
</template>
<template v-slot:column_2="x">
  <p class="sec">{{ x.item.publish_time }}</p> </template
><template v-slot:column_3="x">
  <p class="sec">{{ x.item.prop }}</p>
</template>
<template v-slot:column_4="x">
  <p class="sec">{{ x.item.userInfo.name }}</p>
</template>
  1. Row Expand

用户可以根据需要在每一行添加额外的内容, 如下拉菜单, 注意自定义的内容定位需要设置为'absolute'.

  • item: 当前项
  • row_index: 当前项行号
vue
<template v-slot:row_expand="x">
    <div style="position: absolute;"></div>
</template>
  1. Group

源代码, 默认不需要修改, 用户只需要定义gi数组中每一项的name来应用默认样式, 不需要定义此模板, 可缺省

vue
<slot name="group" :item="gi" :index="i" :isMulti="multiSelection" :isChoose="isGroupChooseAll(gi)">
    <span v-show="multiSelection" class="icon-block icon" key="multi-col" @click="chooseGroup(gi)">
        <span class="icon" :class="{choose: isGroupChooseAll(gi)}">
            <i class="ms-Icon ms-Icon--FullCircleMask ll"></i>
            <i class="ms-Icon ms-Icon--CircleRing ll"></i>
            <i class="ms-Icon ms-Icon--Completed ll"></i>
        </span>
    </span>
    <span class="expand" :class="{choose: gi.expand}" @click="expandGroup(gi)">
        <i class="ms-Icon ms-Icon--ChevronRight"></i>
    </span>
    <span class="col">
        <p>{{gi.name}}</p>
    </span>
</slot>

用户自定义样式时, 包含以下可选属性

  • item: 当前组数据
  • index: 当前组索引
  • isMulti: 当前是否开启多选
  • isChoose: 当前组是否全选
vue
<template v-slot:group="x">
  <p>{{ x.item.name }}</p>
</template>
  1. Goup Content

若用户想保留默认Group下拉样式并且只修改内容部分, 可使用group_content来重定义样式, 默认值为:

vue
<slot name="group_content" :item="gi" :index="i">
    <span class="col">
        <p>{{gi.name}}</p>
    </span>
</slot>

用户自定义样式时, 包含以下可选属性

  • item: 当前组数据
  • index: 当前组索引
  • isMulti: 当前是否开启多选
  • isChoose: 当前组是否全选
vue
<template v-slot:group_content="x">
  <p>{{ x.item.name }}</p>
</template>
  1. Context Menu

默认显示列表选中数量

vue
<template v-slot:menu>
  <div>
    <span>
      <i>[图标]</i>
      <p>[内容]</p>
    </span>
    ...
    <hr />
    <span>
      <i>[图标]</i>
      <p>[内容]</p>
    </span>
  </div>
</template>

Data


  1. value
javascript
value = [{any: '', ...}]

//e.g.//

value: [{id: "", name: "", publisher: "", userInfo: {}, publish_time: "", update_time: "", prop: ""}]
  1. head
javascript
head = [
  {
    content: "", //默认表头的列名
    minWidth: "", //最小的列宽, 默认为60
    width: "", //初始的列宽, 默认为80
    sortName: "", //按字段名来排序, 名字为value中的属性, DetailsList将根据当前的属性类型智能排序
    customSort: {}, //自定义排序方法, 在此定义函数满足预设两个参数(itemA, itemB)分别代表value中的两项并根据用户需要自定义函数方法, 此字段定义后, sortName仍需填写, 但值可任意
    visible: true //是否显示该列, 支持函数式声明
  }
];

**特别地** 0.2.17版本后支持采用函数式字段, 其中支持的字段包括`visible`

//e.g.//

head: [
  {
    content: "Name",
    minWidth: 60,
    width: 80,
    sortName: "name",
    visible: true
  },
  {
    content: "Publisher",
    minWidth: 60,
    width: 80,
    sortName: "publisher",
    visible: true
  },
  {
    content: "Publish Time",
    minWidth: 60,
    width: 190,
    sortName: "publish_time",
    visible: true
  },
  {
    content: "Prop",
    minWidth: 60,
    width: 92,
    sortName: "prop",
    visible: true
  },
  {
    content: "User Name",
    minWidth: 60,
    width: 80,
    visible: true
  }
];
  1. group
javascript
group = [
  {
    key: "", //分组的键值, 键来自value的属性
    value: "", //分组的键值对应的具体值, DetailsList会根据当前的key匹配value来进行分组
    name: "" //分组的其他数据, 默认模板将以name属性来渲染名称
  }
];

//e.g.//

group: [
  {
    key: "prop",
    value: "Windows",
    name: "A"
  },
  {
    key: "prop",
    value: "Edge",
    name: "B"
  },
  {
    key: "prop",
    value: "Office",
    name: "C"
  },
  {
    key: "prop",
    value: "Visual Studio",
    name: "D"
  }
];

Custom Class


类名(Name)说明(statement)
fv-custom-head客制化表头, 主要递推关系: fv-custom-head -> icon-block, col -> col-content, expand -> default-title
fv-custom-row客制化行, 主要递推关系: fv-custom-row -> icon-block, col
fv-custom-group-row客制化组, 主要递推关系: fv-custom-group-row -> icon-blocks, expand, col
scss
.fv-custom-head {
  .icon-block {
    .icon {
    }
  }
  .col {
    .col-content {
      .default-title {
      }
    }

    .expand {
    }
  }
}

.fv-custom-row {
  .icon-block {
    .icon {
    }
  }
  .col {
  }
}

.fv-custom-group-row {
  &.choose {
  }

  .icon-block {
    .icon {
    }
  }
  .col {
  }

  .expand {
  }
}

MIT Licensed