Skip to content

JPwise 字段映射规则

智能字段识别和组件选择规则

基于字段名称的模式匹配

javascript
const fieldPatterns = {
  // 用户相关
  /.*USER.*|.*CREATOR.*|.*MODIFIER.*|.*OPERATOR.*/: 'userSelect',
  /.*PERSON.*|.*STAFF.*|.*EMPLOYEE.*/: 'userSelect',
  
  // 部门相关  
  /.*DEPT.*|.*DEPARTMENT.*|.*ORGANIZE.*/: 'depSelect',
  /.*BRANCH.*|.*DIVISION.*/: 'depSelect',
  
  // 时间相关
  /.*DATE.*|.*TIME.*/: 'date',
  /.*STARTDATE.*|.*ENDDATE.*/: 'date',
  
  // 金额相关
  /.*AMOUNT.*|.*MONEY.*|.*PRICE.*|.*COST.*/: 'JPWInput',
  /.*FEE.*|.*SALARY.*|.*PAYMENT.*/: 'JPWInput',
  
  // 文件相关
  /.*FILE.*|.*ATTACHMENT.*|.*UPLOAD.*/: 'uploadFz',
  /.*IMAGE.*|.*PHOTO.*|.*PIC.*/: 'uploadImg',
  
  // 状态相关
  /.*STATUS.*|.*STATE.*|.*MARK.*/: 'select',
  /.*TYPE.*|.*CATEGORY.*/: 'select',
  
  // 文本相关
  /.*REMARK.*|.*NOTE.*|.*COMMENT.*|.*DESC.*/: 'textarea',
  /.*CONTENT.*|.*DETAIL.*/: 'textarea',
  
  // 编号相关
  /.*CODE.*|.*NO.*|.*NUMBER.*/: 'comInput',
  /.*ID$/: 'hidden', // ID字段隐藏
  
  // 富文本
  /.*HTML.*|.*RICH.*|.*EDITOR.*/: 'editor'
}

基于数据类型的智能选择

javascript
const dataTypeMapping = {
  'varchar': {
    default: 'comInput',
    rules: [
      { condition: 'length > 500', component: 'textarea' },
      { condition: 'contains("USER")', component: 'userSelect' },
      { condition: 'contains("DEPT")', component: 'depSelect' },
      { condition: 'contains("CODE")', component: 'billRule' }
    ]
  },
  'text': 'textarea',
  'longtext': 'editor',
  'decimal': 'JPWInput',
  'int': 'numInput',
  'datetime': 'date',
  'date': 'date',
  'time': 'time',
  'char(1)': 'switch'
}

字段映射优先级

  1. 字段名称模式 (最高优先级)
  2. 业务场景上下文
  3. 数据类型
  4. 字段长度/精度
  5. 默认映射 (最低优先级)

特殊字段处理

主键字段

  • 所有ID字段自动隐藏
  • 不在表单中显示
  • 自动生成19位雪花算法ID

系统字段

javascript
const systemFields = [
  'CREATORTIME', 'CREATORUSER', 'CREATORUSERNAME',
  'LASTMODIFYTIME', 'LASTMODIFYUSER', 'LASTMODIFYUSERNAME',
  'ENABLEDMARK', 'DELETETIME', 'DELETEUSER', 'DELETEUSERNAME',
  'SORTCODE', 'ORGANIZE'
]

流程字段

javascript
const flowFields = [
  'FLOWPHASE', 'STEPNAME', 'FLOWTASKID', 'FLOWENDTIME'
]

必填字段判断规则

javascript
const requiredFieldRules = {
  // 基于字段名称
  patterns: [
    /.*NAME.*/,    // 名称类字段
    /.*TITLE.*/,   // 标题类字段  
    /.*CODE.*/     // 编码类字段
  ],
  
  // 基于业务场景
  scenarios: {
    'financial': ['AMOUNT', 'CURRENCY', 'APPLICANT'],
    'contract': ['PARTY_A', 'PARTY_B', 'AMOUNT', 'START_DATE'],
    'hr': ['EMPLOYEE', 'DEPARTMENT', 'POSITION']
  }
}

组件属性自动配置

placeholder 自动生成

javascript
const placeholderRules = {
  'comInput': field => `请输入${field.fieldName}`,
  'select': field => `请选择${field.fieldName}`,
  'date': field => `请选择${field.fieldName}`,
  'userSelect': field => `请选择${field.fieldName}`,
  'depSelect': field => `请选择${field.fieldName}`
}

span 自动计算

javascript
const spanCalculation = {
  'comInput': 8,      // 普通输入框
  'numInput': 8,      // 数字输入框
  'select': 8,        // 下拉选择
  'date': 8,          // 日期选择
  'userSelect': 8,    // 用户选择
  'depSelect': 8,     // 部门选择
  'textarea': 24,     // 多行文本
  'editor': 24,       // 富文本
  'uploadFz': 24,     // 文件上传
  'uploadImg': 24,    // 图片上传
  'table': 24         // 子表
}

验证规则自动生成

javascript
const validationRules = {
  'email': /^[^\s@]+@[^\s@]+\.[^\s@]+$/,
  'phone': /^1[3-9]\d{9}$/,
  'idCard': /^[1-9]\d{5}(18|19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}[\dXx]$/,
  'number': /^\d+(\.\d+)?$/
}