ibiz-form-field.ts 2.8 KB
Newer Older
ibiz's avatar
ibiz 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 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148
/**
 * 表单属性项
 *
 * @class IBizFormField
 * @extends {IBizFormItem}
 */
class IBizFormField extends IBizFormItem {

    /**
     * label 宽度
     *
     * @type {number}
     * @memberof IBizFormField
     */
    public labelWidth: number = 130;

    /**
     * 实体属性输入旧值
     *
     * @type {string}
     * @memberof IBizFormField
     */
    public oldVal: string = '';

    /**
     * 编辑器参数
     *
     * @type {*}
     * @memberof IBizFormField
     */
    public editorParams: any = {};

    /**
     * 输入防抖
     *
     * @type {Subject<any>}
     * @memberof IBizFormField
     */
    public subject: Subject<any> = new rxjs.Subject();

    /**
     * Creates an instance of IBizFormField.
     * 创建 IBizFormField 实例
     * 
     * @param {*} [opts={}]
     * @memberof IBizFormField
     */
    constructor(opts: any = {}) {
        super(opts);
        this.labelWidth = opts.labelWidth;
        if (opts.editorParams) {
            Object.assign(this.editorParams, opts.editorParams);
        }
        this.subject
            .pipe(
                rxjs.operators.debounceTime(300),
                rxjs.operators.distinctUntilChanged()
            ).subscribe((data: any) => {
                this.value = data;
            });
    }

    /**
     * 值设定
     *
     * @memberof IBizFormField
     */
    public setData($event: any) {
        if (!event) {
            return;
        }
        if (!$event.target) {
            return;
        }
        this.subject.next($event.target.value);
    }

    /**
     * 设置旧值
     *
     * @param {string} val
     * @memberof IBizFormField
     */
    public setOldValue(val: string): void {
        this.oldVal = val;
    }

    /**
     * 获取旧值
     *
     * @returns {string}
     * @memberof IBizFormField
     */
    public getOldValue(): string {
        return this.oldVal;
    }

    /**
     * 属性值变化
     *
     * @param {*} event
     * @memberof IBizFormField
     */
    public valueChange(event: any): void {

        if (Object.is(event, this.value)) {
            return;
        }
        this.value = event;
    }

    /**
     * 输入框失去焦点触发
     *
     * @param {*} _value
     * @returns {void}
     * @memberof IBizFormField
     */
    public onBlur(_value: any): void {

        if (!_value || Object.is(_value, this.value)) {
            return;
        }
        this.value = _value;
    }

    /**
     * 键盘事件
     *
     * @param {*} $event
     * @returns {void}
     * @memberof IBizFormField
     */
    public onKeydown($event: any): void {
        if (!$event) {
            return;
        }
        if ($event.keyCode !== 13) {
            return;
        }
        if (Object.is($event.target.value, this.value)) {
            return;
        }

        this.value = $event.target.value;
    }

}