这里重点介绍三个重要的明细操作:`read`, `select`, `count` ## read ### - 前端 ``` javascript this.$api.post('/a/detail/detail/read', { flowTaskId, key: { detailId, detailItemId }, }).then(item => { console.log(item); }); ``` ### - 后端 ``` javascript const user = this.ctx.state.user.op; const item = await this.ctx.bean.detail.read({ key, user, }); ``` ## select ### - 前端 ``` javascript this.$api.post('/a/detail/detail/select', { flowTaskId, atomKey, detailClass, options, }).then(data => { console.log(data.list, data.index, data.finished); }); ``` ### - 后端 ``` javascript const user = this.ctx.state.user.op; const items = await this.ctx.bean.detail.select({ atomKey, detailClass, options: { where: { ['a.detailName']: { op: 'like', val: 'atomName' } }, orders: [ [ 'a.updatedAt', 'desc' ], ], page: { index: 0, size: 10 }, mode: null, }, user, }); ``` - 返回值 |名称|说明| |--|--| |data.list|条目列表| |data.index|下一页的分页索引| |data.finished|数据是否已经获取完毕。如果获取完毕,就不会再获取下一页| - 参数 |名称|允许为空|说明| |--|--|--| |detailClass|是|原子类型| |options|否|查询参数| - 查询参数:options 明细的`select`操作实现原理是:根据用户提交的参数组合sql语句,其中会联合一些系统表,从而取得用户所希望的信息 |名称|允许为空|缺省值|说明| |--|--|--|--| |where|是||查询条件| |orders|是||排序| |page.index|否||分页索引| |page.size|是|20|分页大小| |mode|是||联合业务表的模式,可选参数:default/full| > `mode`: 可通过模块`meta`文件中的`tableNameModes`添加更多模式的配置,一般是配置mysql的`数据视图` - 联合表清单: |表名称|表别名|说明| |--|--|--| |aDetail|a|明细基础表| |aDetailClass|b|明细类型表| |如:testFlowPurchaseOrderDetail|f|明细`业务表`| |aUser|g|`userIdCreated`对应的用户信息| |aUser|g2|`userIdUpdated`对应的用户信息| - where条件 EggBornJS中的`where`条件类似于EggJS中的`where`条件,并进行了扩展,支持更多条件设置,参见:[Model方法](https://cabloy.com/zh-cn/articles/d33153578d564a79a7ed1176944d0541.html#model_113) - orders排序 EggBornJS中的`orders`排序用法与EggJS中的`orders`排序一致,如 ``` javascript orders: [ [ 'a.updatedAt', 'desc' ], ], ``` - page分页 EggBornJS新增了`page`分页特性,通过`index`和`size`的组合生成sql语句中的`limit`和`offset` 一般而言,前端不需传递`page.size`,而是由后端统一填充此值,可以在项目的`config`文件中覆盖`page.size`的默认值,如下: `src/backend/config/config.default.js` ``` javascript // modules config.modules = { 'a-base': { pageSize: 20, }, }; ``` ## count ### - 前端 ``` javascript this.$api.post('/a/detail/detail/count', { flowTaskId, atomKey, detailClass, options, }).then(count => { console.log(count); }); ``` ### - 后端 ``` javascript const user = this.ctx.state.user.op; const count = await this.ctx.bean.detail.count({ atomKey, detailClass, options, user, }); ``` - 返回值: count - 参数: 同`select`