import { IContext, IPanelFieldControllerParams, IParam } from '@/core/interface'; import { PanelDetailController } from './panel-detail-controller'; /** * 面板属性项控制器 * * @export * @class PanelFieldController * @extends {PanelDetailModel} */ export class PanelFieldController extends PanelDetailController { /** * 是否启用 * * @type {boolean} * @memberof PanelFieldController */ public disabled = false; /** * 错误信息 * * @type {string} * @memberof PanelFieldController */ public error = ''; /** * 表单项启用条件 * * 0 不启用 * 1 新建 * 2 更新 * 3 全部启用 * * @type {(number | 0 | 1 | 2 | 3)} * @memberof PanelFieldController */ public enableCond: number | 0 | 1 | 2 | 3 = 3; /** * @description 默认状态 * 0 不启用 * 1 只读 * 2 禁用 * @type {('0' | '1' | '2')} * @memberof PanelFieldController */ public fieldState: '0' | '1' | '2'; /** * 绑定数据项 * * @type {(string | undefined)} * @memberof PanelFieldController */ public dataItemName: string | undefined = undefined; /** * 换行模式{WRAP:换行、 NOWRAP:不换行 } * * @type {(string | 'WRAP' | 'NOWRAP')} * @memberof PanelFieldController */ public wrapMode: string | 'WRAP' | 'NOWRAP' = 'WRAP'; /** * 文本垂直对齐模式{TOP:上对齐、 MIDDLE:居中、 BOTTOM:下对齐 } * * @type {(string | 'TOP' | 'MIDDLE' | 'BOTTOM')} * @memberof PanelFieldController */ public vAlign: string | 'TOP' | 'MIDDLE' | 'BOTTOM' = 'MIDDLE'; /** * 文本水平对齐模式{LEFT:左对齐、 CENTER:居中、 RIGHT:右对齐、 JUSTIFY:两端对齐 } * * @type {(string | 'LEFT' | 'CENTER' | 'RIGHT' | 'JUSTIFY')} * @memberof PanelFieldController */ public hAlign: string | 'LEFT' | 'CENTER' | 'RIGHT' | 'JUSTIFY' = 'LEFT'; /** * 必填 * * @type {boolean} * @memberof PanelFieldController */ public required: boolean; /** * 编辑器动态样式表 * * @memberof PanelFieldController */ public editorDynaClass = ''; /** * Creates an instance of PanelFieldController. * PanelFieldController 实例 * * @param {*} [IPanelFieldControllerParams] * @memberof PanelFieldController */ constructor(opts: IPanelFieldControllerParams, context: IContext, viewParams: IParam) { super(opts, context, viewParams); this.disabled = opts.disabled ? true : false; this.enableCond = opts.enableCond; this.fieldState = opts.fieldState; this.dataItemName = opts.dataItemName; this.wrapMode = opts.wrapMode ? opts.wrapMode : 'WRAP'; this.vAlign = opts.vAlign ? opts.vAlign : 'MIDDLE'; this.hAlign = opts.hAlign ? opts.hAlign : 'LEFT'; this.required = opts.required; this.editorDynaClass = opts.editorDynaClass; } /** * 设置是否启用 * * @param {boolean} state * @memberof PanelFieldController */ public setDisabled(state: boolean): void { this.disabled = state; } /** * 设置信息内容 * * @param {string} error * @memberof PanelFieldController */ public setError(error: string): void { this.error = error; } /** * 设置是否启用 * * @param {string} srfuf * @memberof PanelFieldController */ public setEnableCond(srfuf: string): void { // 是否有权限 const isReadOk = true; const _srfuf: number = parseInt(srfuf, 10); let state = true; if (isReadOk) { if (_srfuf === 1) { if ((this.enableCond & 2) === 2) { state = false; } } else { if ((this.enableCond & 1) === 1) { state = false; } } } this.setDisabled(state); } /** * 加载数据 * * @param {*} context * @param {*} viewParams * @memberof PanelFieldController */ public async load(context: any, viewParams: any) { if (this.parentName) { let parentItem = this.panel.store.layoutModelDetails[`${this.parentName}_${this.index}`]; // 尝试找 if (!parentItem) { parentItem = this.panel.store.layoutModelDetails[this.parentName]; } if (parentItem && parentItem.getData()) { const parentItemData = parentItem.getData(); const key = this.dataItemName ? this.dataItemName : this.name; if (parentItemData) { this.data = parentItemData[key]; } } } } /** * 设置数据 * * @param {*} value * @memberof PanelFieldController */ public setData(value: any): void { this.data = value; if (!this.parentName) { return; } else { let parentItem = this.panel.store.layoutModelDetails[`${this.parentName}_${this.index}`]; // 尝试找 if (!parentItem) { parentItem = this.panel.store.layoutModelDetails[this.parentName]; } if (parentItem) { const key = this.dataItemName ? this.dataItemName : this.name; parentItem.setData({ name: key, value: value, index: this.index }); } } } /** * 重置当前项数据 * * @memberof PanelFieldController */ public reSetData() { this.data = null; } /** * 获取元素行内样式 * * @memberof PanelFieldController */ public getElementStyle() { const elementStyle = super.getElementStyle(); return elementStyle; } /** * 获取元素类名 * * @return {*} {IParam} * @memberof PanelFieldController */ public getClassNames() { const classNames = super.getClassNames(); Object.assign(classNames, this.getBoxContentClassNames()); return classNames; } /** * 获取编辑器动态样式表 * * @protected * @memberof PanelFieldController */ protected getEditorDynaClass() { const dynaClass = {}; try { const data = this.data; const content = this.context; const viewParams = this.viewParams; if (this.editorDynaClass) { Object.assign(dynaClass,...eval(this.editorDynaClass)) } } catch (error) { } return dynaClass; } /** * 获取文本内容布局类名 * * @protected * @return {*} * @memberof PanelFieldController */ protected getBoxContentClassNames() { const classNames = {}; if (this.wrapMode) { Object.assign(classNames, { [`wrap--${this.wrapMode.toLowerCase()}`]: true }); } if (this.hAlign) { Object.assign(classNames, { [`text-halign--${this.hAlign.toLowerCase()}`]: true }); } if (this.vAlign) { Object.assign(classNames, { [`text-valign--${this.vAlign.toLowerCase()}`]: true }); } return classNames; } /** * 标签直接样式 * * @memberof PanelFieldController */ public getLabelStyle() { const labelStyle = {}; if (this.labelCssStyle) { try { const labelStyles = this.labelCssStyle.split(';'); if (labelStyles && labelStyles.length > 0) { labelStyles.forEach((style: string) => { if (style) { const _style = style.split(':'); if (_style.length == 2) { Object.assign(labelStyle, { [_style[0]]: _style[1].trim().substring(1, _style[1].length - 2) }) } } }) } } catch (error) { } } return labelStyle; } /** * 获取标签动态样式表 * * @protected * @return {*} * @memberof PanelFieldController */ protected getLabelDynaClass() { const dynaClass = {}; try { const data = this.data; const content = this.context; const viewParams = this.viewParams; if (this.labelDynaClass) { Object.assign(dynaClass,...eval(this.labelDynaClass)) } } catch (error) { } return dynaClass; } }