| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181 | 
							- <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 {} as UTSJSONObject
 
- 				}
 
- 			}
 
- 		},
 
- 		watch:{
 
- 			checked(newVal){
 
- 				if(typeof this.checked === 'boolean'){
 
- 					this.isChecked = newVal as boolean
 
- 				}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">
 
- 	$uni-primary: #007aff !default;
 
- 	$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;
 
- 		/* #ifdef H5 */
 
- 		cursor: pointer;
 
- 		/* #endif */
 
- 		// 多选样式
 
- 		.checkbox__inner {
 
- 			/* #ifndef APP-NVUE */
 
- 			flex-shrink: 0;
 
- 			box-sizing: border-box;			
 
- 			/* #endif */
 
- 			position: relative;
 
- 			width: 16px;
 
- 			height: 16px;
 
- 			border-radius: 2px;
 
- 			/*border: 1px solid $border-color;*/
 
- 			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: $uni-primary;
 
- 				background-color: $uni-primary;
 
- 				.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: $uni-primary;
 
- 			}
 
- 			// 禁用
 
- 			&.is-disable {
 
- 				/* #ifdef H5 */
 
- 				cursor: not-allowed;
 
- 				/* #endif */
 
- 				background-color: #F2F6FC;
 
- 				border-color: $border-color;
 
- 			}
 
- 			// 选中
 
- 			&.is-checked {
 
- 				border-color: $uni-primary;
 
- 				background-color: $uni-primary;
 
- 				.checkbox__inner-icon {
 
- 					opacity: 1;
 
- 					transform: rotate(45deg);
 
- 				}
 
- 				// 选中禁用
 
- 				&.is-disable {
 
- 					opacity: $disable;
 
- 				}
 
- 			}
 
- 			
 
- 		}
 
- 	}
 
- </style>
 
 
  |