| <template> | 
|     <!-- #ifdef H5 --> | 
|     <tr class="uni-table-tr"> | 
|         <th v-if="selection === 'selection' && ishead" class="checkbox" :class="{ 'tr-table--border': border }"> | 
|             <table-checkbox :checked="checked" :indeterminate="indeterminate" :disabled="disabled" @checkboxSelected="checkboxSelected"></table-checkbox> | 
|         </th> | 
|         <slot></slot> | 
|         <!-- <uni-th class="th-fixed">123</uni-th> --> | 
|     </tr> | 
|     <!-- #endif --> | 
|     <!-- #ifndef H5 --> | 
|     <view class="uni-table-tr"> | 
|         <view v-if="selection === 'selection' " class="checkbox" :class="{ 'tr-table--border': border }"> | 
|             <table-checkbox :checked="checked" :indeterminate="indeterminate" :disabled="disabled" @checkboxSelected="checkboxSelected"></table-checkbox> | 
|         </view> | 
|         <slot></slot> | 
|     </view> | 
|     <!-- #endif --> | 
| </template> | 
|   | 
| <script> | 
|     import tableCheckbox from './table-checkbox.vue' | 
| /** | 
|  * Tr 表格行组件 | 
|  * @description 表格行组件 仅包含 th,td 组件 | 
|  * @tutorial https://ext.dcloud.net.cn/plugin?id= | 
|  */ | 
| export default { | 
|     name: 'uniTr', | 
|     components: { tableCheckbox }, | 
|     props: { | 
|         disabled: { | 
|             type: Boolean, | 
|             default: false | 
|         }, | 
|         keyValue: { | 
|             type: [String, Number], | 
|             default: '' | 
|         } | 
|     }, | 
|     options: { | 
|         virtualHost: true | 
|     }, | 
|     data() { | 
|         return { | 
|             value: false, | 
|             border: false, | 
|             selection: false, | 
|             widthThArr: [], | 
|             ishead: true, | 
|             checked: false, | 
|             indeterminate:false | 
|         } | 
|     }, | 
|     created() { | 
|         this.root = this.getTable() | 
|         this.head = this.getTable('uniThead') | 
|         if (this.head) { | 
|             this.ishead = false | 
|             this.head.init(this) | 
|         } | 
|         this.border = this.root.border | 
|         this.selection = this.root.type | 
|         this.root.trChildren.push(this) | 
|         const rowData = this.root.data.find(v => v[this.root.rowKey] === this.keyValue) | 
|         if(rowData){ | 
|             this.rowData = rowData | 
|         } | 
|         this.root.isNodata() | 
|     }, | 
|     mounted() { | 
|         if (this.widthThArr.length > 0) { | 
|             const selectionWidth = this.selection === 'selection' ? 50 : 0 | 
|             this.root.minWidth = this.widthThArr.reduce((a, b) => Number(a) + Number(b)) + selectionWidth | 
|         } | 
|     }, | 
|     // #ifndef VUE3 | 
|     destroyed() { | 
|         const index = this.root.trChildren.findIndex(i => i === this) | 
|         this.root.trChildren.splice(index, 1) | 
|         this.root.isNodata() | 
|     }, | 
|     // #endif | 
|     // #ifdef VUE3 | 
|     unmounted() { | 
|         const index = this.root.trChildren.findIndex(i => i === this) | 
|         this.root.trChildren.splice(index, 1) | 
|         this.root.isNodata() | 
|     }, | 
|     // #endif | 
|     methods: { | 
|         minWidthUpdate(width) { | 
|             this.widthThArr.push(width) | 
|         }, | 
|         // 选中 | 
|         checkboxSelected(e) { | 
|             let rootData = this.root.data.find(v => v[this.root.rowKey] === this.keyValue) | 
|             this.checked = e.checked | 
|             this.root.check(rootData||this, e.checked,rootData? this.keyValue:null) | 
|         }, | 
|         change(e) { | 
|             this.root.trChildren.forEach(item => { | 
|                 if (item === this) { | 
|                     this.root.check(this, e.detail.value.length > 0 ? true : false) | 
|                 } | 
|             }) | 
|         }, | 
|         /** | 
|          * 获取父元素实例 | 
|          */ | 
|         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-tr { | 
|     /* #ifndef APP-NVUE */ | 
|     display: table-row; | 
|     transition: all 0.3s; | 
|     box-sizing: border-box; | 
|     /* #endif */ | 
| } | 
|   | 
| .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> |