ECharts小程式應用中樹圖的,後端處理成為樹圖指定格式的json
最近小程式中通用到了ECharts中的樹圖,顯示整體銷售人員的關係,類似下圖:
在ECharts的小程式示例中很好找到,這個demo本身支援指定格式的json繪製樹圖,但是給後端的處理帶來了一定的問題,楊立中給定的json格式是這樣的:
這就需要資料庫與後端做支援,暫時我的實現方案是這樣的:
首先在等級表中記錄上級id(PID),根據某一個團隊查詢出所有人的詳細要顯示的資料,然後根據pid遞迴,返回指定格式的json。
程式碼具體如下:
public function Rank($openId) {
$res = Db::table('使用者表')->where('openid', $openId)->where('approve', '是')->field('teamNo,wx_id')->find();
if ($res) {
$mylr = Db::table('等級表')->where('userId', $res['wx_id'])->field('leftId,rightId')->find();
$team = Db::table('等級表')->where('teamNo', $res['teamNo'])->field('userId,chiefId')->select();
foreach ($team as $key => $value) {
$money = Db::table('使用者表')->where('wx_id', $team[$key]['userId'])->field('sumCash,realName')->find();
$oldCaptain = floor(($money['sumCash']) * 100) / 100;//保留2位小數處理
$oldCaptain = sprintf("%.2f", $oldCaptain);//保留2位小數處理
$team[$key]['name'] = $money['realName'] . ':' . $oldCaptain;//拼接‘’姓名:錢數‘’格式
}
$abc = $this->get_attr($team, 0);
return json($abc);
} else {
return '不是合夥人';
}
}
public function get_attr($a, $pid) {
$tree = array(); //每次都宣告一個新陣列用來放子元素
foreach ($a as $v) {
if ($v['chiefId'] == $pid) { //匹配子記錄
$v['children'] = $this->get_attr($a, $v['userId']); //遞迴獲取子記錄
if ($v['children'] == null) {
unset($v['children']); //如果子元素為空則unset()進行刪除,說明已經到該分支的最後一個元素了(可選)
unset($v['userId']);
unset($v['chiefId']);
} else {
unset($v['userId']);
unset($v['chiefId']);
}
$tree[] = $v; //將記錄存入新陣列
}
}
return $tree; //返回新陣列
}
查詢到的json格式為: