validator定义
前面提到,在项目后端的meta中定义明细类型
时,设置了validator
。关于validator
验证器的概念,请参见:表单验证
schema
validator
验证器由json schema
组成。这里仍然以模块test-flow
为例,来具体说明采购订单明细
的schema定义
src/module/test-flow/backend/src/config/validation/schema/purchaseOrderDetail.js
module.exports = app => {
const schemas = {};
// detail
const __atomParams = {
target: '_self',
atomClass: {
module: 'test-flow',
atomClassName: 'product',
},
selectOptions: {},
atomId: 'detailCodeId',
mapper: {
detailCodeId: 'atomId',
detailCode: 'productCode',
detailName: 'atomName',
price: 'productPrice',
},
};
schemas.purchaseOrderDetail = {
type: 'object',
properties: {
detailCodeId: {
type: 'number',
},
detailCode: {
type: 'string',
ebType: 'text',
ebTitle: 'Product Code',
ebReadOnly: true,
notEmpty: true,
},
detailName: {
type: 'string',
ebType: 'atom',
ebTitle: 'Product Name',
ebParams: __atomParams,
notEmpty: true,
},
price: {
type: 'number',
ebType: 'text',
ebTitle: 'Price',
ebCurrency: true,
},
quantity: {
type: 'number',
ebType: 'text',
ebTitle: 'Quantity',
},
amount: {
type: 'number',
ebType: 'text',
ebTitle: 'Amount',
ebComputed: {
expression: 'price * quantity',
dependencies: 'price,quantity',
},
ebCurrency: true,
ebReadOnly: true,
},
},
};
return schemas;
};
- detailCodeId、detailCode、detailName
为了让演示更贴近实际场景,模块test-flow
还提供了另外一个原子类型--产品
,采购订单明细
的数据通过选择原子
操作,从原子类型--产品
中选择数据。因此,明细基础表aDetail
中的三个字段detailCodeId、detailCode、detailName
分别来自原子类型-产品
数据中的atomId、productCode、atomName
- detailCodeId:不设置
ebType
,从而不渲染 - detailCode:
ebReadOnly
设为true
,从而渲染为只读模式 - detailName:
ebType
设为atom
,从而支持选择原子
操作- ebParams:与
选择原子
相关的参数- target:指定选择页面在哪里打开
- atomClass:要选择的原子类型,这里是
产品
- selectOptions:可选参数,用于原子的select操作
- atomId:当前选中的原子Id
- mapper:字段映射。当选择原子返回后,通过该字段映射设置明细数据
- ebParams:与
- price:
ebCurrency
设为true
,从而按货币格式进行渲染(两位小数) - quantity:
- amount:金额=价格*数量。当前端修改价格或者数量时,金额需要同步更新
ebComputed
:动态计算- expression:动态表达式
- dependencies:依赖项,只有指定的依赖项有变动时,才会启动动态计算,进而实现同步更新
评论: