UNPKG

@kre-form/ionic

Version:

207 lines 19.1 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Input, ContentChild, Directive, Renderer2, ElementRef, } from "@angular/core"; import { Platform, IonText } from "@ionic/angular"; import * as _ from "lodash"; export class IonKreFormFloat { /** * @param {?} el * @param {?} renderer * @param {?} plt */ constructor(el, renderer, plt) { this.el = el; this.plt = plt; this.selectedColor = ""; this.decimalNumber = -1; // 保留小数位数,默认不限制 // 保留小数位数,默认不限制 this.max = 6; this.floattype = "base"; // 固定整数取6位 base:兼容除流程外的数字精度显示,为base表示整数固定取6位 // 固定整数取6位 base:兼容除流程外的数字精度显示,为base表示整数固定取6位 this.allowminus = true; // 允许负数 -true 允许 -false 不允许 this.isblur = false; } /** * @param {?} e * @return {?} */ onfocus(e) { this.isblur = false; } /** * @param {?} e * @return {?} */ onBlur(e) { this.isblur = true; if (e.currentTarget.value !== "" && !isNaN(e.currentTarget.value)) { /** @type {?} */ let val = e.currentTarget.value; if (this.decimalNumber > -1) { val = Number(e.currentTarget.value).toFixed(this.decimalNumber); } e.currentTarget.value = val; } else { e.currentTarget.value = ""; } } /** * @param {?} event * @return {?} */ onModelChange(event) { if (this.isblur) return; let { value } = event.detail; if (value === 0) value = ""; if (!_.isNumber(value)) { event.currentTarget.value = value; } else { event.currentTarget.value = value = this.checkValue(value); } } /** * @param {?} event * @return {?} */ checkValue(event) { /** @type {?} */ let oldValue = event; /** @type {?} */ let mark = ""; if (this.allowminus) { mark = event.charAt(0); } if (this.decimalNumber === 0) { if (_.isNumber(oldValue)) { oldValue = Number(oldValue).toFixed(0); // 保留整数 } else { // oldValue = oldValue; } } else { oldValue = oldValue.replace(/[^\d\.]/g, ""); // 清除"数字"和"."以外的字符 } /** @type {?} */ let newValue = ""; if (oldValue === ".") { newValue = ""; } else if (oldValue.indexOf(".") >= 0) { if (this.floattype !== "base") { /** @type {?} */ const index = event.indexOf("."); /** @type {?} */ const opintInLast = event.lastIndexOf(".") === event.length - 1; /** @type {?} */ const totlaLength = index !== -1 && !opintInLast ? this.max + 1 : this.max; event = totlaLength > 0 ? event.substr(0, totlaLength) : event; oldValue = oldValue.split("."); oldValue.length = 2; /** @type {?} */ let floatLength = oldValue[1] ? oldValue[1].length : 0; floatLength = floatLength > this.decimalNumber ? this.decimalNumber : floatLength; /** @type {?} */ const intPart = this.max > 0 ? oldValue[0].substr(0, this.max - floatLength) : oldValue[0]; if (this.decimalNumber === 0 || intPart.length >= this.max) { newValue = String(Math.abs(Number(intPart))); } else { /** @type {?} */ const floatPart = floatLength ? oldValue[1].substr(0, floatLength) : oldValue[1].substr(0, 3); newValue = String(Math.abs(Number(intPart)) + "." + floatPart); } } else { if (this.decimalNumber > 0) { newValue = oldValue.split(".")[0].substr(0, 6) + "." + oldValue.split(".")[1].substr(0, this.decimalNumber); } else { newValue = oldValue.split(".")[0].substr(0, 6) + "." + oldValue.split(".")[1].substr(0); } } } else { if (this.floattype !== "base") { newValue = oldValue.substr(0, this.max); } else { newValue = oldValue.substr(0, 6); } } if (String(newValue).substr(0, 1) === "0" && String(newValue).substr(1, 1) !== ".") { newValue = "0"; } if (this.allowminus && mark === "-") { event = `${mark}${newValue}`; newValue = `${mark}${newValue}`; } else { event = newValue; } return event; } } IonKreFormFloat.decorators = [ { type: Directive, args: [{ selector: "[ionKreFormFloat]", host: { "(ionBlur)": "onBlur($event)", "(ionChange)": "onModelChange($event)", "(ionFocus)": "onfocus($event)", }, },] } ]; /** @nocollapse */ IonKreFormFloat.ctorParameters = () => [ { type: ElementRef }, { type: Renderer2 }, { type: Platform } ]; IonKreFormFloat.propDecorators = { selectedColor: [{ type: Input }], decimalNumber: [{ type: Input }], max: [{ type: Input }], floattype: [{ type: Input }], allowminus: [{ type: Input }], _ionInput: [{ type: ContentChild, args: [IonText, { static: false },] }] }; if (false) { /** @type {?} */ IonKreFormFloat.prototype.selectedColor; /** @type {?} */ IonKreFormFloat.prototype.decimalNumber; /** @type {?} */ IonKreFormFloat.prototype.max; /** @type {?} */ IonKreFormFloat.prototype.floattype; /** @type {?} */ IonKreFormFloat.prototype.allowminus; /** @type {?} */ IonKreFormFloat.prototype._ionInput; /** @type {?} */ IonKreFormFloat.prototype.isblur; /** @type {?} */ IonKreFormFloat.prototype.el; /** @type {?} */ IonKreFormFloat.prototype.plt; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3JlLWZvcm0uZmxvYXQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Aa3JlLWZvcm0vaW9uaWMvIiwic291cmNlcyI6WyJsaWIva3JlLWZvcm0uZmxvYXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFDTCxLQUFLLEVBQ0wsWUFBWSxFQUNaLFNBQVMsRUFDVCxTQUFTLEVBQ1QsVUFBVSxHQUNYLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkQsT0FBTyxLQUFLLENBQUMsTUFBTSxRQUFRLENBQUM7QUFVNUIsTUFBTSxPQUFPLGVBQWU7Ozs7OztJQVMxQixZQUNTLEVBQWMsRUFDckIsUUFBbUIsRUFDWixHQUFhO1FBRmIsT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQUVkLFFBQUcsR0FBSCxHQUFHLENBQVU7UUFYYixrQkFBYSxHQUFHLEVBQUUsQ0FBQztRQUNuQixrQkFBYSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZTs7UUFDbkMsUUFBRyxHQUFHLENBQUMsQ0FBQztRQUNSLGNBQVMsR0FBRyxNQUFNLENBQUMsQ0FBQyw0Q0FBNEM7O1FBQ2hFLGVBQVUsR0FBRyxJQUFJLENBQUMsQ0FBQyw0QkFBNEI7UUFFeEQsV0FBTSxHQUFHLEtBQUssQ0FBQztJQU1aLENBQUM7Ozs7O0lBQ0osT0FBTyxDQUFDLENBQUM7UUFDUCxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztJQUN0QixDQUFDOzs7OztJQUNELE1BQU0sQ0FBQyxDQUFDO1FBQ04sSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFFbkIsSUFBSSxDQUFDLENBQUMsYUFBYSxDQUFDLEtBQUssS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsRUFBRTs7Z0JBQzdELEdBQUcsR0FBUSxDQUFDLENBQUMsYUFBYSxDQUFDLEtB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SEYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxtQkFBbUI7Z0JBQzdCLElBQUksRUFBRTtvQkFDSixXQUFXLEVBQUUsZ0JBQWdCO29CQUM3QixhQUFhLEVBQUUsdUJBQXVCO29CQUN0QyxZQUFZLEVBQUUsaUJBQWlCO2lCQUNoQzthQUNGOzs7O1lBWkMsVUFBVTtZQURWLFNBQVM7WUFHRixRQUFROzs7NEJBWWQsS0FBSzs0QkFDTCxLQUFLO2tCQUNMLEtBQUs7d0JBQ0wsS0FBSzt5QkFDTCxLQUFLO3dCQUNMLFlBQVksU0FBQyxPQUFPLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFOzs7O0lBTHhDLHdDQUE0Qjs7SUFDNUIsd0NBQTRCOztJQUM1Qiw4QkFBaUI7O0lBQ2pCLG9DQUE0Qjs7SUFDNUIscUNBQTJCOztJQUMzQixvQ0FBNkQ7O0lBQzdELGlDQUFlOztJQUdiLDZCQUFxQjs7SUFFckIsOEJBQW9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgSW5wdXQsXG4gIENvbnRlbnRDaGlsZCxcbiAgRGlyZWN0aXZlLFxuICBSZW5kZXJlcjIsXG4gIEVsZW1lbnRSZWYsXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBQbGF0Zm9ybSwgSW9uVGV4dCB9IGZyb20gXCJAaW9uaWMvYW5ndWxhclwiO1xuaW1wb3J0ICogYXMgXyBmcm9tIFwibG9kYXNoXCI7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogXCJbaW9uS3JlRm9ybUZsb2F0XVwiLFxuICBob3N0OiB7XG4gICAgXCIoaW9uQmx1cilcIjogXCJvbkJsdXIoJGV2ZW50KVwiLFxuICAgIFwiKGlvbkNoYW5nZSlcIjogXCJvbk1vZGVsQ2hhbmdlKCRldmVudClcIixcbiAgICBcIihpb25Gb2N1cylcIjogXCJvbmZvY3VzKCRldmVudClcIixcbiAgfSxcbn0pXG5leHBvcnQgY2xhc3MgSW9uS3JlRm9ybUZsb2F0IHtcbiAgQElucHV0KCkgc2VsZWN0ZWRDb2xvciA9IFwiXCI7XG4gIEBJbnB1dCgpIGRlY2ltYWxOdW1iZXIgPSAtMTsgLy8g5L+d55WZ5bCP5pWw5L2N5pWwLOm7mOiupOS4jemZkOWItlxuICBASW5wdXQoKSBtYXggPSA2O1xuICBASW5wdXQoKSBmbG9hdHR5cGUgPSBcImJhc2VcIjsgLy8g5Zu65a6a5pW05pWw5Y+WNuS9jSBiYXNlOuWFvOWuuemZpOa1geeoi+WklueahOaVsOWtl+eyvuW6puaYvuekuu+8jOS4umJhc2XooajnpLrmlbTmlbDlm7rlrprlj5Y25L2NXG4gIEBJbnB1dCgpIGFsbG93bWludXMgPSB0cnVlOyAvLyDlhYHorrjotJ/mlbAgIC10cnVlIOWFgeiuuCAtZmFsc2Ug5LiN5YWB6K64XG4gIEBDb250ZW50Q2hpbGQoSW9uVGV4dCwgeyBzdGF0aWM6IGZhbHNlIH0pIF9pb25JbnB1dDogSW9uVGV4dDtcbiAgaXNibHVyID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGVsOiBFbGVtZW50UmVmLFxuICAgIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgcHVibGljIHBsdDogUGxhdGZvcm1cbiAgKSB7fVxuICBvbmZvY3VzKGUpIHtcbiAgICB0aGlzLmlzYmx1ciA9IGZhbHNlO1xuICB9XG4gIG9uQmx1cihlKSB7XG4gICAgdGhpcy5pc2JsdXIgPSB0cnVlO1xuXG4gICAgaWYgKGUuY3VycmVudFRhcmdldC52YWx1ZSAhPT0gXCJcIiAmJiAhaXNOYU4oZS5jdXJyZW50VGFyZ2V0LnZhbHVlKSkge1xuICAgICAgbGV0IHZhbDogYW55ID0gZS5jdXJyZW50VGFyZ2V0LnZhbHVlO1xuXG4gICAgICBpZiAodGhpcy5kZWNpbWFsTnVtYmVyID4gLTEpIHtcbiAgICAgICAgdmFsID0gTnVtYmVyKGUuY3VycmVudFRhcmdldC52YWx1ZSkudG9GaXhlZCh0aGlzLmRlY2ltYWxOdW1iZXIpO1xuICAgICAgfVxuICAgICAgZS5jdXJyZW50VGFyZ2V0LnZhbHVlID0gdmFsO1xuICAgIH0gZWxzZSB7XG4gICAgICBlLmN1cnJlbnRUYXJnZXQudmFsdWUgPSBcIlwiO1xuICAgIH1cbiAgfVxuICBvbk1vZGVsQ2hhbmdlKGV2ZW50KSB7XG4gICAgaWYgKHRoaXMuaXNibHVyKSByZXR1cm47XG4gICAgbGV0IHsgdmFsdWUgfSA9IGV2ZW50LmRldGFpbDtcbiAgICBpZiAodmFsdWUgPT09IDApIHZhbHVlID0gXCJcIjtcbiAgICBpZiAoIV8uaXNOdW1iZXIodmFsdWUpKSB7XG4gICAgICBldmVudC5jdXJyZW50VGFyZ2V0LnZhbHVlID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGV2ZW50LmN1cnJlbnRUYXJnZXQudmFsdWUgPSB2YWx1ZSA9IHRoaXMuY2hlY2tWYWx1ZSh2YWx1ZSk7XG4gICAgfVxuICB9XG4gIGNoZWNrVmFsdWUoZXZlbnQpIHtcbiAgICBsZXQgb2xkVmFsdWUgPSBldmVudDtcbiAgICBsZXQgbWFyayA9IFwiXCI7XG4gICAgaWYgKHRoaXMuYWxsb3dtaW51cykge1xuICAgICAgbWFyayA9IGV2ZW50LmNoYXJBdCgwKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZGVjaW1hbE51bWJlciA9PT0gMCkge1xuICAgICAgaWYgKF8uaXNOdW1iZXIob2xkVmFsdWUpKSB7XG4gICAgICAgIG9sZFZhbHVlID0gTnVtYmVyKG9sZFZhbHVlKS50b0ZpeGVkKDApOyAvLyAg5L+d55WZ5pW05pWwXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBvbGRWYWx1ZSA9IG9sZFZhbHVlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBvbGRWYWx1ZSA9IG9sZFZhbHVlLnJlcGxhY2UoL1teXFxkXFwuXS9nLCBcIlwiKTsgLy8g5riF6ZmkXCLmlbDlrZdcIuWSjFwiLlwi5Lul5aSW55qE5a2X56ymXG4gICAgfVxuICAgIGxldCBuZXdWYWx1ZTogYW55ID0gXCJcIjtcblxuICAgIGlmIChvbGRWYWx1ZSA9PT0gXCIuXCIpIHtcbiAgICAgIG5ld1ZhbHVlID0gXCJcIjtcbiAgICB9IGVsc2UgaWYgKG9sZFZhbHVlLmluZGV4T2YoXCIuXCIpID49IDApIHtcbiAgICAgIGlmICh0aGlzLmZsb2F0dHlwZSAhPT0gXCJiYXNlXCIpIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSBldmVudC5pbmRleE9mKFwiLlwiKTtcbiAgICAgICAgY29uc3Qgb3BpbnRJbkxhc3QgPSBldmVudC5sYXN0SW5kZXhPZihcIi5cIikgPT09IGV2ZW50Lmxlbmd0aCAtIDE7XG4gICAgICAgIGNvbnN0IHRvdGxhTGVuZ3RoID1cbiAgICAgICAgICBpbmRleCAhPT0gLTEgJiYgIW9waW50SW5MYXN0ID8gdGhpcy5tYXggKyAxIDogdGhpcy5tYXg7XG4gICAgICAgIGV2ZW50ID0gdG90bGFMZW5ndGggPiAwID8gZXZlbnQuc3Vic3RyKDAsIHRvdGxhTGVuZ3RoKSA6IGV2ZW50O1xuXG4gICAgICAgIG9sZFZhbHVlID0gb2xkVmFsdWUuc3BsaXQoXCIuXCIpO1xuICAgICAgICBvbGRWYWx1ZS5sZW5ndGggPSAyO1xuICAgICAgICBsZXQgZmxvYXRMZW5ndGggPSBvbGRWYWx1ZVsxXSA/IG9sZFZhbHVlWzFdLmxlbmd0aCA6IDA7XG4gICAgICAgIGZsb2F0TGVuZ3RoID1cbiAgICAgICAgICBmbG9hdExlbmd0aCA+IHRoaXMuZGVjaW1hbE51bWJlciA/IHRoaXMuZGVjaW1hbE51bWJlciA6IGZsb2F0TGVuZ3RoO1xuICAgICAgICBjb25zdCBpbnRQYXJ0ID1cbiAgICAgICAgICB0aGlzLm1heCA+IDBcbiAgICAgICAgICAgID8gb2xkVmFsdWVbMF0uc3Vic3RyKDAsIHRoaXMubWF4IC0gZmxvYXRMZW5ndGgpXG4gICAgICAgICAgICA6IG9sZFZhbHVlWzBdO1xuXG4gICAgICAgIGlmICh0aGlzLmRlY2ltYWxOdW1iZXIgPT09IDAgfHwgaW50UGFydC5sZW5ndGggPj0gdGhpcy5tYXgpIHtcbiAgICAgICAgICBuZXdWYWx1ZSA9IFN0cmluZyhNYXRoLmFicyhOdW1iZXIoaW50UGFydCkpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBmbG9hdFBhcnQgPSBmbG9hdExlbmd0aFxuICAgICAgICAgICAgPyBvbGRWYWx1ZVsxXS5zdWJzdHIoMCwgZmxvYXRMZW5ndGgpXG4gICAgICAgICAgICA6IG9sZFZhbHVlWzFdLnN1YnN0cigwLCAzKTtcbiAgICAgICAgICBuZXdWYWx1ZSA9IFN0cmluZyhNYXRoLmFicyhOdW1iZXIoaW50UGFydCkpICsgXCIuXCIgKyBmbG9hdFBhcnQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGhpcy5kZWNpbWFsTnVtYmVyID4gMCkge1xuICAgICAgICAgIG5ld1ZhbHVlID1cbiAgICAgICAgICAgIG9sZFZhbHVlLnNwbGl0KFwiLlwiKVswXS5zdWJzdHIoMCwgNikgK1xuICAgICAgICAgICAgXCIuXCIgK1xuICAgICAgICAgICAgb2xkVmFsdWUuc3BsaXQoXCIuXCIpWzFdLnN1YnN0cigwLCB0aGlzLmRlY2ltYWxOdW1iZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5ld1ZhbHVlID1cbiAgICAgICAgICAgIG9sZFZhbHVlLnNwbGl0KFwiLlwiKVswXS5zdWJzdHIoMCwgNikgK1xuICAgICAgICAgICAgXCIuXCIgK1xuICAgICAgICAgICAgb2xkVmFsdWUuc3BsaXQoXCIuXCIpWzFdLnN1YnN0cigwKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5mbG9hdHR5cGUgIT09IFwiYmFzZVwiKSB7XG4gICAgICAgIG5ld1ZhbHVlID0gb2xkVmFsdWUuc3Vic3RyKDAsIHRoaXMubWF4KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5ld1ZhbHVlID0gb2xkVmFsdWUuc3Vic3RyKDAsIDYpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoXG4gICAgICBTdHJpbmcobmV3VmFsdWUpLnN1YnN0cigwLCAxKSA9PT0gXCIwXCIgJiZcbiAgICAgIFN0cmluZyhuZXdWYWx1ZSkuc3Vic3RyKDEsIDEpICE9PSBcIi5cIlxuICAgICkge1xuICAgICAgbmV3VmFsdWUgPSBcIjBcIjtcbiAgICB9XG4gICAgaWYgKHRoaXMuYWxsb3dtaW51cyAmJiBtYXJrID09PSBcIi1cIikge1xuICAgICAgZXZlbnQgPSBgJHttYXJrfSR7bmV3VmFsdWV9YDtcbiAgICAgIG5ld1ZhbHVlID0gYCR7bWFya30ke25ld1ZhbHVlfWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGV2ZW50ID0gbmV3VmFsdWU7XG4gICAgfVxuICAgIHJldHVybiBldmVudDtcbiAgfVxufVxuIl19