@wocwin/t-ui-plus
Version:
Page level components developed based on Element Plus.
253 lines (248 loc) • 8.98 kB
JavaScript
;
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;