这里重点介绍三个重要的明细操作:read, select, count

read

- 前端

this.$api.post('/a/detail/detail/read', {
  flowTaskId,
  key: { detailId, detailItemId },
}).then(item => {
  console.log(item);
});

- 后端

const user = this.ctx.state.user.op;
const item = await this.ctx.bean.detail.read({
  key,
  user,
});

select

- 前端

this.$api.post('/a/detail/detail/select', {
  flowTaskId,
  atomKey,
  detailClass,
  options,
}).then(data => {
  console.log(data.list, data.index, data.finished);
});

- 后端

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方法

  • orders排序

EggBornJS中的orders排序用法与EggJS中的orders排序一致,如

orders: [
  [ 'a.updatedAt', 'desc' ],
],
  • page分页

EggBornJS新增了page分页特性,通过indexsize的组合生成sql语句中的limitoffset

一般而言,前端不需传递page.size,而是由后端统一填充此值,可以在项目的config文件中覆盖page.size的默认值,如下:

src/backend/config/config.default.js

// modules
config.modules = {
  'a-base': {
    pageSize: 20,
  },
};

count

- 前端

this.$api.post('/a/detail/detail/count', {
  flowTaskId,
  atomKey,
  detailClass,
  options,
}).then(count => {
  console.log(count);
});

- 后端

const user = this.ctx.state.user.op;
const count = await this.ctx.bean.detail.count({
  atomKey,
  detailClass,
  options,
  user,
});
  • 返回值: count

  • 参数: 同select