tm-sheet.vue 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. <template>
  2. <!-- 基础容器 -->
  3. <view
  4. @click="$emit('click', $event)"
  5. class="sheet fulled"
  6. :style="[
  7. bgColor?{backgroundColor: bgColor }:'',
  8. widths?{width:widths}:'',
  9. heights?{height:heights}:'',
  10. ]"
  11. :class="[
  12. text ? 'text' : '',
  13. flat ? 'flat' : '',
  14. 'shadow-' + shadowthemeName + '-' + shadow,
  15. 'round-' + round,
  16. black_tmeme ? 'bk' : '',
  17. black_tmeme == 'true' || black_tmeme === true ? 'grey-darken-5' : (bgColor?'':color),
  18. dense === true || dense == 'true' ? 'nom' : '',
  19. 'mx-'+margin[0],'my-'+margin[1],
  20. 'px-'+padding[0],'py-'+padding[1],
  21. classs,
  22. border ? 'border-a-1' : '',
  23. outlined ? 'outlined' : ''
  24. ]"
  25. >
  26. <view class="fulled" v-if="showSheet">
  27. <slot name="default"></slot>
  28. </view>
  29. </view>
  30. </template>
  31. <script>
  32. /**
  33. * 基础容器
  34. * @description 基本是大部分组件的基础组件。
  35. * @property {String | Boolean} black = [true|false] 暗黑模式。
  36. * @property {String} classname = [] 自定认容器类
  37. * @property {String|Number} round = [] 圆角
  38. * @property {Array} margin = [] 外间距默认[32,32]
  39. * @property {Array} padding = [] 内间距默认[32,32]
  40. * @property {Boolean|String} dense = [] 默认false,去除内部和外部间距。
  41. * @property {String|Number} width = [100%|auto] 宽度数字时单位为upx.可以是百分比
  42. * @property {String|Number} height = [100%|auto] 宽度数字时单位为upx.可以是百分比
  43. * @property {String} color = [white|blue|primary] 主题颜色名称。默认:white
  44. * @property {String} bgColor = [] 自定义背景颜色rgb,rgba,#0000等格式。
  45. * @property {String|Number} shadow = [5|10] 投影大小
  46. * @property {Boolean|String} border = [true|false] 是否开启边线
  47. * @property {Boolean|String} flat = [true|false] 是否开启扁平模式。
  48. * @property {Boolean|String} text = [true|false] 是否开启文本模式
  49. * @example <tm-sheet :margin="[32,32]" >9</tm-sheet>
  50. */
  51. export default {
  52. props: {
  53. black: {
  54. type: String | Boolean,
  55. default: null
  56. },
  57. classname: {
  58. type: String,
  59. default: ''
  60. },
  61. round: {
  62. type: String | Number,
  63. default: '4'
  64. },
  65. margin:{
  66. type:Array,
  67. default:()=>{return [32,32]; }
  68. },
  69. padding:{
  70. type:Array,
  71. default:()=>{return [32,32]; }
  72. },
  73. dense: {
  74. type: Boolean|String,
  75. default: false
  76. },
  77. width: {
  78. type: String | Number,
  79. default: 'auto'
  80. },
  81. height: {
  82. type: String | Number,
  83. default: 'auto'
  84. },
  85. // 主题颜色名称。
  86. color: {
  87. type: String,
  88. default: 'white'
  89. },
  90. // 自定义背景色。
  91. bgColor: {
  92. type: String,
  93. default: ''
  94. },
  95. shadow: {
  96. type: String | Number,
  97. default: 5
  98. },
  99. border: {
  100. type: Boolean|String,
  101. default: false
  102. },
  103. outlined: {
  104. type: Boolean|String,
  105. default: false
  106. },
  107. flat: {
  108. type: Boolean,
  109. default: false
  110. },
  111. // 是否为文本模式,即减淡背景颜色。
  112. text: {
  113. type: String | Boolean,
  114. default: false
  115. }
  116. },
  117. computed: {
  118. // 投影的颜色名字。
  119. shadowthemeName: function() {
  120. if (!this.color) return 'none';
  121. return this.color.split('-')[0];
  122. },
  123. classs: function() {
  124. return ' ' + this.classname + ' ';
  125. },
  126. widths: function() {
  127. if (typeof this.width === 'string') {
  128. if (/([rpx|upx|rem|em|vx|vh|px|%]|auto)$/.test(this.width)) {
  129. return this.width;
  130. }
  131. return uni.upx2px(parseInt(this.width)) + 'px';
  132. }
  133. if (typeof this.width == 'number') return uni.upx2px(this.width) + 'px';
  134. },
  135. heights: function() {
  136. if (typeof this.height === 'string') {
  137. if (/([rpx|upx|rem|em|vx|vh|px|%]|auto)$/.test(this.height)) {
  138. return this.height;
  139. }
  140. return uni.upx2px(parseInt(this.height)) + 'px';
  141. }
  142. if (typeof this.height == 'number') return uni.upx2px(this.height) + 'px';
  143. },
  144. black_tmeme:function(){
  145. if(this.black!==null) return this.black;
  146. return this.$tm.vx.state().tmVuetify.black;
  147. }
  148. },
  149. data() {
  150. return {
  151. showSheet:true,
  152. };
  153. },
  154. created() {
  155. // #ifdef APP-VUE || APP-PLUS || MP
  156. this.showSheet = false;
  157. // #endif
  158. },
  159. mounted() {
  160. let t= this;
  161. // #ifdef APP-VUE || APP-PLUS || MP
  162. setTimeout(function() {
  163. t.showSheet = true;
  164. }, 30);
  165. // #endif
  166. }
  167. };
  168. </script>
  169. <style lang="scss" scoped>
  170. .nom{
  171. margin: 0 !important;
  172. padding: 0 !important;
  173. }
  174. </style>