price-display.vue 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. <template>
  2. <view class="price-container">
  3. <text class="price-integer"
  4. :style="{fontSize:integerSize+'rpx',fontWeight:integerFontWeight,color:integerColor}">{{ integerPart }}</text>
  5. <text class="price-decimal"
  6. :style="{fontSize:decimalSize+'rpx',fontWeight:decimalFontWeight,color:decimalColor}">.{{ decimalPart }}</text>
  7. </view>
  8. </template>
  9. <script>
  10. export default {
  11. props: {
  12. value: {
  13. // 接收价格,如 99.00
  14. type: [Number, String],
  15. default: 0
  16. },
  17. // 整数字体大小
  18. integerSize: {
  19. type: Number,
  20. default: 40,
  21. },
  22. // 整数字体粗细
  23. integerFontWeight: {
  24. type: Number,
  25. default: 700,
  26. },
  27. // 整数字体颜色
  28. integerColor: {
  29. type: String,
  30. default: '#333',
  31. },
  32. // 小数字体大小
  33. decimalSize: {
  34. type: Number,
  35. default: 24,
  36. },
  37. // 小数字体大小
  38. decimalFontWeight: {
  39. type: Number,
  40. default: 700,
  41. },
  42. // 小数字体颜色
  43. decimalColor: {
  44. type: String,
  45. default: '#333',
  46. },
  47. },
  48. computed: {
  49. // 拆分整数和小数部分
  50. priceParts() {
  51. const num = Number(this.value)
  52. // 固定保留两位小数,并拆分
  53. const [integer, decimal] = num.toFixed(2).split('.')
  54. return {
  55. integer,
  56. decimal
  57. }
  58. },
  59. integerPart() {
  60. return `${this.priceParts.integer}`
  61. },
  62. decimalPart() {
  63. return this.priceParts.decimal
  64. }
  65. }
  66. }
  67. </script>
  68. <style scoped></style>