90 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			90 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Python
		
	
	
	
<template>
 | 
						||
	<!-- 支付宝小程序使用$u.getRect()获取组件的根元素尺寸,所以在外面套一个"壳" -->
 | 
						||
	<view>
 | 
						||
		<view class="u-index-anchor-wrapper" :id="$u.guid()" :style="[wrapperStyle]">
 | 
						||
			<view class="u-index-anchor " :class="[active ? 'u-index-anchor--active' : '']" :style="[customAnchorStyle]">
 | 
						||
				<slot v-if="useSlot" />
 | 
						||
				<block v-else>
 | 
						||
					<text>{{ index }}</text>
 | 
						||
				</block>
 | 
						||
			</view>
 | 
						||
		</view>
 | 
						||
	</view>
 | 
						||
</template>
 | 
						||
 | 
						||
<script>
 | 
						||
	/**
 | 
						||
	 * indexAnchor 索引列表锚点
 | 
						||
	 * @description 通过折叠面板收纳内容区域,搭配<u-index-anchor>使用
 | 
						||
	 * @tutorial https://www.uviewui.com/components/indexList.html#indexanchor-props
 | 
						||
	 * @property {Boolean} use-slot 是否使用自定义内容的插槽(默认false)
 | 
						||
	 * @property {String Number} index 索引字符,如果定义了use-slot,此参数自动失效
 | 
						||
	 * @property {Object} custStyle 自定义样式,对象形式,如"{color: 'red'}"
 | 
						||
	 * @event {Function} default 锚点位置显示内容,默认为索引字符
 | 
						||
	 * @example <u-index-anchor :index="item" />
 | 
						||
	 */
 | 
						||
	export default {
 | 
						||
		name: "u-index-anchor",
 | 
						||
		props: {
 | 
						||
			useSlot: {
 | 
						||
				type: Boolean,
 | 
						||
				default: false
 | 
						||
			},
 | 
						||
			index: {
 | 
						||
				type: String,
 | 
						||
				default: ''
 | 
						||
			},
 | 
						||
			customStyle: {
 | 
						||
				type: Object,
 | 
						||
				default () {
 | 
						||
					return {}
 | 
						||
				}
 | 
						||
			}
 | 
						||
		},
 | 
						||
		data() {
 | 
						||
			return {
 | 
						||
				active: false,
 | 
						||
				wrapperStyle: {},
 | 
						||
				anchorStyle: {}
 | 
						||
			}
 | 
						||
		},
 | 
						||
		created() {
 | 
						||
			this.parent = false;
 | 
						||
		},
 | 
						||
		mounted() {
 | 
						||
			this.parent = this.$u.$parent.call(this, 'u-index-list');
 | 
						||
			if(this.parent) {
 | 
						||
				this.parent.children.push(this);
 | 
						||
				this.parent.updateData();
 | 
						||
			}
 | 
						||
		},
 | 
						||
		computed: {
 | 
						||
			customAnchorStyle() {
 | 
						||
				return Object.assign(this.anchorStyle, this.customStyle);
 | 
						||
			}
 | 
						||
		}
 | 
						||
	}
 | 
						||
</script>
 | 
						||
 | 
						||
<style lang="scss" scoped>
 | 
						||
	@import "../../libs/css/style.components.scss";
 | 
						||
	
 | 
						||
	.u-index-anchor {
 | 
						||
		box-sizing: border-box;
 | 
						||
		padding: 14rpx 24rpx;
 | 
						||
		color: #606266;
 | 
						||
		width: 100%;
 | 
						||
		font-weight: 500;
 | 
						||
		font-size: 28rpx;
 | 
						||
		line-height: 1.2;
 | 
						||
		background-color: rgb(245, 245, 245);
 | 
						||
	}
 | 
						||
 | 
						||
	.u-index-anchor--active {
 | 
						||
		right: 0;
 | 
						||
		left: 0;
 | 
						||
		color: #2979ff;
 | 
						||
		background-color: #fff;
 | 
						||
	}
 | 
						||
</style>
 |