| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 | 
							- <template>
 
- 	<view class="gui-select-list">
 
- 		<view 
 
- 		v-for="(item, index) in dataIn" 
 
- 		:key="index" 
 
- 		class="gui-select-list-item gui-flex gui-row gui-nowrap gui-align-items-center" 
 
- 		:data-index="index" 
 
- 		@tap.stop="choose">
 
- 			<text 
 
- 			class="gui-select-list-icon gui-icons gui-block gui-select-list-ring gui-select-list-icon-l gui-color-gray"
 
- 			v-if="checkedType == 'ring' && !item.checked"></text>
 
- 			<text 
 
- 			class="gui-select-list-icon gui-icons gui-block gui-select-list-ring gui-select-list-icon-l gui-fade-in" 
 
- 			:class="checkedClass" 
 
- 			v-if="checkedType == 'ring' && item.checked"></text>
 
- 			<image 
 
- 			:src="item.img" 
 
- 			class="gui-select-list-img" 
 
- 			v-if="item.img" 
 
- 			mode="aspectFill"></image>
 
- 			<view 
 
- 			class="gui-select-list-body gui-flex gui-row gui-nowrap gui-align-items-center" 
 
- 			:class="[isBorder && index < dataIn.length - 1 ? 'gui-border-b' : '']">
 
- 				<view class="gui-select-list-content">
 
- 					<text 
 
- 					class="gui-block gui-select-list-title gui-primary-text">{{item.title}}</text>
 
- 					<text 
 
- 					class="gui-select-list-desc gui-block gui-third-text" 
 
- 					v-if="item.desc">{{item.desc}}</text>
 
- 				</view>
 
- 				<text 
 
- 				class="gui-icons gui-block gui-select-list-icon" 
 
- 				:class="checkedClass" 
 
- 				v-if="item.checked && checkedType == 'right'"></text>
 
- 			</view>
 
- 		</view>
 
- 	</view>
 
- </template>
 
- <script>
 
- export default{
 
- 	name  : "gui-select-list",
 
- 	props : {
 
- 		items           : {type : Array,   default : function(){return [];}},
 
- 		type            : {type : String,  default : "radio"},
 
- 		checkedType     : {type : String,  default : 'right'},
 
- 		isBorder        : {type : Boolean, default : true},
 
- 		maxSize         : {type : Number,  default : 0},
 
- 		checkedClass    : {type : Array,   default:function () {return ['gui-primary-color'];}}
 
- 	},
 
- 	data() {
 
- 		return {
 
- 			dataIn :  []
 
- 		}
 
- 	},
 
- 	created : function(){
 
- 		this.dataIn = this.items;
 
- 	},
 
- 	watch : {
 
- 		items : function(val){ this.dataIn = val;}
 
- 	},
 
- 	methods : {
 
- 		// 获取选中数据的索引
 
- 		getSelectedIndex : function(){
 
- 			var tmpArr = [];
 
- 			this.dataIn.forEach((item, idx)=>{
 
- 				if(item.checked){
 
- 					tmpArr.push(idx);
 
- 				}
 
- 			});
 
- 			return tmpArr;
 
- 		},
 
- 		// 选择数据
 
- 		choose : function(e){
 
- 			var index = e.currentTarget.dataset.index;
 
- 			if(this.type == 'radio'){
 
- 				if(this.dataIn[index].checked){
 
- 					this.dataIn[index].checked = false;
 
- 					this.$emit('change', -1);
 
- 				}else{
 
- 					for(let i = 0; i < this.dataIn.length; i++){
 
- 						this.dataIn[i].checked = false;
 
- 					}
 
- 					this.dataIn[index].checked = true;
 
- 					this.$emit('change', index);
 
- 				}
 
- 			}else{
 
- 				if(this.dataIn[index].checked){
 
- 					this.dataIn[index].checked = false;
 
- 				}else{
 
- 					if(this.maxSize > 0){
 
- 						var size = 0;
 
- 						this.dataIn.forEach((item)=>{
 
- 							if(item.checked){size++;}
 
- 						});
 
- 						size++;
 
- 						if(size > this.maxSize){this.$emit('maxSed'); return ;}
 
- 					}
 
- 					this.dataIn[index].checked = true;
 
- 				}
 
- 				var sedArr = [];
 
- 				for(let i = 0; i < this.dataIn.length; i++){
 
- 					if(this.dataIn[i].checked){
 
- 						sedArr.push(i);
 
- 					}
 
- 				}
 
- 				this.$emit('change', sedArr);
 
- 			}
 
- 		}
 
- 	},
 
- 	emits : ['change', 'maxSed']
 
- }
 
- </script>
 
- <style scoped>
 
- .gui-select-list-item{font-size:0;}
 
- .gui-select-list-icon-l{margin-left:0; margin-right:10rpx;}
 
- .gui-select-list-body{width:100rpx; flex:1;}
 
- .gui-select-list-content{width:200rpx; flex:1; overflow:hidden; padding:25rpx 0;}
 
- </style>
 
 
  |