Blame view

build/Table/Table.js 4.82 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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
  import template from "./Table.html";
  import style from "antd/lib/table/style/index.css";
  angular.module("esNgAntd").directive("esTable", function (esNgAntd) {
      return {
          controllerAs: "esTable",
          restrict: "E",
          transclude: true,
          replace: true,
          scope: {
              columns: "=",
              dSource: "=",
              rowSelection: "=",
              rowKey: "@",
              loading: "@",
          },
          template: template,
          controller: function ($scope, $element) {
              this.getContext = function () {
                  return $scope;
              };
  
              $scope.state = {
                  dataSource: [],
                  selectedrecordKeys: [],
                  selectedrecords: [],
                  isSelectAll: false,
                  rowKey: $scope.rowKey || "id",
              };
              $scope.watch = {
                  dSource: (newValue) => {
                      if (newValue !== undefined) {
                          let dataSource = [];
                          newValue.forEach((record, index) => {
                              let row = {};
  
                              if ($scope.rowSelection) {
                                  row.checked = false;
                                  row.disabled = false;
                              }
  
                              if (
                                  $scope.rowSelection &&
                                  typeof $scope.rowSelection.getCheckboxProps ===
                                      "function"
                              ) {
                                  let extraAttr =
                                      $scope.rowSelection.getCheckboxProps(
                                          record
                                      );
                                  row = Object.assign(row, extraAttr);
                              }
  
                              $scope.columns.forEach((column) => {
                                  row[column.key] = column.render
                                      ? column.render(
                                            record[column.key],
                                            record,
                                            index
                                        )
                                      : record[column.key];
                              }); // 主键
  
                              if ($scope.rowKey !== undefined) {
                                  row[$scope.state.rowKey] =
                                      record[$scope.state.rowKey];
                              } else {
                                  row[$scope.state.rowKey] = index + 1;
                              }
  
                              dataSource[index] = row;
                          });
                          $scope.state.dataSource = dataSource;
                      }
                  },
              };
  
              for (const key in $scope.watch) {
                  $scope.$watch(key, $scope.watch[key], true);
              }
  
              $scope.handleSelectAll = function (event) {
                  $scope.state.isSelectAll = event.target.checked;
                  $scope.state.selectedrecordKeys = [];
                  $scope.state.selectedrecords = [];
                  $scope.state.dataSource.map((record, key) => {
                      if (record.disabled === false) {
                          record.checked = event.target.checked;
                      }
  
                      if (record.checked) {
                          $scope.state.selectedrecordKeys.push(key);
                          $scope.state.selectedrecords.push($scope.dSource[key]);
                      }
  
                      return record;
                  });
                  $scope.rowSelection.onChange(
                      $scope.state.selectedrecordKeys,
                      $scope.state.selectedrecords
                  );
              };
  
              $scope.handleSelect = function (event, index) {
                  let pos = $scope.state.selectedrecordKeys.findIndex(
                      (value) => value === index
                  );
  
                  if (event.target.checked && pos === -1) {
                      $scope.state.selectedrecordKeys.push(index);
                      $scope.state.selectedrecords.push($scope.dSource[index]);
                  } else {
                      $scope.state.selectedrecordKeys.splice(pos, 1);
                      $scope.state.selectedrecords.splice(pos, 1);
                  }
  
                  if ($scope.state.selectedrecordKeys.length === 0) {
                      $scope.state.isSelectAll = false;
                  }
  
                  $scope.rowSelection.onChange(
                      $scope.state.selectedrecordKeys,
                      $scope.state.selectedrecords
                  );
              };
          },
          link: function ($scope, $element, $attrs, $controllers, $transclude) {
              esNgAntd.createStyle("ant-table", style);
          },
      };
  });