Appearance
JPwise 业务场景智能适配
业务场景识别规则
财务业务场景
javascript
const financialScenario = {
// 识别模式
patterns: [
'INVOICE', 'PAYMENT', 'AMOUNT', 'TAX', 'EXPENSE',
'COST', 'FEE', 'SALARY', 'BUDGET', 'FINANCE',
'BILLING', 'ACCOUNTING', 'CURRENCY', 'EXCHANGE'
],
// 专用组件映射
componentMapping: {
'AMOUNT': 'JPWInput', // 金额使用统计数值组件
'PRICE': 'JPWInput', // 价格使用统计数值组件
'COST': 'JPWInput', // 成本使用统计数值组件
'FEE': 'JPWInput', // 费用使用统计数值组件
'RATE': 'slider', // 税率使用滑块组件
'RATIO': 'slider', // 比率使用滑块组件
'CURRENCY': 'select', // 币种使用下拉选择
'INVOICE_TYPE': 'select', // 发票类型使用下拉选择
'PAY_METHOD': 'select', // 付款方式使用下拉选择
'ACCOUNT': 'popupSelect', // 账户使用弹窗选择
'BANK': 'popupSelect' // 银行使用弹窗选择
},
// 字段分组优化
grouping: {
'basic': ['NAME', 'CODE', 'TYPE', 'STATUS'],
'amount': ['AMOUNT', 'CURRENCY', 'RATE', 'TAX'],
'party': ['PAYER', 'PAYEE', 'BANK', 'ACCOUNT'],
'time': ['APPLY_DATE', 'PAY_DATE', 'DUE_DATE'],
'additional': ['REMARK', 'ATTACHMENT', 'APPROVAL']
},
// 必填字段
requiredFields: [
'AMOUNT', 'CURRENCY', 'APPLICANT', 'APPLY_DATE'
],
// 验证规则
validationRules: {
'AMOUNT': { min: 0.01, max: 999999999.99 },
'RATE': { min: 0, max: 1 },
'TAX_RATE': { min: 0, max: 0.5 }
}
}
合同业务场景
javascript
const contractScenario = {
// 识别模式
patterns: [
'CONTRACT', 'AGREEMENT', 'PARTY', 'SIGN', 'TERM',
'CLAUSE', 'OBLIGATION', 'RIGHT', 'LIABILITY'
],
// 专用组件映射
componentMapping: {
'PARTY_A': 'popupSelect', // 甲方使用弹窗选择
'PARTY_B': 'popupSelect', // 乙方使用弹窗选择
'CONTRACT_TYPE': 'select', // 合同类型下拉选择
'CONTRACT_STATUS': 'select', // 合同状态下拉选择
'AMOUNT': 'JPWInput', // 合同金额统计数值
'SIGN_DATE': 'date', // 签约日期
'START_DATE': 'date', // 开始日期
'END_DATE': 'date', // 结束日期
'MANAGER': 'userSelect', // 项目经理用户选择
'ATTACHMENT': 'uploadFz', // 合同附件文件上传
'TEMPLATE': 'uploadFz' // 合同模板文件上传
},
// 字段分组优化
grouping: {
'basic': ['NAME', 'CODE', 'TYPE', 'STATUS'],
'parties': ['PARTY_A', 'PARTY_B', 'MANAGER'],
'amount': ['AMOUNT', 'CURRENCY', 'PAYMENT_TERMS'],
'timeline': ['SIGN_DATE', 'START_DATE', 'END_DATE'],
'additional': ['REMARK', 'ATTACHMENT', 'TEMPLATE']
},
// 必填字段
requiredFields: [
'NAME', 'PARTY_A', 'PARTY_B', 'AMOUNT', 'START_DATE'
],
// 子表配置
subTables: {
'PAYMENT_PLAN': {
fields: ['STAGE', 'RATIO', 'AMOUNT', 'PLAN_DATE', 'ACTUAL_DATE']
},
'DELIVERABLES': {
fields: ['ITEM', 'DESCRIPTION', 'DEADLINE', 'STATUS']
}
}
}
人事业务场景
javascript
const hrScenario = {
// 识别模式
patterns: [
'EMPLOYEE', 'STAFF', 'PERSONNEL', 'HR', 'POSITION',
'DEPARTMENT', 'SALARY', 'LEAVE', 'ATTENDANCE',
'RECRUITMENT', 'PERFORMANCE', 'TRAINING'
],
// 专用组件映射
componentMapping: {
'EMPLOYEE': 'userSelect', // 员工选择
'DEPARTMENT': 'depSelect', // 部门选择
'POSITION': 'select', // 职位下拉选择
'LEVEL': 'select', // 级别下拉选择
'SALARY': 'JPWInput', // 薪资统计数值
'BONUS': 'JPWInput', // 奖金统计数值
'MANAGER': 'userSelect', // 直属领导用户选择
'ENTRY_DATE': 'date', // 入职日期
'BIRTH_DATE': 'date', // 出生日期
'ID_CARD': 'comInput', // 身份证号
'PHONE': 'comInput', // 电话号码
'EMAIL': 'comInput', // 邮箱地址
'ADDRESS': 'textarea', // 地址信息
'PHOTO': 'uploadImg' // 员工照片
},
// 字段分组优化
grouping: {
'basic': ['NAME', 'CODE', 'EMPLOYEE_NO', 'STATUS'],
'personal': ['GENDER', 'BIRTH_DATE', 'ID_CARD', 'PHONE', 'EMAIL'],
'position': ['DEPARTMENT', 'POSITION', 'LEVEL', 'MANAGER'],
'salary': ['SALARY', 'BONUS', 'ALLOWANCE'],
'timeline': ['ENTRY_DATE', 'PROBATION_END', 'CONTRACT_END'],
'additional': ['ADDRESS', 'PHOTO', 'REMARK']
},
// 必填字段
requiredFields: [
'NAME', 'EMPLOYEE_NO', 'DEPARTMENT', 'POSITION', 'ENTRY_DATE'
],
// 验证规则
validationRules: {
'ID_CARD': /^[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]$/,
'PHONE': /^1[3-9]\d{9}$/,
'EMAIL': /^[^\s@]+@[^\s@]+\.[^\s@]+$/
}
}
资产业务场景
javascript
const assetScenario = {
// 识别模式
patterns: [
'ASSET', 'EQUIPMENT', 'DEVICE', 'PROPERTY', 'INVENTORY',
'MAINTENANCE', 'DEPRECIATION', 'LOCATION', 'VENDOR'
],
// 专用组件映射
componentMapping: {
'ASSET_TYPE': 'select', // 资产类型下拉选择
'CATEGORY': 'select', // 分类下拉选择
'LOCATION': 'popupSelect', // 位置弹窗选择
'VENDOR': 'popupSelect', // 供应商弹窗选择
'CUSTODIAN': 'userSelect', // 保管人用户选择
'DEPARTMENT': 'depSelect', // 使用部门选择
'PURCHASE_PRICE': 'JPWInput', // 采购价格统计数值
'CURRENT_VALUE': 'JPWInput', // 现值统计数值
'PURCHASE_DATE': 'date', // 采购日期
'WARRANTY_END': 'date', // 保修到期
'SERIAL_NUMBER': 'comInput', // 序列号
'MODEL': 'comInput', // 型号
'SPECIFICATION': 'textarea', // 规格说明
'PHOTO': 'uploadImg', // 资产照片
'MANUAL': 'uploadFz' // 使用手册
},
// 字段分组优化
grouping: {
'basic': ['NAME', 'CODE', 'TYPE', 'STATUS'],
'specification': ['MODEL', 'SERIAL_NUMBER', 'SPECIFICATION'],
'financial': ['PURCHASE_PRICE', 'CURRENT_VALUE', 'DEPRECIATION'],
'management': ['CUSTODIAN', 'DEPARTMENT', 'LOCATION'],
'timeline': ['PURCHASE_DATE', 'WARRANTY_END', 'LAST_MAINTENANCE'],
'additional': ['PHOTO', 'MANUAL', 'REMARK']
},
// 必填字段
requiredFields: [
'NAME', 'CODE', 'TYPE', 'CUSTODIAN', 'DEPARTMENT'
]
}
场景自动识别算法
javascript
function identifyBusinessScenario(fields, functionName) {
const scenarios = [financialScenario, contractScenario, hrScenario, assetScenario];
const scores = {};
scenarios.forEach(scenario => {
let score = 0;
// 基于功能名称评分
scenario.patterns.forEach(pattern => {
if (functionName.toUpperCase().includes(pattern)) {
score += 10;
}
});
// 基于字段名称评分
fields.forEach(field => {
scenario.patterns.forEach(pattern => {
if (field.field.includes(pattern)) {
score += 5;
}
});
});
scores[scenario.name] = score;
});
// 返回得分最高的场景
const maxScore = Math.max(...Object.values(scores));
if (maxScore > 0) {
return Object.keys(scores).find(key => scores[key] === maxScore);
}
return 'general'; // 通用场景
}
场景适配处理
javascript
function applyScenarioOptimization(fields, scenario) {
const optimizedFields = fields.map(field => {
const optimizedField = { ...field };
// 应用组件映射
if (scenario.componentMapping) {
for (const [pattern, component] of Object.entries(scenario.componentMapping)) {
if (field.field.includes(pattern)) {
optimizedField.component = component;
break;
}
}
}
// 应用必填规则
if (scenario.requiredFields) {
optimizedField.required = scenario.requiredFields.some(pattern =>
field.field.includes(pattern)
);
}
// 应用验证规则
if (scenario.validationRules && scenario.validationRules[field.field]) {
optimizedField.validation = scenario.validationRules[field.field];
}
return optimizedField;
});
return optimizedFields;
}
字典数据建议
javascript
const dictionaryMapping = {
financial: {
'CURRENCY': 'currency_type',
'INVOICE_TYPE': 'invoice_type',
'PAY_METHOD': 'payment_method',
'TAX_TYPE': 'tax_type'
},
contract: {
'CONTRACT_TYPE': 'contract_type',
'CONTRACT_STATUS': 'contract_status',
'PAYMENT_TERMS': 'payment_terms'
},
hr: {
'GENDER': 'gender',
'POSITION': 'position_type',
'LEVEL': 'employee_level',
'EMPLOYMENT_TYPE': 'employment_type'
},
asset: {
'ASSET_TYPE': 'asset_type',
'ASSET_STATUS': 'asset_status',
'MAINTENANCE_TYPE': 'maintenance_type'
},
subsidy: {
'SUBSIDY_TYPE': 'subsidy_type',
'CURRENCY_TYPE': 'currency_type',
'SUBSIDY_STATUS': 'subsidy_status'
}
}
实际案例:补贴申请功能
业务场景识别
javascript
// 输入:帮我生成一个补贴申请功能
// 场景识别结果:hr(人事)+ financial(财务)混合场景
const subsidyScenario = {
// 识别模式
patterns: [
'SUBSIDY', 'ALLOWANCE', 'BENEFIT', 'COMPENSATION',
'APPLY', 'APPLICATION', 'AMOUNT', 'PAYMENT'
],
// 专用组件映射(实际应用)
componentMapping: {
'SUBSIDY_TYPE': 'select', // 补贴类型 - 下拉选择
'SUBSIDY_AMOUNT': 'JPWInput', // 补贴金额 - 统计数值组件
'CURRENCY_TYPE': 'select', // 币种 - 下拉选择
'APPLICANT': 'userSelect', // 申请人 - 用户选择
'APPLY_DEPT': 'depSelect', // 申请部门 - 部门选择
'APPLY_DATE': 'date', // 申请日期 - 日期选择
'APPLY_REASON': 'textarea', // 申请原因 - 多行文本
'ATTACHMENT': 'uploadFz', // 附件 - 文件上传
'BANK_ACCOUNT': 'comInput', // 银行账号 - 文本输入
'CONTACT_PHONE': 'comInput' // 联系电话 - 文本输入
},
// 字段分组优化(实际应用)
grouping: {
'basic': ['APPLY_TITLE', 'APPLY_CODE', 'SUBSIDY_TYPE', 'APPLICANT', 'APPLY_DEPT', 'APPLY_DATE'],
'amount': ['SUBSIDY_AMOUNT', 'CURRENCY_TYPE', 'APPLY_PERIOD_START', 'APPLY_PERIOD_END'],
'contact': ['CONTACT_PHONE', 'BANK_ACCOUNT', 'BANK_NAME'],
'additional': ['APPLY_REASON', 'ATTACHMENT', 'REMARK']
},
// 必填字段(实际应用)
requiredFields: [
'APPLY_TITLE', 'SUBSIDY_TYPE', 'APPLICANT', 'APPLY_DEPT',
'APPLY_DATE', 'SUBSIDY_AMOUNT', 'APPLY_REASON'
],
// 列表配置优化(实际应用)
listOptimization: {
fixedLeft: ['APPLY_TITLE', 'APPLY_CODE'], // 左侧固定列
searchable: ['APPLY_TITLE', 'APPLY_CODE', 'SUBSIDY_TYPE', 'APPLICANT_NAME', 'APPLY_DEPT_NAME', 'APPLY_DATE', 'STATUS'],
summaryFields: ['SUBSIDY_AMOUNT'], // 汇总字段
defaultSort: 'CREATORTIME', // 默认排序
sortDirection: 'desc' // 排序方向
}
}
生成结果验证
javascript
// 实际生成的配置文件验证通过以下检查:
const validationResults = {
tableStructure: {
mainTable: 'T_HR_SUBSIDYAPPLY',
businessFields: 19,
systemFields: 13,
totalFields: 32
},
formConfiguration: {
layoutType: 'collapse', // 折叠面板布局
panels: 4, // 4个面板
requiredFields: 7, // 7个必填字段
components: {
'comInput': 5, // 文本输入组件
'select': 2, // 下拉选择组件
'userSelect': 1, // 用户选择组件
'depSelect': 1, // 部门选择组件
'date': 3, // 日期选择组件
'JPWInput': 1, // 统计数值组件
'textarea': 2, // 多行文本组件
'uploadFz': 1, // 文件上传组件
'billRule': 1 // 单据规则组件
}
},
listConfiguration: {
columns: 9, // 9个显示列
searchableColumns: 7, // 7个可搜索列
summaryColumns: 1, // 1个汇总列
rowButtons: 3, // 3个行按钮
topButtons: 4, // 4个顶部按钮
eventFunctions: 4 // 4个事件函数
},
ddlStructure: {
indexes: 9, // 9个索引
uniqueConstraints: 1, // 1个唯一约束
dictionaryTypes: 3 // 3种字典类型
}
}
关键技术决策
javascript
// 1. 混合场景识别
// 补贴申请 = HR场景 + Financial场景
// 自动应用两种场景的最佳实践
// 2. 智能组件选择
// SUBSIDY_AMOUNT → JPWInput (统计数值组件,支持精度控制)
// 而不是 numInput (普通数字组件)
// 3. 布局优化
// 采用4折叠面板而非单一表单
// 基于字段语义智能分组
// 4. 列表优化
// APPLY_TITLE 和 APPLY_CODE 左侧固定
// SUBSIDY_AMOUNT 右对齐+千分位+汇总
// STATUS 使用字典显示
// 5. 搜索优化
// 模糊搜索:标题、申请人、部门
// 精确搜索:编号、类型、状态
// 范围搜索:申请日期
}