Appearance
JPwise 组件类型映射
基础控件
comInput - 单行输入框
javascript
{
__config__: {
jnpfKey: "comInput",
label: "单行输入",
labelWidth: null,
showLabel: true,
tag: "el-input",
required: false,
layout: "colFormItem",
span: 12
},
__slot__: {
prepend: "",
append: ""
},
placeholder: "请输入",
style: { width: "100%" },
clearable: true,
maxlength: null,
readonly: false,
disabled: false
}
textarea - 多行输入框
javascript
{
__config__: {
jnpfKey: "textarea",
label: "多行输入",
labelWidth: null,
showLabel: true,
tag: "el-input",
required: false,
layout: "colFormItem",
span: 24,
tableName: "",
trigger: "blur"
},
type: "textarea",
placeholder: "请输入",
autosize: { minRows: 4, maxRows: 4 },
style: { width: "100%" },
maxlength: null,
"show-word-limit": true,
readonly: false,
disabled: false
}
numInput - 数字输入框
javascript
{
__config__: {
jnpfKey: "numInput",
label: "数字输入",
showLabel: true,
labelWidth: null,
tag: "el-input-number",
required: false,
layout: "colFormItem",
span: 12
},
placeholder: "数字文本",
min: null,
max: null,
step: 1,
"step-strictly": false,
precision: 2,
"controls-position": "right",
disabled: false
}
JPWInput - 统计数值组件
javascript
{
__config__: {
jnpfKey: "JPWInput",
label: "统计数值",
showLabel: true,
labelWidth: null,
tag: "JPW-input",
required: false,
layout: "colFormItem",
span: 12
},
placeholder: "数字文本",
precision: 2,
disabled: false
}
switch - 开关组件
javascript
{
__config__: {
jnpfKey: "switch",
label: "开关",
labelWidth: null,
showLabel: true,
tag: "el-switch",
required: false,
layout: "colFormItem",
span: 12
},
disabled: false,
activeTxt: "开",
inactiveTxt: "关",
"active-color": null,
"inactive-color": null,
"active-value": 1,
"inactive-value": 0
}
select - 下拉选择
javascript
{
__config__: {
jnpfKey: "select",
label: "下拉选择",
labelWidth: null,
showLabel: true,
tag: "JPW-Select",
required: false,
layout: "colFormItem",
span: 12,
dataType: "dictionary",
dictionaryType: "",
props: {
label: "fullName",
value: "enCode"
}
},
__slot__: {
options: []
},
placeholder: "请选择",
style: { width: "100%" },
clearable: true,
disabled: false,
filterable: false,
multiple: false
}
date - 日期选择
javascript
{
__config__: {
jnpfKey: "date",
label: "日期选择",
labelWidth: null,
showLabel: true,
tag: "el-date-picker",
required: false,
layout: "colFormItem",
span: 12
},
placeholder: "请选择",
type: "date",
style: { width: "100%" },
disabled: false,
clearable: true,
format: "yyyy-MM-dd",
"value-format": "yyyy-MM-dd HH:mm:ss",
readonly: false
}
uploadFz - 文件上传
javascript
{
__config__: {
jnpfKey: "uploadFz",
label: "文件上传",
labelWidth: null,
showLabel: true,
tag: "JNPF-UploadFz",
required: false,
layout: "colFormItem",
span: 24,
tableName: "",
trigger: "click"
},
disabled: false,
accept: "",
fileSize: 30,
sizeUnit: "MB",
buttonText: "点击上传",
showTip: false,
limit: 9,
hasWatermark: false,
watermark: "",
displayType: "list",
autoExtract: false,
versionCompare: false
}
uploadImg - 图片上传
javascript
{
__config__: {
jnpfKey: "uploadImg",
label: "图片上传",
labelWidth: null,
showLabel: true,
tag: "JNPF-UploadImg",
required: false,
layout: "colFormItem",
span: 24,
tableName: "",
trigger: "click"
},
disabled: false,
accept: "",
showTip: false,
fileSize: 10,
sizeUnit: "MB",
limit: 9
}
editor - 富文本编辑器
javascript
{
__config__: {
jnpfKey: "editor",
label: "富文本",
labelWidth: null,
showLabel: true,
tag: "JNPF-Quill",
required: false,
layout: "colFormItem",
span: 24,
tableName: "",
trigger: "blur"
},
placeholder: "请输入"
}
高级控件
userSelect - 用户选择
javascript
{
__config__: {
jnpfKey: "userSelect",
label: "用户选择",
labelWidth: null,
showLabel: true,
tag: "user-select",
required: false,
layout: "colFormItem",
span: 12
},
placeholder: "请选择",
selectType: "all",
ableDepIds: [],
ableUserIds: [],
multiple: false,
clearable: true,
disabled: false,
relationField: "fullName"
}
depSelect - 部门选择
javascript
{
__config__: {
jnpfKey: "depSelect",
label: "部门选择",
labelWidth: null,
showLabel: true,
tag: "dep-select",
required: false,
layout: "colFormItem",
span: 12
},
placeholder: "请选择",
selectType: "all",
ableDepIds: [],
defaultDepIds: [],
multiple: false,
clearable: true,
filterable: false,
disabled: false,
relationField: "fullName"
}
popupSelect - 弹窗选择
javascript
{
__config__: {
jnpfKey: "popupSelect",
label: "弹窗选择",
labelWidth: null,
showLabel: true,
tag: "popupSelect",
required: false,
layout: "colFormItem",
span: 12
},
__slot__: {
options: []
},
placeholder: "请选择",
interfaceCode: "",
hasPage: true,
pageSize: 20,
propsValue: "id",
relationField: "fullName",
popupType: "dialog",
popupTitle: "选择数据",
popupWidth: "80%",
disabled: false,
clearable: true
}
billRule - 单据规则组件
javascript
{
__config__: {
jnpfKey: "billRule",
label: "单据组件",
labelWidth: null,
showLabel: true,
tag: "el-input",
required: false,
layout: "colFormItem",
generate: "whenSubmit",
span: 12,
rule: "",
ruleName: ""
},
readonly: true,
placeholder: "系统自动生成"
}
address - 地址选择
javascript
{
__config__: {
jnpfKey: "address",
label: "国省市区域",
labelWidth: null,
showLabel: true,
tag: "JNPF-Address",
required: false,
layout: "colFormItem",
span: 12,
tableName: ""
},
placeholder: "请选择",
disabled: false,
clearable: true,
filterable: false,
multiple: false,
level: 2
}
table - 设计子表
javascript
{
__config__: {
jnpfKey: "table",
label: "设计子表",
showLabel: false,
tag: "JNPF-InputTable",
layout: "rowFormItem",
span: 24,
type: "table",
rowType: "table",
children: [],
tableName: ""
},
btnsList: [],
customBtnsList: [],
customTopBtnsList: [],
disabled: false,
actionText: "添加",
"show-summary": false,
addType: 0,
summaryField: [],
hasNo: true,
hasBatchBtn: false
}
布局控件
groupTitle - 分组标题
javascript
{
__config__: {
jnpfKey: "groupTitle",
label: "分组标题",
labelWidth: null,
showLabel: false,
tag: "groupTitle",
required: false,
layout: "colFormItem",
span: 24,
tableName: ""
},
content: "分组标题",
"content-position": "left"
}
collapse - 折叠面板
javascript
{
__config__: {
jnpfKey: "collapse",
label: "折叠面板",
showLabel: false,
tag: "el-collapse",
layout: "rowFormItem",
span: 24,
children: [
{
title: "面板1",
name: "1",
isHide: ["pc", "app"],
__config__: {
children: []
}
}
],
active: ["1"]
},
accordion: false
}
divider - 分割线
javascript
{
__config__: {
jnpfKey: "divider",
label: "分割线",
labelWidth: null,
showLabel: false,
tag: "el-divider",
required: false,
layout: "colFormItem",
span: 24
},
__slot__: {
default: "我是分割线"
},
"content-position": "center"
}
实际项目配置属性
扩展的__config__属性
javascript
// 基于真实项目的配置属性
{
__config__: {
// 基础属性
jnpfKey: "comInput",
label: "字段标签",
labelWidth: null,
showLabel: true,
tag: "el-input",
required: false,
layout: "colFormItem",
span: 12,
// 实际项目扩展属性
tableName: "T_F_INVOICEAPPLY", // 关联表名
formId: 104, // 表单ID
renderKey: 1725963424312, // 渲染键值
dynamicFields: "ReceiptInfo.ID", // 动态字段
noShow: false, // 是否隐藏
unique: false, // 是否唯一
regList: [], // 验证规则数组
trigger: "blur", // 触发方式
visibility: ["pc", "app"] // 可见性设置
}
}
Span值智能配置策略
javascript
// 基于实际使用的span值分配策略
function getOptimalSpan(jnpfKey) {
const fullWidthComponents = [
'collapse', 'groupTitle', 'divider', 'tab', // 布局组件
'table', 'uploadFz', 'uploadImg', 'editor', // 大型组件
'textarea', 'signature', 'alert' // 内容组件
];
const halfWidthComponents = [
'comInput', 'numInput', 'JPWInput', 'switch', // 输入组件
'select', 'date', 'time', 'userSelect', // 选择组件
'depSelect', 'popupSelect', 'billRule' // 高级组件
];
if (fullWidthComponents.includes(jnpfKey)) return 24;
if (halfWidthComponents.includes(jnpfKey)) return 12;
// 默认返回12
return 12;
}
组件选择算法
优先级规则
- 业务语义优先 - 根据字段名称语义选择
- 数据类型匹配 - 根据数据库字段类型
- 长度约束 - 根据字段长度选择合适组件
- 业务场景 - 根据功能类型调整组件选择
智能选择流程
javascript
function selectComponent(field, context) {
// 1. 检查字段名称模式
const namePattern = checkFieldNamePattern(field.name);
if (namePattern) return namePattern;
// 2. 检查业务场景
const scenarioComponent = checkBusinessScenario(field, context);
if (scenarioComponent) return scenarioComponent;
// 3. 检查数据类型
const typeComponent = checkDataType(field.dataType);
if (typeComponent) return typeComponent;
// 4. 默认组件
return getDefaultComponent(field);
}
触发方式配置
javascript
// 不同组件的标准触发方式
const triggerMapping = {
'comInput': 'blur', // 输入框失去焦点触发
'textarea': 'blur', // 多行输入失去焦点触发
'numInput': '["blur", "change"]', // 数字输入双重触发
'select': 'change', // 选择器变化触发
'switch': 'change', // 开关变化触发
'date': 'change', // 日期选择变化触发
'userSelect': 'click', // 用户选择点击触发
'uploadFz': 'click' // 文件上传点击触发
}
事件处理配置
标准事件处理函数
javascript
// 基于form-config.js的标准事件配置
const standardEvents = {
// 输入类组件事件
inputEvents: {
change: "({ data, formData, setFormData, setShowOrHide, setRequired, setDisabled, request, getFieldOptions, setFieldOptions, paramData }) => {\n // 在此编写代码\n \n}",
blur: "({ data, formData, setFormData, setShowOrHide, setRequired, setDisabled, request, getFieldOptions, setFieldOptions, paramData }) => {\n // 在此编写代码\n \n}"
},
// 选择类组件事件
selectEvents: {
change: "({ data, formData, setFormData, setShowOrHide, setRequired, setDisabled, request, getFieldOptions, setFieldOptions, paramData, rowData }) => {\n // 在此编写代码\n \n}",
customParamsChange: "({ data, formData, setFormData, setShowOrHide, setRequired, setDisabled, request, getFieldOptions, setFieldOptions, paramData }) => {\n // 专属函数 禁止自定义 后续优化将不回显此函数\n \n}"
},
// 上传类组件事件
uploadEvents: {
beforeUpload: "({ data, callback, formData, setFormData, setShowOrHide, setRequired, setDisabled, request, getFieldOptions, setFieldOptions, paramData }) => {\n // 在此编写代码\n \n}",
change: "({ data, formData, setFormData, setShowOrHide, setRequired, setDisabled, request, getFieldOptions, setFieldOptions, paramData }) => {\n // 在此编写代码\n \n}",
extractSuccess: "({ data, tempFormId, formData, setFormData, setShowOrHide, setRequired, setDisabled, request, getFieldOptions, setFieldOptions, paramData }) => {\n // 在此编写代码\n \n}"
}
}
组件特定配置
javascript
// 基于form-config.js的完整组件配置映射
const componentSpecialConfig = {
// 弹窗选择组件特殊配置
popupSelect: {
interfaceFields: {
propsValue: "id",
relationField: "fullName",
columnEnums: "",
columnOptions: [],
interfaceName: ""
},
popupConfig: {
popupType: "dialog",
popupTitle: "选择数据",
popupWidth: "80%",
hasPage: true,
pageSize: 20
}
},
// 单据规则特殊配置
billRule: {
ruleConfig: {
generate: "whenSubmit", // 提交时生成
rule: "", // 规则内容
ruleName: "", // 规则名称
readonly: true, // 只读状态
placeholder: "系统自动生成"
}
},
// 表格组件特殊配置
table: {
tableConfig: {
addType: 0,
summaryField: [],
hasNo: true,
hasBatchBtn: false,
btnsList: [],
customBtnsList: [],
customTopBtnsList: []
}
}
}