ext trigger+treepanel

本博客介绍了一种集成的解决方案,用于管理和展示员工信息及部门组织结构。通过构建用户选择界面和部门选择树形结构,实现员工数据与部门层次的高效交互。详细阐述了如何使用Ext.js库来实现这一功能,包括数据存储、搜索功能、选择模型和树状显示。此方案适用于企业级应用中员工信息管理和部门组织结构展示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

Ext.ns("jackAccess");

 

jackAccess.jackComboBox = function() {
    var trigger_users, store_users, trigger_departments, gridPanel_users, treePanel_departments, pageSize, reload = true;
    pageSize = 20;

    var store_users = new Ext.data.JsonStore({
        method: "post", id: "store", url: '/Rsb_UserInfo/List', root: 'data',
        fields: ['UserID', 'Card', 'badgeNumber', 'Name', 'Gender'],
        totalProperty: 'totalCount', pruneModifiedRecords: true,
        baseParams: { start: 0, limit: 100}//, remoteSort: true

    });
    var sm = new Ext.grid.CheckboxSelectionModel({ singleSelect: false, listeners: { "rowselect": function(sm) { setUsersValue(); } } });
    function setUsersValue() {
        var records = [];
        var selectedData = gridPanel_users.getSelectionModel().getSelections();
        for (var i = 0; i < selectedData.length; i++) { records.push(selectedData[i].get("UserID")); }
        trigger_users.setValue(records);
    }
    gridPanel_users = new Ext.grid.GridPanel({
        store: store_users, viewConfig: { forceFit: true }, width: 400, height: 450,
        loadMask: true,
        columns: [new Ext.grid.RowNumberer(), sm,
                   { id: "badgeNumber", header: "编号", sortable: true, dataIndex: 'badgeNumber' },
                   { header: "姓名", sortable: true, dataIndex: 'Name' },
                   { header: "职务类型", width: 200, sortable: true, dataIndex: 'title' }
                   ],
        sm: sm,

        tbar: [new Ext.ux.form.SearchField({ store: store_users }), new Ext.Toolbar.Fill(), { iconCls: "close", handler: function() { trigger_users.menu.hide(); } }],
        bbar: new Ext.PagingToolbar({ pageSize: 100, store: store_users, displayInfo: true, displayMsg: '总记录数 {0} - {1} of {2}', emptyMsg: "没有记录" })

    });
    trigger_users = new Ext.form.TriggerField({ editable: true, name: "badgeNumber", fieldLabel: "员工编号",
        onTriggerClick: function(thiss) {
            if (this.menu == null) {
                this.menu = new Ext.menu.Menu({ items: [gridPanel_users] });
            }
            if (reload) {
                store_users.baseParams['deptid'] = trigger_departments.getRawValue();
                store_users.load();
                reload = false;
            }
            this.menu.show(this.el);
        }
    });
    //树形部门数据
    loader = new Ext.tree.TreeLoader({});
    tree = new Ext.tree.TreePanel({
        loader: loader, draggable: false, expanded: true,
        name: 'combodepartments',

        rootVisible: false, width: 300, height: 400, autoScroll: true,
        listeners: { "checkchange": function(node, checked) {
            var parentNode = node.parentNode;
            if (parentNode !== null) {
                parentCheck(parentNode, checked);
            }
            node.expand();
            node.attributes.checked = checked;
            node.eachChild(function(child) {
                child.ui.toggleCheck(checked);
                child.attributes.checked = checked;
                child.fireEvent('checkchange', child, checked);

            });
            var checkedNodes = tree.getChecked('id'); //; //
            trigger_departments.setValue(checkedNodes);
            reload = true;
        }
        }

    });

    var childHasChecked = function(node) {
        var childNodes = node.childNodes;
        if (childNodes || childNodes.length > 0) {
            for (var i = 0; i < childNodes.length; i++) {
                if (childNodes[i].getUI().checkbox.checked)
                    return true;
            }
        }
        return false;
    }

    var parentCheck = function(node, checked) {
        var checkbox = node.getUI().checkbox;
        if (typeof checkbox == 'undefined')
            return false;
        if (!(checked ^ checkbox.checked))
            return false;
        if (!checked && childHasChecked(node))
            return false;
        checkbox.checked = checked;
        node.attributes.checked = checked;
        node.getOwnerTree().fireEvent('check', node, checked);

        var parentNode = node.parentNode;
        if (parentNode !== null) {
            parentCheck(parentNode, checked);
        }
    }
    root = new Ext.tree.AsyncTreeNode({
        id: '1',
        text: "我的菜单"

    });
    tree.setRootNode(root);
    tree.rootVisible = false;
    tree.on("beforeload", function(node) {

        loader.dataUrl = "Rsb_DepartMents/list";
        loader.baseParams.type = "dynamicLoadTreePanel";
        loader.baseParams.fid = node.id;
    });
    tree.rootVisible = false;
    var sm = new Ext.grid.CheckboxSelectionModel();
    trigger_departments = new Ext.form.TriggerField({ editable: true, name: "badgeNumber", fieldLabel: "员工编号",
        onTriggerClick: function(thiss) {
            if (this.menu == null) {
                this.menu = new Ext.menu.Menu({ items: [tree] });

            }
            this.menu.show(this.el);
        }
    });
    return { users: function() { return trigger_users; },
        departments: function() { return trigger_departments; }
    };
}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sunjay117

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值