vue中el-input金额千分符自动转换的实现示例

 更新时间:2025年06月09日 08:28:57   作者:涛哥码咖  
本文主要介绍了vue中el-input金额千分符自动转换,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

1. 说明

在平时项目中,对于金额处理显示一般需要按千分符显示,通常实现会申明一个formater函数来进行转换,但是涉及的地方比较多试,使用起来比较繁琐,封装一个单独的组件比较合理

2. 实现组件代码

  • ElMoneyInput.vue
<template>
  <div :style="{'background-color': disabled ? 'transparent' : '#fff'}">
    <span class="money-input" v-if="!isInput" @click="focusHanle" :disabled="disabled" :value="viewValue">{{ viewValue }}</span>
    <el-input ref="moneyInput" v-else v-bind="$attrs" :value="value" @input="handlerChange" @blur="handlerBlur" autofocus onkeypress="if(event.keyCode == 13) return false;"/>
  </div>
</template>
<script>
export default {
  name: 'ElMoneyInput',
  inheritAttrs: false,
  model: {
    prop: "value",
    event: "input"
  },
  props: {
    value: {
      type: String,
      default: ""
    },
    disabled:{
      type:Boolean,
      default:false
    },
    rules: {
      type: Object,
      default: () => {}
    }
  },
  watch: {
    value(val, old) {
      if (val !== old) {
        this.init()
      }
    }
  },
  mounted() {
    this.init()
  },
  data() {
    return {
      isEdit: true,
      isInput: false,
      viewValue: ''
    };
  },
  methods: {
    init() {
      if (!this.isInput) {
        this.viewValue = this.formatMoney(this.value || 0)
        this.$emit('input', this.blurformat(this.value || 0))
      }
    },
    focusHanle() {
      if (this.disabled) return
      this.isInput = !this.isInput
      this.$emit('input', this.blurformat(this.value || 0))
      this.$nextTick(() => {
        this.$refs.moneyInput.focus()
      })
    },
    formatMoney(cellValue, num = 2) {
      if (isNaN(cellValue)) {
        return ""
      }
      if (cellValue === 0) {
        return '0.00';
      }
      return this.$Utils.formatMoney(cellValue, num);
    },
    format(v) {
      return (`${v}`.match(/([\d\.]+)/) || "")[0];
    },
    blurformat(v) {
      return v ? Number.parseFloat(v).toFixed(2) : "";
    },
    handlerChange(v) {
      this.$emit('input', v)
    },
    handlerBlur() {
      this.isInput = false;
      this.$emit('input', this.blurformat(this.value))
      this.viewValue = this.formatMoney(this.value)
    },
    // handleFocus() {
    //   this.isInput = true;
    //   this.$emit('input', this.blurformat(this.value))
    // }
  }
};
</script>
<style lang="less">
.span-input{
  display: inline-block;
  width: 100%;
  height:28px;
}
.money-input {
  position: relative;
  font-size: 14px;
  display: inline-block;
  height: 32px;
  line-height: 32px;
  background: transparent !important;
    cursor: text !important;
    background-color: #FFF;
    background-image: none;
    border-radius: 4px;
    border: 1px solid #DCDFE6;
    -webkit-box-sizing: border-box;
    box-sizing: border-box;
    color: #606266;
    display: inline-block;
    font-size: inherit;
    outline: 0;
    padding: 0 15px;
    -webkit-transition: border-color .2s cubic-bezier(.645,.045,.355,1);
    transition: border-color .2s cubic-bezier(.645,.045,.355,1);
    width: 100%;
  .el-input__inner {
    background: transparent !important;
    cursor: text !important;
    background-color: #FFF;
    background-image: none;
    border-radius: 4px;
    border: 1px solid #DCDFE6;
    -webkit-box-sizing: border-box;
    box-sizing: border-box;
    color: #606266;
    display: inline-block;
    font-size: inherit;
    height: 40px;
    line-height: 40px;
    outline: 0;
    padding: 0 15px;
    -webkit-transition: border-color .2s cubic-bezier(.645,.045,.355,1);
    transition: border-color .2s cubic-bezier(.645,.045,.355,1);
    width: 100%;
  }
}
</style>

3.实现效果

在这里插入图片描述

到此这篇关于vue中el-input金额千分符自动转换的文章就介绍到这了,更多相关el-input金额千分符自动转换内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

相关文章

  • vue通过子组件修改父组件prop的多种实现方式

    vue通过子组件修改父组件prop的多种实现方式

    这篇文章主要介绍了vue通过子组件修改父组件prop的几种实现方式,比较常用的方式是通过Prop单向传递的规则,需要的朋友可以参考下
    2021-09-09
  • vue与原生app的对接交互的方法(混合开发)

    vue与原生app的对接交互的方法(混合开发)

    vue开发h5项目特别是移动端的项目,很多都是打包后挂载在原生APP上的,这篇文章主要介绍了vue与原生app的对接交互的方法,非常具有实用价值,需要的朋友可以参考下
    2018-11-11
  • Vue组件通信$attrs、$listeners实现原理解析

    Vue组件通信$attrs、$listeners实现原理解析

    这篇文章主要介绍了Vue组件通信$attrs、$listeners实现原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09
  • Vue中的v-model绑定修饰符的实现原理

    Vue中的v-model绑定修饰符的实现原理

    v-model 是Vue.js中的一个重要指令,通过它我们可以轻松实现数据的双向绑定,本文介绍一些常用的 v-model 绑定修饰符,并解析它们的实现原理,感兴趣的朋友一起看看吧
    2024-01-01
  • Nuxt.js实战和配置详解

    Nuxt.js实战和配置详解

    这篇文章主要介绍了Nuxt.js实战和配置,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • vue中使用WX-JSSDK的两种方法(推荐)

    vue中使用WX-JSSDK的两种方法(推荐)

    这篇文章主要介绍了vue中使用WX-JSSDK的两种方法,每种方法通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-01-01
  • 在Vue中实现地图热点展示与交互的方法详解(如热力图)

    在Vue中实现地图热点展示与交互的方法详解(如热力图)

    随着大数据和可视化技术的发展,地图热点展示越来越受到人们的关注,在Vue应用中,我们通常需要实现地图热点的展示和交互,以便更好地呈现数据和分析结果,本文将介绍在Vue中如何进行地图热点展示与交互,包括热力图、点聚合等
    2023-07-07
  • 详解vue-meta如何让你更优雅的管理头部标签

    详解vue-meta如何让你更优雅的管理头部标签

    这篇文章主要介绍了详解vue-meta如何让你更优雅的管理头部标签,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-01-01
  • Vue 使用typescript如何优雅的调用swagger API

    Vue 使用typescript如何优雅的调用swagger API

    这篇文章主要介绍了Vue 使用typescript如何优雅的调用swagger API,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-09-09
  • vue在响应头response中获取自定义headers操作

    vue在响应头response中获取自定义headers操作

    这篇文章主要介绍了vue在响应头response中获取自定义headers操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-07-07

最新评论