224 lines
		
	
	
		
			7.1 KiB
		
	
	
	
		
			Vue
		
	
	
	
		
		
			
		
	
	
			224 lines
		
	
	
		
			7.1 KiB
		
	
	
	
		
			Vue
		
	
	
	
| 
								 | 
							
								<template>
							 | 
						|||
| 
								 | 
							
								    <view
							 | 
						|||
| 
								 | 
							
								        class="u-text"
							 | 
						|||
| 
								 | 
							
								        :class="[]"
							 | 
						|||
| 
								 | 
							
								        v-if="show"
							 | 
						|||
| 
								 | 
							
								        :style="{
							 | 
						|||
| 
								 | 
							
								            margin: margin,
							 | 
						|||
| 
								 | 
							
											justifyContent: align === 'left' ? 'flex-start' : align === 'center' ? 'center' : 'flex-end'
							 | 
						|||
| 
								 | 
							
								        }"
							 | 
						|||
| 
								 | 
							
								        @tap="clickHandler"
							 | 
						|||
| 
								 | 
							
								    >
							 | 
						|||
| 
								 | 
							
								        <text
							 | 
						|||
| 
								 | 
							
								            :class="['u-text__price', type && `u-text__value--${type}`]"
							 | 
						|||
| 
								 | 
							
								            v-if="mode === 'price'"
							 | 
						|||
| 
								 | 
							
								            :style="[valueStyle]"
							 | 
						|||
| 
								 | 
							
								            >¥</text
							 | 
						|||
| 
								 | 
							
								        >
							 | 
						|||
| 
								 | 
							
								        <view class="u-text__prefix-icon" v-if="prefixIcon">
							 | 
						|||
| 
								 | 
							
								            <u-icon
							 | 
						|||
| 
								 | 
							
								                :name="prefixIcon"
							 | 
						|||
| 
								 | 
							
								                :customStyle="$u.addStyle(iconStyle)"
							 | 
						|||
| 
								 | 
							
								            ></u-icon>
							 | 
						|||
| 
								 | 
							
								        </view>
							 | 
						|||
| 
								 | 
							
								        <u-link
							 | 
						|||
| 
								 | 
							
								            v-if="mode === 'link'"
							 | 
						|||
| 
								 | 
							
								            :text="value"
							 | 
						|||
| 
								 | 
							
								            :href="href"
							 | 
						|||
| 
								 | 
							
								            underLine
							 | 
						|||
| 
								 | 
							
								        ></u-link>
							 | 
						|||
| 
								 | 
							
								        <template v-else-if="openType && isMp">
							 | 
						|||
| 
								 | 
							
								            <button
							 | 
						|||
| 
								 | 
							
								                class="u-reset-button u-text__value"
							 | 
						|||
| 
								 | 
							
								                :style="[valueStyle]"
							 | 
						|||
| 
								 | 
							
								                :data-index="index"
							 | 
						|||
| 
								 | 
							
								                :openType="openType"
							 | 
						|||
| 
								 | 
							
								                @getuserinfo="onGetUserInfo"
							 | 
						|||
| 
								 | 
							
								                @contact="onContact"
							 | 
						|||
| 
								 | 
							
								                @getphonenumber="onGetPhoneNumber"
							 | 
						|||
| 
								 | 
							
								                @error="onError"
							 | 
						|||
| 
								 | 
							
								                @launchapp="onLaunchApp"
							 | 
						|||
| 
								 | 
							
								                @opensetting="onOpenSetting"
							 | 
						|||
| 
								 | 
							
								                :lang="lang"
							 | 
						|||
| 
								 | 
							
								                :session-from="sessionFrom"
							 | 
						|||
| 
								 | 
							
								                :send-message-title="sendMessageTitle"
							 | 
						|||
| 
								 | 
							
								                :send-message-path="sendMessagePath"
							 | 
						|||
