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格式为: