zhangmeng
2024-04-19 e3ba120cb766a17e098e58d11c39ffc600a3070c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
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>