UNPKG

waibu-db

Version:
48 lines (46 loc) 1.4 kB
async function addOnsHandler ({ req, reply, data, schema }) { const { escape } = this.app.waibu const { base64JsonEncode } = this.app.waibuMpa const { statAggregate } = this.app.waibuDb const { get, map, pick, pullAt } = this.lib._ const opts = map(get(schema, 'view.stat.aggregate', []), item => { const dbOpts = pick(item, ['fields', 'group', 'aggregate']) const name = item.name ?? `field.${item.fields[0]}` return { name, dbOpts } }) if (opts.length === 0) return [] const dropped = [] for (const idx in opts) { const o = opts[idx] try { const resp = await statAggregate({ model: schema.name, req, reply, options: o.dbOpts }) const data = [] for (const d of resp.data) { const key = o.dbOpts.fields[0] data.push({ name: escape(d[key]), value: d[key + 'Count'] }) } opts[idx].chartOpts = base64JsonEncode({ tooltip: { trigger: 'item' }, series: [{ type: 'pie', data }] }) } catch (err) { dropped.push(idx) } } if (dropped.length > 0) pullAt(opts, dropped) return map(opts, o => { return { data: { setting: o.chartOpts, name: o.name }, resource: 'waibuDb.partial:/crud/~echarts-window.html' } }) } export default addOnsHandler