div.moo(class='moo-table')
div.no-table-data(v-if='!tbData || tbData.length === 0' )
slot(name='no-data')
table(v-else)
tr(v-for='th in tbHead' class='tb-head')
td(class='tb-head-select' v-if='hasMulti')
div(v-if='tbSel.length === 0')
btn(@tap='allCheck')
span.iconfont(class='icon-blank' slot='btn')
div(v-else)
btn(@tap='backCheck')
span.iconfont(class='icon-check' slot='btn')
td(v-for='item in th' v-if='!item.hasHidden'
:colspan='!item.cols ? 1 : item.cols'
:rowspan='!item.rows ? 1 : item.rows')
btn(@tap='e => headTap(item)')
span(slot='btn') {{ item.name }}
td(v-if='tbOpts && tbOpts.length > 0' :colspan='tbOpts.length')
tr(v-for='(item, code) in tbData')
td.tb-select(v-if='hasMulti')
btn(@tap='e => multiSelect(code)')
span.iconfont(class='icon-check' slot='btn' v-if='tbSel.indexOf(code) >= 0')
span.iconfont(class='icon-blank' slot='btn' v-else)
td(v-for='m in keyMap')
btn(@tap='e => tap({ key: m.key, value: item[m.key], data: item, filter: filter(m.key, item[m.key]) })')
span(slot='btn' v-html='filter(m.key, item[m.key])')
td.tb-opt(v-if='tbOpts && tbOpts.length > 0' v-for='(opt, code) in tbOpts')
btn(@tap='e => tap({ key: opt.key, name: opt.name, data: item, code })')
div(slot='btn')
span.iconfont(class='icon-3dcube')
span(v-html='opt.name')