Browse Source

Table: respect column_options

master
Bing Sun 5 years ago
parent
commit
b35746b05e
Signed by: sunb GPG Key ID: F7795F8C590626AB
1 changed files with 21 additions and 10 deletions
  1. +21
    -10
      src/components/Table.js

+ 21
- 10
src/components/Table.js View File

@@ -1,7 +1,7 @@
/* /*
columns: <displayed columns>,
columns_options: {}
serial: true/false, serial: true/false,
model_options: <model.options>
model: model
*/ */


export default initial_vnode => { export default initial_vnode => {
@@ -9,20 +9,23 @@ export default initial_vnode => {
let model = initial_vnode.attrs.model let model = initial_vnode.attrs.model


// displayed columns // displayed columns
let columns = initial_vnode.attrs.columns
if (!columns) {
if (model.configs().selects) {
columns = model.configs().selects.map(select => ({
label: select.alias || select.label
}))
}
let columns = []
if (model.configs().selects) {
// construct by selects
columns = model.configs().selects.map(select => ({
label: select.alias || select.label
}))
// merge column options
columns = columns.map(
column => column.label in initial_vnode.attrs.columns_options
? {...initial_vnode.attrs.columns_options[column.label], ...column} : column
).filter(column => !('display' in column) || column.display != false)
} }


// pagination // pagination
let offset = 0 let offset = 0
let limit = initial_vnode.attrs.pagination && initial_vnode.attrs.pagination.size || Infinity let limit = initial_vnode.attrs.pagination && initial_vnode.attrs.pagination.size || Infinity
let pages = [] // [{activie: boolean, show: boolean}] let pages = [] // [{activie: boolean, show: boolean}]

function generate_pages() { function generate_pages() {
if (limit > 0 && limit < Infinity && model.cache().count) { if (limit > 0 && limit < Infinity && model.cache().count) {
let active_page = offset / limit let active_page = offset / limit
@@ -63,7 +66,13 @@ export default initial_vnode => {
view: vnode => { view: vnode => {
// try to generate columns if it is still uninitialized // try to generate columns if it is still uninitialized
if (typeof columns == 'undefined' || columns.length == 0) { if (typeof columns == 'undefined' || columns.length == 0) {
// construct by data
columns = model.data(offset, limit) && model.data(offset, limit).length && Object.keys(model.data(offset, limit)[0]).map(key => ({label: key})) || [] columns = model.data(offset, limit) && model.data(offset, limit).length && Object.keys(model.data(offset, limit)[0]).map(key => ({label: key})) || []
// merge column options
columns = columns.map(
column => column.label in initial_vnode.attrs.columns_options
? {...initial_vnode.attrs.columns_options[column.label], ...column} : column
).filter(column => !('display' in column) || column.display != false)
} }


// refresh paginations // refresh paginations
@@ -76,6 +85,7 @@ export default initial_vnode => {
vnode.attrs.serial ? m('th.centered', '序号') : undefined, vnode.attrs.serial ? m('th.centered', '序号') : undefined,
...columns.map(column => m('th.centered', column.label)) ...columns.map(column => m('th.centered', column.label))
])), ])),
// table content
model.data(offset, limit).length ? m('tbody', model.data(offset, limit).map((row, i) => m('tr', [ model.data(offset, limit).length ? m('tbody', model.data(offset, limit).map((row, i) => m('tr', [
vnode.attrs.serial ? m('td.centered', offset+i+1) : undefined, vnode.attrs.serial ? m('td.centered', offset+i+1) : undefined,
...columns.map(column => { ...columns.map(column => {
@@ -88,6 +98,7 @@ export default initial_vnode => {
}) })
]))) : m('', 'Empty') ]))) : m('', 'Empty')
]), ]),
// page navigation
pages.length > 1 ? pages.length > 1 ?
m('.centered', m('.centered',
m('.pagination.centered', pages.map((page, i) => page.show ? m('a', { m('.pagination.centered', pages.map((page, i) => page.show ? m('a', {


Loading…
Cancel
Save