| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 | <template>	<view class="u-grid-item" :hover-class="parentData.hoverClass"	 :hover-stay-time="200" @tap="click" :style="{			background: bgColor,			width: width,		}">		<view class="u-grid-item-box" :style="[customStyle]" :class="[parentData.border ? 'u-border-right u-border-bottom' : '']">			<slot />		</view>	</view></template><script>	/**	 * gridItem 提示	 * @description 宫格组件一般用于同时展示多个同类项目的场景,可以给宫格的项目设置徽标组件(badge),或者图标等,也可以扩展为左右滑动的轮播形式。搭配u-grid使用	 * @tutorial https://www.uviewui.com/components/grid.html	 * @property {String} bg-color 宫格的背景颜色(默认#ffffff)	 * @property {String Number} index 点击宫格时,返回的值	 * @property {Object} custom-style 自定义样式,对象形式	 * @event {Function} click 点击宫格触发	 * @example <u-grid-item></u-grid-item>	 */	export default {		name: "u-grid-item",		props: {			// 背景颜色			bgColor: {				type: String,				default: '#ffffff'			},			// 点击时返回的index			index: {				type: [Number, String],				default: ''			},			// 自定义样式,对象形式			customStyle: {				type: Object,				default() {					return {						padding: '10rpx 0'					}				}			}		},		data() {			return {				parentData: {					hoverClass: '', // 按下去的时候,是否显示背景灰色					col: 3, // 父组件划分的宫格数					border: true, // 是否显示边框,根据父组件决定				}			};		},		created() {			// 父组件的实例			this.updateParentData();			// this.parent在updateParentData()中定义			this.parent.children.push(this);		},		computed: {			// 每个grid-item的宽度			width() {				return 100 / Number(this.parentData.col) + '%';			},		},		methods: {			// 获取父组件的参数			updateParentData() {				// 此方法写在mixin中				this.getParentData('u-grid');			},			click() {				this.$emit('click', this.index);				this.parent && this.parent.click(this.index);			}		}	};</script><style scoped lang="scss">	@import "../../libs/css/style.components.scss";		.u-grid-item {		box-sizing: border-box;		background: #fff;		@include vue-flex;		align-items: center;		justify-content: center;		position: relative;		flex-direction: column;				/* #ifdef MP */		position: relative;		float: left;		/* #endif */	}	.u-grid-item-hover {		background: #f7f7f7 !important;	}	.u-grid-marker-box {		position: absolute;		/* #ifndef APP-NVUE */		display: inline-flex;				/* #endif */		line-height: 0;	}	.u-grid-marker-wrap {		position: absolute;	}	.u-grid-item-box {		// padding: 30rpx 0;		@include vue-flex;		align-items: center;		justify-content: center;		flex-direction: column;		flex: 1;		width: 100%;		height: 100%;	}</style>
 |