import { Component } from 'vue-property-decorator';
import { VueLifeCycleProcessing, AppFormBase } from '@ibizstudio-ex/template-vue';
import { IPSAppDEView, IPSDEFormButton, IPSDEFormDRUIPart, IPSDEFormFormPart, IPSDEFormGroupPanel, IPSDEFormIFrame, IPSDEFormItem, IPSDEFormPage, IPSDEFormRawItem, IPSDEFormTabPage, IPSDEFormTabPanel } from '@ibizstudio-ex/runtime';
import './memo-form.less';
import { IPSDEFormDetail } from '@ibizstudio/api';
/**
* 备忘录表单插件类
*
* @export
* @class MemoForm
* @extends {Vue}
*/
@Component({})
@VueLifeCycleProcessing()
export class MemoForm extends AppFormBase {
memo: any;
collapsed:boolean = false;
created() {
const collapsed = localStorage.getItem('mome-form-collapsed');
if (collapsed) {
this.collapsed = JSON.parse(collapsed);
}
}
activated(): void {
const collapsed = localStorage.getItem('mome-form-collapsed');
if (collapsed) {
this.collapsed = JSON.parse(collapsed);
}
}
collapsedChange() {
this.collapsed = !this.collapsed;
localStorage.setItem('mome-form-collapsed', JSON.stringify(this.collapsed));
}
renderMemo() {
if (!this.memo) {
return null;
}
return
}
/**
* @description 自动保存
* @param {*} [opt={}]
* @return {*} {void}
* @memberof MemoForm
*/
autoSave(opt: any = {}): void {
if (!this.formValidateStatus()) {
return;
}
const arg: any = { ...opt };
const data = this.getData();
Object.assign(arg, data);
Object.assign(arg, { srfmajortext: data[this.majorMessageItemName] });
const action: any = Object.is(data.srfuf, '1') ? this.updateAction : this.createAction;
if (!action) {
this.$throw(`${this.controlInstance.codeName}` + (this.$t('app.formpage.notconfig.actionname') as string), 'autoSave');
return;
}
let tempContext: any = JSON.parse(JSON.stringify(this.context));
if (this.context.srfcallbacktype && this.context.srfcallbackid) {
Object.assign(arg, { srfcallbacktype: this.context.srfcallbacktype, srfcallbackid: this.context.srfcallbackid });
}
const post: Promise = this.service.add(action, tempContext, arg, this.showBusyIndicator);
post.then((response: any) => {
if (!response.status || response.status !== 200) {
this.$throw(response, 'autoSave');
return;
}
const data = response.data;
this.onFormLoad(data, 'autoSave');
this.ctrlEvent({
controlname: this.controlInstance.name,
action: 'save',
data: data,
});
this.$nextTick(() => {
this.formState.next({ type: 'save', action: 'autoSave', data: data });
});
})
.catch((response: any) => {
this.onControlResponse('autoSave', response);
if (response && response.status && response.data) {
this.$throw(response, 'autoSave', { dangerouslyUseHTMLString: true });
} else {
this.$throw(this.$t('app.commonwords.sysexception') as string, 'autoSave');
}
});
}
/**
* 根据detailType绘制对应detail
*
* @param {*} modelJson
* @param {number} index
* @memberof AppFormBase
*/
public renderByDetailType(modelJson: IPSDEFormDetail, index: number) {
if (modelJson.getPSSysPFPlugin()) {
const pluginInstance: any = this.PluginFactory.getPluginInstance(
'CONTROLITEM',
modelJson.getPSSysPFPlugin()?.pluginCode || '',
);
if (pluginInstance) {
return pluginInstance.renderCtrlItem(this.$createElement, modelJson, this, null);
}
} else {
switch (modelJson.detailType) {
case 'FORMPAGE':
return this.renderFormPage(modelJson as IPSDEFormPage, index);
case 'GROUPPANEL':
return this.renderGroupPanel(modelJson as IPSDEFormGroupPanel, index);
case 'TABPAGE':
return this.renderTabPage(modelJson as IPSDEFormTabPage, index);
case 'TABPANEL':
return this.renderTabPanel(modelJson as IPSDEFormTabPanel, index);
case 'FORMITEM':
const editor = (modelJson as IPSDEFormItem).getPSEditor();
if (editor) {
if (editor.editorStyle === 'noteEditor' && editor.editorType.toLowerCase() === 'textarea') {
this.memo = this.renderFormItem(modelJson as IPSDEFormItem, index);
return null;
}
}
return this.renderFormItem(modelJson as IPSDEFormItem, index);
case 'BUTTON':
return this.renderButton(modelJson as IPSDEFormButton, index);
case 'DRUIPART':
return this.renderDruipart(modelJson as IPSDEFormDRUIPart, index);
case 'RAWITEM':
return this.renderRawitem(modelJson as IPSDEFormRawItem, index);
case 'IFRAME':
return this.renderIframe(modelJson as IPSDEFormIFrame, index);
case 'FORMPART':
return this.renderFormPart(modelJson as IPSDEFormFormPart, index);
}
}
}
/**
* 绘制内容
*
* @returns
* @memberof AppFormBase
*/
public render(): any {
if (!this.controlIsLoaded) {
return null;
}
const { controlClassNames } = this.renderOptions;
const formId =
this.controlInstance.getPSAppDataEntity()?.codeName?.toLowerCase() +
this.controlInstance.codeName?.toLowerCase();
const controlStyle = {
width: this.controlInstance.width ? this.controlInstance.width + 'px' : '',
height: this.controlInstance.height ? this.controlInstance.height + 'px' : ''
};
const viewType = (this.controlInstance.getParentPSModelObject() as IPSAppDEView).viewType;
return (
{this.showFormNavBar && this.groupAnchorDatas.length > 0 ? : null}
{this.renderFormContent()}
{this.renderMemo()}
);
}
}