| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184 | <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: {			// #ifdef MP-TOUTIAO			virtualHost: false,			// #endif			// #ifndef MP-TOUTIAO			virtualHost: true			// #endif		},		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 = Number(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)				if (this.widthThArr.length > 0) {					const selectionWidth = this.selection === 'selection' ? 50 : 0;					this.root.minWidth = Number(this.widthThArr.reduce((a, b) => Number(a) + Number(b))) + selectionWidth;				}			},			// 选中			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>
 |