quanyawei
2023-11-30 f4991944d13b94355fb8aaf03dad7d60ca530ee9
uni_modules/uview-ui/components/u-divider/u-divider.vue
New file
@@ -0,0 +1,116 @@
<template>
   <view
       class="u-divider"
       :style="[$u.addStyle(customStyle)]"
      @tap="click"
   >
      <u-line
          :color="lineColor"
          :customStyle="leftLineStyle"
          :hairline="hairline"
         :dashed="dashed"
      ></u-line>
      <text
          v-if="dot"
          class="u-divider__dot"
      >●</text>
      <text
          v-else-if="text"
          class="u-divider__text"
          :style="[textStyle]"
      >{{text}}</text>
      <u-line
          :color="lineColor"
          :customStyle="rightLineStyle"
          :hairline="hairline"
         :dashed="dashed"
      ></u-line>
   </view>
</template>
<script>
   import props from './props.js';
   /**
    * divider 分割线
    * @description 区隔内容的分割线,一般用于页面底部"没有更多"的提示。
    * @tutorial https://www.uviewui.com/components/divider.html
    * @property {Boolean}         dashed         是否虚线 (默认 false )
    * @property {Boolean}         hairline      是否细线 (默认  true )
    * @property {Boolean}         dot            是否以点替代文字,优先于text字段起作用 (默认 false )
    * @property {String}         textPosition   内容文本的位置,left-左边,center-中间,right-右边 (默认 'center' )
    * @property {String | Number}   text         文本内容
    * @property {String | Number}   textSize      文本大小 (默认 14)
    * @property {String}         textColor      文本颜色 (默认 '#909399' )
    * @property {String}         lineColor      线条颜色 (默认 '#dcdfe6' )
    * @property {Object}         customStyle      定义需要用到的外部样式
    *
    * @event {Function}   click   divider组件被点击时触发
    * @example <u-divider :color="color">锦瑟无端五十弦</u-divider>
    */
   export default {
      name:'u-divider',
      mixins: [uni.$u.mpMixin, uni.$u.mixin,props],
      computed: {
         textStyle() {
            const style = {}
            style.fontSize = uni.$u.addUnit(this.textSize)
            style.color = this.textColor
            return style
         },
         // 左边线条的的样式
         leftLineStyle() {
            const style = {}
            // 如果是在左边,设置左边的宽度为固定值
            if (this.textPosition === 'left') {
               style.width = '80rpx'
            } else {
               style.flex = 1
            }
            return style
         },
         // 右边线条的的样式
         rightLineStyle() {
            const style = {}
            // 如果是在右边,设置右边的宽度为固定值
            if (this.textPosition === 'right') {
               style.width = '80rpx'
            } else {
               style.flex = 1
            }
            return style
         }
      },
      methods: {
         // divider组件被点击时触发
         click() {
            this.$emit('click');
         }
      }
   }
</script>
<style lang="scss" scoped>
   @import '../../libs/css/components.scss';
   $u-divider-margin:15px 0 !default;
   $u-divider-text-margin:0 15px !default;
   $u-divider-dot-font-size:12px !default;
   $u-divider-dot-margin:0 12px !default;
   $u-divider-dot-color: #c0c4cc !default;
   .u-divider {
      @include flex;
      flex-direction: row;
      align-items: center;
      margin: $u-divider-margin;
      &__text {
         margin: $u-divider-text-margin;
      }
      &__dot {
         font-size: $u-divider-dot-font-size;
         margin: $u-divider-dot-margin;
         color: $u-divider-dot-color;
      }
   }
</style>