递归实现树形图初始化python+Ajax
前端:
<div id="chart-container"></div>
js:
let datascource=[];
let target_id;
let children='';
let current_nodeID;
var url = decodeURI(location.search); //获取url中"?"后的字符串
if ( url.indexOf( "?" ) != -1 ) {
var str = url.substr( 1 ); //substr()方法返回从参数值开始到结束的字符串;
var strs = str.split( "=" );
target_id=strs[1];
}
//获取树形图的数据
$.ajax({
async:false,
method:'post',
type:'json',
data:{
"target_id":target_id,
},
url:'/assess/initCharts/',
success:function(result){
//获取树图数据datascource
datascource=result.data;
},
error:function(e){
//返回500错误 或者其他 http状态码错误时 需要在error 回调函数中处理了 并且返回的数据还不能直接alert,需要使用
//$.parseJSON 进行转译 res.msg 是自己组装的错误信息通用变量
console.log(e);
datascource=null;
}
});
let oc = $('#chart-container').orgchart({
'data' : datascource,
'chartClass': 'edit-state',
'exportButton': false,
'exportFilename': 'SportsChart',
'createNode': function($node, data) {
$node[0].id=data.title;
}
});
后台(python):
# 初始化指标体系树形图(十代)
def initCharts(request):
res = {'code': 400, 'flag': False, 'data': ""}
data_list = {}
sql = "select * from target_system where target_id = '%s'"
sql2 = "select * from target_system where pid = '%s'"
target_id = request.POST.get("target_id")
parent_node = db.query_sql(sql % target_id)
children_nodes = db.query_sql(sql2 % target_id)
children_data = []
for children_node in children_nodes:
dict_data = {}
children_data2 = []
children_nodes = db.query_sql(sql2 % children_node["target_id"])
for children_node2 in children_nodes:
dict_data2 = {}
children_data3 = []
children_nodes = db.query_sql(sql2 % children_node2["target_id"])
for children_node3 in children_nodes:
dict_data3 = {}
children_data4 = []
children_nodes = db.query_sql(sql2 % children_node3["target_id"])
for children_node4 in children_nodes:
dict_data4 = {}
children_data5 = []
children_nodes = db.query_sql(sql2 % children_node4["target_id"])
for children_node5 in children_nodes:
dict_data5 = {}
children_data6 = []
children_nodes = db.query_sql(sql2 % children_node5["target_id"])
for children_node6 in children_nodes:
dict_data6 = {}
children_data7 = []
children_nodes = db.query_sql(sql2 % children_node6["target_id"])
for children_node7 in children_nodes:
dict_data7 = {}
children_data8 = []
children_nodes = db.query_sql(sql2 % children_node7["target_id"])
for children_node8 in children_nodes:
dict_data8 = {}
children_data9 = []
children_nodes = db.query_sql(sql2 % children_node8["target_id"])
for children_node9 in children_nodes:
dict_data9 = {}
dict_data9["name"] = children_node9["assess_name"]
dict_data9["title"] = children_node9["target_id"]
# 第十行以下没有子节点
children_data9.append(dict_data9)
dict_data8["name"] = children_node8["assess_name"]
dict_data8["title"] = children_node8["target_id"]
dict_data8["children"] = children_data9
children_data8.append(dict_data8)
dict_data7["name"] = children_node7["assess_name"]
dict_data7["title"] = children_node7["target_id"]
dict_data7["children"] = children_data8
children_data7.append(dict_data7)
dict_data6["name"] = children_node6["assess_name"]
dict_data6["title"] = children_node6["target_id"]
dict_data6["children"] = children_data7
children_data6.append(dict_data6)
dict_data5["name"] = children_node5["assess_name"]
dict_data5["title"] = children_node5["target_id"]
dict_data5["children"] = children_data6
children_data5.append(dict_data5)
dict_data4["name"] = children_node4["assess_name"]
dict_data4["title"] = children_node4["target_id"]
dict_data4["children"] = children_data5
children_data4.append(dict_data4)
dict_data3["name"] = children_node3["assess_name"]
dict_data3["title"] = children_node3["target_id"]
dict_data3["children"] = children_data4
children_data3.append(dict_data3)
dict_data2["name"] = children_node2["assess_name"]
dict_data2["title"] = children_node2["target_id"]
dict_data2["children"] = children_data3
children_data2.append(dict_data2)
dict_data["name"] = children_node["assess_name"]
dict_data["title"] = children_node["target_id"]
dict_data["children"] = children_data2
children_data.append(dict_data)
data_list["name"] = parent_node[0]["assess_name"]
data_list["title"] = parent_node[0]["target_id"]
data_list["children"] = children_data
try:
res['code'] = 200
res['flag'] = True
res['data'] = data_list
except Exception as e:
res['data'] = "获取失败!ERROR: "+str(e)
return JsonResponse(res)
表结构字段:
id pid target_id
id唯一
id在添加时同时添加相同的target_id
pid的值如果等于某条数据id值,那么就是它的子节点
浙公网安备 33010602011771号