Amtpanl.vue 3.48 KB
Newer Older
fukai committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133
<template>
  <div class="eibs-tab">
    <c-col :span="span">
      <c-col :span="15">
        <el-form-item :label="message.title" :prop="message.cur">
          <c-select
            v-model="cur"
            maxlength="3"
            :code="code"
            @change="curChange"
            placeholder="请选择币种"
          ></c-select>
        </el-form-item>
      </c-col>

      <c-col :span="9">
        <el-form-item
          label=""
          label-width="220px"
          style="margin-left: -220px !important"
          :prop="message.amt"
        >
          <c-input
            v-model="amt"
            @change="amtChanged"
            @input="amtInput"
            :placeholder="'请输入' + message.title"
          ></c-input>
        </el-form-item>
      </c-col>
    </c-col>
  </div>
</template>
<script>
import commonProcess from "~/mixin/commonProcess";
import CodeTable from "~/config/CodeTable";
import _ from "~/utils/Lodash.js";
export default {
  inject: ["root"],
  mixins: [commonProcess],
  //props: ["model", "message","span"],
  props: {
    model: {
      type: Object,
      default: undefined,
    },
    message: {
      type: Object,
      default: function () {
        return {
          title: "金额", //金额名称
          cur: "cur", //币种字段路劲
          amt: "amt", //金额字段路劲
          fix: 3, //小数点位数
        };
      },
    },
    span: {
      type: Number,
      default: 12, //宽度,默认12
    },
  },
  data() {
    return {
      code: [...CodeTable.cur],
      amt: this.amtGet(),
      cur: this.curGet(),
    };
  },
  methods: {
    //金额格式化,默认保留三位小数
    amtChanged(newamt) {
      if (newamt === "" || newamt === undefined || newamt === null) {
        _.set(this.model, this.message.amt, "");
        this.amt = "";
        return;
      }
      newamt = newamt.replace(/^0+\./, "0.");
      if (newamt === "" || newamt === undefined || newamt === null) {
        _.set(this.model, this.message.amt, "");
        this.amt = "";
        return;
      }
      newamt = newamt.replace(/^0+([0-9])/, "$1");
      let fix = this.message.fix || 3;
      let idx = newamt.indexOf(".");
      let segs = undefined;
      if (idx > -1) segs = newamt.split(".");
      else segs = [newamt || "0", "0".repeat(fix)];
      if (!segs[0]) segs[0] = "0";
      if (segs[1].length > fix) segs[1] = segs[1].substring(0, fix);
      else if (segs[1].length < fix)
        segs[1] = segs[1] + "0".repeat(fix - segs[1].length);
      let npreseg = "";
      segs[0] = segs[0].replace(/\D+/g, "");
      let preseg = segs[0];
      for (let i = 0; i < preseg.length; i++) {
        npreseg = preseg.charAt(preseg.length - 1 - i) + npreseg;
        if (i && (1 + i) % 3 == 0 && i != preseg.length - 1)
          npreseg = "," + npreseg;
      }
      let amt = `${segs[0] ? segs[0] : 0}.${segs[1]}`;
      _.set(this.model, this.message.amt, amt);
      this.amt = `${segs[0] ? npreseg : 0}.${segs[1]}`;
    },

    //禁止输入非数字
    amtInput(newamt) {
      let am = newamt.replace(/[^\d.]/g, "");
      _.set(this.model, this.message.amt, am);
      this.amt = am;
    },

    amtGet() {
      return _.get(this.model, this.message.amt, "");
    },

    //cur改变
    curChange() {
      _.set(this.model, this.message.cur, this.cur);
    },
    curGet() {
      return _.get(this.model, this.message.cur, "");
    },
  },
  computed: {},
  watch: {},
  // methods: { ...Event },
  created: function () {},
};
</script>
<style>
</style>