ztree的一些操作

package net.honren.material.action;

import net.honren.core.common.Constants;
import net.honren.data.VO.ZTreeVo;
import net.honren.material.domain.Attrcate;
import net.honren.material.domain.CarType;
import net.honren.material.service.CarTypeService;
import net.honren.sys.action.BaseAction;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.collections.Transformer;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.*;

public class CarTypeAction extends BaseAction {

    private  CarTypeService carTypeService;
    private CarType carType;
    private Long id;
    private String treeIds;
    private String  message;
    private List<ZTreeVo> customList;
    private List<Integer> carTypeIds = new ArrayList<Integer>();
    private List<Long> ids = new ArrayList<Long>();
    private Long checkId;


    public String index() throws Exception {
        return "index";
    }
    
    public String user() throws Exception {
        return "user";
    }

    @Override
    public String add() throws Exception { //添加子级
        return "add";
    }

    @Override
    public String list() throws Exception {
        return null;
    }

    /**
     * 车型用材搜索
     * @return
     * @throws Exception
     */
    public String sc() throws Exception {

        return "sc";
    }

    public Map responseJson = new HashMap();
    public Map getResponseJson() {
        return responseJson;
    }
    public void setResponseJson(Map responseJson) {
        this.responseJson = responseJson;
    }



    public String getTree() throws IOException {
        List<Attrcate> list = this.attrcateService.find("from Attrcate where id>1 order by weight");
        this.getResponse().setCharacterEncoding("utf-8");
        this.getResponse().setContentType("text/xml;charset=utf-8");
        PrintWriter out = this.getResponse().getWriter();
        out.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
        out.println("<nodes>");
        out.println("<node nodeId='1' parentId='-1' hrefAddress='attrcateshow.do?id=1'>全部属性</node>");
        for(Attrcate a : list){                 //hrefAddress='matecateinput.do?id=" + a.getId()
            out.println("<node nodeId='" + a.getId() + "' parentId='" + a.getParentid() + "' hrefAddress='attrcateshow.do?id=" + a.getId()  + "' code='" + a.getName()  + "' unit='" + a.getName()     + "'  price='" +  a.getName() + "' count='" + a.getId()  + "'>" + a.getName()  + "</node>");
        }
        out.println("</nodes>");
        out.close();
        return null;
    }

    public String tree() throws Exception
    {
        List<CarType> allList = new ArrayList<CarType>();
        String root = null;
        if(carType != null && carType.getType() == -1){
             root  = "车型";
             allList = carTypeService.find(" from CarType where type != ? order by id ",-1);
        }else{
            root  = "请选择";
            allList = carTypeService.find(" from CarType where type = ? ",-1);
        }
        customList = new ArrayList<ZTreeVo>();
        ZTreeVo zTree = new ZTreeVo();
        zTree.setId(0L);
        zTree.setpId(-1L);
        zTree.setName(root);
        zTree.setOpen(true);
        customList.add(zTree);
        for (CarType carType :  allList) {
            ZTreeVo zTreeVo = new ZTreeVo();
            zTreeVo.setId(carType.getId());
            zTreeVo.setpId(carType.getPid());
            zTreeVo.setName(carType.getName());
            customList.add(zTreeVo);
        }
        this.setCustomList(customList);
        return "tree";
    }


    public String checkTree() throws Exception
    {
        getChild(id);
        carTypeIds.add(0);

        responseJson.put("carTypeIds",carTypeIds);
        CarType carType = carTypeService.get(id);
        responseJson.put("name",carType.getName());
        responseJson.put("type",carType.getType());
        this.setResponseJson(responseJson);
        return "checkTree";
    }

    private List<CarType>  getChild(Long id) {
        List<CarType> cs = carTypeService.find(" from CarType where pid = ? ", id);
        if(cs != null){
            for (CarType c :  cs){
                carTypeIds.add(c.getType());
                ids.add(c.getId());
                getChild(c.getId());
            }
        }
        return cs;
    }


    @Override
    public String delete() throws Exception {
        try {
            if (!this.carTypeService.ishavechild(id)) {
                this.carTypeService.deleteById(id);
                msg.set(Constants.DELMSG, "carTypeadd.do");
                return "msg";
            } else {
                msg.set("删除失败,请先删除子区域!", "carTypeshow.do?id=" + id);
                return "msg";
            }

        } catch (Exception e) {
            msg.set("删除失败,本条记录被关联,不能删除!", "carTypeshow.do?id=" + id);
            return "msg";
        }

    }

    @Override
    public String input() throws Exception {
        this.carType = this.carTypeService.get(id);
        return "add";
    }

    public String show() throws Exception {
        this.carType = this.carTypeService.get(id);
        return "show";
    }


    public String manage() throws Exception {

        return "manage";
    }

    public String material() throws Exception {

        return "material";
    }

    @Override
    public String save() throws Exception {

        String[] treeIdArr = treeIds.split(",");
        if(checkId != 0){//修改
            //修改车型
            CarType ct = carTypeService.get(checkId);
            ct.setName(carType.getName());
            ct.setType(carType.getType());
            this.carTypeService.save(ct);
            //update tree
            getChild(checkId);

            List <String>  inputCollection  = Arrays.asList(treeIdArr) ;
            List <Integer> outputCollection = new ArrayList<Integer>() ;
            CollectionUtils.collect(inputCollection,
                    new Transformer() {
                        public java.lang.Object transform(java.lang.Object input) {
                            return new Integer((String) input);
                        }
                    }, outputCollection);

            //如果勾选的id在数据库中找不到则是添加
            for (Integer  carTypeId : outputCollection){
                if(!carTypeIds.contains(carTypeId)){
                    CarType carType = carTypeService.get(carTypeId.longValue());
//                    CarType allList = carTypeService.findByTypeAndIds(" from CarType where  type = ?  and id in ( ? ) ", carType.getPid().intValue(), ids.toArray());
//                    System.out.println(allList);
                }
            }

            //如果数据库中不存在勾选的id,则删除
            for (Integer  carTypeId : carTypeIds){

                if(!outputCollection.contains(carTypeId)){
                    System.out.println("del===============carTypeId========="+carTypeId);
                }
            }



        }else{
        carType.setPid(0L);
        carType.setTreeLevel(1);
        this.carTypeService.save(carType);
        id = carType.getId();//车型id
        //保存总成
        for (String treeId : treeIdArr){
            CarType zcCarType = carTypeService.get(Long.valueOf(treeId));
            CarType ct = new CarType();
            ct.setName(zcCarType.getName());
            if(zcCarType.getTreeLevel()  == 2){
                ct.setPid(carType.getId());
            }else{
                ct.setPid(id);
            }
            ct.setTreeLevel(zcCarType.getTreeLevel());
            ct.setType(zcCarType.getId().intValue());
            this.carTypeService.save(ct);
            //如果下面有子节点
            if(zcCarType.getTreeLevel() != 4 ){
                id = ct.getId();//如果 生成id 让下一个使用
            }
        }
        this.setMessage("添加成功!");
        }
        return "add";
    }


    @Override
    protected void prepareModel() throws Exception {
        // TODO Auto-generated method stub

    }

    public Object getModel() {
        // TODO Auto-generated method stub
        return null;
    }


    public CarTypeService getCarTypeService() {
        return carTypeService;
    }


    public void setCarTypeService(CarTypeService carTypeService) {
        this.carTypeService = carTypeService;
    }


    public CarType getCarType() {
        return carType;
    }


    public void setCarType(CarType carType) {
        this.carType = carType;
    }


    public Long getId() {
        return id;
    }


    public void setId(Long id) {
        this.id = id;
    }


    public List<ZTreeVo> getCustomList() {
        return customList;
    }

    public void setCustomList(List<ZTreeVo> customList) {
        this.customList = customList;
    }

    public String getTreeIds() {
        return treeIds;
    }

    public void setTreeIds(String treeIds) {
        this.treeIds = treeIds;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public List<Integer> getCarTypeIds() {
        return carTypeIds;
    }

    public void setCarTypeIds(List<Integer> carTypeIds) {
        this.carTypeIds = carTypeIds;
    }

    public Long getCheckId() {
        return checkId;
    }

    public void setCheckId(Long checkId) {
        this.checkId = checkId;
    }

    public List<Long> getIds() {
        return ids;
    }

    public void setIds(List<Long> ids) {
        this.ids = ids;
    }
}






<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>车型用材</title>
<link href="matmass/resources/css/carType.css" rel="stylesheet"
    type="text/css" />

<link rel="stylesheet" href="csstree/zTreeStyle/zTreeStyle.css" type="text/css"/>
<link rel="stylesheet" href="csstree/demo.css" type="text/css"/>
        
    <script src="/js/jquery-1.8.2.js" type="text/javascript"></script>
    <script type="text/javascript" src="matmass/resources/js/public.js" ></script>

    <script type="text/javascript" src="jstree/jquery.ztree.core-3.5.js"></script>
    <script type="text/javascript" src="jstree/jquery.ztree.excheck-3.5.js"></script>


<style type="text/css">
<!--
.STYLE1 {
    font-size: 12px;
    color: #2a445e;
}
-->
</style>
</head>
<body>
    <form method="post" name="pageform" action="carTypelist.do">
        #parse("matmass/include/top.html")
        <!-- 主体内容 -->
        <div class="w home">
            #parse("matmass/carType/carType_left.html")

            <!-- 右侧 -->
            <div class="body-right">
                <!-- 数据核心项 -->
                <div class="home-data-container_2">

                    <div class="ztree" id="ztree1" style="float:left;width:200px;height:200px;border-right:1px solid silver;">
                    </div>

                    <div style="float:left;padding: 10px;">
                        <input type="hidden" name="checkId" value="0"/>
                        车型   <input type="text" name="carType.name" style="margin-bottom: 10px;"/><br/>
                        车型种类
                        <input type="radio" style="margin: 10px;" value="1" name="carType.type"/>新开发
                        <input type="radio" value="2"  name="carType.type" />量产
                        <input type="radio" value="3"  name="carType.type" />停产
                        <input type="radio"  value="4"  name="carType.type" />竞品车

                        <div class="ztree" id="treeDemo" style="width:200px;"/>

                    </div>
                    <input type="button"  οnclick="saveCarType()" value="保存"/>
                    </div>

            </div>
        </div>
    </form>
</body>
</html>
#parse("matmass/include/foot.html")
<script language="javascript" src="matmass/resources/js/matmass.js"></script>
<script language="javascript">


    function ShowCarTypeTree(val) {

        var params = {
            "carType.type": val
        };

        jQuery.ajax({
            type: "post",
            url: "carTypetree.do",
            data:params,
            dataType: "json",
            cache: false,
            success: function (data) {

                var zNodes = data;
                if(val ==-1){

                    var setting = {
                        data: {
                            simpleData: {
                                enable: true
                            }
                        },
                        callback: {
                            onClick: zTreeOnClick
                        }
                    };
                    jQuery.fn.zTree.init($("#ztree1"), setting, zNodes);
                }else{
                    var setting = {
                        check: {
                            enable: true,
                            chkboxType: { "Y": "ps", "N": "ps" }
                        },
                        data: {
                            simpleData: {
                                enable: true
                            }
                        }
                    };
                    jQuery.fn.zTree.init($("#treeDemo"), setting, zNodes);
                }

            },
            error: function (data) {
                alert("数据加载失败!");
            },
            complete: function (data) {
            }
        });
    }

    jQuery(function(){
        ShowCarTypeTree(-1);//显示车型的树
        ShowCarTypeTree(1);//显示所有的树
    })

    function saveCarType(){

        var treeObj = jQuery.fn.zTree.getZTreeObj("treeDemo"),
                nodes = treeObj.getCheckedNodes(true),
                v = "";
        var v = new Array();
        for (var i = 0; i < nodes.length; i++) {
            if (nodes[i].name != '请选择') {
                v.push(nodes[i].id);
            }
        }

        var treeIds=v.join(",");

        //获取选择树的id
        var carTypeName = $("input[name ='carType.name']").val();
        var carTypeType = $("input[name='carType.type']:checked").val();
        var checkId = $("input[name ='checkId']").val();// 0修改 1  添加
        var params = {
            "carType.name": carTypeName,
            "carType.type": carTypeType,
            "treeIds": treeIds,
            "checkId": checkId
        };

        jQuery.ajax({
            type: "post",
            url:"carTypesave.do",
            data:params,// 要提交的表单
            success: function(msg) {
                ShowCarTypeTree(-1);
                alert(msg);
            }
        });
    }

    function zTreeOnClick(event, treeId, treeNode) {

        var id = treeNode.id;
        if(id != 0){
       //根据id ajax 去查询 勾选树
            $("input[name ='checkId']").val(id);//修改
            var params = {
                "id": id
            };
            jQuery.ajax({
                type: "post",
                url:"carTypecheckTree.do",
                data:params,// 要提交的表单
                success: function(data) {

                     $("input[name ='carType.name']").val(data['name']);
                     $("input[name='carType.type'][value='"+data['type']+"']").attr("checked",true);
                     var strs = data['carTypeIds'];
                     var treeObj = jQuery.fn.zTree.getZTreeObj("treeDemo");
                     //选中模块和组后 加载已经有的权限
                     for( var i = 0; i < strs.length; i++ ) {
                        if(treeObj.getNodeByParam( "id",strs[i] )!=null){
                            treeObj.checkNode( treeObj.getNodeByParam( "id",strs[i] ), true );
                        }
                     }
                }
            });


        }else{
            ShowCarTypeTree(1);//显示所有的树
            $("input[name ='checkId']").val(id);//添加
            $("input[name ='carType.name']").val('');
            $("input[name='carType.type']:eq(0)").attr("checked",'checked');//默认选中第一个
        }

    }



</script>





<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>车型用材</title>
<link href="matmass/resources/css/carType.css" rel="stylesheet"
    type="text/css" />

<link rel="stylesheet" href="csstree/zTreeStyle/zTreeStyle.css" type="text/css"/>
<link rel="stylesheet" href="csstree/demo.css" type="text/css"/>
        
    <script src="matmass/resources/js/jquery-1.4.4.min.js" type="text/javascript"></script>
    <script type="text/javascript" src="matmass/resources/js/public.js" ></script>

    <script type="text/javascript" src="jstree/jquery.ztree.core-3.5.js"></script>
    <script type="text/javascript" src="jstree/jquery.ztree.excheck-3.5.js"></script>
    <script type="text/javascript" src="jstree/jquery.ztree.exedit-3.5.js"></script>


<style type="text/css">
<!--
.STYLE1 {
    font-size: 12px;
    color: #2a445e;
}
-->
div#rMenu {position:absolute; visibility:hidden; top:0; text-align: left;padding: 2px;}
div#rMenu ul li{
    margin: 1px 0;
    padding: 0 5px;
    cursor: pointer;
    list-style: none outside none;
    background-color: #DFDFDF;
}

</style>
</head>
<body>
    <form method="post" name="pageform" action="carTypelist.do">
        #parse("matmass/include/top.html")
        <!-- 主体内容 -->
        <div class="w home">
            #parse("matmass/carType/carType_left.html")

            <!-- 右侧 -->
            <div class="body-right">
                <!-- 数据核心项 -->
                <div class="home-data-container_2">

                    <div class="content_wrap">
                        <div class="zTreeDemoBackground left">
                            <ul id="treeDemo" class="ztree"></ul>
                        </div>
                    </div>
                    <div id="rMenu">
                        <ul>
                            <li id="m_add" οnclick="addTreeNode();">增加节点</li>
                            <li id="m_del" οnclick="removeTreeNode();">删除节点</li>
                            <li id="m_check" οnclick="checkTreeNode(true);">Check节点</li>
                            <li id="m_unCheck" οnclick="checkTreeNode(false);">unCheck节点</li>
                            <li id="m_reset" οnclick="resetTree();">恢复zTree</li>
                        </ul>
                    </div>


                </div>
            </div>
        </div>
        <!--<DIV id="menuContent" class="menuContent" style="display:none; position: absolute;">-->
                <!--<ul id="treeDemo" class="ztree" style="margin-top:0; width:255px; height: 300px;"></ul>-->
            <!--</DIV>-->
    </form>
