168 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
			
		
		
	
	
			168 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
| <template>
 | |
| 	<view class="uni-section">
 | |
| 		<view class="uni-section-header" @click="onClick">
 | |
| 				<view class="uni-section-header__decoration" v-if="type" :class="type" />
 | |
|         <slot v-else name="decoration"></slot>
 | |
| 
 | |
|         <view class="uni-section-header__content">
 | |
|           <text :style="{'font-size':titleFontSize,'color':titleColor}" class="uni-section__content-title" :class="{'distraction':!subTitle}">{{ title }}</text>
 | |
|           <text v-if="subTitle" :style="{'font-size':subTitleFontSize,'color':subTitleColor}" class="uni-section-header__content-sub">{{ subTitle }}</text>
 | |
|         </view>
 | |
| 
 | |
|         <view class="uni-section-header__slot-right">
 | |
|           <slot name="right"></slot>
 | |
|         </view>
 | |
| 		</view>
 | |
| 
 | |
| 		<view class="uni-section-content" :style="{padding: _padding}">
 | |
| 			<slot />
 | |
| 		</view>
 | |
| 	</view>
 | |
| </template>
 | |
| 
 | |
| <script>
 | |
| 
 | |
| 	/**
 | |
| 	 * Section 标题栏
 | |
| 	 * @description 标题栏
 | |
| 	 * @property {String} type = [line|circle|square] 标题装饰类型
 | |
| 	 * 	@value line 竖线
 | |
| 	 * 	@value circle 圆形
 | |
| 	 * 	@value square 正方形
 | |
| 	 * @property {String} title 主标题
 | |
| 	 * @property {String} titleFontSize 主标题字体大小
 | |
| 	 * @property {String} titleColor 主标题字体颜色
 | |
| 	 * @property {String} subTitle 副标题
 | |
| 	 * @property {String} subTitleFontSize 副标题字体大小
 | |
| 	 * @property {String} subTitleColor 副标题字体颜色
 | |
| 	 * @property {String} padding 默认插槽 padding
 | |
| 	 */
 | |
| 
 | |
| 	export default {
 | |
| 		name: 'UniSection',
 | |
|     emits:['click'],
 | |
| 		props: {
 | |
| 			type: {
 | |
| 				type: String,
 | |
| 				default: ''
 | |
| 			},
 | |
| 			title: {
 | |
| 				type: String,
 | |
| 				required: true,
 | |
| 				default: ''
 | |
| 			},
 | |
|       titleFontSize: {
 | |
|         type: String,
 | |
|         default: '14px'
 | |
|       },
 | |
| 			titleColor:{
 | |
| 				type: String,
 | |
| 				default: '#333'
 | |
| 			},
 | |
| 			subTitle: {
 | |
| 				type: String,
 | |
| 				default: ''
 | |
| 			},
 | |
|       subTitleFontSize: {
 | |
|         type: String,
 | |
|         default: '12px'
 | |
|       },
 | |
|       subTitleColor: {
 | |
|         type: String,
 | |
|         default: '#999'
 | |
|       },
 | |
| 			padding: {
 | |
| 				type: [Boolean, String],
 | |
| 				default: false
 | |
| 			}
 | |
| 		},
 | |
|     computed:{
 | |
|       _padding(){
 | |
|         if(typeof this.padding === 'string'){
 | |
|           return this.padding
 | |
|         }
 | |
| 
 | |
|         return this.padding?'10px':''
 | |
|       }
 | |
|     },
 | |
| 		watch: {
 | |
| 			title(newVal) {
 | |
| 				if (uni.report && newVal !== '') {
 | |
| 					uni.report('title', newVal)
 | |
| 				}
 | |
| 			}
 | |
| 		},
 | |
|     methods: {
 | |
| 			onClick() {
 | |
| 				this.$emit('click')
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| </script>
 | |
| <style lang="scss" >
 | |
| 	$uni-primary: #2979ff !default;
 | |
| 
 | |
| 	.uni-section {
 | |
| 		background-color: #fff;
 | |
|     .uni-section-header {
 | |
|       position: relative;
 | |
|       /* #ifndef APP-NVUE */
 | |
|       display: flex;
 | |
|       /* #endif */
 | |
|       flex-direction: row;
 | |
|       align-items: center;
 | |
|       padding: 12px 10px;
 | |
|       font-weight: normal;
 | |
| 
 | |
|       &__decoration{
 | |
|         margin-right: 6px;
 | |
|         background-color: $uni-primary;
 | |
|         &.line {
 | |
|           width: 4px;
 | |
|           height: 12px;
 | |
|           border-radius: 10px;
 | |
|         }
 | |
| 
 | |
|         &.circle {
 | |
|           width: 8px;
 | |
|           height: 8px;
 | |
|           border-top-right-radius: 50px;
 | |
|           border-top-left-radius: 50px;
 | |
|           border-bottom-left-radius: 50px;
 | |
|           border-bottom-right-radius: 50px;
 | |
|         }
 | |
| 
 | |
|         &.square {
 | |
|           width: 8px;
 | |
|           height: 8px;
 | |
|         }
 | |
|       }
 | |
| 
 | |
|       &__content {
 | |
|         /* #ifndef APP-NVUE */
 | |
|         display: flex;
 | |
|         /* #endif */
 | |
|         flex-direction: column;
 | |
|         flex: 1;
 | |
|         color: #333;
 | |
| 
 | |
|         .distraction {
 | |
|           flex-direction: row;
 | |
|           align-items: center;
 | |
|         }
 | |
|         &-sub {
 | |
|           margin-top: 2px;
 | |
|         }
 | |
|       }
 | |
| 
 | |
|       &__slot-right{
 | |
|         font-size: 14px;
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     .uni-section-content{
 | |
|       font-size: 14px;
 | |
|     }
 | |
| 	}
 | |
| </style>
 | 
