bri-components 1.4.93 → 1.4.95

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (156) hide show
  1. package/README.md +83 -83
  2. package/lib/0.bri-components.min.js +1 -0
  3. package/lib/1.bri-components.min.js +1 -0
  4. package/lib/10.bri-components.min.js +1 -0
  5. package/lib/11.bri-components.min.js +1 -0
  6. package/lib/2.bri-components.min.js +1 -0
  7. package/lib/3.bri-components.min.js +1 -0
  8. package/lib/4.bri-components.min.js +1 -0
  9. package/lib/5.bri-components.min.js +1 -0
  10. package/lib/6.bri-components.min.js +1 -0
  11. package/lib/7.bri-components.min.js +1 -0
  12. package/lib/8.bri-components.min.js +1 -0
  13. package/lib/9.bri-components.min.js +1 -0
  14. package/lib/bri-components.min.js +18 -0
  15. package/lib/styles/bundle.css +12 -12
  16. package/lib/styles/font/fontello.svg +31 -31
  17. package/package.json +125 -125
  18. package/src/.DS_Store +0 -0
  19. package/src/components/.DS_Store +0 -0
  20. package/src/components/Error/Error403.vue +42 -42
  21. package/src/components/Error/Error404.vue +40 -40
  22. package/src/components/Error/Error500.vue +51 -51
  23. package/src/components/Error/error.less +162 -162
  24. package/src/components/Error/errorBack.vue +40 -40
  25. package/src/components/controls/.DS_Store +0 -0
  26. package/src/components/controls/DshControlInput.vue +195 -195
  27. package/src/components/controls/base/BriUpload/BriUpload.vue +434 -434
  28. package/src/components/controls/base/BriUpload/BriUploadImage.vue +373 -373
  29. package/src/components/controls/base/BriUpload/uploadList.vue +724 -724
  30. package/src/components/controls/base/BriUpload/uploadMixin.js +446 -446
  31. package/src/components/controls/base/DshCascader/DshCascader.vue +210 -210
  32. package/src/components/controls/base/DshCascader/components/cascaderModal.vue +366 -366
  33. package/src/components/controls/base/DshCascader/components/cascaderPicker.vue +416 -416
  34. package/src/components/controls/base/DshCascader/components/cascaderSimple.vue +143 -143
  35. package/src/components/controls/base/DshCoordinates.vue +577 -577
  36. package/src/components/controls/base/DshDate/DshDate.vue +191 -191
  37. package/src/components/controls/base/DshDate/DshDaterange.vue +186 -186
  38. package/src/components/controls/base/DshDivider.vue +201 -201
  39. package/src/components/controls/base/DshEditor.vue +274 -274
  40. package/src/components/controls/base/DshInput/BriInputs.vue +166 -166
  41. package/src/components/controls/base/DshInput/DshInput.vue +255 -255
  42. package/src/components/controls/base/DshNumber/BriInputNumber/BriInputNumber.vue +435 -435
  43. package/src/components/controls/base/DshNumber/BriInputNumber/mixins/emitter.js +34 -34
  44. package/src/components/controls/base/DshNumber/BriInputNumber/mixins/form.js +14 -14
  45. package/src/components/controls/base/DshNumber/BriInputNumber/utils/assist.js +322 -322
  46. package/src/components/controls/base/DshNumber/DshNumber.vue +143 -143
  47. package/src/components/controls/base/DshNumber/DshNumberange.vue +109 -109
  48. package/src/components/controls/base/DshSelect/DshCheckbox.vue +168 -168
  49. package/src/components/controls/base/DshSelect/DshSelect.vue +180 -180
  50. package/src/components/controls/base/DshSwitch/DshSwitch.vue +115 -115
  51. package/src/components/controls/control.less +324 -324
  52. package/src/components/controls/controlMap.js +114 -114
  53. package/src/components/controls/extra/DshColor.vue +81 -81
  54. package/src/components/controls/extra/themeColor.vue +104 -104
  55. package/src/components/controls/extra/themeIcon.vue +114 -114
  56. package/src/components/controls/mixins/cascaderMixin.js +295 -295
  57. package/src/components/controls/mixins/cascaderPickerMixin.js +216 -216
  58. package/src/components/controls/mixins/cascaderTableMixin.js +130 -130
  59. package/src/components/controls/mixins/controlMixin.js +368 -368
  60. package/src/components/controls/mixins/dateMixin.js +149 -149
  61. package/src/components/controls/mixins/flatTableMixin.js +111 -111
  62. package/src/components/controls/mixins/numberMixin.js +112 -112
  63. package/src/components/controls/mixins/selectMixin.js +233 -233
  64. package/src/components/controls/mixins/switchMixin.js +87 -87
  65. package/src/components/controls/mixins/userAndDepartMixin.js +218 -218
  66. package/src/components/controls/senior/.DS_Store +0 -0
  67. package/src/components/controls/senior/DshLabels.vue +331 -331
  68. package/src/components/controls/senior/DshPackage.vue +57 -57
  69. package/src/components/controls/senior/cascaderTable.vue +210 -210
  70. package/src/components/controls/senior/flatTable.vue +135 -135
  71. package/src/components/controls/senior/selectDepartments.vue +438 -438
  72. package/src/components/controls/senior/selectUsers/departMenu.vue +293 -293
  73. package/src/components/controls/senior/selectUsers/selectUsers.vue +752 -752
  74. package/src/components/controls/special/DshBack.vue +42 -42
  75. package/src/components/controls/special/DshUndeveloped.vue +41 -41
  76. package/src/components/form/DshAdvSearch.vue +510 -510
  77. package/src/components/form/DshDefaultSearch.vue +258 -258
  78. package/src/components/form/DshForm.vue +494 -494
  79. package/src/components/form/searchMixin.js +375 -375
  80. package/src/components/list/BriCard.vue +95 -95
  81. package/src/components/list/BriTable.vue +205 -205
  82. package/src/components/list/BriTree.vue +529 -529
  83. package/src/components/list/BriTreeItem.vue +163 -163
  84. package/src/components/list/DshBox/DshBox.vue +219 -219
  85. package/src/components/list/DshBox/DshCard.vue +446 -446
  86. package/src/components/list/DshBox/DshCrossTable.vue +827 -827
  87. package/src/components/list/DshBox/DshList.vue +404 -404
  88. package/src/components/list/DshBox/DshPanel.vue +669 -669
  89. package/src/components/list/DshBox/DshSingleData.vue +119 -119
  90. package/src/components/list/DshBox/DshTable.vue +239 -239
  91. package/src/components/list/DshCascaderTable.vue +115 -115
  92. package/src/components/list/DshFlatTable.vue +339 -339
  93. package/src/components/list/DshPage.vue +194 -194
  94. package/src/components/list/DshTreeTable.vue +113 -113
  95. package/src/components/list/common/importModal.vue +243 -243
  96. package/src/components/list/common/quoteListModal.vue +206 -206
  97. package/src/components/list/mixins/DshCascaderTableMixin.js +278 -278
  98. package/src/components/list/mixins/DshFlatTableMixin.js +493 -493
  99. package/src/components/list/mixins/DshTreeTableMixin.js +286 -286
  100. package/src/components/list/mixins/tableBaseMixin.js +1661 -1661
  101. package/src/components/list/mixins/treeTableBaseMixin.js +149 -149
  102. package/src/components/other/BriAvatar.vue +166 -166
  103. package/src/components/other/BriCode.vue +125 -125
  104. package/src/components/other/BriCollapseTree.vue +207 -207
  105. package/src/components/other/BriGantt.vue +1084 -1084
  106. package/src/components/other/BriIframe.vue +116 -116
  107. package/src/components/other/BriLoading.vue +171 -171
  108. package/src/components/other/BriSvg.vue +28 -28
  109. package/src/components/other/DshColorPanel.vue +128 -128
  110. package/src/components/other/DshMenuNav.vue +188 -188
  111. package/src/components/small/BriButton.vue +71 -71
  112. package/src/components/small/BriDrawer.vue +169 -169
  113. package/src/components/small/BriTooltip.vue +87 -87
  114. package/src/components/small/DshBtnModal.vue +68 -68
  115. package/src/components/small/DshButtons.vue +324 -324
  116. package/src/components/small/DshDropdown.vue +225 -225
  117. package/src/components/small/DshIcons.vue +59 -59
  118. package/src/components/small/DshListRender.js +21 -21
  119. package/src/components/small/DshModal.vue +160 -160
  120. package/src/components/small/DshSteps.vue +141 -141
  121. package/src/components/small/DshTabs.vue +598 -598
  122. package/src/components/small/DshTabsSet.vue +309 -309
  123. package/src/components/small/DshTags.vue +251 -251
  124. package/src/components/small/DshTitle.vue +50 -50
  125. package/src/components/small/render.js +20 -20
  126. package/src/components/unit/DshFormUnit.vue +398 -398
  127. package/src/components/unit/DshListUnit.vue +115 -115
  128. package/src/components/unit/unitMixin.js +86 -86
  129. package/src/data/index.js +9 -9
  130. package/src/index.js +271 -271
  131. package/src/styles/.DS_Store +0 -0
  132. package/src/styles/bundle.css +12 -12
  133. package/src/styles/components/.DS_Store +0 -0
  134. package/src/styles/components/BriButton.less +292 -292
  135. package/src/styles/components/BriTable.less +344 -344
  136. package/src/styles/components/DshModal.less +257 -250
  137. package/src/styles/components/index.less +3 -3
  138. package/src/styles/global/animate.less +11 -11
  139. package/src/styles/global/base.less +45 -45
  140. package/src/styles/global/box.less +186 -186
  141. package/src/styles/global/control.less +122 -122
  142. package/src/styles/global/flex.less +282 -282
  143. package/src/styles/global/global.less +8 -8
  144. package/src/styles/global/text.less +59 -59
  145. package/src/styles/global/variables.less +79 -85
  146. package/src/styles/iconfont/iconfont.css +254 -254
  147. package/src/styles/iconfont/iconfont.json +422 -422
  148. package/src/styles/iconfont/iconfont.svg +137 -137
  149. package/src/styles/index.less +11 -11
  150. package/src/styles/reset-easytable.less +21 -21
  151. package/src/styles/reset-iview-controls.less +145 -145
  152. package/src/styles/reset-iview-other.less +49 -49
  153. package/src/styles/reset-iview-variables.less +34 -34
  154. package/src/styles/reset.less +45 -45
  155. package/src/utils/index.js +5 -5
  156. package/src/utils/table.js +175 -175
