<#function getNgModel field type> <#assign rtn><#if type!=1>item.${field.name}<#else>data.${field.fieldPath} <#return rtn> <#function getPermissionLine field type hasLinkage> <#assign rtn> <#if type!=1 && hasLinkage==true>v-permission-line="'${field.parentNodeType}_${field.tableName}_${field.name}'"<#else> <#return rtn> <#function getAtter field type> <#assign rtn><#if type!=1>item.${field.name}<#else>data.${field.tableName}.${field.name} <#return rtn> <#function getPermission field type> <#assign rtn>permission.fields.${field.tableName}.${field.name} <#if rtn?matches("^permission\\.fields\\.\\w+\\.\\w+$")> <#return rtn> <#else> <#stop "Incorrect field format: ${field.desc}"> <#function getFormula field type> <#assign rtn> <#if type==2> 'data.${field.boDefAlias}.${field.parentNodeType}_${field.tableName}['+index+'].${field.name}' <#elseif type==1> '${getNgModel(field,type)}' <#elseif type == true> 'data.${field.boDefAlias}.${field.parentNodeType}_${field.tableName}['+index+'].${field.name}' <#else> 'data.${subName}['+sunIndex+'].${field.name}' <#return rtn> <#function getInput field type hasLinkage > <#assign rtn> :readonly="true" bindPreAndSufFixjson ='${util.getMapString(field.options,"bindPreAndSufFixjson")}' atter="${getAtter(field,type)}" style="width: ${field.options.width?default('100%')}" <#if field.options.validate?if_exists && field.options.validate?length gt 0 && !field.options.isInputEdit> :validate="${field.options.validate}" :configAttributes="${util.getInputAdvancedAttributes(field.options)}" <#if field.options.mathExp?if_exists>math-exp="${field.options.mathExp}" <#if field.options.isCountDate> :date-calc-exp="{start:'${field.options.isStartDate}',end:'${field.options.isEndDate}',diffType:'${field.options.countFormat}'}" <#if field.options.formulasDiyJs?if_exists > v-formula="{value:${field.options.formulasDiyJs},bindPath:${getFormula(field,type)}}" <#if field.options.mapping?if_exists>v-mapping="data.${field.options.mapping}" <#if field.options.showCondition.fieldPath?if_exists>v-if="${field.options.showCondition.fieldPath}=='${field.options.showCondition.value}'" > ${field.desc} <#return rtn> <#function getNumberInput field type hasLinkage> <#assign rtn> math-exp="${field.options.mathExp}" <#if field.options.validate?if_exists && field.options.validate?length gt 0 && !field.options.isInputEdit> :validate="${field.options.validate}" <#if field.options.min?if_exists>:min=${field.options.min?c} <#if field.options.max?if_exists>:max=${field.options.max?c} <#if field.options.step?if_exists>:step=${field.options.step?c} <#if field.options.decimalDigits?if_exists>:precision=${field.options.decimalDigits?c} <#if field.options.filterthousandBit?if_exists>filterthousandBit="true" <#--千分位--> <#if field.options.filtercurrency?if_exists>filtercurrency="true" <#--货币大写--> <#if field.options.formulasDiyJs?if_exists > v-formula="{value:${field.options.formulasDiyJs},bindPath:${getFormula(field, type)}}" <#if field.options.mapping?if_exists>v-mapping="data.${field.options.mapping}" <#if field.options.isCountDate> :date-calc-exp="{start:'${field.options.isStartDate}',end:'${field.options.isEndDate}',diffType:'${field.options.countFormat}'}" > ${field.desc} <#return rtn> <#function getRadio field type hasLinkage> <#assign rtn> optionLayout="vertical"<#else>optionLayout="horizontal" <#if field.options.validate?if_exists && field.options.validate?length gt 0> :validate="${field.options.validate}" ${util.getLinkage(field.options)} :ganged="${util.getSelectQuery(field.options,type!=1)}" :permission="${getPermission(field,type)}" rdlist='${util.getJsonByPath(field.options,'options')}' style="width: ${field.options.width?default('100%')}" :style='${util.getMapString(field,"controlstyle")}' ${getPermissionLine(field,type,hasLinkage)} <#if field.options.formulasDiyJs?if_exists > v-formula="{value:${field.options.formulasDiyJs},bindPath:${getFormula(field, type)}}" > ${field.desc} <#return rtn> <#function getCheckbox field type hasLinkage> <#assign rtn> optionLayout="vertical"<#else>optionLayout="horizontal" :ganged="${util.getSelectQuery(field.options,type!=1)}" :permission="${getPermission(field,type)}" <#if field.options.validate?if_exists && field.options.validate?length gt 0> :validate="${field.options.validate}" ${util.getLinkage(field.options)} cklist='${util.getJsonByPath(field.options,'options')}' style="width: ${field.options.width?default('100%')}" :style='${util.getMapString(field,"controlstyle")}' ${getPermissionLine(field,type,hasLinkage)} <#if field.options.formulasDiyJs?if_exists > v-formula="{value:${field.options.formulasDiyJs},bindPath:${getFormula(field, type)}}" > ${field.desc} <#return rtn> <#function getSelect field type hasLinkage> <#assign customQuery = util.getStringConf(field.options.customQuery)> <#assign rtn> :validate="${field.options.validate}" ${util.getLinkage(field.options)} ${util.getAttrs(':multiple,:filterable,:allowCreate,:related-query',field)} :permission="${getPermission(field,type)}" :selectlist='${util.getJsonByPath(field.options,'options')}' style="width: ${field.options.width?default('100%')}" ${getPermissionLine(field,type,hasLinkage)} <#if field.options.formulasDiyJs?if_exists > v-formula="{value:${field.options.formulasDiyJs},bindPath:${getFormula(field, type)}}" > ${field.desc} <#return rtn> <#function getDialog field type hasLinkage> <#assign name = util.getJsonByPath(field.customDialogjson,'name')> <#assign icon = util.getJsonByPath(field.customDialogjson,'icon')> <#assign custdialogConf = util.getStringConf(field.options.customDialogjson)> <#assign rtn> :validate="${field.options.validate}" :style='${util.getMapString(field,"controlstyle")}' > ${field.desc} <#return rtn> <#function getEipButton field type hasLinkage> <#assign name = util.getJsonByPath(field.options.bindEventjson,'name')> <#assign icon = util.getJsonByPath(field.options.bindEventjson,'icon')> <#assign isShowInput = util.getJsonByPath(field.options.bindEventjson,'isShowInput')> <#assign alias = util.getJsonByPath(field.options.bindEventjson,'alias')> <#assign rtn> :permission="${getPermission(field,type)}" <#if field.options.bindEventjson.isShowInput> :permission="${getPermission(field,type)}" v-model="${getNgModel(field,type)}" model-name="${getNgModel(field,type)}" atter="${getAtter(field,type)}" <#if field.options.formulasDiyJs?if_exists > v-formula="{value:${field.options.formulasDiyJs},bindPath:${getFormula(field, type)}}" <#if field.options.showCondition.fieldPath?if_exists>v-if="${field.options.showCondition.fieldPath}=='${field.options.showCondition.value}'" icon="${icon}" btnName="${name}" ${getPermissionLine(field,type,hasLinkage)} htCustomScript="${field.options.script}" > <#return rtn> <#function getEipDivider field type> <#assign rtn> content-position="${field.options.position}" <#if field.options.color?if_exists>color="${field.options.color}" > <#return rtn> <#function getTextarea field type hasLinkage > <#assign rtn> noToolbar="${field.options.noToolbar}" <#if field.options.textValue?if_exists>textValue="${util.toJsonStr(field.options.textValue)}" <#if field.options.validate?if_exists && field.options.validate?length gt 0> :validate="${field.options.validate}" <#if field.options.formulasDiyJs?if_exists > v-formula="{value:${field.options.formulasDiyJs},bindPath:${getFormula(field, type)}}" <#if field.options.mapping?if_exists>v-mapping="data.${field.options.mapping}" > ${field.desc} <#return rtn> <#function getFont field type > <#assign rtn> <#if field.options.textValue?if_exists> :permission="${getPermission(field,type)}" textValue="${util.toJsonStr(field.options.textValue)}"> <#return rtn> <#function getQRcode field type > <#assign rtn> <#return rtn> <#function getAttachment field type hasLinkage > <#assign rtn> <#assign allowPreview = util.getJsonByPath(field.options.file,'allowPreview','false')> <#assign allowDownload = util.getJsonByPath(field.options.file,'allowDownload','false')> :validate="${field.options.validate}" ${util.getAttrs('propConf,accept',field)} limit="${field.options.file.limit}" :allow-preview="${allowPreview}" :allow-download="${allowDownload}" :size="${util.getToString(field.options.file.size)}" ${getPermissionLine(field,type,hasLinkage)} :multiple="${util.getJsonByPath(field.options.file,'multiple','false')}" :simplicity="${util.getJsonByPath(field.options.file,'simplicity','false')}" > ${field.desc} <#return rtn> <#function getDic field type hasLinkage > <#assign rtn> :validate="${field.options.validate}" dickey="${field.options.dic}" ${util.getAttrs(':filterable',field)} ${getPermissionLine(field,type,hasLinkage)} placeholder="${field.options.placeholder}"> ${field.desc} <#return rtn> <#function getTag field type hasLinkage> <#assign rtn> :validate="${field.options.validate}" tag-key="${field.options.tag}" placeholder="${field.options.placeholder}" ${getPermissionLine(field,type,hasLinkage)} ${util.getAttrs(':filterable',field)} ${util.getAttrs(':expand',field)} ${util.getAttrs(':multiple',field)}> ${field.desc} <#return rtn> <#function getDropdown field type hasLinkage > <#assign customQuery = util.getStringConf(field.options.customQuery)> <#assign rtn> :validate="${field.options.validate}" <#if field.options.formulasDiyJs?if_exists > v-formula="{value:${field.options.formulasDiyJs},bindPath:${getFormula(field, type)}}"> ${field.desc} <#return rtn> <#function getAutocomplete field type hasLinkage > <#assign rtn> :validate="${field.options.validate}" <#if field.options.mapping?if_exists>v-mapping="data.${field.options.mapping}" > ${field.desc} <#return rtn> <#function getEipCascader field type hasLinkage > <#assign rtn> :validate="${field.options.validate}" :permission="${getPermission(field,type)}" atter="${getAtter(field,type)}" :ganged="${util.getSelectQuery(field.options,type!=1)}" placeholder="${field.options.placeholder}" ${getPermissionLine(field,type,hasLinkage)} > ${field.desc} <#return rtn> <#function getEipDate field type hasLinkage > <#assign day = util.getJsonByPath(field.options,'day','0')> <#assign showDate = util.getJsonByPath(field.options,'showCurrentDate','false')> <#assign rtn> :validate="${field.options.validate}" <#if showDate?length gt 1>:showDate="${showDate}" :day="${day?default('0')}" <#if field.options.format?if_exists && field.options.format?length gt 0>format="${field.options.format}" inputFormat="${field.options.inputFormat}" <#if field.options.mapping?if_exists>v-mapping="data.${field.options.mapping}" <#if field.options.formulasDiyJs?if_exists > v-formula="{value:${field.options.formulasDiyJs},bindPath:${getFormula(field, type)}}" bindPreAndSufFixjson ='${util.getMapString(field.options,"bindPreAndSufFixjson")}' > ${field.desc} <#return rtn> <#function getEipRelFlow field type hasLinkage > <#assign rtn> ${field.desc} <#return rtn> <#function getEipImg field type > <#assign rtn> <#return rtn> <#function getEipViewer field type hasLinkage> <#assign rtn> <#assign allowPreview = util.getJsonByPath(field.options.file,'allowPreview','true')> <#assign allowDownload = util.getJsonByPath(field.options.file,'allowDownload','false')> :validate="${field.options.validate}" v-model="${getNgModel(field,type)}" model-expression="${getNgModel(field,type)}" :permission="${getPermission(field,type)}" :imgHeight='${field.options.size.height?default(0)}' :imgWidth='${field.options.size.width?default(0)}' uploadType="${field.options.uploadType}" limit="${field.options.file.limit}" :multiple="${util.getJsonByPath(field.options.file,'multiple','false')}" :allow-preview="${allowPreview}" :allow-download="${allowDownload}" ${getPermissionLine(field,type,hasLinkage)} > ${field.desc} <#return rtn> <#function getSwitch field type hasLinkage> <#assign rtn> :validate="${field.options.validate}" style="display: block" active-value="${field.options.activeValue}" inactive-value="${field.options.inactiveValue}" active-text="${field.options.activeText}" inactive-text="${field.options.inactiveText}" <#if field.options.formulasDiyJs?if_exists > v-formula="{value:${field.options.formulasDiyJs},bindPath:${getFormula(field, type)}}" /> <#return rtn> <#function getEipMap field type > <#assign rtn> <#return rtn> <#function getOffice field type hasLinkage> <#assign rtn> <#return rtn> <#function getSignature field type hasLinkage> <#assign rtn> <#return rtn> <#-- 子表关联查询回填 --> <#function getSubtableCustomQueryBackfill layout > <#assign queryConfig = util.getStringConf(layout.customQuery)> <#assign rtn> <#return rtn> <#-- 注意不能加空格 --> <#macro input field type hasLinkage> <#switch field.ctrlType> <#case 'input' ><#--单行文本框-->${getInput(field,type,hasLinkage)} <#break> <#case 'textarea'><#--多行文本框-->${getTextarea(field,type,hasLinkage)} <#break> <#case 'property-text'><#--属性文本-->${getTextarea(field,type,hasLinkage)} <#break> <#case 'text'>${getFont(field,type)} <#break> <#case 'QRcode'>${getQRcode(field,type)} <#break> <#case 'number'><#--数字框-->${getNumberInput(field,type,hasLinkage)} <#break> <#case 'currency'><#--数字框-->${getNumberInput(field,type,hasLinkage)} <#break> <#case 'radio'><#--单选框-->${getRadio(field,type,hasLinkage)} <#break> <#case 'checkbox'><#--多选框-->${getCheckbox(field,type,hasLinkage)} <#break> <#case 'select'><#--下拉框-->${getSelect(field,type,hasLinkage)} <#break> <#case 'dialog'><#--对话框-->${getDialog(field,type,hasLinkage)} <#break> <#case 'selector'><#--选择器(包括组织,岗位,角色,用户选择器等控件组合)--> <${util.getHtSelectorType(field.options,type!=1)} ${util.getAttrs(':validate',field)} v-model="${getNgModel(field,type)}" model-name="${getNgModel(field,type)}" :permission="${getPermission(field,type!=1)}" :config="${util.getHtSelectorBind(field.options,type!=1)}" <#if field.options.selector.selectCurrent> :selectCurrent="true" style="width: ${field.options.width?default('100%')}" <#if field.options.selector.isSingle> :single="true" <#if field.options.validate?if_exists> :validate="${field.options.validate}" <#if field.options.placeholder?if_exists> placeholder="${field.options.placeholder}" ${getPermissionLine(field,type,hasLinkage)} > ${field.desc} <#break> <#case 'immediate-single'><#-- 表单实时控件 单行 --> :permission="${getPermission(field,type)}" style="font-weight:${util.getStyleBold(field,'boldValue')};${util.getStyles(field,'color','valueColor')}" :style='${util.getMapString(field,"controlstyle")}' :option='${util.getMapString(field,"options")}'> ${field.desc} <#break> <#case 'immediate-textarea'><#-- 表单实时控件 多行 --> :permission="${getPermission(field,type)}" style="font-weight:${util.getStyleBold(field,'boldValue')};${util.getStyles(field,'color','valueColor')}" :style='${util.getMapString(field,"controlstyle")}' :option='${util.getMapString(field,"options")}'> ${field.desc} <#break> <#case 'milepost'><#-- 里程碑 --> <#break> <#case 'attachment'><#--附件上传-->${getAttachment(field,type,hasLinkage)} <#break> <#case 'dic'><#--数据字典-->${getDic(field,type,hasLinkage)} <#break> <#case 'tag'>${getTag(field,type,hasLinkage)} <#break> <#case 'dropdown'><#--下拉树-->${getDropdown(field,type,hasLinkage)} <#break> <#break> <#case 'autocomplete'><#--自动完成-->${getAutocomplete(field,type,hasLinkage)} <#break> <#break> <#case 'eip-cascader'><#--级联-->${getEipCascader(field,type,hasLinkage)} <#break> <#case 'button'>${getEipButton(field,type,hasLinkage)} <#break> <#case 'divider'>${getEipDivider(field,type)} <#--分割线--> <#break> <#case 'date'>${getEipDate(field,type,hasLinkage)} <#--日期--> <#break> <#case 'time'>${getEipDate(field,type,hasLinkage)} <#--时间--> <#break> <#case 'related-process'>${getEipRelFlow(field,type,hasLinkage)} <#--相关流程控件--> <#break> <#case 'image'>${getEipImg(field,type)} <#--图片控件--> <#break> <#case 'imageViewer'>${getEipViewer(field,type,hasLinkage)} <#--图片控件--> <#break> <#case 'switch'>${getSwitch(field,type,hasLinkage)} <#-- 开关控件 --> <#break> <#case 'amap'>${getEipMap(field,type)} <#-- 地图控件 --> <#break> <#case 'signature'>${getSignature(field,type,hasLinkage)} <#-- 签章控件 --> <#break> <#case 'office'>${getOffice(field,type,hasLinkage)} <#-- office控件 --> <#break>