• jsTree树形菜单分类


    这里我演示的jsTree是基于ABP框架 ,展示部分代码,话不多说首先看效果如:

     

    1:引入JS

    <link href="/jstree/themes/default/style.css" rel="stylesheet" />
    <script src="/jstree/jstree.js"></script>
    

    2:页面部分代码

     1  <div class="row">
     2                                 <div class="col-lg-6 border_solid first_border_solid">
     3                                     <div class="portlet light">
     4                                         <div class="portlet-title">
     5                                             <div class="caption">
     6                                                 <span class="caption-subject bold uppercase">
     7                                                     树形菜单分类
     8                                                 </span>
     9                                                 <a ng-if="vm.permissions.managecategoryTree" ng-click="vm.categoryTree.addUnit(null)" class="btn btn-primary">
    10                                                     <i class="fa fa-plus"></i> 新增资源分类
    11                                                 </a>
    12                                             </div>
    13                                         </div>
    14                                         <div class="portlet-body">
    15                                             <div id="CategoryEditTree"></div>
    16                                             <div ng-if="!vm.categoryTree.unitCount" class="text-muted">
    17                                                 当前没有资源分类信息
    18                                             </div>
    19                                         </div>
    20                                     </div>
    21                                 </div>
    22                                 <div class="col-lg-5 border_solid second_border_solid">
    23                                     <div class="portlet light">
    24                                         <div class="portlet-title">
    25                                             <div class="caption">
    26                                                 <span class="caption-subject bold uppercase">
    27                                                     分类
    28                                                     <span ng-if="vm.categoryTree.selectedOu.displayName">: {{vm.categoryTree.selectedOu.displayName}}</span>
    29                                                 </span>
    30                                             </div>
    31                                             @*<div class="actions" ng-if="vm.categoryTree.selectedOu.id">
    32                                                 <a ng-if="vm.permissions.managecategoryTree" ng-click="vm.members.openAddModal()" class="btn btn-circle btn-default">
    33                                                     <i class="fa fa-plus"></i> 添加一个资源
    34                                                 </a>
    35                                             </div>*@
    36                                         </div>
    37                                         <div class="portlet-body">
    38                                             <div ng-if="vm.categoryTree.selectedOu.id">
    39                                                 <form class="editCategoryForm">
    40                                                     <div class="form-group">
    41                                                         <label>上级分类</label>
    42                                                         <span>{{vm.categoryTree.selectedParent()}}</span>
    43                                                     </div>
    44                                                     <div class="form-group">
    45                                                         <label>分类ID</label>
    46                                                         <span>{{vm.categoryTree.selectedOu.id}}</span>
    47                                                     </div>
    48                                                     <div class="form-group">
    49                                                         <label>分类名称</label>
    50                                                         <input type="text" value="" ng-model="vm.categoryTree.displayName" class="form-control" />
    51                                                     </div>
    52                                                     <div class="form-group">
    53                                                         <label>排序</label>
    54                                                         <input type="number" value="" ng-model="vm.categoryTree.orderId" class="form-control" />
    55                                                     </div>
    56                                                     <div class="form-group editCategory">
    57                                                         <button class="btn btn-primary" ng-click="vm.categoryTree.editCategory()">保存</button>
    58                                                     </div>
    59                                                 </form>
    60                                             </div>
    61                                             <div ng-if="!vm.categoryTree.selectedOu.id" class="text-muted">
    62                                                 选择一个分类添加成员
    63                                             </div>
    64                                         </div>
    65                                     </div>
    66                                 </div>
    67                             </div>

    3:js部分代码

      1          //#region 操作
      2             vm.categoryTree = {
      3 
      4                 $tree: null,
      5 
      6                 unitCount: 0,
      7 
      8                 // 设置根节点数量
      9                 setUnitCount: function (unitCount) {
     10                     vm.categoryTree.unitCount = unitCount; 
     12                 },
     13 
     14                 refreshUnitCount: function () {
     15                     vm.categoryTree.setUnitCount(vm.categoryTree.$tree.jstree('get_json').length);
     16                 },
     17 
     18                 selectedOu: {
     19                     id: null,
     20                     displayName: null,
     21                     code: null,
     22 
     23                     set: function (ouInTree) {
     24 
     25                         if (!ouInTree) {
     26                             vm.categoryTree.selectedOu.id = null;
     27                             vm.categoryTree.selectedOu.displayName = null;
     28                             vm.categoryTree.selectedOu.code = null;
     29                             vm.categoryTree.selectedOu.parentId = null;
     30                         } else {
     31                             vm.categoryTree.selectedOu.id = ouInTree.id;
     32                             vm.categoryTree.selectedOu.displayName = ouInTree.original.displayName;
     33                             vm.categoryTree.selectedOu.code = ouInTree.original.code;
     34                             vm.categoryTree.selectedOu.parentId = ouInTree.parent;
     35                         }
     36                     }
     37                 },
     38 
     39                 // 节点右键菜单列表
     40                 contextMenu: function (node) {
     41                     var items = {
     42                         editUnit: {
     43                             label: '修改',
     44                             _disabled: !vm.permissions.managecategoryTree,
     45                             action: function (data) {
     46                                 var instance = $.jstree.reference(data.reference);
     47 
     48                                 vm.categoryTree.openCreateOrEditUnitModal({
     49                                     id: node.id,
     50                                     displayName: node.original.displayName
     51                                 }, function (updatedOu) {
     52                                     node.original.displayName = updatedOu.displayName;
     53                                     instance.rename_node(node, vm.categoryTree.generateTextOnTree(updatedOu));
     54                                 });
     55                             }
     56                         },
     57 
     58                         addSubUnit: {
     59                             label: '添加下级分类',
     60                             _disabled: !vm.permissions.managecategoryTree,
     61                             action: function () {
     62                                 vm.categoryTree.addUnit(node.id);
     63                             }
     64                         },
     65  
     73 
     74                         'delete': {
     75                             label: '删除',
     76                             _disabled: !vm.permissions.managecategoryTree,
     77                             action: function (data) {
     78                                 abp.message.confirm('确定删除', node.original.displayName, function (isConfirmed) {
     79                                     if (isConfirmed) {
     80                                         categoryService.deleteResourceClassAsync(node.id).then(function () { //后台服务获取数据(AngularJs)
     81                                             abp.notify.success('删除成功');
     82                                             window.sweetAlert.close();
     83                                             vm.categoryTree.reload();
     84                                         });
     85                                     }
     86                                 }
     87                                 );
     88                             }
     89                         }
     90                     }
     91 
     92                     return items;
     93                 },
     94 
     95                 // 新增节点数
     96                 addUnit: function (parentId) {
     97 
     98                     var instance = $.jstree.reference(vm.categoryTree.$tree);
     99                     vm.categoryTree.openCreateOrEditUnitModal({
    100                         parentId: parentId
    101 
    102                     }, function (newOu) {
    103                         instance.create_node(
    104                             parentId ? instance.get_node(parentId) : '#',
    105                             {
    106                                 id: newOu.id,
    107                                 parent: newOu.parentId ? newOu.parentId : '#',
    108                                 code: newOu.code,
    109                                 displayName: newOu.displayName,
    110                                 memberCount: 0,
    111                                 text: vm.categoryTree.generateTextOnTree(newOu),
    112                                 state: {
    113                                     opened: false  // 是否默认展开所有节点
    114                                 }
    115                             });
    116 
    117                         vm.categoryTree.refreshUnitCount();
    118                     });
    119                 },
    120 
    121                 // 打开模态框 新增或编辑
    122                 openCreateOrEditUnitModal: function (organizationUnit) {
    123                     // console.log(organizationUnit);
    124                     var modalInstance = $uibModal.open({
    125                         templateUrl: '~/App/Main/views/commoditie/createOrEditCategoryModal.cshtml',
    126                         controller: 'app.views.commoditie.createOrEditCategoryModal as vm',
    127                         backdrop: 'static',
    128                         resolve: {
    129                             organizationUnit: function () {
    130                                 return organizationUnit;
    131                             }
    132                         }
    133                     });
    134 
    135                     modalInstance.result.then(function () {
    136 
    137                         vm.categoryTree.reload();
    138 
    139                     });
    140                 },
    141 
    142                 generateTextOnTree: function (ou) {
    143                     var itemClass = ou.resourceClassificationChilds.length > 0 ? ' ou-text-has-members' : ' ou-text-no-members';
    144                     var parentId = ou.parentId == null ? 'top' : ou.parentId;
    145                     return '<span title="' + ou.code + '" class="ou-text' + itemClass + '" data-ou-id="' + ou.id + '" data-parent-ou-id="' + parentId + '" data-name="' + ou.displayName + '" >' + ou.displayName + ' (<span class="ou-text-resources-count">' + ou.resourceClassificationChilds.length + '</span>) <i class="fa fa-caret-down text-muted"></i></span>';
    146                 },
    147 
    148                 incrementMemberCount: function (ouId, incrementAmount) {
    149                     var treeNode = vm.categoryTree.$tree.jstree('get_node', ouId);
    150                     treeNode.original.memberCount = treeNode.original.memberCount + incrementAmount;
    151                     vm.categoryTree.$tree.jstree('rename_node', treeNode, vm.categoryTree.generateTextOnTree(treeNode.original));
    152                 },
    153 
    154                 // 获取数据
    155                 getTreeDataFromServer: function (callback) { 
    156                     categoryService.getResourceClassificationListAsync({}).then(function (result) {  // 后台服务获取数据(AngularJS)
    157                         // console.log(result);
    158                         var treeData = result.data.map((item) => {
    159                             return {
    160                                 id: item.id,
    161                                 parent: item.parentId ? item.parentId : '#',
    162                                 code: item.code,
    163                                 displayName: item.displayName,
    164                                 memberCount: 0, //item.memberCount,
    165                                 text: vm.categoryTree.generateTextOnTree(item),
    166                                 state: {
    167                                     opened: false // 是否默认展开所有节点
    168                                 }
    169                             };
    170                         });
    171 
    172                         callback(treeData);
    173                     });
    174                 },
    175                 // 编辑分类
    176                 editCategory: function () {
    177                     var editCategory = {
    178                         "id": vm.categoryTree.selectedOu.id,
    179                         "displayName": vm.categoryTree.displayName,
    180                         "orderId": vm.categoryTree.orderId
    181                     };
    182                     var parentId = vm.categoryTree.selectedOu.parentId;
    183                     parentId == '#' ? parentId = '' : parentId;
    184                     editCategory.parentId = parentId;
    185                     if (vm.categoryTree.displayName != undefined && vm.categoryTree.orderId != undefined) {
    186                         categoryService.updateCategoryAsync(editCategory)
    187                             .then(function (result) {
    188                                 abp.notify.info('保存成功');
    189                                 vm.categoryTree.reload();
    190                             });
    191                     } else {
    192                         abp.message.warn('请输入分类名称或排序值');
    193                     }
    194                     // console.log(editCategory);
    195                 },
    196                 selectedParent: function () {
    197                     var selectedParentId = vm.categoryTree.selectedOu.parentId;
    198                     var parentName;
    199                     if (selectedParentId == '#') {
    200                         return '此分类是最顶级分类';
    201                     } else {
    202                         parentName = $('[data-ou-id="' + selectedParentId + '"]').attr('data-name');
    203                         return parentName;
    204                     }
    205                 },
    206                 // 初始化
    207                 init: function () {
    208                     vm.categoryTree.getTreeDataFromServer(function (treeData) {
    209                         vm.categoryTree.setUnitCount(treeData.length);
    210                         vm.categoryTree.$tree = $('#CategoryEditTree');
    211 
    212                         var jsTreePlugins = [
    213                             'types',
    214                             'contextmenu',
    215                             'wholerow',
    216                             'sort'
    217                         ];
    218 
    219                         if (vm.permissions.managecategoryTree) {
    220                             jsTreePlugins.push('dnd');
    221                         }
    222 
    223                         vm.categoryTree.$tree.on('changed.jstree', function (e, data) {
    224                             // console.log(data);
    225                             $scope.$apply(function () {
    226                                 if (data.selected.length != 1) {
    227                                     vm.categoryTree.selectedOu.set(null);
    228                                 } else {
    229                                     var selectedNode = data.instance.get_node(data.selected[0]);
    230                                     vm.categoryTree.selectedOu.set(selectedNode);
    231                                 }
    232                             });
    233                         }).jstree({
    234                             'core': {
    235                                 data: treeData,
    236                                 multiple: false,
    237                                 check_callback: function (operation, node, node_parent, node_position, more) {
    238                                     return true;
    239                                 }
    240                             },
    241                             types: {
    242                                 "default": {
    243                                     "icon": "fa fa-folder tree-item-icon-color icon-lg"
    244                                 },
    245                                 "file": {
    246                                     "icon": "fa fa-file tree-item-icon-color icon-lg"
    247                                 }
    248                             },
    249                             contextmenu: {
    250                                 items: vm.categoryTree.contextMenu
    251                             },
    252                             sort: function (node1, node2) {
    253                                 if (this.get_node(node2).original.displayName < this.get_node(node1).original.displayName) {
    254                                     return 1;
    255                                 }
    256 
    257                                 return -1;
    258                             },
    259                             plugins: jsTreePlugins
    260                         });
    261 
    262                         vm.categoryTree.$tree.on('click', '.ou-text .fa-caret-down', function (e) {
    263                             e.preventDefault();
    264 
    265                             var ouId = $(this).closest('.ou-text').attr('data-ou-id');
    266                             setTimeout(function () {
    267                                 vm.categoryTree.$tree.jstree('show_contextmenu', ouId);
    268                             }, 100);
    269                         });
    270 
    271                     });
    272                 },
    273 
    274                 reload: function () {
    275                     vm.categoryTree.getTreeDataFromServer(function (treeData) {
    276                         vm.categoryTree.setUnitCount(treeData.length);
    277                         vm.categoryTree.$tree.jstree(true).settings.core.data = treeData;
    278                         vm.categoryTree.$tree.jstree('refresh');
    279                     });
    280                 }
    281             }; 
    288             //#endregion 
    289             vm.categoryTree.init();

     

  • 相关阅读:
    Java多线程之Wait()和Notify()
    Java多线程之线程结束清理
    Java多线程之阻塞I/O如何中断
    Java多线程之线程中断
    java多线程之计算数量
    深入研究java.lang.ThreadLocal类(转)
    java多线程之ThreadLocal
    java多线程之AtomicInteger
    Java多线程之简单的线程同步实例
    Java多线程之捕获异常
  • 原文地址:https://www.cnblogs.com/wendj/p/7768139.html
Copyright © 2020-2023  润新知