fastadmin使用后端接口统计数据

时间:2021-08-18

fastadmin使用后端接口统计数据,就是在接口里将数据统计好后,返回给前端。

fastadmin使用后端接口统计数据

通用的统计方法,实现了在查询到的数据,添加一行统计的数据追加到原数据中。

/**
 * 给列表数据添加统计
 * @param array $items 列表查询数据
 * @param array $fields 待统计的字段
 * @return array|mixed
 */
function addStatisticsRow($items, $fields)
{
    if (empty($items)) {
        return [];
    }
    if (empty($fields)) {
        return $items;
    }
    if (!is_array($fields)) {
        $fields = explode(',', $fields);
    }
    $rows = [];
    $sum = [];
    $keys = [];
    foreach ($items as $item) {
        if (!is_array($item)) {
            $itemArr = $item->toArray();
        } else {
            $itemArr = $item;
        }
        foreach ($fields as $k => $field) {
            $curField = $field;
            $scale = 2;
            if (is_numeric($field)) {
                $curField = $k;
                $scale = (int)$field;
            }
            if (!isset($sum[$curField])) {
                $sum[$curField] = 0;
            }
            $sum[$curField] = bcadd($sum[$curField], (float)$itemArr[$curField], $scale);
        }
        $rows[] = $itemArr;
        $keys = array_keys($itemArr);
    }
    if (!empty($rows)) {
        $totalRow = [];
        foreach ($keys as $key) {
            $totalRow[$key] = '';
        }
        foreach ($fields as $k => $field) {
            $curField = $field;
            if (is_numeric($field)) {
                $curField = $k;
            }
            $totalRow[$curField] = $sum[$curField] ?? 0;
        }
        $rows[] = $totalRow;
    }
    return $rows;
}

在控制器中使用

fastadmin使用后端接口统计数据

$list = $this->model
        ->where($where)
        ->where($extraWhere)
        ->with(['product'])
        ->order($sort, $order)
        ->paginate($limit);
$rows = addStatisticsRow($list->items(), [
        'pur_box_amount' => 0,
        'pur_piec_amount',
        'pur_unit_price'
    ]
);
$result = array("total" => $list->total(), "rows" => $rows);

addStatisticsRow 第一个数组为列表查询到的数据,第二个参数为需要统计的列名称,默认统计数据保留2位小数,如果统计的列需要保留其它位小数,需要使用 'pur_box_amount' => 0, 指定要保留的小数位数。

前端页面显示需要隐藏统计列的一些列,比如:勾选列,时间,操作等列。

fastadmin使用后端接口统计数据

可以在js中用jQuery方法隐藏

onLoadSuccess: function (data) {
    let index = data.rows.length - 1;
    if (index < 0) {
        return;
    }
    $("tr[data-index='" + index + "'] td").eq(0).empty();
    $("tr[data-index='" + index + "'] td").eq(-1).empty();
    $("tr[data-index='" + index + "'] td").eq(-2).empty();
    $("tr[data-index='" + index + "'] td").eq(-3).empty();
}