</body>
</html>
#parse("matmass/include/foot.html")
<script language="javascript" src="matmass/resources/js/matmass.js"></script>
<script language="javascript">

    <!--
    var setting = {
        view: {
            dblClickExpand: false
        },
        callback: {
            onRightClick: OnRightClick
        },
        check: {
            enable: true,
            chkboxType: { "Y": "ps", "N": "ps" }
        },
        data: {
            simpleData: {
                enable: true
            }
        }
    };

    var zNodes =[];

    function OnRightClick(event, treeId, treeNode) {
        if (!treeNode && event.target.tagName.toLowerCase() != "button" && jQuery(event.target).parents("a").length == 0) {
            zTree.cancelSelectedNode();
            showRMenu("root", event.clientX, event.clientY);
        } else if (treeNode && !treeNode.noR) {
            zTree.selectNode(treeNode);
            showRMenu("node", event.clientX, event.clientY);
        }
    }

    function showRMenu(type, x, y) {
        jQuery("#rMenu ul").show();
        if (type=="root") {
            jQuery("#m_del").hide();
            jQuery("#m_check").hide();
            jQuery("#m_unCheck").hide();
        } else {
            jQuery("#m_del").show();
            jQuery("#m_check").show();
            jQuery("#m_unCheck").show();
        }
        rMenu.css({"top":y+"px", "left":x+"px", "visibility":"visible"});

        jQuery("body").bind("mousedown", onBodyMouseDown);
    }
    function hideRMenu() {
        if (rMenu) rMenu.css({"visibility": "hidden"});
        jQuery("body").unbind("mousedown", onBodyMouseDown);
    }
    function onBodyMouseDown(event){
        if (!(event.target.id == "rMenu" || jQuery(event.target).parents("#rMenu").length>0)) {
            rMenu.css({"visibility" : "hidden"});
        }
    }
    var addCount = 1;
    function addTreeNode() {
        hideRMenu();
        var newNode = { name:"增加" + (addCount++)};
        if (zTree.getSelectedNodes()[0]) {
            newNode.checked = zTree.getSelectedNodes()[0].checked;
            zTree.addNodes(zTree.getSelectedNodes()[0], newNode);
        } else {
            zTree.addNodes(null, newNode);
        }
    }
    function removeTreeNode() {
        hideRMenu();
        var nodes = zTree.getSelectedNodes();
        if (nodes && nodes.length>0) {
            if (nodes[0].children && nodes[0].children.length > 0) {
                var msg = "要删除的节点是父节点,如果删除将连同子节点一起删掉。\n\n请确认!";
                if (confirm(msg)==true){
                    zTree.removeNode(nodes[0]);
                }
            } else {
                zTree.removeNode(nodes[0]);
            }
        }
    }
    function checkTreeNode(checked) {
        var nodes = zTree.getSelectedNodes();
        if (nodes && nodes.length>0) {
            zTree.checkNode(nodes[0], checked, true);
        }
        hideRMenu();
    }
    function resetTree() {
        hideRMenu();
        jQuery.fn.zTree.init(jQuery("#treeDemo"), setting, zNodes);
    }

    var zTree, rMenu;
    jQuery(document).ready(function(){
        zNodes = ShowCarTypeTree();
        jQuery.fn.zTree.init(jQuery("#treeDemo"), setting, zNodes);
        zTree = jQuery.fn.zTree.getZTreeObj("treeDemo");
        rMenu = jQuery("#rMenu");
    });
    //-->



    function ShowCarTypeTree() {

        jQuery.ajax({
            type: "post",
            url: "carTypetree.do",
            async : false,
            dataType: "json",
            cache: false,
            success: function (data) {
                 zNodes = data;
            },
            error: function (data) {
                alert("数据加载失败!");
            }
        });
        return zNodes;
    }

</script>



转载于:https://www.cnblogs.com/yaoyao66123/p/5735410.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值