| 
								 | 
							
								                :send-message-img="sendMessageImg"
							 | 
						|||
| 
								 | 
							
								                :show-message-card="showMessageCard"
							 | 
						|||
| 
								 | 
							
								                :app-parameter="appParameter"
							 | 
						|||
| 
								 | 
							
								            >
							 | 
						|||
| 
								 | 
							
								                {{ value }}
							 | 
						|||
| 
								 | 
							
								            </button>
							 | 
						|||
| 
								 | 
							
								        </template>
							 | 
						|||
| 
								 | 
							
								        <text
							 | 
						|||
| 
								 | 
							
								            v-else
							 | 
						|||
| 
								 | 
							
								            class="u-text__value"
							 | 
						|||
| 
								 | 
							
								            :style="[valueStyle]"
							 | 
						|||
| 
								 | 
							
								            :class="[
							 | 
						|||
| 
								 | 
							
								                type && `u-text__value--${type}`,
							 | 
						|||
| 
								 | 
							
								                lines && `u-line-${lines}`
							 | 
						|||
| 
								 | 
							
								            ]"
							 | 
						|||
| 
								 | 
							
								            >{{ value }}</text
							 | 
						|||
| 
								 | 
							
								        >
							 | 
						|||
| 
								 | 
							
								        <view class="u-text__suffix-icon" v-if="suffixIcon">
							 | 
						|||
| 
								 | 
							
								            <u-icon
							 | 
						|||
| 
								 | 
							
								                :name="suffixIcon"
							 | 
						|||
| 
								 | 
							
								                :customStyle="$u.addStyle(iconStyle)"
							 | 
						|||
| 
								 | 
							
								            ></u-icon>
							 | 
						|||
| 
								 | 
							
								        </view>
							 | 
						|||
| 
								 | 
							
								    </view>
							 | 
						|||
| 
								 | 
							
								</template>
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								<script>
							 | 
						|||
| 
								 | 
							
								import value from './value.js'
							 | 
						|||
| 
								 | 
							
								import button from '../../libs/mixin/button.js'
							 | 
						|||
| 
								 | 
							
								import openType from '../../libs/mixin/openType.js'
							 | 
						|||
| 
								 | 
							
								import props from './props.js'
							 | 
						|||
