|
- <template>
- <!-- #ifdef H5 -->
- <thead class="uni-table-thead">
- <tr class="uni-table-tr">
- <th :rowspan="rowspan" colspan="1" class="checkbox" :class="{ 'tr-table--border': border }">
- <table-checkbox :indeterminate="indeterminate" :checked="checked" @checkboxSelected="checkboxSelected"></table-checkbox>
- </th>
- </tr>
- <slot></slot>
- </thead>
- <!-- #endif -->
- <!-- #ifndef H5 -->
- <view class="uni-table-thead"><slot></slot></view>
- <!-- #endif -->
- </template>
-
- <script>
- import tableCheckbox from '../uni-tr/table-checkbox.vue'
- export default {
- name: 'uniThead',
- components: {
- tableCheckbox
- },
- options: {
- virtualHost: true
- },
- data() {
- return {
- border: false,
- selection: false,
- rowspan: 1,
- indeterminate: false,
- checked: false
- }
- },
- created() {
- this.root = this.getTable()
- // #ifdef H5
- this.root.theadChildren = this
- // #endif
- this.border = this.root.border
- this.selection = this.root.type
- },
- methods: {
- init(self) {
- this.rowspan++
- },
- checkboxSelected(e) {
- this.indeterminate = false
- const backIndexData = this.root.backIndexData
- const data = this.root.trChildren.filter(v => !v.disabled && v.keyValue)
- if (backIndexData.length === data.length) {
- this.checked = false
- this.root.clearSelection()
- } else {
- this.checked = true
- this.root.selectionAll()
- }
- },
- /**
- * 获取父元素实例
- */
- getTable(name = 'uniTable') {
- let parent = this.$parent
- let parentName = parent.$options.name
- while (parentName !== name) {
- parent = parent.$parent
- if (!parent) return false
- parentName = parent.$options.name
- }
- return parent
- }
- }
- }
- </script>
-
- <style lang="scss">
- $border-color: #ebeef5;
-
- .uni-table-thead {
- display: table-header-group;
- }
-
- .uni-table-tr {
- /* #ifndef APP-NVUE */
- display: table-row;
- transition: all 0.3s;
- box-sizing: border-box;
- /* #endif */
- border: 1px red solid;
- background-color: #fafafa;
- }
-
- .checkbox {
- padding: 0 8px;
- width: 26px;
- padding-left: 12px;
- /* #ifndef APP-NVUE */
- display: table-cell;
- vertical-align: middle;
- /* #endif */
- color: #333;
- font-weight: 500;
- border-bottom: 1px $border-color solid;
- font-size: 14px;
- // text-align: center;
- }
-
- .tr-table--border {
- border-right: 1px $border-color solid;
- }
-
- /* #ifndef APP-NVUE */
- .uni-table-tr {
- ::v-deep .uni-table-th {
- &.table--border:last-child {
- // border-right: none;
- }
- }
-
- ::v-deep .uni-table-td {
- &.table--border:last-child {
- // border-right: none;
- }
- }
- }
-
- /* #endif */
- </style>
|