index.vue 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. <!--
  2. * @Author: liuzhenlin 461480418@qq.ocm
  3. * @Date: 2023-01-10 16:18:28
  4. * @LastEditors: liuzhenlin
  5. * @LastEditTime: 2023-01-17 17:44:24
  6. * @Description: file content
  7. * @FilePath: \订单全流程管理系统\src\components\currency\index.vue
  8. -->
  9. <template>
  10. <view>
  11. <u-input
  12. v-model="num"
  13. @blur="inputMoney($event)"
  14. @change="handleChange"
  15. @focus="uninputMoney($event)"
  16. @input="returnNum" />
  17. </view>
  18. </template>
  19. <script>
  20. export default {
  21. name: 'AmountInput',
  22. props: {
  23. value: {
  24. type: [String, Number],
  25. default: '0',
  26. },
  27. },
  28. data() {
  29. return {
  30. num: '',
  31. }
  32. },
  33. watch: {
  34. value() {
  35. this.num = this.formatPrice(this.value)
  36. },
  37. },
  38. mounted() {
  39. this.num = this.formatPrice(this.value)
  40. },
  41. methods: {
  42. returnNum() {
  43. if (this.num) {
  44. this.$emit('input', this.CurrencyFomatNumber(this.num))
  45. }
  46. },
  47. handleChange(value) {
  48. this.$nextTick(() => {
  49. this.$emit('change', this.CurrencyFomatNumber(value))
  50. })
  51. },
  52. // 失焦显示数字类型
  53. inputMoney(value) {
  54. let temp = Number(value) || null
  55. this.num = this.formatPrice(temp)
  56. },
  57. // 获得焦点金额去掉格式
  58. uninputMoney() {
  59. this.num = this.CurrencyFomatNumber(this.num)
  60. },
  61. //去除千分位中的‘,’
  62. CurrencyFomatNumber(num, n = 2) {
  63. let number = num.replace('¥', '')
  64. if (number != null && number != '' && number != undefined) {
  65. number = number.replace(/,/g, '') //去除千分位的','
  66. if (isNaN(number)) {
  67. //判断是否是数字
  68. number = '0'
  69. } else {
  70. number = Math.round(number * Math.pow(10, n)) / Math.pow(10, n) //n幂
  71. number = number.toString()
  72. }
  73. } else {
  74. number = '0'
  75. }
  76. //a.indexOf(x,y);返回x值在a字符串值中从y位置开始检索首次出现的位置
  77. var numLength = number.indexOf('.')
  78. //判断传递的值是整数增加小数点再补"0"
  79. if (numLength < 0) {
  80. numLength = number.length
  81. number += '.'
  82. }
  83. //不足n位小数的,循环补"0"
  84. while (number.length <= numLength + n) {
  85. number += '0'
  86. }
  87. return parseFloat(number)
  88. },
  89. },
  90. }
  91. </script>
  92. <style lang="scss" scoped></style>