index.vue 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. <template>
  2. <block v-if="stack && stop">
  3. <view class="fa-stack" :style="{ fontSize: `${ size }rpx` }" @click.stop="onClick">
  4. <block v-for="(iconItem, iconIndex) in stack" :key="iconIndex">
  5. <FontAwesome
  6. :stackIndex="iconItem.stackIndex"
  7. :type="iconItem.type"
  8. :color="iconItem.color || false"
  9. :fw="iconItem.fw || false"
  10. :rotate="iconItem.rotate || false"
  11. :flip="iconItem.flip || false"
  12. :spin="iconItem.spin || false"
  13. :pulse="iconItem.pulse || false"
  14. :border="iconItem.border || false"
  15. :pullLeft="iconItem.pullLeft || false"
  16. :pullRight="iconItem.pullRight || false"
  17. :inverse="iconItem.inverse || false"
  18. ></FontAwesome>
  19. </block>
  20. </view>
  21. </block>
  22. <block v-else-if="stack">
  23. <view class="fa-stack" :style="{ fontSize: `${ size }rpx` }" @click="onClick">
  24. <block v-for="(iconItem, iconIndex) in stack" :key="iconIndex">
  25. <FontAwesome
  26. :stackIndex="iconItem.stackIndex"
  27. :type="iconItem.type"
  28. :color="iconItem.color || false"
  29. :fw="iconItem.fw || false"
  30. :rotate="iconItem.rotate || false"
  31. :flip="iconItem.flip || false"
  32. :spin="iconItem.spin || false"
  33. :pulse="iconItem.pulse || false"
  34. :border="iconItem.border || false"
  35. :pullLeft="iconItem.pullLeft || false"
  36. :pullRight="iconItem.pullRight || false"
  37. :inverse="iconItem.inverse || false"
  38. ></FontAwesome>
  39. </block>
  40. </view>
  41. </block>
  42. <block v-else-if="stop">
  43. <view
  44. @click.stop="onClick"
  45. :class="[
  46. type,
  47. { 'fa-fw' : fw },
  48. rotate ? `fa-rotate-${ rotate }` : '',
  49. flip ? `fa-flip-${ flip }` : '',
  50. { 'fa-spin' : spin },
  51. { 'fa-pulse' : pulse },
  52. { 'fa-border' : border },
  53. { 'fa-pull-left' : pullLeft },
  54. { 'fa-pull-right' : pullRight },
  55. stackIndex ? `fa-stack-${ stackIndex }x` : '',
  56. { 'fa-inverse' : inverse }
  57. ]"
  58. :style="[
  59. size ? { fontSize: `${ size }rpx` } : {},
  60. color ? { color } : {}
  61. ]"
  62. ></view>
  63. </block>
  64. <block v-else>
  65. <view
  66. @click="onClick"
  67. :class="[
  68. type,
  69. { 'fa-fw' : fw },
  70. rotate ? `fa-rotate-${ rotate }` : '',
  71. flip ? `fa-flip-${ flip }` : '',
  72. { 'fa-spin' : spin },
  73. { 'fa-pulse' : pulse },
  74. { 'fa-border' : border },
  75. { 'fa-pull-left' : pullLeft },
  76. { 'fa-pull-right' : pullRight },
  77. stackIndex ? `fa-stack-${ stackIndex }x` : '',
  78. { 'fa-inverse' : inverse }
  79. ]"
  80. :style="[
  81. size ? { fontSize: `${ size }rpx` } : {},
  82. color ? { color } : {}
  83. ]"
  84. ></view>
  85. </block>
  86. <!-- app端可简写一些class属性 -->
  87. <!-- <view
  88. @click.stop="onClick"
  89. :class="[
  90. type,
  91. { 'fa-fw' : fw },
  92. { [`fa-rotate-${ rotate }`] : rotate },
  93. { [`fa-flip-${ flip }`] : flip },
  94. { ' fa-spin' : spin },
  95. { 'fa-pulse' : pulse },
  96. { 'fa-border' : border },
  97. { 'fa-pull-left' : pullLeft },
  98. { 'fa-pull-right' : pullRight },
  99. { [`fa-stack-${ stackIndex }x`] : stackIndex },
  100. { 'fa-inverse' : inverse }
  101. ]"
  102. :style="[
  103. { fontSize: `${ size }rpx` },
  104. color ? { color } : {}
  105. ]">
  106. </view>-->
  107. </template>
  108. <script>
  109. import FontAwesome from "@/components/Am-FontAwesome/index.vue";
  110. export default {
  111. name: "FontAwesome",
  112. components: {
  113. FontAwesome,
  114. },
  115. props: {
  116. type: {
  117. type: String,
  118. },
  119. size: {
  120. type: [String, Number, Boolean],
  121. default: false,
  122. },
  123. color: {
  124. type: [String, Boolean],
  125. default: false,
  126. },
  127. fw: {
  128. type: Boolean,
  129. default: false,
  130. },
  131. rotate: {
  132. type: [String, Boolean, Number],
  133. default: false,
  134. },
  135. flip: {
  136. type: [String, Boolean],
  137. default: false,
  138. },
  139. spin: {
  140. type: Boolean,
  141. default: false,
  142. },
  143. pulse: {
  144. type: Boolean,
  145. default: false,
  146. },
  147. border: {
  148. type: Boolean,
  149. default: false,
  150. },
  151. pullLeft: {
  152. type: Boolean,
  153. default: false,
  154. },
  155. pullRight: {
  156. type: Boolean,
  157. default: false,
  158. },
  159. stack: {
  160. type: [Array, Boolean],
  161. default: false,
  162. },
  163. stackIndex: {
  164. type: [String, Boolean, Number],
  165. default: false,
  166. },
  167. inverse: {
  168. type: Boolean,
  169. default: false,
  170. },
  171. opacity: {
  172. type: Boolean,
  173. default: false,
  174. },
  175. stop: {
  176. type: Boolean,
  177. default: false,
  178. },
  179. },
  180. methods: {
  181. onClick() {
  182. this.$emit("click");
  183. },
  184. },
  185. };
  186. </script>
  187. <style lang="scss" scoped>
  188. @import "css/fontawesome.scss";
  189. @import "css/solid.scss";
  190. @import "css/brands.scss";
  191. @import "css/regular.scss";
  192. </style>