| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142 | <template>	<view class="uni-grid-wrap">		<view :id="elId" ref="uni-grid" class="uni-grid" :class="{ 'uni-grid--border': showBorder }" :style="{ 'border-left-color':borderColor}">			<slot />		</view>	</view></template><script>	// #ifdef APP-NVUE	const dom = uni.requireNativePlugin('dom');	// #endif	/**	 * Grid 宫格	 * @description 宫格组件	 * @tutorial https://ext.dcloud.net.cn/plugin?id=27	 * @property {Number} column 每列显示个数	 * @property {String} borderColor 边框颜色	 * @property {Boolean} showBorder 是否显示边框	 * @property {Boolean} square 是否方形显示	 * @property {Boolean} Boolean 点击背景是否高亮	 * @event {Function} change 点击 grid 触发,e={detail:{index:0}},index 为当前点击 gird 下标	 */	export default {		name: 'UniGrid',		emits:['change'],		props: {			// 每列显示个数			column: {				type: Number,				default: 3			},			// 是否显示边框			showBorder: {				type: Boolean,				default: true			},			// 边框颜色			borderColor: {				type: String,				default: '#D2D2D2'			},			// 是否正方形显示,默认为 true			square: {				type: Boolean,				default: true			},			highlight: {				type: Boolean,				default: true			}		},		provide() {			return {				grid: this			}		},		data() {			const elId = `Uni_${Math.ceil(Math.random() * 10e5).toString(36)}`			return {				elId,				width: 0			}		},		created() {			this.children = []		},		mounted() {			this.$nextTick(()=>{				this.init()			})		},		methods: {			init() {				setTimeout(() => {					this._getSize((width) => {						this.children.forEach((item, index) => {							item.width = width						})					})				}, 50)			},			change(e) {				this.$emit('change', e)			},			_getSize(fn) {				// #ifndef APP-NVUE				uni.createSelectorQuery()					.in(this)					.select(`#${this.elId}`)					.boundingClientRect()					.exec(ret => {						this.width = parseInt((ret[0].width - 1) / this.column) + 'px'						fn(this.width)					})				// #endif				// #ifdef APP-NVUE				dom.getComponentRect(this.$refs['uni-grid'], (ret) => {					this.width = parseInt((ret.size.width - 1) / this.column) + 'px'					fn(this.width)				})				// #endif			}		}	}</script><style lang="scss" >	.uni-grid-wrap {		/* #ifndef APP-NVUE */		display: flex;		/* #endif */		flex: 1;		flex-direction: column;		/* #ifdef H5 */		width: 100%;		/* #endif */	}	.uni-grid {		/* #ifndef APP-NVUE */		display: flex;		/* #endif */		// flex: 1;		flex-direction: row;		flex-wrap: wrap;	}	.uni-grid--border {		position: relative;		/* #ifdef APP-NVUE */		border-left-color: #D2D2D2;		border-left-style: solid;		border-left-width: 0.5px;		/* #endif */		/* #ifndef APP-NVUE */		z-index: 1;		border-left: 1px #D2D2D2 solid;		/* #endif */	}</style>
 |