| <template> | 
|   <view | 
|     class="tn-list-view-class tn-list-view" | 
|     :class="[ | 
|       backgroundColorClass, | 
|       viewClass | 
|     ]" | 
|     :style="[viewStyle]" | 
|   > | 
|     <view | 
|       v-if="showTitle" | 
|       class="tn-list-view__title" | 
|       :class="[ | 
|         fontColorClass | 
|       ]" | 
|       :style="[titleStyle]" | 
|       @tap="handleClickTitle" | 
|     >{{ title }}</view> | 
|      | 
|     <view | 
|       v-else | 
|       :class="[{'tn-list-view__title--card': card}]" | 
|       @tap="handleClickTitle" | 
|     > | 
|       <slot name="title"></slot> | 
|     </view> | 
|      | 
|     <view | 
|       class="tn-list-view__content tn-border-solid-top tn-border-solid-bottom" | 
|       :class="[contentClass]" | 
|     > | 
|       <slot></slot> | 
|     </view> | 
|   </view> | 
| </template> | 
|   | 
| <script> | 
|   import componentsColorMixin from '../../libs/mixin/components_color.js' | 
|   export default { | 
|     mixins: [ componentsColorMixin ], | 
|     name: 'tn-list-view', | 
|     props: { | 
|       // 标题 | 
|       title: { | 
|         type: String, | 
|         default: '' | 
|       }, | 
|       // 去掉边框 上边框 top, 下边框 bottom, 所有边框 all | 
|       unlined: { | 
|         type: String, | 
|         default: 'all' | 
|       }, | 
|       // 上外边距 | 
|       marginTop: { | 
|         type: String, | 
|         default: '' | 
|       }, | 
|       // 内容是否显示为卡片模式 | 
|       card: { | 
|         type: Boolean, | 
|         default: false | 
|       }, | 
|       // 是否自定义标题 | 
|       customTitle: { | 
|         type: Boolean, | 
|         default: false | 
|       } | 
|     }, | 
|     computed: { | 
|       showTitle() { | 
|         return !this.customTitle && this.title | 
|       }, | 
|       viewClass() { | 
|         let clazz = '' | 
|          | 
|         if (this.card) { | 
|           clazz += ' tn-list-view--card' | 
|         } | 
|          | 
|         return clazz | 
|       }, | 
|       viewStyle() { | 
|         let style = {} | 
|          | 
|         if (this.backgroundColorStyle) { | 
|           style.backgroundColor = this.backgroundColorStyle | 
|         } | 
|          | 
|         if (this.marginTop) { | 
|           style.marginTop = this.marginTop | 
|         } | 
|          | 
|         return style | 
|       }, | 
|       titleStyle() { | 
|         let style = {} | 
|          | 
|         if (this.fontColorStyle) { | 
|           style.color = this.fontColorStyle | 
|         } | 
|         if (this.fontSize) { | 
|           style.fontSize = this.fontSize + this.fontUnit | 
|         } | 
|          | 
|         return style | 
|       }, | 
|       contentClass() { | 
|         let clazz = '' | 
|          | 
|         if (this.card) { | 
|           clazz += ' tn-list-view__content--card' | 
|         } | 
|          | 
|         switch(this.unlined) { | 
|           case 'top': | 
|             clazz += ' tn-none-border-top' | 
|             break | 
|           case 'bottom': | 
|             clazz += ' tn-none-border-bottom' | 
|             break | 
|           case 'all': | 
|             clazz += ' tn-none-border' | 
|             break | 
|         } | 
|          | 
|         return clazz | 
|       } | 
|     }, | 
|     data () { | 
|       return { | 
|         kindShowFlag: this.showKind | 
|       } | 
|     }, | 
|     methods: { | 
|       // 处理标题点击事件 | 
|       handleClickTitle() { | 
|         if (!this.kindList) return | 
|         this.kindShowFlag = !this.kindShowFlag | 
|         this.$emit("clickTitle", {}) | 
|       } | 
|     } | 
|   } | 
| </script> | 
|   | 
| <style lang="scss" scoped> | 
|    | 
|   .tn-list-view { | 
|     background-color: #FFFFFF; | 
|      | 
|     &__title { | 
|       width: 100%; | 
|       padding: 30rpx; | 
|       font-size: 30rpx; | 
|       line-height: 30rpx; | 
|       box-sizing: border-box; | 
|        | 
|       &--card { | 
|         // margin: 0rpx 30rpx; | 
|       } | 
|     } | 
|      | 
|     &__content { | 
|       width: 100%; | 
|       position: relative; | 
|       border-radius: 0; | 
|        | 
|       &--card { | 
|         // width: auto; | 
|         // overflow: hidden; | 
|         // margin-right: 30rpx; | 
|         // margin-left: 30rpx; | 
|         // border-radius: 20rpx | 
|       } | 
|     } | 
|      | 
|     &--card { | 
|       // padding-bottom: 30rpx; | 
|       border-radius: 20rpx; | 
|       overflow: hidden; | 
|     } | 
|      | 
|   } | 
|    | 
| </style> |