el-input限制只能输入价格格式

bash 复制代码
<!-- 封装的价格表单组件 -->

<template>
  <el-input :value="value" :placeholder="placeholder" @input="handleInput" />
</template>

<script>
export default {
  name: "PriceInput",
  props: {
    value: {
      type: [String, Number],
      default: "",
    },
    placeholder: {
      type: String,
      default: "请输入",
    },
  },
  methods: {
    handleInput(value) {
      // 如果完全删除输入,直接传递空值
      if (value === "") {
        this.$emit("input", "");
        return;
      }

      // 仅允许数字和小数点
      let newValue = value.replace(/[^\d.]/g, "");

      // 限制只能有一个小数点
      const parts = newValue.split(".");
      if (parts.length > 2) {
        newValue = parts[0] + "." + parts.slice(1).join("");
      }

      // 再次拆分整数和小数部分
      const finalParts = newValue.split(".");
      let integerPart = finalParts[0];
      let decimalPart = finalParts.length > 1 ? finalParts[1] : undefined;

      // 处理整数部分:去除前导零,但保留至少一个零
      if (integerPart !== undefined && integerPart !== "") {
        integerPart = integerPart.replace(/^0+/, "");
        if (integerPart === "") integerPart = "0";
      } else {
        integerPart = "0";
      }

      // 限制小数部分最多两位
      if (decimalPart !== undefined && decimalPart.length > 2) {
        decimalPart = decimalPart.substring(0, 2);
      }

      // 重组最终字符串
      let result = integerPart;
      if (decimalPart !== undefined) {
        result += "." + decimalPart;
      }

      this.$emit("input", result);
    },
  },
};
</script>

也可以使用组件el-input-number,可参考链接,但注意处理后格式为String了。

相关推荐
IT_陈寒17 小时前
SpringBoot自动配置把我都整不会了
前端·人工智能·后端
一 乐17 小时前
旅游|基于springboot + vue旅游信息推荐系统(源码+数据库+文档)
java·vue.js·spring boot·论文·旅游·毕设·旅游信息推荐系统
最逗前端小白鼠18 小时前
vue3 数据响应式遇到的问题
前端·vue.js
倚栏听风雨18 小时前
ts中 ?? 和 || 区别
前端
冴羽18 小时前
请愿书:Node.js 核心代码不应该包含 AI 代码!
前端·javascript·node.js
我家猫叫佩奇18 小时前
一款灵感源自《集合啦!动物森友会》的 UI 组件库
前端
mmmmm1234218 小时前
深入 DOM 查询底层:HTMLCollection 动态原理与 querySelectorAll 静态快照解析
前端·javascript
weixin1997010801619 小时前
《TikTok 商品详情页前端性能优化实战》
前端·性能优化
卤蛋fg619 小时前
vxe-table 自定义数字行主键,解决默认字符串主键与后端类型不匹配问题
vue.js
闲坐含香咀翠19 小时前
告别二次登录!Web端检测并唤起Electron客户端实战
前端·客户端