@@ -1,278 +1,278 @@
1
- export default {
2
- mixins: [],
3
- components: {},
4
- props: {},
5
- data () {
6
- return {};
7
- },
8
- computed: {
9
- selfBasePropsObj () {
10
- return {
11
- ...this.treeTableBasePropsObj,
12
- _dftReadonlyTreeColKeys: [], // 默认的数据只读的表头列
13
- _oldReadonlyTreeColKeys: [] // 保存的数据只读的表头列
14
- };
15
- },
16
- dftReadonlyTreeColKeys () {
17
- return this.isDftSet ? [] : this.selfPropsObj._dftReadonlyTreeColKeys || []; // 配置端有问题,高级依赖时值成undefined了
18
- },
19
- oldReadonlyTreeColKeys () {
20
- return this.isDftSet ? [] : this.selfPropsObj._oldReadonlyTreeColKeys || []; // 配置端有问题,高级依赖时值成undefined了
21
- },
22
- // 替换tableBaseMixin里的
23
- noborderColKeys () {
24
- return [
25
- ...this.treeColKeys,
26
- ...this.selfPropsObj._noborderColKeys
27
- ];
28
- },
29
- // 替换tableBaseMixin里的
30
- showCreateBtnColKeys () {
31
- return [
32
- ...this.treeColKeys,
33
- ...(this.selfPropsObj._showCreateBtnColKeys || [])
34
- ];
35
- },
36
- // 替换tableBaseMixin里的
37
- searchTitle () {
38
- return `${this.isSearching ? "筛选" : "全部"}数据,共 ${this.selfTotal} 条;`;
39
- },
40
-
41
- /* --- 列字段 --- */
42
- showColumns () {
43
- return [
44
- ...this.$transformToColumns(this.showContentColumns),
45
- ...(!this.isSearching && this.rowOperationList.length ? [this.selfOperationColumn] : [])
46
- ];
47
- },
48
- // 替换tableBaseMixin里的
49
- contentColumns () {
50
- return [
51
- ...this.treeColumns.reduce((arr, colItem) => ([
52
- ...arr,
53
- {
54
- ...colItem,
55
- colType: "tree"
56
- },
57
- ...colItem._treeSubForm.map(subColItem => ({
58
- ...subColItem,
59
- colType: "summary",
60
- nodeKey: colItem._key
61
- }))
62
- ]), []),
63
- ...this.usedColumns.map(colItem => ({
64
- ...colItem,
65
- colType: "data",
66
- nodeKey: this.treeColKeys[this.treeColKeys.length - 1]
67
- }))
68
- ].map(colItem => ({
69
- renderHeaderCell: ({ column }, h) => {
70
- return this.contentThCellRender(h, { column });
71
- },
72
- renderBodyCell: ({ row, rowIndex, column }, h) => {
73
- row = row[column.nodeKey || column._key];
74
-
75
- return column.colType === "summary"
76
- ? this.getSummaryTdVal({ row, rowIndex, column })
77
- : this.contentTdCellRender(h, { row, rowIndex, column });
78
- },
79
- ...colItem
80
- }));
81
- },
82
- selfOperationColumn () {
83
- return {
84
- ...this.operationColumn,
85
- nodeKey: this.treeColKeys[this.treeColKeys.length - 1],
86
- renderBodyCell: ({ row, rowIndex, column }, h) => {
87
- row = row[column.nodeKey || column._key];
88
-
89
- return this.operationTdCellRender(h, { row, rowIndex, column });
90
- }
91
- };
92
- },
93
-
94
- /* --- 数据 --- */
95
- allTreeData () {
96
- // console.log("allTreeData");
97
- return this.getCalcuedTree(this.data, this.selfColumns, this.treeColumns);
98
- },
99
- allListData () {
100
- // console.log("allListData");
101
- return this.$getTreeFlatArr(this.allTreeData, node => !(node.children && node.children.length));
102
- },
103
- showListData () {
104
- // console.log("showListData");
105
- const loop = (nodes = [], finalRows = []) => {
106
- // 先层层过滤
107
- const subLoop = (nodes = []) =>
108
- nodes.filter(row =>
109
- row.children && row.children.length
110
- ? !!subLoop(row.children).length
111
- : this.isSearching
112
- ? this.$isAdvRelyAccord(this.finalTableAdvSearch, row)
113
- : true
114
- );
115
- nodes = subLoop(nodes);
116
-
117
- return nodes.reduce((rows, node, nodeIndex) => {
118
- // 创建行,并把节点数据(对象类型)注入到行对象内
119
- if (nodeIndex !== 0 || rows.length === 0) {
120
- rows.push({
121
- _id: this.$ObjectID().str
122
- });
123
- }
124
- const curCol = this.treeColumns[node.level - 1];
125
- const curRow = rows[rows.length - 1];
126
- Object.assign(curRow, { [curCol._key]: node });
127
-
128
- // 判断是否叶子节点,做对应操作
129
- if (node.children && node.children.length) {
130
- const oldLength = rows.length - 1;
131
- const newRows = loop(node.children, rows);
132
- node.total = newRows.length - oldLength;
133
- return newRows;
134
- } else {
135
- return rows;
136
- }
137
- }, finalRows);
138
- };
139
-
140
- return loop(this.allTreeData);
141
- }
142
- },
143
- created () { },
144
- mounted () { },
145
- methods: {
146
- // 转化树数据
147
- getCalcuedTree (nodes = [], subCols = [], treeCols = []) {
148
- const loop = (nodes = [], parentNodes = []) => {
149
- nodes.forEach(row => {
150
- this.fixRowData(row);
151
-
152
- // 初始化树节点的数据,给节点加上一些属性并监测,注入到节点对象中
153
- let curCol = treeCols[row.level - 1];
154
- this.$setObj(row, {
155
- _key: curCol._key,
156
- isLeaf: false,
157
- total: 1
158
- });
159
-
160
- // 根节点
161
- if (row.level === treeCols.length) {
162
- row.children = [];
163
- row.isLeaf = true;
164
-
165
- // // TODO:特殊处理-叶子节点上注入对应表头列们的name值
166
- // const treeNodes = [...parentNodes, row];
167
- // treeCols.forEach((colItem, colIndex) => {
168
- // row[colItem._key] = treeNodes[colIndex].name;
169
- // });
170
- }
171
- // 非根节点,需继续向下循环
172
- else {
173
- // 正常的非根节点
174
- if (row.children && row.children.length) {
175
- loop(row.children, [...parentNodes, row]);
176
- }
177
- // 特殊的非根节点(此时是新增一列 或 新增了非根节点行) -添加一个子节点,并把该节点上的subForm属性值全部给下级节点(新增的是根节点行,不会走此处代码)
178
- else {
179
- const newNode = this.getNewRowData(row.level + 1, row.children);
180
- subCols.forEach(subCol => {
181
- newNode[subCol._key] = row[subCol._key]; // 用$set也可以
182
- delete row[subCol._key];
183
- });
184
- row.children.push(newNode);
185
-
186
- loop(row.children, [...parentNodes, row]);
187
- }
188
- }
189
- });
190
- };
191
-
192
- loop(nodes);
193
- this.initFlag = false;
194
- return nodes;
195
- },
196
- fixSelfRowData (row) {
197
- if (this.initFlag) {
198
- // 根节点
199
- if (!(row.children && row.children.length)) {
200
- // 每条数据都补充全所有字段值(赋一个默认的空值)
201
- this.selfColumns.forEach((colItem) => {
202
- // 不用row[colItem._key] === undefined判断,是因为后端给的空值不可靠,多选的有时候都能给null
203
- if (!Object.prototype.hasOwnProperty.call(row, colItem._key) && this.$isEmptyData(row[colItem._key])) {
204
- this.$set(row, colItem._key, this.$deepCopy(this.dftInitValMap[colItem._type]));
205
- }
206
- });
207
- }
208
- }
209
- },
210
-
211
- // 单元格 -汇总节点单元格-获取值
212
- getSummaryTdVal ({ row, rowIndex, column }) {
213
- const calFieldFormItem = this.selfColumns.find(item => item._key === column._calField);
214
-
215
- if (column._calField && calFieldFormItem && column._operator) {
216
- const loop = (nodes, arr = []) =>
217
- nodes.reduce((arr, node) => {
218
- return node.children.length
219
- ? loop(node.children, arr)
220
- : [
221
- ...arr,
222
- node[column._calField] || 0
223
- ];
224
- }, arr);
225
- const list = loop(row.children);
226
-
227
- return this.$calNumList(list, column._operator, calFieldFormItem);
228
- } else {
229
- return !column._calField && !column._operator
230
- ? "未选择来源列和算法"
231
- : !column._calField
232
- ? "未选择来源列"
233
- : !calFieldFormItem
234
- ? `来源列${column._calField}被删除`
235
- : "未选择算法";
236
- }
237
- },
238
- bodyCellSpan ({ row, rowIndex, column }) {
239
- row = row[column.nodeKey || column._key];
240
-
241
- return {
242
- rowspan: row
243
- ? row.total || 1
244
- : 0,
245
- colspan: 1
246
- };
247
- },
248
-
249
- // 加工单元格对应的配置
250
- getSelfResetCol ({ row, rowIndex, column }) {
251
- return column.colType === "tree"
252
- ? {
253
- _heightAuto: true,
254
- _placeholder: " "
255
- }
256
- : {};
257
- },
258
- // 单元格本身是否可编辑性 -针对表头列
259
- getSelfColCanEdit ({ row, rowIndex, column }) {
260
- return (this.getIsDftRow(row) ? !this.dftReadonlyTreeColKeys.includes(column._key) : true) && // 默认行的某列是否可编辑
261
- (row.__old__ === true ? !this.oldReadonlyTreeColKeys.includes(column._key) : true); // 老数据行里某些列不可编辑
262
- },
263
- // getNewRowData时,额外补充的行相关的数据(针对层级列)
264
- getSelfNewRowData (level) {
265
- const column = this.treeColumns[level - 1];
266
- const dftVal = column._default;
267
- const dftInitVal = this.dftInitValMap[column._type];
268
-
269
- return {
270
- name: this.$deepCopy(
271
- this.$isEmptyData(dftVal)
272
- ? dftInitVal
273
- : dftVal
274
- )
275
- };
276
- }
277
- }
278
- };
1
+ export default {
2
+ mixins: [],
3
+ components: {},
4
+ props: {},
5
+ data () {
6
+ return {};
7
+ },
8
+ computed: {
9
+ selfBasePropsObj () {
10
+ return {
11
+ ...this.treeTableBasePropsObj,
12
+ _dftReadonlyTreeColKeys: [], // 默认的数据只读的表头列
13
+ _oldReadonlyTreeColKeys: [] // 保存的数据只读的表头列
14
+ };
15
+ },
16
+ dftReadonlyTreeColKeys () {
17
+ return this.isDftSet ? [] : this.selfPropsObj._dftReadonlyTreeColKeys || []; // 配置端有问题,高级依赖时值成undefined了
18
+ },
19
+ oldReadonlyTreeColKeys () {
20
+ return this.isDftSet ? [] : this.selfPropsObj._oldReadonlyTreeColKeys || []; // 配置端有问题,高级依赖时值成undefined了
21
+ },
22
+ // 替换tableBaseMixin里的
23
+ noborderColKeys () {
24
+ return [
25
+ ...this.treeColKeys,
26
+ ...this.selfPropsObj._noborderColKeys
27
+ ];
28
+ },
29
+ // 替换tableBaseMixin里的
30
+ showCreateBtnColKeys () {
31
+ return [
32
+ ...this.treeColKeys,
33
+ ...(this.selfPropsObj._showCreateBtnColKeys || [])
34
+ ];
35
+ },
36
+ // 替换tableBaseMixin里的
37
+ searchTitle () {
38
+ return `${this.isSearching ? "筛选" : "全部"}数据,共 ${this.selfTotal} 条;`;
39
+ },
40
+
41
+ /* --- 列字段 --- */
42
+ showColumns () {
43
+ return [
44
+ ...this.$transformToColumns(this.showContentColumns),
45
+ ...(!this.isSearching && this.rowOperationList.length ? [this.selfOperationColumn] : [])
46
+ ];
47
+ },
48
+ // 替换tableBaseMixin里的
49
+ contentColumns () {
50
+ return [
51
+ ...this.treeColumns.reduce((arr, colItem) => ([
52
+ ...arr,
53
+ {
54
+ ...colItem,
55
+ colType: "tree"
56
+ },
57
+ ...colItem._treeSubForm.map(subColItem => ({
58
+ ...subColItem,
59
+ colType: "summary",
60
+ nodeKey: colItem._key
61
+ }))
62
+ ]), []),
63
+ ...this.usedColumns.map(colItem => ({
64
+ ...colItem,
65
+ colType: "data",
66
+ nodeKey: this.treeColKeys[this.treeColKeys.length - 1]
67
+ }))
68
+ ].map(colItem => ({
69
+ renderHeaderCell: ({ column }, h) => {
70
+ return this.contentThCellRender(h, { column });
71
+ },
72
+ renderBodyCell: ({ row, rowIndex, column }, h) => {
73
+ row = row[column.nodeKey || column._key];
74
+
75
+ return column.colType === "summary"
76
+ ? this.getSummaryTdVal({ row, rowIndex, column })
77
+ : this.contentTdCellRender(h, { row, rowIndex, column });
78
+ },
79
+ ...colItem
80
+ }));
81
+ },
82
+ selfOperationColumn () {
83
+ return {
84
+ ...this.operationColumn,
85
+ nodeKey: this.treeColKeys[this.treeColKeys.length - 1],
86
+ renderBodyCell: ({ row, rowIndex, column }, h) => {
87
+ row = row[column.nodeKey || column._key];
88
+
89
+ return this.operationTdCellRender(h, { row, rowIndex, column });
90
+ }
91
+ };
92
+ },
93
+
94
+ /* --- 数据 --- */
95
+ allTreeData () {
96
+ // console.log("allTreeData");
97
+ return this.getCalcuedTree(this.data, this.selfColumns, this.treeColumns);
98
+ },
99
+ allListData () {
100
+ // console.log("allListData");
101
+ return this.$getTreeFlatArr(this.allTreeData, node => !(node.children && node.children.length));
102
+ },
103
+ showListData () {
104
+ // console.log("showListData");
105
+ const loop = (nodes = [], finalRows = []) => {
106
+ // 先层层过滤
107
+ const subLoop = (nodes = []) =>
108
+ nodes.filter(row =>
109
+ row.children && row.children.length
110
+ ? !!subLoop(row.children).length
111
+ : this.isSearching
112
+ ? this.$isAdvRelyAccord(this.finalTableAdvSearch, row)
113
+ : true
114
+ );
115
+ nodes = subLoop(nodes);
116
+
117
+ return nodes.reduce((rows, node, nodeIndex) => {
118
+ // 创建行,并把节点数据(对象类型)注入到行对象内
119
+ if (nodeIndex !== 0 || rows.length === 0) {
120
+ rows.push({
121
+ _id: this.$ObjectID().str
122
+ });
123
+ }
124
+ const curCol = this.treeColumns[node.level - 1];
125
+ const curRow = rows[rows.length - 1];
126
+ Object.assign(curRow, { [curCol._key]: node });
127
+
128
+ // 判断是否叶子节点,做对应操作
129
+ if (node.children && node.children.length) {
130
+ const oldLength = rows.length - 1;
131
+ const newRows = loop(node.children, rows);
132
+ node.total = newRows.length - oldLength;
133
+ return newRows;
134
+ } else {
135
+ return rows;
136
+ }
137
+ }, finalRows);
138
+ };
139
+
140
+ return loop(this.allTreeData);
141
+ }
142
+ },
143
+ created () { },
144
+ mounted () { },
145
+ methods: {
146
+ // 转化树数据
147
+ getCalcuedTree (nodes = [], subCols = [], treeCols = []) {
148
+ const loop = (nodes = [], parentNodes = []) => {
149
+ nodes.forEach(row => {
150
+ this.fixRowData(row);
151
+
152
+ // 初始化树节点的数据,给节点加上一些属性并监测,注入到节点对象中
153
+ let curCol = treeCols[row.level - 1];
154
+ this.$setObj(row, {
155
+ _key: curCol._key,
156
+ isLeaf: false,
157
+ total: 1
158
+ });
159
+
160
+ // 根节点
161
+ if (row.level === treeCols.length) {
162
+ row.children = [];
163
+ row.isLeaf = true;
164
+
165
+ // // TODO:特殊处理-叶子节点上注入对应表头列们的name值
166
+ // const treeNodes = [...parentNodes, row];
167
+ // treeCols.forEach((colItem, colIndex) => {
168
+ // row[colItem._key] = treeNodes[colIndex].name;
169
+ // });
170
+ }
171
+ // 非根节点,需继续向下循环
172
+ else {
173
+ // 正常的非根节点
174
+ if (row.children && row.children.length) {
175
+ loop(row.children, [...parentNodes, row]);
176
+ }
177
+ // 特殊的非根节点(此时是新增一列 或 新增了非根节点行) -添加一个子节点,并把该节点上的subForm属性值全部给下级节点(新增的是根节点行,不会走此处代码)
178
+ else {
179
+ const newNode = this.getNewRowData(row.level + 1, row.children);
180
+ subCols.forEach(subCol => {
181
+ newNode[subCol._key] = row[subCol._key]; // 用$set也可以
182
+ delete row[subCol._key];
183
+ });
184
+ row.children.push(newNode);
185
+
186
+ loop(row.children, [...parentNodes, row]);
187
+ }
188
+ }
189
+ });
190
+ };
191
+
192
+ loop(nodes);
193
+ this.initFlag = false;
194
+ return nodes;
195
+ },
196
+ fixSelfRowData (row) {
197
+ if (this.initFlag) {
198
+ // 根节点
199
+ if (!(row.children && row.children.length)) {
200
+ // 每条数据都补充全所有字段值(赋一个默认的空值)
201
+ this.selfColumns.forEach((colItem) => {
202
+ // 不用row[colItem._key] === undefined判断,是因为后端给的空值不可靠,多选的有时候都能给null
203
+ if (!Object.prototype.hasOwnProperty.call(row, colItem._key) && this.$isEmptyData(row[colItem._key])) {
204
+ this.$set(row, colItem._key, this.$deepCopy(this.dftInitValMap[colItem._type]));
205
+ }
206
+ });
207
+ }
208
+ }
209
+ },
210
+
211
+ // 单元格 -汇总节点单元格-获取值
212
+ getSummaryTdVal ({ row, rowIndex, column }) {
213
+ const calFieldFormItem = this.selfColumns.find(item => item._key === column._calField);
214
+
215
+ if (column._calField && calFieldFormItem && column._operator) {
216
+ const loop = (nodes, arr = []) =>
217
+ nodes.reduce((arr, node) => {
218
+ return node.children.length
219
+ ? loop(node.children, arr)
220
+ : [
221
+ ...arr,
222
+ node[column._calField] || 0
223
+ ];
224
+ }, arr);
225
+ const list = loop(row.children);
226
+
227
+ return this.$calNumList(list, column._operator, calFieldFormItem);
228
+ } else {
229
+ return !column._calField && !column._operator
230
+ ? "未选择来源列和算法"
231
+ : !column._calField
232
+ ? "未选择来源列"
233
+ : !calFieldFormItem
234
+ ? `来源列${column._calField}被删除`
235
+ : "未选择算法";
236
+ }
237
+ },
238
+ bodyCellSpan ({ row, rowIndex, column }) {
239
+ row = row[column.nodeKey || column._key];
240
+
241
+ return {
242
+ rowspan: row
243
+ ? row.total || 1
244
+ : 0,
245
+ colspan: 1
246
+ };
247
+ },
248
+
249
+ // 加工单元格对应的配置
250
+ getSelfResetCol ({ row, rowIndex, column }) {
251
+ return column.colType === "tree"
252
+ ? {
253
+ _heightAuto: true,
254
+ _placeholder: " "
255
+ }
256
+ : {};
257
+ },
258
+ // 单元格本身是否可编辑性 -针对表头列
259
+ getSelfColCanEdit ({ row, rowIndex, column }) {
260
+ return (this.getIsDftRow(row) ? !this.dftReadonlyTreeColKeys.includes(column._key) : true) && // 默认行的某列是否可编辑
261
+ (row.__old__ === true ? !this.oldReadonlyTreeColKeys.includes(column._key) : true); // 老数据行里某些列不可编辑
262
+ },
263
+ // getNewRowData时,额外补充的行相关的数据(针对层级列)
264
+ getSelfNewRowData (level) {
265
+ const column = this.treeColumns[level - 1];
266
+ const dftVal = column._default;
267
+ const dftInitVal = this.dftInitValMap[column._type];
268
+
269
+ return {
270
+ name: this.$deepCopy(
271
+ this.$isEmptyData(dftVal)
272
+ ? dftInitVal
273
+ : dftVal
274
+ )
275
+ };
276
+ }
277
+ }
278
+ };