141 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Vue
		
	
	
			
		
		
	
	
			141 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Vue
		
	
	
| <template>
 | ||
| 	<view
 | ||
| 		:style="'width:' + width + ';' + (square ? 'height:' + width : '')"
 | ||
| 		class="uni-grid-item grid-item"
 | ||
| 	>
 | ||
| 		<view
 | ||
| 			:class="{
 | ||
| 				'uni-grid-item--border': showBorder,
 | ||
| 				'uni-grid-item--border-top': showBorder && index < column,
 | ||
| 				'uni-highlight': highlight
 | ||
| 			}"
 | ||
| 			:style="{
 | ||
| 				'border-right-color': borderColor,
 | ||
| 				'border-bottom-color': borderColor,
 | ||
| 				'border-top-color': borderColor
 | ||
| 			}"
 | ||
| 			class="uni-grid-item__box"
 | ||
| 			@click="_onClick"
 | ||
| 		>
 | ||
| 			<slot />
 | ||
| 		</view>
 | ||
| 	</view>
 | ||
| </template>
 | ||
| 
 | ||
| <script>
 | ||
| /**
 | ||
|  * GridItem 宫格
 | ||
|  * @description 宫格组件
 | ||
|  * @tutorial https://ext.dcloud.net.cn/plugin?id=27
 | ||
|  * @property {Number} index 子组件的唯一标识 ,点击gird会返回当前的标识
 | ||
|  */
 | ||
| export default {
 | ||
| 	name: 'UniGridItem',
 | ||
| 	inject: ['grid'],
 | ||
| 	props: {
 | ||
| 		index: {
 | ||
| 			type: Number,
 | ||
| 			default: 0
 | ||
| 		}
 | ||
| 	},
 | ||
| 	data() {
 | ||
| 		return {
 | ||
| 			column: 0,
 | ||
| 			showBorder: true,
 | ||
| 			square: true,
 | ||
| 			highlight: true,
 | ||
| 			left: 0,
 | ||
| 			top: 0,
 | ||
| 			openNum: 2,
 | ||
| 			width: 0,
 | ||
| 			borderColor: '#e5e5e5'
 | ||
| 		};
 | ||
| 	},
 | ||
| 	created() {
 | ||
| 		this.column = this.grid.column;
 | ||
| 		this.showBorder = this.grid.showBorder;
 | ||
| 		this.square = this.grid.square;
 | ||
| 		this.highlight = this.grid.highlight;
 | ||
| 		this.top = this.hor === 0 ? this.grid.hor : this.hor;
 | ||
| 		this.left = this.ver === 0 ? this.grid.ver : this.ver;
 | ||
| 		this.borderColor = this.grid.borderColor;
 | ||
| 		this.grid.children.push(this);
 | ||
| 		// this.grid.init()
 | ||
| 		this.width = this.grid.width;
 | ||
| 	},
 | ||
| 	beforeDestroy() {
 | ||
| 		this.grid.children.forEach((item, index) => {
 | ||
| 			if (item === this) {
 | ||
| 				this.grid.children.splice(index, 1);
 | ||
| 			}
 | ||
| 		});
 | ||
| 	},
 | ||
| 	methods: {
 | ||
| 		_onClick() {
 | ||
| 			this.grid.change({
 | ||
| 				detail: {
 | ||
| 					index: this.index
 | ||
| 				}
 | ||
| 			});
 | ||
| 		}
 | ||
| 	}
 | ||
| };
 | ||
| </script>
 | ||
| 
 | ||
| <style lang="scss" scoped>
 | ||
| .uni-grid-item {
 | ||
| 	/* #ifndef APP-NVUE */
 | ||
| 	height: 100%;
 | ||
| 	display: flex;
 | ||
| 	/* #endif */
 | ||
| 	/* #ifdef H5 */
 | ||
| 	cursor: pointer;
 | ||
| 	/* #endif */
 | ||
| }
 | ||
| 
 | ||
| .uni-grid-item__box {
 | ||
| 	/* #ifndef APP-NVUE */
 | ||
| 	display: flex;
 | ||
| 	width: 100%;
 | ||
| 	/* #endif */
 | ||
| 	position: relative;
 | ||
| 	flex: 1;
 | ||
| 	flex-direction: column;
 | ||
| 	// justify-content: center;
 | ||
| 	// align-items: center;
 | ||
| }
 | ||
| 
 | ||
| .uni-grid-item--border {
 | ||
| 	position: relative;
 | ||
| 	/* #ifdef APP-NVUE */
 | ||
| 	border-bottom-color: #d2d2d2;
 | ||
| 	border-bottom-style: solid;
 | ||
| 	border-bottom-width: 0.5px;
 | ||
| 	border-right-color: #d2d2d2;
 | ||
| 	border-right-style: solid;
 | ||
| 	border-right-width: 0.5px;
 | ||
| 	/* #endif */
 | ||
| 	/* #ifndef APP-NVUE */
 | ||
| 	z-index: 0;
 | ||
| 	border-bottom: 1px #d2d2d2 solid;
 | ||
| 	border-right: 1px #d2d2d2 solid;
 | ||
| 	/* #endif */
 | ||
| }
 | ||
| .uni-grid-item--border-top {
 | ||
| 	position: relative;
 | ||
| 	/* #ifdef APP-NVUE */
 | ||
| 	border-top-color: #d2d2d2;
 | ||
| 	border-top-style: solid;
 | ||
| 	border-top-width: 0.5px;
 | ||
| 	/* #endif */
 | ||
| 	/* #ifndef APP-NVUE */
 | ||
| 	border-top: 1px #d2d2d2 solid;
 | ||
| 	z-index: 0;
 | ||
| 	/* #endif */
 | ||
| }
 | ||
| 
 | ||
| .uni-highlight:active {
 | ||
| 	background-color: #f1f1f1;
 | ||
| }
 | ||
| </style>
 |