java微信企业号开发之通讯录
程序员文章站
2024-03-12 18:00:50
上篇文章中介绍了聊天功能,这里介绍通讯录是如何实现的。首先要加载公司的所有部门,树形结构,然后点击进入部门的人员列表,点击人员能查看详细信息。
一、界面...
上篇文章中介绍了聊天功能,这里介绍通讯录是如何实现的。首先要加载公司的所有部门,树形结构,然后点击进入部门的人员列表,点击人员能查看详细信息。
一、界面
公司部门的树形结构:
部门成员列表:
个人详细信息:
二、代码实现
1.controller
/** * 加载部门列表 */ @requestmapping("/addresslistdepartmentjsp.do") public void addresslistdepartment(httpservletrequest request, httpservletresponse response) throws ioexception{ request.setcharacterencoding("utf-8"); response.setcharacterencoding("utf-8"); list<jsontree> jslist = addresslistservice.gettree(); jsonarray jsonarray = jsonarray.fromobject(jslist); printwriter out = response.getwriter(); out.print(jsonarray); } /** * 加载部门成员列表 */ @requestmapping("/addresslistuserlist.do") public string addresslistuserlist(httpservletrequest request,httpservletresponse response) throws unsupportedencodingexception{ request.setcharacterencoding("utf-8"); response.setcharacterencoding("utf-8"); string deptid=request.getparameter("departmentid"); string d=request.getparameter("departmentname"); string departmentname = new string(d.getbytes("iso-8859-1"),"utf-8"); list<userdetail> userdetail = addresslistservice.getuserdetail(deptid); request.setattribute("userdetail", userdetail); request.setattribute("departmentname", departmentname); return "addresslistuserlist"; } /** * 查看员工详细信息 */ @requestmapping("/addresslistuserinfo.do") public string addresslistuserinfo(httpservletrequest request,httpservletresponse response) throws unsupportedencodingexception{ request.setcharacterencoding("utf-8"); response.setcharacterencoding("utf-8"); string n=request.getparameter("name"); string name = new string(n.getbytes("iso-8859-1"),"utf-8"); string mobile=request.getparameter("mobile"); string email=request.getparameter("email"); string weixinid=request.getparameter("weixinid"); string avatar=request.getparameter("avatar"); string d=request.getparameter("departmentname"); string departmentname = new string(d.getbytes("iso-8859-1"),"utf-8"); request.setattribute("name", name); request.setattribute("mobile", mobile); request.setattribute("email",email); request.setattribute("weixinid", weixinid); request.setattribute("avatar", avatar); request.setattribute("departmentname", departmentname); return "addresslistuserinfo"; }
2.serviceimpl
/** * 加载部门列表 */ public list<jsontree> gettree(){ //1.先获取token string accesstoken = commonutil.getaccesstoken("wxe510946434680dab", "ewtaho766invp4e1mcsz1mhyut2daleb62req3vsfizhy4vtmwzpkweuxuvh33g0").getaccesstoken(); //2.获取部门列表 list<department> departmentlist = advancedutil.getdepartment(accesstoken); //根据部门列表转换为页面需要的格式 list<jsontree> jslist = this.convertlist(departmentlist); return jslist; } /** * 转为ztree的格式 */ public list<jsontree> convertlist( list<department> departmentlist) { list<jsontree> rootnode = new arraylist<jsontree>(); for (int i = 0; i < departmentlist.size(); i++) { for (int j = i+1; j <departmentlist.size(); j++) { if (departmentlist.get(i).getid()==departmentlist.get(j).getparentid()) { jsontree jt = new jsontree(); jt.setid(departmentlist.get(i).getid()); jt.setname(departmentlist.get(i).getname()); jt.setpid(departmentlist.get(i).getparentid()); jt.setopen(false); jt.seturl(""); rootnode.add(jt); break; }else { jsontree jt = new jsontree(); jt.setid(departmentlist.get(i).getid()); jt.setname(departmentlist.get(i).getname()); jt.setpid(departmentlist.get(i).getparentid()); jt.setopen(false); jt.seturl("addresslistuserlist.do?departmentid="+departmentlist.get(i).getid()+"&departmentname="+departmentlist.get(i).getname()); rootnode.add(jt); break; } } } return rootnode; } /** * 加载部门成员列表 */ public list<userdetail> getuserdetail(string deptid){ //1.先获取token string accesstoken = commonutil.getaccesstoken("wxe510946434680dab", "ewtaho766invp4e1mcsz1mhyut2daleb62req3vsfizhy4vtmwzpkweuxuvh33g0").getaccesstoken(); //2.根据部门id和token的值获取部门成员列表 list<userdetail> userdetail = advancedutil.getuserdetail(accesstoken, deptid); return userdetail; }
3.工具类
//获取部门列表 public static list<department> getdepartment(string accesstoken) { list<department> departmentlist = null; // https://qyapi.weixin.qq.com/cgi-bin/department/list?access_token=access_token string requesturl = "https://qyapi.weixin.qq.com/cgi-bin/department/list?access_token=access_token"; requesturl = requesturl.replace("access_token", accesstoken); jsonobject jsonobject = commonutil.httpsrequest(requesturl, "get", null); if (null != jsonobject) { try { departmentlist = jsonarray.tolist(jsonobject.getjsonarray("department"), department.class); } catch (jsonexception e) { departmentlist = null; int errorcode = jsonobject.getint("errcode"); string errormsg = jsonobject.getstring("errmsg"); } } return departmentlist; }//获取部门成员详情 public static list<userdetail> getuserdetail(string accesstoken,string departmentid){ list<userdetail> userdetail = null; string requesturl = "https://qyapi.weixin.qq.com/cgi-bin/user/list?access_token=access_token&department_id=department_id&fetch_child=1&status=0"; requesturl = requesturl.replace("access_token", accesstoken).replace("department_id", departmentid); jsonobject jsonobject = commonutil.httpsrequest(requesturl, "get", null); if (null != jsonobject) { try { userdetail = jsonarray.tolist(jsonobject.getjsonarray("userlist"),userdetail.class); } catch (jsonexception e) { userdetail = null; int errorcode = jsonobject.getint("errcode"); string errormsg = jsonobject.getstring("errmsg"); } } return userdetail; }
4.js
<script type="text/javascript"> var curmenu = null, ztree_menu = null; var setting = { view: { showline: false, showicon: false, selectedmulti: false, dblclickexpand: false, adddiydom: adddiydom }, data: { simpledata: { enable: true } }, callback: { beforeclick: beforeclick } }; var znodes = null; $.ajax({ type : "post", async: false, url :"addresslistdepartmentjsp.do", success : function(data) { znodes = eval('(' + data + ')'); }, error : function(data) { } }); function adddiydom(treeid, treenode) { var spacewidth = 5; var switchobj = $("#" + treenode.tid + "_switch"), icoobj = $("#" + treenode.tid + "_ico"); switchobj.remove(); icoobj.before(switchobj); if (treenode.level > 1) { var spacestr = "<span style='display: inline-block;width:" + (spacewidth * treenode.level)+ "px'></span>"; switchobj.before(spacestr); } } function beforeclick(treeid, treenode) { var str ='' ; str = getallchildrennodes(treenode,str); if (str.substr(0,1)==',') str=str.substr(1); if(str!=""){ treenode.url=""; var ztree = $.fn.ztree.getztreeobj("treedemo"); ztree.expandnode(treenode); return false; } if(str==""){ } return true; } // 张晓 朱丹 function getallchildrennodes(treenode,result){ //var strresult=result; if (treenode.isparent) { var childrennodes = treenode.children; if (childrennodes) { for (var i = 0; i < childrennodes.length; i++) { result += ',' + childrennodes[i].id; } } } return result; } $(document).ready(function(){ var treeobj = $("#treedemo"); $.fn.ztree.init(treeobj, setting, znodes); ztree_menu = $.fn.ztree.getztreeobj("treedemo"); curmenu = ztree_menu.getnodes()[0].children[0].children[0]; ztree_menu.selectnode(curmenu); treeobj.hover(function () { if (!treeobj.hasclass("showicon")) { treeobj.addclass("showicon"); } }, function() { treeobj.removeclass("showicon"); }); }); </script> <style type="text/css"> .ztree * {font-size: 13pt;font-family:"microsoft yahei",verdana,simsun,"segoe ui web light","segoe ui light","segoe ui web regular","segoe ui","segoe ui symbol","helvetica neue",arial} .ztree li ul{ margin:0; padding:0} .ztree li {line-height:30px;} .ztree li a {width:100%;height:30px;padding-top: 0px;border-bottom:1px #eeeeee solid} .ztree li a:hover {text-decoration:none; background-color: #e7e7e7;} /* .ztree li a span.button.switch {visibility:hidden} */ .ztree.showicon li a span.button.switch {visibility:visible} .ztree li a.curselectednode {background-color:#d4d4d4;border:0;height:30px;} .ztree li span {line-height:30px;} .ztree li span.button {margin-top: -7px;} .ztree li span.button.switch {width: 16px;height: 16px;} .ztree li a.level0 span {font-size: 150%;font-weight: bold;} .ztree li span.button {background-image:url("images/left_menuforoutlook.png"); *background-image:url("./left_menuforoutlook.gif")} .ztree li span.button.switch.level0 {width: 20px; height:20px} .ztree li span.button.switch.level1 {width: 20px; height:20px} .ztree li span.button.noline_open {background-position: 0 0;} .ztree li span.button.noline_close {background-position: -18px 0;} .ztree li span.button.noline_open.level0 {background-position: 0 -18px;} .ztree li span.button.noline_close.level0 {background-position: -18px -18px;} </style> </head> <body> <div data-role="page" id="usermain"> <div class="content_wrap" style="width:96%;height:98%;margin-left: auto;margin-right: auto;" > <div class="ztreedemobackground left" style="width:100%;height:98%;" > <ul id="treedemo" class="ztree" style="width:98%;height:98%;" ></ul> </div> </div> <span id="znodes"></span> </div> </body>
三、总结
通讯录功能并没有想象中的难,树结构采用ztree框架,后台查到的数据必须转换为ztree定义的名称,然后部门成员列表的显示和查询用到jquery mobile,在以后的文章中再介绍这种js的使用,从名字上就知道它是专门为手机页面开发的。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。