| 
								 | 
							
								/**
							 | 
						|||
| 
								 | 
							
								 * Text 文本
							 | 
						|||
| 
								 | 
							
								 * @description 此组件集成了文本类在项目中的常用功能,包括状态,拨打电话,格式化日期,*替换,超链接...等功能。 您大可不必在使用特殊文本时自己定义,text组件几乎涵盖您能使用的大部分场景。
							 | 
						|||
| 
								 | 
							
								 * @tutorial https://www.uviewui.com/components/loading.html
							 | 
						|||
| 
								 | 
							
								 * @property {String} 					type		主题颜色
							 | 
						|||
| 
								 | 
							
								 * @property {Boolean} 					show		是否显示(默认 true )
							 | 
						|||
| 
								 | 
							
								 * @property {String | Number}			text		显示的值
							 | 
						|||
| 
								 | 
							
								 * @property {String}					prefixIcon	前置图标
							 | 
						|||
| 
								 | 
							
								 * @property {String} 					suffixIcon	后置图标
							 | 
						|||
| 
								 | 
							
								 * @property {String} 					mode		文本处理的匹配模式 text-普通文本,price-价格,phone-手机号,name-姓名,date-日期,link-超链接
							 | 
						|||
| 
								 | 
							
								 * @property {String} 					href		mode=link下,配置的链接
							 | 
						|||
| 
								 | 
							
								 * @property {String | Function} 		format		格式化规则
							 | 
						|||
| 
								 | 
							
								 * @property {Boolean} 					call		mode=phone时,点击文本是否拨打电话(默认 false )
							 | 
						|||
| 
								 | 
							
								 * @property {String} 					openType	小程序的打开方式
							 | 
						|||
| 
								 | 
							
								 * @property {Boolean} 					bold		是否粗体,默认normal(默认 false )
							 | 
						|||
| 
								 | 
							
								 * @property {Boolean} 					block		是否块状(默认 false )
							 | 
						|||
| 
								 | 
							
								 * @property {String | Number} 			lines		文本显示的行数,如果设置,超出此行数,将会显示省略号
							 | 
						|||
| 
								 | 
							
								 * @property {String} 					color		文本颜色(默认 '#303133' )
							 | 
						|||
| 
								 | 
							
								 * @property {String | Number} 			size		字体大小(默认 15 )
							 | 
						|||
| 
								 | 
							
								 * @property {Object | String} 			iconStyle	图标的样式 (默认 {fontSize: '15px'} )
							 | 
						|||
| 
								 | 
							
								 * @property {String} 					decoration	文字装饰,下划线,中划线等,可选值 none|underline|line-through(默认 'none' )
							 | 
						|||
| 
								 | 
							
								 * @property {Object | String | Number}	margin		外边距,对象、字符串,数值形式均可(默认 0 )
							 | 
						|||
| 
								 | 
							
								 * @property {String | Number} 			lineHeight	文本行高
							 | 
						|||
| 
								 | 
							
								 * @property {String} 					align		文本对齐方式,可选值left|center|right(默认 'left' )
							 | 
						|||
| 
								 | 
							
								 * @property {String} 					wordWrap	文字换行,可选值break-word|normal|anywhere(默认 'normal' )
							 | 
						|||
| 
								 | 
							
								 * @event {Function} click  点击触发事件
							 | 
						|||
| 
								 | 
							
								 * @example <u--text text="我用十年青春,赴你最后之约"></u--text>
							 | 
						|||
| 
								 | 
							
								 */
							 | 
						|||
