提交 57eaba84 编写于 作者: neko's avatar neko

init

上级 34b1d226
<#ibizinclude>
../@MACRO/HTML/FORM.html.ftl
</#ibizinclude>
\ No newline at end of file
.ivu-tabs-no-animation>.ivu-tabs-content{
padding: 0 16px;
}
.ivu-card-head{
padding: 14px 0;
}
.app-form {
flex-grow: 1;
height: 100%;
overflow: auto;
> .ivu-row {
height: 100%;
> .ivu-tabs {
height: 100%;
display: flex;
flex-direction: column;
> .ivu-tabs-content {
flex-grow: 1;
overflow: auto;
> .ivu-tabs-tabpane {
height: 100%;
}
}
}
}
}
.app-tabpanel-flex {
height: 100%;
> .ivu-tabs-content {
height: calc(100% - 52px);
> .ivu-tabs-tabpane {
height: 100%;
}
}
}
.app-form {
>.ivu-row:nth-child(2) {
>.ivu-col:nth-child(1) {
>.ivu-row.app-form-group.app-group-hiddden-caption:nth-child(1) {
margin-top: 12px;
}
}
}
}
<#ibizinclude>
../@MACRO/CSS/DEFAULT.less.ftl
</#ibizinclude>
\ No newline at end of file
<#ibizinclude>
../@MACRO/CONTROL/LANGBASE.tsx.ftl
</#ibizinclude>
<i-button type="primary" on-click={($event: any) => this.${item.getName()}_click($event)}
style="<#if item.getHeight() gt 0>height: ${item.getHeight()?c}px;</#if><#if item.getWidth() gt 0>width: ${item.getWidth()?c}px;</#if>">
<#if item.getPSSysImage()??><#assign img=item.getPSSysImage()><#if img.getCssClass()?? && (img.getCssClass()?length gt 0)><i class="${img.getCssClass()}"></i></#if></#if>
<#if item.isShowCaption()><span >{<#if item.getCaptionItemName()?? && item.getCaptionItemName()?length gt 0>this.data.${item.getCaptionItemName()}<#else><#if langbase??>this.$t('${langbase}.details.${item.name}')<#else>'${item.getCaption()}'</#if></#if>}</span></#if>
</i-button>
\ No newline at end of file
<#assign dritem = item.getPSDEDRItem()>
<app-form-druipart formState={this.formState} paramitem='<#if item.getParamItem()??>${item.getParamItem()}<#else>srfkey</#if>'
parentdata={<#if dritem.getParentDataJO?? && dritem.getParentDataJO()??>${dritem.getParentDataJO()}<#else>{}</#if>}
refviewtype='<#if item.getPSAppView()?? && item.getPSAppView().getPSViewType()??>${item.getPSAppView().getPSViewType().getId()}</#if>'
refreshitems='<#if item.getRefreshItems()??>${item.getRefreshItems()}</#if>'
ignorefieldvaluechange={this.ignorefieldvaluechange}
viewname='${srffilepath2(item.getPSAppView().codeName)}' data={JSON.stringify(this.data)} style="<#if item.getPSLayoutPos()?? && item.getPSLayoutPos().getLayout() == "FLEX">height: 100%</#if><#if item.getContentHeight() == 0><#if item.getPSAppView().getHeight() gt 0>height:${item.getPSAppView().getHeight()?c}px</#if><#else>height:${item.getContentHeight()?c}px</#if>;overflow: auto;">
</app-form-druipart>
<#if !item.isHidden()>
<#ibizinclude>
../@MACRO/CONTROL/LANGBASE.tsx.ftl
</#ibizinclude>
<app-form-item name='${item.name}' itemRules={JSON.stringify(this.rules.${item.name})} class='<#if item.getPSSysCss?? && item.getPSSysCss()??>${item.getPSSysCss().getCssName()}</#if>' caption={<#if langbase??>this.$t('${langbase}.details.${item.name}')<#else>'${item.getCaption()}'</#if>} uiStyle='${item.getDetailStyle()}' labelWidth={${item.getLabelWidth()?c}} isShowCaption={${item.isShowCaption()?c}} error={this.detailsModel.${item.name}.error} isEmptyCaption={${item.isEmptyCaption()?c}} labelPos='${item.getLabelPos()}'>
<#if item.isCompositeItem()>
<#assign formitems=item.getPSDEFormItems()>
<app-range-editor v-model={this.data.${item.name}} activeData={this.data} disabled={this.detailsModel.${item.name}.disabled} name="${item.name}" editorType="${item.getEditorType()}" format="${item.getEditorParam("TIMEFMT","")}" refFormItem={[<#list formitems as formitem><#if formitem_index gt 0>,</#if>'${formitem.name}'</#list>]} on-formitemvaluechange={this.onFormItemValueChange} style="${item.getEditorCssStyle()}"></app-range-editor>
<#else>
${P.getEditorCode(item, "EDITOR.tsx").code}
</#if>
</app-form-item>
</#if>
\ No newline at end of file
<#assign content>
<#list item.getPSDEFormDetails() as formmenber>
<#if !(formmenber.isHidden?? && formmenber.isHidden())>
<#ibizinclude>
../@MACRO/CONTROL/FORM_MEMBER_LAYOUT.tsx.ftl
</#ibizinclude>
</#if>
</#list>
</#assign>
<#if item.getPSLayout()?? && item.getPSLayout().getLayout() == "FLEX">
<#assign pageLayout = item.getPSLayout()>
<div style="height: 100%;display: flex;<#if pageLayout.getDir()!="">flex-direction: ${pageLayout.getDir()};</#if><#if pageLayout.getAlign()!="">justify-content: ${pageLayout.getAlign()};</#if><#if pageLayout.getVAlign()!="">align-items: ${pageLayout.getVAlign()};</#if>">
${content}
</div>
<#else>
${content}
</#if>
\ No newline at end of file
<#ibizinclude>
../@MACRO/CONTROL/LANGBASE.tsx.ftl
</#ibizinclude>
<app-form-group layoutType="<#if item.getPSLayoutPos()??>${item.getPSLayoutPos().getLayout()}</#if>" class='<#if item.getPSSysCss?? && item.getPSSysCss()??> ${item.getPSSysCss().getCssName()}</#if>' uiActionGroup={this.detailsModel.${item.name}.uiActionGroup} on-groupuiactionclick={($event:any) => this.groupUIActionClick($event)} caption={<#if langbase??>this.$t('${langbase}.details.${item.name}')<#else>'${item.getCaption()}'</#if>} isShowCaption={${item.isShowCaption()?c}} uiStyle={'${item.getDetailStyle()}'} titleBarCloseMode={${item.getTitleBarCloseMode()}} isInfoGroupMode={${item.isInfoGroupMode()?c}}>
<#assign content>
<#list item.getPSDEFormDetails() as formmenber>
<#if !(formmenber.isHidden?? && formmenber.isHidden())>
<#ibizinclude>
../@MACRO/CONTROL/FORM_MEMBER_LAYOUT.tsx.ftl
</#ibizinclude>
</#if>
</#list>
</#assign>
<#if item.getPSLayout()?? && item.getPSLayout().getLayout() == "FLEX">
<#assign pageLayout = item.getPSLayout()>
<div style="height: 100%;display: flex;<#if pageLayout.getDir()!="">flex-direction: ${pageLayout.getDir()};</#if><#if pageLayout.getAlign()!="">justify-content: ${pageLayout.getAlign()};</#if><#if pageLayout.getVAlign()!="">align-items: ${pageLayout.getVAlign()};</#if>">
${content}
</div>
<#else>
<row>
${content}
</row>
</#if>
</app-form-group>
\ No newline at end of file
<div style="height:${item.getContentHeight()}px;">${item.getIFrameUrl()}</div>
\ No newline at end of file
<#if item.getLogicType() == 'GROUP'><#if item.isNotMode()>!(</#if><#if item.getPSDEFDLogics()??><#list item.getPSDEFDLogics() as subLogic><#if subLogic_index gt 0><#if item.getGroupOP() == 'AND'> && </#if><#if item.getGroupOP() == 'OR'> || </#if></#if>${P.getPartCode(subLogic, 'DETAIL_LOGIC').code}</#list></#if><#if item.isNotMode()>)</#if><#elseif item.getLogicType() == 'SINGLE'>this.$util.testCond(_${item.getDEFDName()?lower_case}, '${item.getPSDBValueOPId()}', '${item.getValue()}')</#if>
\ No newline at end of file
<#ibizinclude>
../@MACRO/CONTROL/LANGBASE.tsx.ftl
</#ibizinclude>
<#assign detail>caption: '${item.getCaption()}', detailType: '${item.getDetailType()}', name: '${item.getName()}', visible: <#if item.getPSDEFDGroupLogic('PANELVISIBLE')??>false<#else>true</#if>, isShowCaption: ${item.isShowCaption()?c}, form: this</#assign>
<#if item.getDetailType() == 'BUTTON'>
new FormButtonModel({ ${detail}<#if item.getPSUIAction()??><#assign uiaction=item.getPSUIAction()>, uiaction: { type: '${uiaction.getUIActionType()}',
tag: '${uiaction.getUIActionTag()}'<#if (uiaction.getActionTarget()!="")>, actiontarget: '${uiaction.getActionTarget()}'</#if> }</#if> })
<#elseif item.getDetailType() == 'DRUIPART'>
new FormDRUIPartModel({ ${detail} })
<#elseif item.getDetailType() == 'FORMITEM'>
new FormItemModel({ ${detail}, disabled: false, enableCond: ${item.getEnableCond()?c} })
<#elseif item.getDetailType() == 'FORMPAGE'>
new FormPageModel({ ${detail} })
<#elseif item.getDetailType() == 'FORMPART'>
new FormPartModel({ ${detail} })
<#elseif item.getDetailType() == 'GROUPPANEL'>
new FormGroupPanelModel({ ${detail}, uiActionGroup: { caption: '<#if item.getPSUIActionGroup()??>${item.getPSUIActionGroup().getName()}</#if>', langbase: '<#if langbase??>${langbase}</#if>', extractMode: '<#if item.getActionGroupExtractMode?? && item.getActionGroupExtractMode()??>${item.getActionGroupExtractMode()}<#else>ITEM</#if>', details: [<#if item.getPSUIActionGroup()??><#list item.getPSUIActionGroup().getPSUIActionGroupDetails() as uadetails><#if uadetails_index gt 0>, </#if>{ name: '${item.getName()}_${uadetails.getName()}', caption: '${uadetails.getPSUIAction().getCaption()}', uiactiontag: '${uadetails.getPSUIAction().getUIActionTag()?lower_case}'<#if uadetails.getPSUIAction().getPSSysImage()??>, <#assign viewimg=uadetails.getPSUIAction().getPSSysImage()/><#if viewimg.getCssClass() != ''>icon: '${viewimg.getCssClass()}'<#else>img: '${viewimg.getImagePath()}'</#if></#if> }</#list></#if>] } })
<#elseif item.getDetailType() == 'IFRAME'>
new FormIFrameModel({ ${detail} })
<#elseif item.getDetailType() == 'RAWITEM'>
new FormRowItemModel({ ${detail} })
<#elseif item.getDetailType() == 'TABPAGE'>
new FormTabPageModel({ ${detail} })
<#elseif item.getDetailType() == 'TABPANEL'>
new FormTabPanelModel({ ${detail}, tabPages: [<#list item.getPSDEFormTabPages() as formmenber><#if formmenber_index gt 0>, </#if>{ name: '${formmenber.name}', index: ${formmenber_index}, visible: <#if formmenber.getPSDEFDGroupLogic('PANELVISIBLE')??>false<#else>true</#if> }</#list>] })
<#elseif item.getDetailType() == 'USERCONTROL'>
new FormUserControlModel({ ${detail} })
</#if>
\ No newline at end of file
<#if item.render??>
${item.render.code}
<#else>
<div class="<#if item.getPSSysCss()??>${item.getPSSysCss().getCssName()}</#if>" style="<#if item.getRawContentHeight() gt 0>height: ${item.getRawContentHeight()?c}px;</#if><#if item.getRawContentWidth() gt 0>width: ${item.getRawContentWidth()?c}px;</#if>">
${item.getRawContent()}
</div>
</#if>
\ No newline at end of file
<#assign content>
<#list item.getPSDEFormDetails() as formmenber>
<#if !(formmenber.isHidden?? && formmenber.isHidden())>
<#ibizinclude>
../@MACRO/CONTROL/FORM_MEMBER_LAYOUT.tsx.ftl
</#ibizinclude>
</#if>
</#list>
</#assign>
<#if item.getPSLayout()?? && item.getPSLayout().getLayout() == "FLEX">
<#assign pageLayout = item.getPSLayout()>
<div style="height: 100%;display: flex;<#if pageLayout.getDir()!="">flex-direction: ${pageLayout.getDir()};</#if><#if pageLayout.getAlign()!="">justify-content: ${pageLayout.getAlign()};</#if><#if pageLayout.getVAlign()!="">align-items: ${pageLayout.getVAlign()};</#if>">
${content}
</div>
<#else>
${content}
</#if>
\ No newline at end of file
<#ibizinclude>
../@MACRO/CONTROL/LANGBASE.tsx.ftl
</#ibizinclude>
<tabs animated={false} name='${item.name}' v-show={this.detailsModel.${item.name}.visible} class='<#if item.getPSSysCss?? && item.getPSSysCss()??>${item.getPSSysCss().getCssName()}</#if><#if item.getPSLayoutPos()?? && item.getPSLayoutPos().getLayout() == "FLEX"> app-tabpanel-flex</#if>'
value={this.detailsModel.${item.name}.activiedPage} on-on-click={($event: any) => this.detailsModel.${item.name}.clickPage($event)}>
<#list item.getPSDEFormTabPages() as formmenber>
{
this.detailsModel.${formmenber.name}.visible ?
<tab-pane name='${formmenber.name}' index={${formmenber_index}} tab='${item.name}' class='<#if formmenber.getPSSysCss?? && formmenber.getPSSysCss()??>${formmenber.getPSSysCss().getCssName()}</#if>'
label={
(h: any) => {
return (
<span class='caption<#if formmenber.getLabelPSSysCss?? && formmenber.getLabelPSSysCss()??> ${formmenber.getLabelPSSysCss().getCssName()}</#if>'>
<#if formmenber.getPSSysImage()??>
<span>
<#assign sysimage = formmenber.getPSSysImage()/>
<#if sysimage.getImagePath() == "">
<i class='${sysimage.getCssClass()}'></i>&nbsp;
<#else>
<img src='${sysimage.getImagePath()}'/>&nbsp;
</#if>
</span>
</#if>
{<#if langbase??>this.$t('${langbase}.details.${formmenber.name}')<#else>'${formmenber.getCaption()}'</#if>}
</span>
);
}
}>
${P.getPartCode(formmenber).code}
</tab-pane>
: ''
}
</#list>
</tabs>
\ No newline at end of file
<#if item.render??>
${item.render.code}
<#else>
表单自定义部件没有定义插件
</#if>
\ No newline at end of file
<#ibizinclude>
../@MACRO/CONTROL/LANGBASE.tsx.ftl
</#ibizinclude>
<i-form props={{ model: this.data }} class='app-form<#if ctrl.getPSSysCss()??> ${ctrl.getPSSysCss().getCssName()}</#if><#if ctrl.isInfoFormMode?? && ctrl.isInfoFormMode()> info-form-mode</#if>' ref='${ctrl.name}' style="<#if ctrl.getFormWidth() gt 1>width: ${ctrl.getFormWidth()?c}px;</#if>">
<input style={{ display: 'none' }}></input>
<row >
<#if ctrl.isNoTabHeader()>
<#list ctrl.getPSDEFormPages() as formmenber>
${P.getPartCode(formmenber).code}
</#list>
<#else>
<tabs animated={false} name='${ctrl.name}' value={this.detailsModel.${ctrl.name}.activiedPage}
on-on-click={($event: any) => this.detailsModel.${ctrl.name}.clickPage($event)}>
<#list ctrl.getPSDEFormPages() as formpage>
{
this.detailsModel.${formpage.name}.visible ?
<tab-pane name='${formpage.name}' index={${formpage_index}} tab='${ctrl.name}' class='<#if formpage.getPSSysCss?? && formpage.getPSSysCss()??>${formpage.getPSSysCss().getCssName()}</#if>'
label={
(h: any) => {
return (
<span class='caption<#if formpage.getLabelPSSysCss?? && formpage.getLabelPSSysCss()??> ${formpage.getLabelPSSysCss().getCssName()}</#if>'>
<#if formpage.getPSSysImage()??>
<span>
<#assign sysimage = formpage.getPSSysImage()/>
<#if sysimage.getImagePath() == "">
<i class='${sysimage.getCssClass()}'></i>&nbsp;
<#else>
<img src='${sysimage.getImagePath()}'/>&nbsp;
</#if>
</span>
</#if>
{<#if langbase??>this.$t('${langbase}.details.${formpage.name}')<#else>'${formpage.getCaption()}'</#if>}
</span>
);
}
}>
${P.getPartCode(formpage).code}
</tab-pane>
: ''
}
</#list>
</tabs>
</#if>
</row>
</i-form>
\ No newline at end of file
<#list ctrl.getAllPSDEFormDetails() as formdetail>
<#if formdetail.getPSDEFDGroupLogic('ITEMBLANK')??>
<#assign ITEMBLANK = formdetail.getPSDEFDGroupLogic('ITEMBLANK')/>
if (Object.is(name, '')<#if ITEMBLANK.getRelatedDetailNames()??><#list ITEMBLANK.getRelatedDetailNames() as detailName> || Object.is(name, '${detailName}')</#list></#if>) {
let ret = true;
<#if ITEMBLANK.getRelatedDetailNames()??>
<#list ITEMBLANK.getRelatedDetailNames() as detailName>
const _${detailName} = this.data.${detailName};
</#list>
</#if>
if (${P.getPartCode(ITEMBLANK, 'DETAIL_LOGIC').code}) {
ret = false;
}
this.rules.${formdetail.name}.some((rule: any) => {
if (rule.hasOwnProperty('required')) {
rule.required = ret;
}
return false;
});
}
</#if>
<#if formdetail.getPSDEFDGroupLogic('ITEMENABLE')??>
<#assign ITEMENABLE = formdetail.getPSDEFDGroupLogic('ITEMENABLE')/>
if (Object.is(name, '')<#if ITEMENABLE.getRelatedDetailNames()??><#list ITEMENABLE.getRelatedDetailNames() as detailName> || Object.is(name, '${detailName}')</#list></#if>) {
let ret = false;
<#if ITEMENABLE.getRelatedDetailNames()??>
<#list ITEMENABLE.getRelatedDetailNames() as detailName>
const _${detailName} = this.data.${detailName};
</#list>
</#if>
if (${P.getPartCode(ITEMENABLE, 'DETAIL_LOGIC').code}) {
ret = true;
}
this.detailsModel.${formdetail.name}.setDisabled(!ret);
}
</#if>
<#if formdetail.getPSDEFDGroupLogic('PANELVISIBLE')??>
<#assign PANELVISIBLE = formdetail.getPSDEFDGroupLogic('PANELVISIBLE')/>
if (Object.is(name, '')<#if PANELVISIBLE.getRelatedDetailNames()??><#list PANELVISIBLE.getRelatedDetailNames() as detailName> || Object.is(name, '${detailName}')</#list></#if>) {
let ret = false;
<#if PANELVISIBLE.getRelatedDetailNames()??>
<#list PANELVISIBLE.getRelatedDetailNames() as detailName>
const _${detailName} = this.data.${detailName};
</#list>
</#if>
if (${P.getPartCode(PANELVISIBLE, 'DETAIL_LOGIC').code}) {
ret = true;
}
this.detailsModel.${formdetail.name}.setVisible(ret);
}
</#if>
</#list>
\ No newline at end of file
<#assign import_block>
import { FormButtonModel, FormPageModel, FormItemModel, FormDRUIPartModel, FormPartModel, FormGroupPanelModel, FormIFrameModel, FormRowItemModel, FormTabPageModel, FormTabPanelModel, FormUserControlModel } from '@/model/form-detail';
import { debounceTime, distinctUntilChanged } from 'rxjs/operators';
</#assign>
<#ibizinclude>
../@MACRO/CONTROL/CONTROL_HEADER.tsx.ftl
</#ibizinclude>
/**
* 获取多项数据
*
* @returns {any[]}
* @memberof ${srfclassname('${ctrl.codeName}')}
*/
public getDatas(): any[] {
return [this.data];
}
/**
* 获取单项树
*
* @returns {*}
* @memberof ${srfclassname('${ctrl.codeName}')}
*/
public getData(): any {
return this.data;
}
/**
* 是否默认保存
*
* @type {boolean}
* @memberof ${srfclassname('${ctrl.codeName}')}
*/
@Prop({ default: false }) public autosave?: boolean;
/**
* 显示处理提示
*
* @type {boolean}
* @memberof ${srfclassname('${ctrl.codeName}')}
*/
@Prop({ default: true }) public showBusyIndicator?: boolean;
/**
* 部件行为--更新
*
* @type {string}
* @memberof ${srfclassname('${ctrl.codeName}')}
*/
@Prop() public updateAction?: string;
/**
* 部件行为--加载草稿
*
* @type {string}
* @memberof ${srfclassname('${ctrl.codeName}')}
*/
@Prop() public loaddraftformAction?: string;
/**
* 部件行为--删除
*
* @type {string}
* @memberof ${srfclassname('${ctrl.codeName}')}
*/
@Prop() public removeAction?: string;
/**
* 部件行为--加载草稿
*
* @type {string}
* @memberof ${srfclassname('${ctrl.codeName}')}
*/
@Prop() public loaddraftAction?: string;
/**
* 部件行为--加载
*
* @type {string}
* @memberof ${srfclassname('${ctrl.codeName}')}
*/
@Prop() public loadAction?: string;
/**
* 部件行为--创建
*
* @type {string}
* @memberof ${srfclassname('${ctrl.codeName}')}
*/
@Prop() public createAction?: string;
/**
* 视图标识
*
* @type {string}
* @memberof ${srfclassname('${ctrl.codeName}')}
*/
@Prop() public viewtag!: string;
/**
* Api地址
*
* @type {string}
* @memberof ${srfclassname('${ctrl.codeName}')}
*/
public url: string = '<#ibizinclude>../@MACRO/CONTROL/URL.tsx.ftl</#ibizinclude>';
/**
* 表单状态
*
* @type {Subject<any>}
* @memberof ${srfclassname('${ctrl.codeName}')}
*/
public formState: Subject<any> = new Subject();
/**
* 忽略表单项值变化
*
* @type {boolean}
* @memberof ${srfclassname('${ctrl.codeName}')}
*/
public ignorefieldvaluechange: boolean = false;
/**
* 数据变化
*
* @private
* @type {Subject<any>}
* @memberof ${srfclassname('${ctrl.codeName}')}
*/
private dataChang: Subject<any> = new Subject();
/**
* 视图状态事件
*
* @private
* @type {(Subscription | undefined)}
* @memberof ${srfclassname('${ctrl.codeName}')}
*/
private dataChangEvent: Subscription | undefined;
/**
* 原始数据
*
* @private
* @type {*}
* @memberof ${srfclassname('${ctrl.codeName}')}
*/
private oldData: any = {};
/**
* 表单数据对象
*
* @type {*}
* @memberof ${srfclassname('${ctrl.codeName}')}
*/
public data: any = {
<#list ctrl.getPSDEFormItems() as item>
${item.getName()}: null,
</#list>
};
/**
* 属性值规则
*
* @type {*}
* @memberof ${srfclassname('${ctrl.codeName}')}
*/
public rules: any = {
<#list ctrl.getAllPSDEFormDetails() as formdetail>
<#if formdetail.getDetailType?? && formdetail.getDetailType() == 'FORMITEM'>
${formdetail.getName()}: [
{ type: '<#assign datatype=srfjavatype(formdetail.getStdDataType())><#if datatype=='BigInteger' || datatype=='Integer' || datatype=='Double'>number<#else>string</#if>', message: '${formdetail.getCaption()} 值必须为<#if datatype=='BigInteger' || datatype=='Integer' || datatype=='Double'>数值<#else>字符串</#if>类型', trigger: 'change' },
{ required: <#if formdetail.isAllowEmpty()>false<#else>true</#if>, type: '<#assign datatype=srfjavatype(formdetail.getStdDataType())><#if datatype=='BigInteger' || datatype=='Integer' || datatype=='Double'>number<#else>string</#if>', message: '${formdetail.getCaption()} 值不能为空', trigger: 'change' },
{ required: <#if formdetail.isAllowEmpty()>false<#else>true</#if>, type: '<#assign datatype=srfjavatype(formdetail.getStdDataType())><#if datatype=='BigInteger' || datatype=='Integer' || datatype=='Double'>number<#else>string</#if>', message: '${formdetail.getCaption()} 值不能为空', trigger: 'blur' },
],
</#if>
</#list>
}
/**
* 详情模型集合
*
* @type {*}
* @memberof ${srfclassname('${ctrl.codeName}')}
*/
public detailsModel: any = {
<#list ctrl.getAllPSDEFormDetails() as formdetail>
${formdetail.name}: ${P.getPartCode(formdetail, 'DETAIL_MODEL').code},
</#list>
<#if !ctrl.isNoTabHeader()>
${ctrl.name}: new FormTabPanelModel({ caption: '${ctrl.name}', detailType: 'TABPANEL', name: '${ctrl.name}', visible: true, isShowCaption: true, form: this, tabPages: [<#list ctrl.getPSDEFormPages() as formmenber><#if formmenber_index gt 0>, </#if>{ name: '${formmenber.name}', index: ${formmenber_index}, visible: <#if formmenber.getPSDEFDGroupLogic('PANELVISIBLE')??>false<#else>true</#if> }</#list>] }),
</#if>
};
<#list ctrl.getPSDEFormItems() as item>
/**
* 监控表单属性 ${item.getName()} 值
*
* @param {*} newVal
* @param {*} oldVal
* @memberof ${srfclassname('${ctrl.codeName}')}
*/
@Watch('data.${item.getName()}')
on${srfclassname('${item.getName()}')}Change(newVal: any, oldVal: any) {
this.formDataChange({ name: '${item.getName()}', newVal: newVal, oldVal: oldVal });
}
</#list>
/**
* 重置表单项值
*
* @private
* @param {{ name: string, newVal: any, oldVal: any }} { name, newVal, oldVal }
* @memberof ${srfclassname('${ctrl.codeName}')}
*/
private resetFormData({ name, newVal, oldVal }: { name: string, newVal: any, oldVal: any }): void {
<#list ctrl.getPSDEFormItems() as item>
<#if item.getResetItemName?? && item.getResetItemName()??>
if (Object.is(name, '${item.getResetItemName()}')) {
this.onFormItemValueChange({ name: '${item.getName()}', value: null });
<#if item.getValueItemName()?? && item.getValueItemName() != ''>
this.onFormItemValueChange({ name: '${item.getValueItemName()}', value: null });
</#if>
}
</#if>
</#list>
}
/**
* 表单逻辑
*
* @private
* @param {{ name: string, newVal: any, oldVal: any }} { name, newVal, oldVal }
* @memberof ${srfclassname('${ctrl.codeName}')}
*/
private formLogic({ name, newVal, oldVal }: { name: string, newVal: any, oldVal: any }): void {
<#if P.getPartCode(item,'FORM_LOGIC').code?length gt 0>
${P.getPartCode(item,'FORM_LOGIC').code}
</#if>
<#if ctrl.getPSDEFormItems()??>
<#list ctrl.getPSDEFormItems() as formitem>
<#if formitem.getPSDEFormItemUpdate()??>
<#assign itemUpdate=formitem.getPSDEFormItemUpdate()/>
if(Object.is(name, '${formitem.name}')){
const details: string[] = [<#list itemUpdate.getPSDEFIUpdateDetails() as detail><#if detail_index gt 0>, </#if>'${detail.getPSDEFormDetailName()?lower_case}'</#list>];
this.updateFormItems('${itemUpdate.codeName}', this.data, details, ${itemUpdate.isShowBusyIndicator()?c});
}
</#if>
</#list>
</#if>
}
/**
* 表单值变化
*
* @private
* @param {{ name: string, newVal: any, oldVal: any }} { name, newVal, oldVal }
* @returns {void}
* @memberof ${srfclassname('${ctrl.codeName}')}
*/
private formDataChange({ name, newVal, oldVal }: { name: string, newVal: any, oldVal: any }): void {
if (this.ignorefieldvaluechange) {
return;
}
this.resetFormData({ name: name, newVal: newVal, oldVal: oldVal });
this.formLogic({ name: name, newVal: newVal, oldVal: oldVal });
this.dataChang.next(JSON.stringify(this.data));
}
/**
* 表单加载完成
*
* @private
* @param {*} [data={}]
* @memberof ${srfclassname('${ctrl.codeName}')}
*/
private onFormLoad(data: any = {}): void {
this.setFormEnableCond(data);
this.fillForm(data);
<#if ctrl.getControlType() == 'FORM'>
this.oldData = {};
Object.assign(this.oldData, JSON.parse(JSON.stringify(this.data)));
this.$store.commit('viewaction/setViewDataChange', { viewtag: this.viewtag, viewdatachange: false });
</#if>
this.formLogic({ name: '', newVal: null, oldVal: null });
}
/**
* 值填充
*
* @param {*} [_datas={}]
* @memberof ${srfclassname('${ctrl.codeName}')}
*/
public fillForm(_datas: any = {}): void {
this.ignorefieldvaluechange = true;
Object.keys(_datas).forEach((name: string) => {
if (this.data.hasOwnProperty(name)) {
this.data[name] = _datas[name];
}
});
this.$nextTick(function () {
this.ignorefieldvaluechange = false;
})
}
/**
* 设置表单项是否启用
*
* @protected
* @param {*} data
* @memberof ${srfclassname('${ctrl.codeName}')}
*/
protected setFormEnableCond(data: any): void {
Object.values(this.detailsModel).forEach((detail: any) => {
if (!Object.is(detail.detailType, 'FORMITEM')) {
return;
}
const formItem: FormItemModel = detail;
formItem.setEnableCond(data.srfuf);
});
}
/**
* 重置草稿表单状态
*
* @private
* @memberof ${srfclassname('${ctrl.codeName}')}
*/
private resetDraftFormStates(): void {
const form: any = this.$refs.form;
if (form) {
form.resetFields();
}
}
/**
* 重置校验结果
*
* @memberof ${srfclassname('${ctrl.codeName}')}
*/
public resetValidates(): void {
Object.values(this.detailsModel).forEach((detail: any) => {
if (!Object.is(detail.detailType, 'FORMITEM')) {
return;
}
const formItem: FormItemModel = detail;
formItem.setError('');
});
}
/**
* 填充校验结果 (后台)
*
* @param {any[]} fieldErrors
* @memberof ${srfclassname('${ctrl.codeName}')}
*/
public fillValidates(fieldErrors: any[]): void {
fieldErrors.forEach((error: any) => {
const formItem: FormItemModel = this.detailsModel[error.field];
if (!formItem) {
return;
}
this.$nextTick(() => {
formItem.setError(error.message);
});
});
}
/**
* 表单校验状态
*
* @returns {boolean}
* @memberof ${srfclassname('${ctrl.codeName}')}
*/
public formValidateStatus(): boolean {
const form: any = this.$refs.${ctrl.name};
let validatestate: boolean = true;
form.validate((valid: boolean) => {
validatestate = valid ? true : false;
});
return validatestate
}
/**
* 获取全部值
*
* @returns {*}
* @memberof ${srfclassname('${ctrl.codeName}')}
*/
public getValues(): any {
return this.data;
}
/**
* 表单项值变更
*
* @param {{ name: string, value: any }} $event
* @returns {void}
* @memberof ${srfclassname('${ctrl.codeName}')}
*/
public onFormItemValueChange($event: { name: string, value: any }): void {
if (!$event) {
return;
}
if (!$event.name || Object.is($event.name, '') || !this.data.hasOwnProperty($event.name)) {
return;
}
this.data[$event.name] = $event.value;
}
/**
* 设置数据项值
*
* @param {string} name
* @param {*} value
* @returns {void}
* @memberof ${srfclassname('${ctrl.codeName}')}
*/
public setDataItemValue(name: string, value: any): void {
if (!name || Object.is(name, '') || !this.data.hasOwnProperty(name)) {
return;
}
if (Object.is(this.data[name], value)) {
return;
}
this.data[name] = value;
}
<#list ctrl.getAllPSDEFormDetails() as formdetail>
<#if formdetail.getDetailType?? && formdetail.getDetailType() == 'BUTTON'>
<#if formdetail.getActionType?? && formdetail.getActionType()??>
<#if formdetail.getActionType() == 'UIACTION'>
/**
* 表单 ${formdetail.getCaption()} 事件
*
* @memberof @memberof ${srfclassname('${ctrl.codeName}')}
*/
public ${formdetail.getName()}_click($event: any): void {
<#if formdetail.getPSUIAction?? && formdetail.getPSUIAction()??>
<#assign uiaction = formdetail.getPSUIAction()>
this.${ctrl.name}_${formdetail.getName()}_click(null, null, $event);
</#if>
}
</#if>
<#if formdetail.getActionType() == 'FIUPDATE'>
/**
* 表单 ${formdetail.getCaption()} 事件
*
* @memberof @memberof ${srfclassname('${ctrl.codeName}')}
*/
public ${formdetail.getName()}_click($event: any): void {
<#assign itemUpdate=formdetail.getPSDEFormItemUpdate()/>
<#if formdetail.getParamPickupPSAppView()??>
<#assign pickupview = formdetail.getParamPickupPSAppView()>
const view: any = {
viewname: '${srffilepath2(pickupview.getCodeName())}',
title: '${pickupview.getTitle()}',
height: ${pickupview.getHeight()?c},
width: ${pickupview.getWidth()?c},
<#if formdetail.getParamViewParamJO()??>
paramjo: ${formdetail.getParamViewParamJO()},
</#if>
}
const data: any = {
srfparentdata: {
srfparentkey: this.data.srfkey,
}
};
if(view.paramjo) {
Object.keys(view.paramjo).every((name: string) => {
if (!name) {
return true;
}
let value: string = view.paramjo[name];
if (value && value.startsWith('%') && value.endsWith('%')) {
const key: string = value.substring(1, value.length - 1);
if (!this.data.hasOwnProperty(key)) {
this.$Notice.error({ title: '错误', desc: `操作失败,未能找到当前表单项${r'${key}'},无法继续操作` });
return false;
}
value = this.data[key];
}
Object.assign(data.srfparentdata, { [name]: value });
return true;
});
}
this.$appmodal.openModal(view, data).subscribe((result: any) => {
if (result && Object.is(result.ret, 'OK') && result.datas && Array.isArray(result.datas)) {
const arg: any = { ...JSON.parse(JSON.stringify(this.data)) } ;
Object.assign(arg, { srfactionparam: result.datas });
const details: string[] = [<#list itemUpdate.getPSDEFIUpdateDetails() as detail><#if detail_index gt 0>, </#if>'${detail.getPSDEFormDetailName()?lower_case}'</#list>];
this.updateFormItems('${itemUpdate.codeName}', arg, details, ${itemUpdate.isShowBusyIndicator()?c});
}
});
<#else>
const details: string[] = [<#list itemUpdate.getPSDEFIUpdateDetails() as detail><#if detail_index gt 0>, </#if>'${detail.getPSDEFormDetailName()?lower_case}'</#list>];
this.updateFormItems('${itemUpdate.codeName}', this.data, details, ${itemUpdate.isShowBusyIndicator()?c});
</#if>
}
</#if>
</#if>
</#if>
</#list>
/**
* 分组界面行为事件
*
* @param {*} $event
* @memberof ${srfclassname('${ctrl.codeName}')}
*/
public groupUIActionClick($event: any): void {
if (!$event) {
return;
}
const item:any = $event.item;
<#list ctrl.getAllPSDEFormDetails() as formdetail>
<#if formdetail.getDetailType?? && formdetail.getDetailType() == 'GROUPPANEL'>
<#if formdetail.getPSUIActionGroup()??>
<#list formdetail.getPSUIActionGroup().getPSUIActionGroupDetails() as uadetails>
if (Object.is(item.name, '${formdetail.getName()}_${uadetails.getName()}')) {
this.${ctrl.name}_${formdetail.getName()}_${uadetails.getName()}_click(null, null, $event.event);
}
</#list>
</#if>
</#if>
</#list>
}
/**
* Vue声明周期(处理组件的输入属性)
*
* @memberof ${srfclassname('${ctrl.codeName}')}
*/
public created(): void {
if (this.viewState) {
this.viewStateEvent = this.viewState.subscribe(({ tag, action, data }) => {
if (!Object.is(tag, this.name)) {
return;
}
if (Object.is('autoload', action)) {
this.autoLoad(data);
}
if (Object.is('load', action)) {
this.load(data);
}
if (Object.is('loaddraft', action)) {
this.loadDraft(data);
}
if (Object.is('save', action)) {
this.save(data);
}
});
}
this.dataChang
.pipe(
debounceTime(300),
distinctUntilChanged()
).subscribe((data: any) => {
if (this.autosave) {
this.autoSave();
}
<#if ctrl.getControlType() == 'FORM'>
const state = !Object.is(JSON.stringify(this.oldData), JSON.stringify(this.data)) ? true : false;
this.$store.commit('viewaction/setViewDataChange', { viewtag: this.viewtag, viewdatachange: state });
</#if>
<#if ctrl.getControlType() == 'SEARCHFORM' && ctrl.isEnableAutoSearch()>
this.$emit('load', this.data);
</#if>
});
}
/**
* vue 生命周期
*
* @memberof ${srfclassname('${ctrl.codeName}')}
*/
public destroyed() {
if (this.viewStateEvent) {
this.viewStateEvent.unsubscribe();
}
if (this.dataChangEvent) {
this.dataChangEvent.unsubscribe();
}
<#if destroyed_block??>
${destroyed_block}
</#if>
}
/**
* 拷贝内容
*
* @param {*} [arg={}]
* @memberof @memberof ${srfclassname('${ctrl.codeName}')}
*/
public copy(arg: any = {}): void {
this.loadDraft(arg);
}
/**
* 部件刷新
*
* @param {any[]} args
* @memberof ${srfclassname('${ctrl.codeName}')}
*/
public refresh(args: any[]): void {
let arg: any = {};
if (this.data.srfkey && !Object.is(this.data.srfkey, '')) {
Object.assign(arg, { srfkey: this.data.srfkey });
this.load(arg);
return;
}
if (this.data.srfkeys && !Object.is(this.data.srfkeys, '')) {
Object.assign(arg, { srfkey: this.data.srfkeys });
this.load(arg);
return;
}
}
/**
* 自动加载
*
* @param {*} [arg={}]
* @returns {void}
* @memberof ${srfclassname('${ctrl.codeName}')}
*/
public autoLoad(arg: any = {}): void {
if (arg.srfkey && !Object.is(arg.srfkey, '')) {
Object.assign(arg, { srfkey: arg.srfkey });
this.load(arg);
return;
}
if (arg.srfkeys && !Object.is(arg.srfkeys, '')) {
Object.assign(arg, { srfkey: arg.srfkeys });
this.load(arg);
return;
}
this.loadDraft(arg);
}
/**
* 加载
*
* @private
* @param {*} [opt={}]
* @memberof ${srfclassname('${ctrl.codeName}')}
*/
private load(opt: any = {}): void {
const arg: any = { ...opt };
this.serialNumber++;
const serialnumber = this.serialNumber;
this.addSerialNumber(this.loadAction, serialnumber);
const get: Promise<any> = this.$http.get(this.url + this.loadAction, arg, this.showBusyIndicator, serialnumber);
get.then((response: any) => {
const { serialnumber: _serialnumber } = response;
const lastserialnumber = this.getSerialNumber(this.loadAction);
if (_serialnumber && lastserialnumber && _serialnumber < lastserialnumber) {
return;
}
if (response && response.status === 200) {
const data = response.data;
this.onFormLoad(data);
this.$emit('load', data);
this.$nextTick(() => {
this.formState.next({ type: 'load', data: data });
});
}
}).catch((response: any) => {
const { serialnumber: _serialnumber } = response;
const lastserialnumber = this.getSerialNumber(this.loadAction);
if (_serialnumber && lastserialnumber && _serialnumber < lastserialnumber) {
return;
}
if (response && response.status === 401) {
return;
}
if (!response || !response.status || !response.data) {
this.$Notice.error({ title: '错误', desc: '系统异常' });
return;
}
const { data: _data } = response;
this.$Notice.error({ title: _data.title, desc: _data.message });
});
}
/**
* 加载草稿
*
* @param {*} [opt={}]
* @memberof ${srfclassname('${ctrl.codeName}')}
*/
public loadDraft(opt: any = {}): void {
const arg: any = { ...opt } ;
this.serialNumber++;
const serialnumber = this.serialNumber;
this.addSerialNumber(this.loaddraftAction, serialnumber);
let post: Promise<any> = this.$http.post(this.url + this.loaddraftAction, arg, this.showBusyIndicator, serialnumber);
post.then((response: any) => {
const { serialnumber: _serialnumber } = response;
const lastserialnumber = this.getSerialNumber(this.loaddraftAction);
if (_serialnumber && lastserialnumber && _serialnumber < lastserialnumber) {
return;
}
if (!response.status || response.status !== 200) {
if (response.errorMessage) {
this.$Notice.error({ title: '错误', desc: response.errorMessage });
}
return;
}
const data = response.data;
this.resetDraftFormStates();
this.onFormLoad(data);
this.$emit('load', data);
this.$nextTick(() => {
this.formState.next({ type: 'load', data: data });
});
setTimeout(() => {
const form: any = this.$refs.form;
if (form) {
form.fields.forEach((field: any) => {
field.validateMessage = "";
field.validateState = "";
field.validateStatus = false;
});
}
});
}).catch((response: any) => {
const { serialnumber: _serialnumber } = response;
const lastserialnumber = this.getSerialNumber(this.loaddraftAction);
if (_serialnumber && lastserialnumber && _serialnumber < lastserialnumber) {
return;
}
if (response && response.status === 401) {
return;
}
if (!response || !response.status || !response.data) {
this.$Notice.error({ title: '错误', desc: '系统异常' });
return;
}
const { data: _data } = response;
this.$Notice.error({ title: _data.title, desc: _data.message });
});
}
/**
* 自动保存
*
* @param {*} [opt={}]
* @memberof ${srfclassname('${ctrl.codeName}')}
*/
public autoSave(opt: any = {}): void {
if (!this.formValidateStatus()) {
return;
}
const arg: any = { ...opt };
const data = this.getValues();
Object.assign(arg, data);
const action: any = Object.is(data.srfuf, '1') ? this.updateAction : this.createAction;
this.serialNumber++;
const serialnumber = this.serialNumber;
this.addSerialNumber(action, serialnumber);
const post: Promise<any> = this.$http.post(this.url + action, arg, false, serialnumber);
post.then((response: any) => {
const { serialnumber: _serialnumber } = response;
const lastserialnumber = this.getSerialNumber(action);
if (_serialnumber && lastserialnumber && _serialnumber < lastserialnumber) {
return;
}
if (!response.status || response.status !== 200) {
if (response.errorMessage) {
this.$Notice.error({ title: '错误', desc: response.errorMessage });
}
return;
}
const data = response.data;
this.onFormLoad(data);
this.$emit('save', data);
<#if ctrl.getControlType() == 'FORM'>
this.$store.dispatch('viewaction/datasaved', { viewtag: this.viewtag });
</#if>
this.$nextTick(() => {
this.formState.next({ type: 'save', data: data });
});
}).catch((response: any) => {
const { serialnumber: _serialnumber } = response;
const lastserialnumber = this.getSerialNumber(action);
if (_serialnumber && lastserialnumber && _serialnumber < lastserialnumber) {
return;
}
if (response && response.status === 401) {
return;
}
if (!response || !response.status || !response.data) {
this.$Notice.error({ title: '错误', desc: '系统异常' });
return;
}
const { data: _data } = response;
if (Object.is(_data.status, 'BAD_REQUEST') && _data.parameters && _data.parameters.fieldErrors) {
this.resetValidates();
this.fillValidates(_data.parameters.fieldErrors)
}
this.$Notice.error({ title: _data.title, desc: _data.message });
});
}
/**
* 保存
*
* @param {*} [opt={}]
* @param {boolean} [showResultInfo]
* @returns {Promise<any>}
* @memberof ${srfclassname('${ctrl.codeName}')}
*/
public async save(opt: any = {}, showResultInfo?: boolean): Promise<any> {
showResultInfo = showResultInfo === undefined ? true : false;
if (!this.formValidateStatus()) {
this.$Notice.error({ title: '错误', desc: '值规则校验异常' });
return;
}
const arg: any = { ...opt };
const data = this.getValues();
Object.assign(arg, data);
const action: any = Object.is(data.srfuf, '1') ? this.updateAction : this.createAction;
this.serialNumber++;
const serialnumber = this.serialNumber;
this.addSerialNumber(action, serialnumber);
const post: Promise<any> = this.$http.post(this.url + action, arg, this.showBusyIndicator, serialnumber);
return new Promise((resolve: any, reject: any) => {
post.then((response: any) => {
const { serialnumber: _serialnumber } = response;
const lastserialnumber = this.getSerialNumber(action);
if (_serialnumber && lastserialnumber && _serialnumber < lastserialnumber) {
return;
}
if (!response.status || response.status !== 200) {
if (response.errorMessage) {
this.$Notice.error({ title: '错误', desc: response.errorMessage });
}
return;
}
const data = response.data;
this.onFormLoad(data);
this.$emit('save', data);
<#if ctrl.getControlType() == 'FORM'>
this.$store.dispatch('viewaction/datasaved', { viewtag: this.viewtag });
</#if>
this.$nextTick(() => {
this.formState.next({ type: 'save', data: data });
});
<#if ctrl.getFormFuncMode()?lower_case != 'wizardform'>
if (showResultInfo) {
this.$Notice.success({ title: '', desc: (data.srfmajortext ? data.srfmajortext : '') + '&nbsp;保存成功!' });
}
</#if>
resolve(response);
}).catch((response: any) => {
const { serialnumber: _serialnumber } = response;
const lastserialnumber = this.getSerialNumber(action);
if (_serialnumber && lastserialnumber && _serialnumber < lastserialnumber) {
return;
}
if (response && response.status === 401) {
return;
}
if (!response || !response.status || !response.data) {
this.$Notice.error({ title: '错误', desc: '系统异常' });
reject(response);
return;
}
const { data: _data } = response;
if (Object.is(_data.status, 'BAD_REQUEST') && _data.parameters && _data.parameters.fieldErrors) {
this.resetValidates();
this.fillValidates(_data.parameters.fieldErrors)
}
this.$Notice.error({ title: _data.title, desc: _data.message });
reject(response);
});
})
}
<#if ctrl.getControlType() == 'FORM'>
/**
* 工作流提交
*
* @param {*} [data={}]
* @returns {Promise<any>}
* @memberof ${srfclassname('${ctrl.codeName}')}
*/
public async wfstart(data: any = {}): Promise<any> {
if (!data.srfkey || Object.is(data.srfkey, '')) {
return;
}
const arg: any = { ...data };
const action = 'wfstart';
this.serialNumber++;
const serialnumber = this.serialNumber;
this.addSerialNumber(action, serialnumber);
const post: Promise<any> = this.$http.post(this.url + action, arg, this.showBusyIndicator, serialnumber);
return new Promise((resolve: any, reject: any) => {
post.then((response: any) => {
const { serialnumber: _serialnumber } = response;
const lastserialnumber = this.getSerialNumber(action);
if (_serialnumber && lastserialnumber && _serialnumber < lastserialnumber) {
return;
}
if (response && response.status === 401) {
return;
}
if (!response || response.status !== 200) {
this.$Notice.error({ title: '', desc: '工作流提交失败, ' + response.info });
return;
}
this.$Notice.info({ title: '', desc: '工作流启动成功' });
resolve(response);
}).catch((response: any) => {
const { serialnumber: _serialnumber } = response;
const lastserialnumber = this.getSerialNumber(action);
if (_serialnumber && lastserialnumber && _serialnumber < lastserialnumber) {
return;
}
if (response && response.status === 401) {
return;
}
if (!response || !response.status || !response.data) {
this.$Notice.error({ title: '错误', desc: '系统异常' });
reject(response);
return;
}
const { data: _data } = response;
if (Object.is(_data.status, 'BAD_REQUEST') && _data.parameters && _data.parameters.fieldErrors) {
this.resetValidates();
this.fillValidates(_data.parameters.fieldErrors)
}
this.$Notice.error({ title: _data.title, desc: _data.message });
reject(response);
});
});
}
</#if>
/**
* 表单项更新
*
* @param {string} mode 界面行为名称
* @param {*} [data={}] 请求数据
* @param {string[]} updateDetails 更新项
* @param {boolean} [showloading] 是否显示加载状态
* @returns {void}
* @memberof ${srfclassname('${ctrl.codeName}')}
*/
public updateFormItems(mode: string, data: any = {}, updateDetails: string[], showloading?: boolean): void {
if (!mode || (mode && Object.is(mode, ''))) {
return;
}
const action = mode.toLowerCase();
const arg: any = { ...data };
this.serialNumber++;
const serialnumber = this.serialNumber;
this.addSerialNumber('updateformitem/' + action, serialnumber);
const post: Promise<any> = this.$http.post(this.url + 'updateformitem/' + action, arg, showloading, serialnumber);
post.then((response: any) => {
const { serialnumber: _serialnumber } = response;
const lastserialnumber = this.getSerialNumber('updateformitem/' + action);
if (_serialnumber && lastserialnumber && _serialnumber < lastserialnumber) {
return;
}
if (!response || response.status !== 200) {
this.$Notice.error({ title: '错误', desc: '表单项更新失败' });
return;
}
const data = response.data;
const _data: any = {};
updateDetails.forEach((name: string) => {
if (!data.hasOwnProperty(name)) {
return;
}
Object.assign(_data, { [name]: data[name] });
});
this.setFormEnableCond(_data);
this.fillForm(_data);
this.formLogic({ name: '', newVal: null, oldVal: null });
this.dataChang.next(JSON.stringify(this.data));
this.$nextTick(() => {
this.formState.next({ type: 'updateformitem', ufimode: arg.srfufimode, data: _data });
});
}).catch((response: any) => {
const { serialnumber: _serialnumber } = response;
const lastserialnumber = this.getSerialNumber('updateformitem/' + action);
if (_serialnumber && lastserialnumber && _serialnumber < lastserialnumber) {
return;
}
if (response && response.status === 401) {
return;
}
if (!response || !response.status || !response.data) {
this.$Notice.error({ title: '错误', desc: '系统异常' });
return;
}
const { data: _data } = response;
if (Object.is(_data.status, 'BAD_REQUEST') && _data.parameters && _data.parameters.fieldErrors) {
this.resetValidates();
this.fillValidates(_data.parameters.fieldErrors)
}
this.$Notice.error({ title: _data.title, desc: _data.message });
});
}
/**
* 回车事件
*
* @param {*} $event
* @memberof ${srfclassname('${ctrl.codeName}')}
*/
public onEnter($event: any): void {
<#if ctrl.getControlType() == 'SEARCHFORM' && !ctrl.isEnableAutoSearch()>
this.$emit('load', this.data);
</#if>
}
<#-- 搜索表单:Begin -->
<#if ctrl.getControlType() == 'SEARCHFORM'>
<#if ctrl.getSearchButtonStyle() == 'DEFAULT'>
/**
* 搜索
*
* @memberof ${srfclassname('${ctrl.codeName}')}
*/
public onSearch() {
this.$emit('load', this.data);
}
/**
* 重置
*
* @memberof ${srfclassname('${ctrl.codeName}')}
*/
public onReset() {
this.loadDraft();
}
</#if>
<#if ctrl.getSearchButtonStyle() == 'SEARCHONLY'>
/**
* 搜索
*
* @memberof ${srfclassname('${ctrl.codeName}')}
*/
public onSearch() {
this.$emit('load', this.data);
}
</#if>
</#if>
<#-- 搜索表单:End -->
/**
* 内容绘制
*
* @returns
* @memberof ${srfclassname('${ctrl.codeName}')}
*/
public render() {
return (
${P.getPartCode(item,'FORM').code}
);
}
}
\ No newline at end of file
CTRLTYPE=FORM
\ No newline at end of file
<#ibizinclude>
../@MACRO/EDIT.tsx.ftl
</#ibizinclude>
\ No newline at end of file
CTRLTYPE=VIEWLAYOUTPANEL#APPDEEDITVIEW
\ No newline at end of file
${P.getLayoutCode().code}
\ No newline at end of file
import React, { PureComponent } from 'react';
import './App.less';
/**
* ${ctrl.getName()}
*
* @export
* @class ${ctrl.getName()}
* @extends {PureComponent}
*/
export class ${ctrl.getName()} extends PureComponent {
/**
* 绘制内容
*
* @returns
* @memberof ${ctrl.getName()}
*/
public render() {
return <>
<@ibizindent blank=12>
${P.getLayoutCode().code}
</@ibizindent>
</>;
}
}
\ No newline at end of file
VIEWTYPE=APPDEEDITVIEW
\ No newline at end of file
<#ibiztemplate>
TARGET=PSSYSAPP
</#ibiztemplate>
// App.less
\ No newline at end of file
<#ibiztemplate>
TARGET=PSSYSAPP
</#ibiztemplate>
import React, { PureComponent } from 'react';
import './App.less';
import { Form } from './forms/main/main';
/**
* App
*
* @export
* @class App
* @extends {PureComponent}
*/
export default class App extends PureComponent {
/**
*
*
* @returns
* @memberof App
*/
public render() {
return <div className="App">
<Form></Form>
</div>;
}
}
\ No newline at end of file
<#ibiztemplate>
TARGET=PSAPPVIEWCTRL_FORM
</#ibiztemplate>
${P.getCtrlCode('CONTROL.less').code}
\ No newline at end of file
<#ibiztemplate>
TARGET=PSAPPVIEWCTRL_FORM
</#ibiztemplate>
${P.getCtrlCode('CONTROL.tsx').code}
\ No newline at end of file
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册