Blame view

build/Cascader/Cascader.js 2.24 KB
3a3ecabe   Imshann   init
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
  /**
   * 级联
   *
   * @Author: Shann
   * @LastEditors: Shann
   * @Date: 2021-08-04 09:48:49
   * @LastEditTime: 2021-08-04 11:00:19
   * @Copyright: Copyright 2021-2021, all rights reserved. Essa.cn
   */
  angular.module("esNgAntd").directive("esCascader", function () {
      return {
          controllerAs: "esCascader",
          restrict: "E",
          transclude: true,
          replace: true,
          scope: {
              options: "=",
          },
          controller: function ($scope, $element) {
              this.getContext = function () {
                  return $scope;
              };
  
              $scope.state = {
                  options: [],
                  menus: [],
              };
  
              $scope.flatten = function (array, level = 1) {
                  let elements = [];
                  array.forEach((element) => {
                      element.level = level;
                      elements.push(element);
  
                      if (
                          typeof element.children !== "undefined" &&
                          element.children.length > 0
                      ) {
                          elements = elements.concat(
                              $scope.flatten(element.children, level + 1)
                          );
                      }
                  });
                  return elements;
              };
  
              $scope.handleFocus = function () {
                  $scope.state.menus.push($scope.options);
              };
  
              $scope.handleBlur = function () {
                  $scope.state.menus = [];
              };
  
              $scope.handleExpand = function (value) {
                  let current = $scope.state.options.filter(
                      (item) => item.value === value
                  )[0];
  
                  if ($scope.state.menus.length > current.level) {
                      $scope.state.menus.splice(current.level);
                  }
  
                  if (
                      typeof current.children !== "undefined" &&
                      current.children.length > 0
                  ) {
                      $scope.state.menus.push(current.children);
                  }
              };
          },
          link: function ($scope, $element, $attrs, $controllers, $transclude) {
              $scope.state.options = $scope.flatten($scope.options);
          },
      };
  });