UNPKG

@wocwin/t-ui-plus

Version:

Page level components developed based on Element Plus.

253 lines (248 loc) 8.98 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var vue = require('vue'); var elementPlus = require('element-plus'); const _hoisted_1 = /* @__PURE__ */ vue.createElementVNode( "br", null, null, -1 /* HOISTED */ ); const _hoisted_2 = { key: 0 }; const _hoisted_3 = { key: 0 }; var _sfc_main = /* @__PURE__ */ vue.defineComponent({ ...{ name: "TInput" }, __name: "index", props: { modelValue: { default: "" }, placeholder: { default: "\u8BF7\u8F93\u5165" }, decimalLimit: { default: 2 }, inputType: { default: "text" }, appendTitle: { default: "\u5143" }, showThousands: { type: Boolean, default: false }, isTip: { type: Boolean, default: false }, isShowErrorTip: { type: Boolean, default: true } }, emits: ["update:modelValue"], setup(__props, { emit: __emit }) { const props = __props; const emits = __emit; const slots = vue.useSlots(); let internalValue = vue.computed({ get() { return props.modelValue; }, set(val) { emits("update:modelValue", val); } }); const handleBlur = () => { let formattedValue = internalValue.value; const formatValue = (value, formatter) => { if (formatter) { return formatter(value); } return value; }; switch (props.inputType) { case "amount": case "decimal": formattedValue = formatValue( Number(internalValue.value), (value) => formatAmount(value, props.decimalLimit) ); break; case "phone": formattedValue = formatValue(internalValue.value.toString(), validatePhone); break; case "integer": formattedValue = formatValue(internalValue.value.toString(), validateInteger); break; case "idCard": formattedValue = formatValue(internalValue.value.toString(), validateIdCard); break; default: formattedValue = internalValue.value; } internalValue.value = formattedValue; }; const validatePhone = (value) => { const phoneReg = /^1[3456789]\d{9}$/; if (phoneReg.test(value)) { return value; } else { props.isShowErrorTip && elementPlus.ElMessage.error("\u8BF7\u8F93\u5165\u6B63\u786E\u7684\u624B\u673A\u53F7\u7801"); return ""; } }; const validateIdCard = (value) => { const idCardReg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/; if (idCardReg.test(value)) { return value; } else { props.isShowErrorTip && elementPlus.ElMessage.error("\u8BF7\u8F93\u5165\u6B63\u786E\u7684\u8EAB\u4EFD\u8BC1\u53F7\u7801"); return ""; } }; const validateInteger = (value) => { const integerReg = /^\d+$/; if (integerReg.test(value)) { return value; } else { props.isShowErrorTip && elementPlus.ElMessage.error("\u8BF7\u8F93\u5165\u6B63\u786E\u7684\u6574\u6570"); return ""; } }; const formatAmount = (value, decimalLimit) => { if (!value) { props.isShowErrorTip && elementPlus.ElMessage.error(`\u8BF7\u8F93\u5165\u6B63\u786E\u7684${props.inputType == "amount" ? "\u91D1\u989D" : "\u6570\u5B57"}`); return ""; } if (props.showThousands) { const val = value.toFixed(decimalLimit).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); return val; } else { return value.toFixed(decimalLimit); } }; const currencyFilter = (num, n = 2) => { const reg = /((^[1-9]\d*)|^0)(\.\d+)?$/; if (!reg.test(num)) { return ""; } else { n = n > 0 && n <= 20 ? n : 2; if (num || num === 0) { num = parseFloat((num + "").replace(/^\d\.-/g, "")).toFixed(n) + ""; const l = num.split(".")[0].split("").reverse(); const r = num.split(".")[1]; let t = ""; for (let i = 0; i < l.length; i++) { t += l[i] + ((i + 1) % 3 === 0 && i + 1 !== l.length ? "," : ""); } return num ? "\uFFE5 " + t.split("").reverse().join("") + "." + r : ""; } else { return ""; } } }; const digitUppercase = (num) => { const reg = /((^[1-9]\d*)|^0)(\.\d{0,2}){0,1}$/; if (!reg.test(num)) { return "\u8BF7\u8F93\u5165\u6B63\u786E\u7684\u91D1\u989D\u683C\u5F0F"; } else { let fraction = ["\u89D2", "\u5206"]; let digit = ["\u96F6", "\u58F9", "\u8D30", "\u53C1", "\u8086", "\u4F0D", "\u9646", "\u67D2", "\u634C", "\u7396"]; let unit = [ ["\u5143", "\u4E07", "\u4EBF", "\u5146"], ["", "\u62FE", "\u4F70", "\u4EDF"] ]; let head = num < 0 ? "\u6B20" : ""; num = Math.abs(num); let s = ""; fraction.forEach((item, index) => { s += (digit[Math.floor(num * 10 * Math.pow(10, index)) % 10] + item).replace(/零./, ""); }); s = s || "\u6574"; num = Math.floor(num); for (let i = 0; i < unit[0].length && num > 0; i++) { let p = ""; for (let j = 0; j < unit[1].length && num > 0; j++) { p = digit[num % 10] + unit[1][j] + p; num = Math.floor(num / 10); } s = p.replace(/(零.)*零$/, "").replace(/^$/, "\u96F6") + unit[0][i] + s; } return head + s.replace(/(零.)*零元/, "\u5143").replace(/(零.)+/g, "\u96F6").replace(/^整$/, "\u96F6\u5143\u6574"); } }; return (_ctx, _cache) => { const _component_el_input = vue.resolveComponent("el-input"); const _component_el_tooltip = vue.resolveComponent("el-tooltip"); return _ctx.isTip && !_ctx.showThousands ? (vue.openBlock(), vue.createBlock(_component_el_tooltip, { key: 0, effect: "dark", placement: "bottom-start" }, { content: vue.withCtx(() => [ vue.createTextVNode( vue.toDisplayString(currencyFilter(_ctx.modelValue)), 1 /* TEXT */ ), _hoisted_1, vue.createTextVNode( " " + vue.toDisplayString(digitUppercase(_ctx.modelValue)), 1 /* TEXT */ ) ]), default: vue.withCtx(() => [ vue.createVNode(_component_el_input, vue.mergeProps({ modelValue: vue.unref(internalValue), "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => vue.isRef(internalValue) ? internalValue.value = $event : internalValue = $event) }, { placeholder: _ctx.placeholder, clearable: true, ..._ctx.$attrs }, { onBlur: handleBlur }), vue.createSlots({ _: 2 /* DYNAMIC */ }, [ vue.renderList(vue.unref(slots), (_index, name) => { return { name, fn: vue.withCtx((data) => [ vue.renderSlot(_ctx.$slots, name, vue.normalizeProps(vue.guardReactiveProps(data))) ]) }; }), _ctx.$slots.append || _ctx.inputType === "amount" ? { name: "append", fn: vue.withCtx(() => [ _ctx.inputType === "amount" ? (vue.openBlock(), vue.createElementBlock( "span", _hoisted_2, vue.toDisplayString(_ctx.appendTitle), 1 /* TEXT */ )) : vue.renderSlot(_ctx.$slots, "append", { key: 1 }) ]), key: "0" } : void 0 ]), 1040, ["modelValue"]) ]), _: 3 /* FORWARDED */ })) : (vue.openBlock(), vue.createBlock(_component_el_input, vue.mergeProps({ key: 1, modelValue: vue.unref(internalValue), "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => vue.isRef(internalValue) ? internalValue.value = $event : internalValue = $event) }, { placeholder: _ctx.placeholder, clearable: true, ..._ctx.$attrs }, { onBlur: handleBlur }), vue.createSlots({ _: 2 /* DYNAMIC */ }, [ vue.renderList(vue.unref(slots), (_index, name) => { return { name, fn: vue.withCtx((data) => [ vue.renderSlot(_ctx.$slots, name, vue.normalizeProps(vue.guardReactiveProps(data))) ]) }; }), _ctx.$slots.append || _ctx.inputType === "amount" ? { name: "append", fn: vue.withCtx(() => [ _ctx.inputType === "amount" ? (vue.openBlock(), vue.createElementBlock( "span", _hoisted_3, vue.toDisplayString(_ctx.appendTitle), 1 /* TEXT */ )) : vue.renderSlot(_ctx.$slots, "append", { key: 1 }) ]), key: "0" } : void 0 ]), 1040, ["modelValue"])); }; } }); exports.default = _sfc_main;