| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179 | <template>	<view class="uni-table-checkbox" @click="selected">		<view v-if="!indeterminate" class="checkbox__inner" :class="{'is-checked':isChecked,'is-disable':isDisabled}">			<view class="checkbox__inner-icon"></view>		</view>		<view v-else class="checkbox__inner checkbox--indeterminate">			<view class="checkbox__inner-icon"></view>		</view>	</view></template><script>	export default {		name: 'TableCheckbox',		emits:['checkboxSelected'],		props: {			indeterminate: {				type: Boolean,				default: false			},			checked: {				type: [Boolean,String],				default: false			},			disabled: {				type: Boolean,				default: false			},			index: {				type: Number,				default: -1			},			cellData: {				type: Object,				default () {					return {}				}			}		},		watch:{			checked(newVal){				if(typeof this.checked === 'boolean'){					this.isChecked = newVal				}else{					this.isChecked = true				}			},			indeterminate(newVal){				this.isIndeterminate = newVal			}		},		data() {			return {				isChecked: false,				isDisabled: false,				isIndeterminate:false			}		},		created() {			if(typeof this.checked === 'boolean'){				this.isChecked = this.checked			}			this.isDisabled = this.disabled		},		methods: {			selected() {				if (this.isDisabled) return				this.isIndeterminate = false				this.isChecked = !this.isChecked				this.$emit('checkboxSelected', {					checked: this.isChecked,					data: this.cellData				})			}		}	}</script><style lang="scss">	$checked-color: #007aff;	$border-color: #DCDFE6;	$disable:0.4;	.uni-table-checkbox {		display: flex;		flex-direction: row;		align-items: center;		justify-content: center;		position: relative;		margin: 5px 0;		cursor: pointer;		// 多选样式		.checkbox__inner {			/* #ifndef APP-NVUE */			flex-shrink: 0;			box-sizing: border-box;			/* #endif */			position: relative;			width: 16px;			height: 16px;			border: 1px solid $border-color;			border-radius: 2px;			background-color: #fff;			z-index: 1;			.checkbox__inner-icon {				position: absolute;				/* #ifdef APP-NVUE */				top: 2px;				/* #endif */				/* #ifndef APP-NVUE */				top: 2px;				/* #endif */				left: 5px;				height: 7px;				width: 3px;				border: 1px solid #fff;				border-left: 0;				border-top: 0;				opacity: 0;				transform-origin: center;				transform: rotate(45deg);				box-sizing: content-box;			}			&.checkbox--indeterminate {				border-color: $checked-color;				background-color: $checked-color;				.checkbox__inner-icon {					position: absolute;					opacity: 1;					transform: rotate(0deg);					height: 2px;					top: 0;					bottom: 0;					margin: auto;					left: 0px;					right: 0px;					bottom: 0;					width: auto;					border: none;					border-radius: 2px;					transform: scale(0.5);					background-color: #fff;				}			}			&:hover{				border-color: $checked-color;			}			// 禁用			&.is-disable {				/* #ifdef H5 */				cursor: not-allowed;				/* #endif */				background-color: #F2F6FC;				border-color: $border-color;			}			// 选中			&.is-checked {				border-color: $checked-color;				background-color: $checked-color;				.checkbox__inner-icon {					opacity: 1;					transform: rotate(45deg);				}				// 选中禁用				&.is-disable {					opacity: $disable;				}			}					}	}</style>
 |