| 
								 | 
							
								export default {
							 | 
						|||
| 
								 | 
							
								    name: 'u--text',
							 | 
						|||
| 
								 | 
							
								    // #ifdef MP
							 | 
						|||
| 
								 | 
							
								    mixins: [uni.$u.mpMixin, uni.$u.mixin, value, button, openType, props],
							 | 
						|||
| 
								 | 
							
								    // #endif
							 | 
						|||
| 
								 | 
							
								    // #ifndef MP
							 | 
						|||
| 
								 | 
							
								    mixins: [uni.$u.mpMixin, uni.$u.mixin, value, props],
							 | 
						|||
| 
								 | 
							
								    // #endif
							 | 
						|||
| 
								 | 
							
								    computed: {
							 | 
						|||
| 
								 | 
							
								        valueStyle() {
							 | 
						|||
| 
								 | 
							
								            const style = {
							 | 
						|||
| 
								 | 
							
								                textDecoration: this.decoration,
							 | 
						|||
| 
								 | 
							
								                fontWeight: this.bold ? 'bold' : 'normal',
							 | 
						|||
| 
								 | 
							
								                wordWrap: this.wordWrap,
							 | 
						|||
| 
								 | 
							
								                fontSize: uni.$u.addUnit(this.size)
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								            !this.type && (style.color = this.color)
							 | 
						|||
| 
								 | 
							
								            this.isNvue && this.lines && (style.lines = this.lines)
							 | 
						|||
| 
								 | 
							
								            this.lineHeight &&
							 | 
						|||
| 
								 | 
							
								                (style.lineHeight = uni.$u.addUnit(this.lineHeight))
							 | 
						|||
| 
								 | 
							
								            !this.isNvue && this.block && (style.display = 'block')
							 | 
						|||
| 
								 | 
							
								            return uni.$u.deepMerge(style, uni.$u.addStyle(this.customStyle))
							 | 
						|||
| 
								 | 
							
								        },
							 | 
						|||
| 
								 | 
							
								        isNvue() {
							 | 
						|||
| 
								 | 
							
								            let nvue = false
							 | 
						|||
| 
								 | 
							
								            // #ifdef APP-NVUE
							 | 
						|||
| 
								 | 
							
								            nvue = true
							 | 
						|||
| 
								 | 
							
								            // #endif
							 | 
						|||
| 
								 | 
							
								            return nvue
							 | 
						|||
| 
								 | 
							
								        },
							 | 
						|||
| 
								 | 
							
								        isMp() {
							 | 
						|||
| 
								 | 
							
								            let mp = false
							 | 
						|||
| 
								 | 
							
								            // #ifdef MP
							 | 
						|||
| 
								 | 
							
								            mp = true
							 | 
						|||
| 
								 | 
							
								            // #endif
							 | 
						|||
| 
								 | 
							
								            return mp
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								    },
							 | 
						|||
| 
								 | 
							
								    data() {
							 | 
						|||
| 
								 | 
							
								        return {}
							 | 
						|||
| 
								 | 
							
								    },
							 | 
						|||
| 
								 | 
							
								    methods: {
							 | 
						|||
| 
								 | 
							
								        clickHandler() {
							 | 
						|||
| 
								 | 
							
								            // 如果为手机号模式,拨打电话
							 | 
						|||
| 
								 | 
							
								            if (this.call && this.mode === 'phone') {
							 | 
						|||
| 
								 | 
							
								                uni.makePhoneCall({
							 | 
						|||
| 
								 | 
							
								                    phoneNumber: this.text
							 | 
						|||
| 
								 | 
							
								                })
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								            this.$emit('click')
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								</script>
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								<style lang="scss" scoped>
							 | 
						|||
| 
								 | 
							
								@import '../../libs/css/components.scss';
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								.u-text {
							 | 
						|||
| 
								 | 
							
								    @include flex(row);
							 | 
						|||
| 
								 | 
							
								    align-items: center;
							 | 
						|||
| 
								 | 
							
								    flex-wrap: nowrap;
							 | 
						|||
| 
								 | 
							
								    flex: 1;
							 | 
						|||
| 
								 | 
							
									/* #ifndef APP-NVUE */
							 | 
						|||
| 
								 | 
							
									width: 100%;
							 | 
						|||
| 
								 | 
							
									/* #endif */
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    &__price {
							 | 
						|||
| 
								 | 
							
								        font-size: 14px;
							 | 
						|||
| 
								 | 
							
								        color: $u-content-color;
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    &__value {
							 | 
						|||
| 
								 | 
							
								        font-size: 14px;
							 | 
						|||
| 
								 | 
							
								        @include flex;
							 | 
						|||
| 
								 | 
							
								        color: $u-content-color;
							 | 
						|||
| 
								 | 
							
								        flex-wrap: wrap;
							 | 
						|||
| 
								 | 
							
								        // flex: 1;
							 | 
						|||
| 
								 | 
							
								        text-overflow: ellipsis;
							 | 
						|||
| 
								 | 
							
								        align-items: center;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        &--primary {
							 | 
						|||
| 
								 | 
							
								            color: $u-primary;
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        &--warning {
							 | 
						|||
| 
								 | 
							
								            color: $u-warning;
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        &--success {
							 | 
						|||
| 
								 | 
							
								            color: $u-success;
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        &--info {
							 | 
						|||
| 
								 | 
							
								            color: $u-info;
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        &--error {
							 | 
						|||
| 
								 | 
							
								            color: $u-error;
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        &--main {
							 | 
						|||
| 
								 | 
							
								            color: $u-main-color;
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        &--content {
							 | 
						|||
| 
								 | 
							
								            color: $u-content-color;
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        &--tips {
							 | 
						|||
| 
								 | 
							
								            color: $u-tips-color;
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        &--light {
							 | 
						|||
| 
								 | 
							
								            color: $u-light-color;
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								</style>
							 |