style-button.vue 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. <template>
  2. <button
  3. class="button ext-class"
  4. hover-class="none"
  5. :openType="openType"
  6. :style="{
  7. display: `var(--display-${size})`,
  8. width: `var(--width-${size})`,
  9. height: `${height ? height + 'rpx' : 'var(--height-' + size + ')'}`,
  10. 'background-color': `var(--bg-${type}${border ? '-border' : ''})`,
  11. color: `var(--color-${type}${border ? '-border' : ''})`,
  12. 'border-color': `var(--border-${type}${border ? '-border' : ''})`,
  13. 'font-size': `var(--fs-${size})`,
  14. 'border-radius': `var(--height-${size})`,
  15. 'font-weight': 500,
  16. }"
  17. @click.stop="$emit('click')"
  18. >
  19. <slot></slot>
  20. </button>
  21. </template>
  22. <script lang="ts">
  23. export default {
  24. emits: ["click"],
  25. options: {
  26. virtualHost: true,
  27. },
  28. externalClasses: ["ext-class"],
  29. props: {
  30. type: {
  31. type: String,
  32. default: "default",
  33. },
  34. size: {
  35. type: String,
  36. default: "medium", // 'medium' 'small'
  37. },
  38. border: Boolean,
  39. openType: String,
  40. height: String,
  41. },
  42. };
  43. </script>
  44. <style lang="scss">
  45. button::after {
  46. content: "";
  47. border: none;
  48. }
  49. .button {
  50. --bg-default: #ffffff;
  51. --bg-primary: #2d9e95;
  52. --bg-warning: #ff9900;
  53. --bg-error: red;
  54. --color-default: #666666;
  55. --color-primary: #ffffff;
  56. --color-warning: #ffffff;
  57. --color-error: #ffffff;
  58. --border-default: #999999;
  59. --border-primary: #2d9e95;
  60. --border-warning: #ff9900;
  61. --border-error: red;
  62. --bg-default-border: #ffffff;
  63. --bg-primary-border: #ffffff;
  64. --bg-warning-border: #ffffff;
  65. --bg-error-border: #ffffff;
  66. --color-default-border: #666666;
  67. --color-primary-border: #2d9e95;
  68. --color-warning-border: #ff9900;
  69. --color-error-border: red;
  70. --border-default-border: #666666;
  71. --border-primary-border: #2d9e95;
  72. --border-warning-border: #ff9900;
  73. --border-error-border: red;
  74. --display-medium: flex;
  75. --display-small: inline-flex;
  76. --height-medium: 96rpx;
  77. --height-small: 82rpx;
  78. --width-medium: 100%;
  79. --width-small: 100%;
  80. --fs-medium: 32rpx;
  81. --fs-small: 30rpx;
  82. position: relative;
  83. justify-content: center;
  84. align-items: center;
  85. line-height: normal;
  86. padding: 0;
  87. margin: 0;
  88. margin-right: 0;
  89. margin-left: 0;
  90. box-sizing: border-box;
  91. border-width: 1px;
  92. border-style: solid;
  93. }
  94. </style>