后台代码:根据权限取树形单位数据
@At("/tree")
@Ok("json")
@RequiresPermissions("sys.manager.unit")
public Object tree(@Param("pid") String pid, HttpServletRequest req) {
try {
List<Sys_unit> list = new ArrayList<>();
List<NutMap> treeList = new ArrayList<>();
if (shiroUtil.hasRole("sysadmin")) {
Cnd cnd = Cnd.NEW();
if (Strings.isBlank(pid)) {
cnd.and("parentId", "=", "").or("parentId", "is", null);
} else {
cnd.and("parentId", "=", pid);
}
cnd.asc("location").asc("path");
list = sysUnitService.query(cnd);
} else {
Sys_user user = (Sys_user) shiroUtil.getPrincipal();
if (user != null && Strings.isBlank(pid)) {
list = sysUnitService.query(Cnd.where("id", "=", user.getUnitid()).asc("path"));
} else {
Cnd cnd = Cnd.NEW();
if (Strings.isBlank(pid)) {
cnd.and("parentId", "=", "").or("parentId", "is", null);
} else {
cnd.and("parentId", "=", pid);
}
cnd.asc("location").asc("path");
list = sysUnitService.query(cnd);
}
}
for (Sys_unit unit : list) {
NutMap map = NutMap.NEW().addv("value", unit.getId()).addv("label", unit.getName());
if (unit.isHasChildren()) {
map.addv("children", new ArrayList<>());
}
treeList.add(map);
}
return Result.success("system.success").addData(treeList);
} catch (Exception e) {
return Result.error("system.error");
}
}
Element Html:
<el-cascader
:options="options"
:show-all-levels="false"
v-model="form.parentId"
:fetch-suggestions="unitQuery"
@active-item-change="unitChange"
@select="unitSelect"
placeholder="不选择则为顶级"
></el-cascader>
Js:
new Vue({
el: "#app",
data: function () {
return {
options: []
}
},
methods: {
loadTree: function (val,cb) {
var url = base + "/platform/sys/unit/tree";
$.post(url, {pid: val}, function (data) {
if (data.code == 0) {
cb(data.data);
}
}, "json");
},
unitQuery: function (queryString, cb) {
cb(this.options);
},
unitSelect: function (val) {
},
unitChange: function (val) {
var self=this;
this.loadTree(val[0],function (tree) {
self.options.findIndex(function (obj) {
if(val==obj.value){
obj.children=tree;
}
});
});
},
},
created: function () {
}
});