Blame view

build/Table/Table.js 6.93 KB
3a3ecabe   Imshann   init
1
2
  import template from "./Table.html";
  import style from "antd/lib/table/style/index.css";
81f8a467   Imshann   调整组件前缀
3
  angular.module("esNgAntd").directive("antdTable", function (esNgAntd) {
3a3ecabe   Imshann   init
4
      return {
81f8a467   Imshann   调整组件前缀
5
          controllerAs: "antdTable",
3a3ecabe   Imshann   init
6
7
8
9
10
11
12
13
14
          restrict: "E",
          transclude: true,
          replace: true,
          scope: {
              columns: "=",
              dSource: "=",
              rowSelection: "=",
              rowKey: "@",
              loading: "@",
dd962f77   Imshann   优化
15
              onChange: "&",
710b4ac0   Imshann   优化
16
              size: "@",
3a3ecabe   Imshann   init
17
18
          },
          template: template,
710b4ac0   Imshann   优化
19
          controller: function ($scope, $element, $attrs) {
3a3ecabe   Imshann   init
20
21
22
23
24
              this.getContext = function () {
                  return $scope;
              };
  
              $scope.state = {
710b4ac0   Imshann   优化
25
                  size: $scope.size || "default",
3a3ecabe   Imshann   init
26
27
28
29
30
                  dataSource: [],
                  selectedrecordKeys: [],
                  selectedrecords: [],
                  isSelectAll: false,
                  rowKey: $scope.rowKey || "id",
dd962f77   Imshann   优化
31
32
33
34
35
                  sortDirections: ["ascend", "descend"],
                  sorter: {
                      field: null,
                      order: null,
                  },
3a3ecabe   Imshann   init
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
              };
              $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) => {
061629e7   Imshann   add
62
63
64
65
66
67
68
                                  // 排序
                                  if (column.sortOrder) {
                                      $scope.state.sorter.field = column.key;
                                      $scope.state.sorter.order =
                                          column.sortOrder;
                                  }
  
3a3ecabe   Imshann   init
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
                                  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;
                      }
                  },
3fe10ef1   Imshann   优化
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
                  "rowSelection.selectedRowKeys": (newVal) => {
                      if (Array.isArray(newVal)) {
                          if (newVal.length > 0) {
                              $scope.state.dataSource.map(function (row, key) {
                                  if (newVal.includes(key)) {
                                      row.checked = true;
                                  }
                              });
                          } else {
                              $scope.state.dataSource.map(function (row) {
                                  row.checked = false;
                              });
                          }
                      }
                  },
3a3ecabe   Imshann   init
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
              };
  
              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;
                  });
3fe10ef1   Imshann   优化
127
128
129
130
131
132
133
  
                  if (typeof $scope.rowSelection.onChange === "function") {
                      $scope.rowSelection.onChange(
                          $scope.state.selectedrecordKeys,
                          $scope.state.selectedrecords
                      );
                  }
3a3ecabe   Imshann   init
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
              };
  
              $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;
                  }
  
3fe10ef1   Imshann   优化
153
154
155
156
157
158
                  if (typeof $scope.rowSelection.onChange === "function") {
                      $scope.rowSelection.onChange(
                          $scope.state.selectedrecordKeys,
                          $scope.state.selectedrecords
                      );
                  }
3a3ecabe   Imshann   init
159
              };
dd962f77   Imshann   优化
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
  
              $scope.handleSorter = function (key) {
                  $scope.state.sorter.field = key;
  
                  if ($scope.state.sorter.order === null) {
                      $scope.state.sorter.order = "ascend";
                  } else if ($scope.state.sorter.order === "ascend") {
                      $scope.state.sorter.order = "descend";
                  } else if ($scope.state.sorter.order === "descend") {
                      $scope.state.sorter.order = null;
                      $scope.state.sorter.field = null;
                  }
  
                  $scope.onChange({
                      sorter: $scope.state.sorter,
                  });
              };
3a3ecabe   Imshann   init
177
178
179
180
181
182
          },
          link: function ($scope, $element, $attrs, $controllers, $transclude) {
              esNgAntd.createStyle("ant-table", style);
          },
      };
  });