You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

163 lines
3.9 KiB
Vue

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<template>
<!-- 基础容器 -->
<view
@click="$emit('click', $event)"
class="sheet fulled"
:style="[
bgColor?{backgroundColor: bgColor }:'',
widths?{width:widths}:'',
heights?{height:heights}:'',
]"
:class="[
text ? 'text' : '',
flat ? 'flat' : '',
'shadow-' + shadowthemeName + '-' + shadow,
'round-' + round,
black_tmeme ? 'bk' : '',
black_tmeme == 'true' || black_tmeme === true ? 'grey-darken-5' : (bgColor?'':color),
dense === true || dense == 'true' ? 'nom' : '',
'mx-'+margin[0],'my-'+margin[1],
'px-'+padding[0],'py-'+padding[1],
classs,
border ? 'border-a-1' : '',
outlined ? 'outlined' : ''
]"
>
<view class="fulled" >
<slot name="default"></slot>
</view>
</view>
</template>
<script>
/**
* 基础容器
* @description 基本是大部分组件的基础组件。
* @property {String | Boolean} black = [true|false] 暗黑模式。
* @property {String} classname = [] 自定认容器类
* @property {String|Number} round = [] 圆角
* @property {Array} margin = [] 外间距默认[32,32]
* @property {Array} padding = [] 内间距默认[32,32]
* @property {Boolean|String} dense = [] 默认false,去除内部和外部间距。
* @property {String|Number} width = [100%|auto] 宽度数字时单位为upx.可以是百分比
* @property {String|Number} height = [100%|auto] 宽度数字时单位为upx.可以是百分比
* @property {String} color = [white|blue|primary] 主题颜色名称。默认white
* @property {String} bgColor = [] 自定义背景颜色rgb,rgba,#0000等格式。
* @property {String|Number} shadow = [5|10] 投影大小
* @property {Boolean|String} border = [true|false] 是否开启边线
* @property {Boolean|String} flat = [true|false] 是否开启扁平模式。
* @property {Boolean|String} text = [true|false] 是否开启文本模式
* @example <tm-sheet :margin="[32,32]" >9</tm-sheet>
*/
export default {
props: {
black: {
type: String | Boolean,
default: null
},
classname: {
type: String,
default: ''
},
round: {
type: String | Number,
default: '4'
},
margin:{
type:Array,
default:()=>{return [32,32]; }
},
padding:{
type:Array,
default:()=>{return [32,32]; }
},
dense: {
type: Boolean|String,
default: false
},
width: {
type: String | Number,
default: 'auto'
},
height: {
type: String | Number,
default: 'auto'
},
// 主题颜色名称。
color: {
type: String,
default: 'white'
},
// 自定义背景色。
bgColor: {
type: String,
default: ''
},
shadow: {
type: String | Number,
default: 5
},
border: {
type: Boolean|String,
default: false
},
outlined: {
type: Boolean|String,
default: false
},
flat: {
type: Boolean,
default: false
},
// 是否为文本模式,即减淡背景颜色。
text: {
type: String | Boolean,
default: false
}
},
computed: {
// 投影的颜色名字。
shadowthemeName: function() {
if (!this.color) return 'none';
return this.color.split('-')[0];
},
classs: function() {
return ' ' + this.classname + ' ';
},
widths: function() {
if (typeof this.width === 'string') {
if (/([rpx|upx|rem|em|vx|vh|px|%]|auto)$/.test(this.width)) {
return this.width;
}
return uni.upx2px(parseInt(this.width)) + 'px';
}
if (typeof this.width == 'number') return uni.upx2px(this.width) + 'px';
},
heights: function() {
if (typeof this.height === 'string') {
if (/([rpx|upx|rem|em|vx|vh|px|%]|auto)$/.test(this.height)) {
return this.height;
}
return uni.upx2px(parseInt(this.height)) + 'px';
}
if (typeof this.height == 'number') return uni.upx2px(this.height) + 'px';
},
black_tmeme:function(){
if(this.black!==null) return this.black;
return this.$tm.vx.state().tmVuetify.black;
}
},
};
</script>
<style lang="scss" scoped>
.nom{
margin: 0 !important;
padding: 0 !important;
}
</style>