eoss-ui 0.4.84 → 0.4.86

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 (51) hide show
  1. package/lib/button-group.js +30 -4
  2. package/lib/button.js +4 -0
  3. package/lib/checkbox-group.js +4 -0
  4. package/lib/data-table-form.js +4 -0
  5. package/lib/data-table.js +93 -62
  6. package/lib/date-picker.js +4 -0
  7. package/lib/dialog.js +4 -0
  8. package/lib/eoss-ui.common.js +406 -277
  9. package/lib/flow-group.js +4 -0
  10. package/lib/flow-list.js +4 -0
  11. package/lib/flow.js +7 -3
  12. package/lib/form.js +154 -116
  13. package/lib/handle-user.js +4 -0
  14. package/lib/handler.js +4 -0
  15. package/lib/index.js +1 -1
  16. package/lib/input-number.js +4 -0
  17. package/lib/input.js +4 -0
  18. package/lib/login.js +4 -0
  19. package/lib/main.js +4 -0
  20. package/lib/nav.js +7 -4
  21. package/lib/page.js +4 -0
  22. package/lib/player.js +4 -0
  23. package/lib/qr-code.js +4 -0
  24. package/lib/radio-group.js +4 -0
  25. package/lib/retrial-auth.js +4 -0
  26. package/lib/select-ganged.js +4 -0
  27. package/lib/select.js +4 -0
  28. package/lib/selector-panel.js +4 -0
  29. package/lib/selector.js +4 -0
  30. package/lib/sizer.js +4 -0
  31. package/lib/steps.js +4 -0
  32. package/lib/switch.js +4 -0
  33. package/lib/table-form.js +64 -26
  34. package/lib/tabs.js +4 -0
  35. package/lib/tips.js +4 -0
  36. package/lib/tree-group.js +4 -0
  37. package/lib/tree.js +4 -0
  38. package/lib/upload.js +75 -27
  39. package/lib/utils/util.js +4 -0
  40. package/lib/wujie.js +4 -0
  41. package/lib/wxlogin.js +4 -0
  42. package/package.json +1 -1
  43. package/packages/button-group/src/main.vue +8 -2
  44. package/packages/data-table/src/main.vue +109 -87
  45. package/packages/flow/src/main.vue +1 -1
  46. package/packages/form/src/main.vue +40 -24
  47. package/packages/form/src/table.vue +18 -7
  48. package/packages/nav/src/main.vue +1 -2
  49. package/packages/upload/src/main.vue +43 -29
  50. package/src/index.js +1 -1
  51. package/src/utils/util.js +4 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "eoss-ui",
3
- "version": "0.4.84",
3
+ "version": "0.4.86",
4
4
  "description": "eoss内部业务组件",
5
5
  "main": "lib/eoss-ui.common.js",
6
6
  "files": [
@@ -10,7 +10,9 @@
10
10
  :type="item.type"
11
11
  @click="handleClick({ row: data, handle: item })"
12
12
  >
13
- {{ item.text }}
13
+ {{
14
+ item.template ? item.template({ row: data, config: item }) : item.text
15
+ }}
14
16
  </es-button>
15
17
  <el-dropdown
16
18
  v-if="other.length > 0 && index == btns.length - 1"
@@ -27,7 +29,11 @@
27
29
  :command="item"
28
30
  >
29
31
  <i :class="item.icon" v-if="item.icon"></i
30
- >{{ item.text }}</el-dropdown-item
32
+ >{{
33
+ item.template
34
+ ? item.template({ row: data, config: item })
35
+ : item.text
36
+ }}</el-dropdown-item
31
37
  >
32
38
  </el-dropdown-menu>
33
39
  </el-dropdown>
@@ -202,6 +202,7 @@ import children from './children.vue';
202
202
  import sizer from './sizer.vue';
203
203
  import util from 'eoss-ui/src/utils/util';
204
204
  import bus from 'eoss-ui/src/utils/bus';
205
+ import qs from 'qs';
205
206
  export default {
206
207
  name: 'EsDataTable',
207
208
  inheritAttrs: false,
@@ -416,6 +417,7 @@ export default {
416
417
  },
417
418
  data() {
418
419
  return {
420
+ requests: [],
419
421
  theadData: [],
420
422
  list: null,
421
423
  tableLoading: this.loading,
@@ -447,7 +449,7 @@ export default {
447
449
  },
448
450
  theads: {
449
451
  get() {
450
- return this.theadData.length ? this.theadData : this.thead;
452
+ return typeof this.thead === 'string' ? this.theadData : this.thead;
451
453
  },
452
454
  set(val) {
453
455
  return val;
@@ -544,20 +546,19 @@ export default {
544
546
  this.datas.length && this.checkSelect(newVal);
545
547
  },
546
548
  thead: {
547
- immediate: true,
549
+ deep: true,
548
550
  handler(val) {
549
551
  if (typeof val === 'string') {
550
552
  this.getTheads();
553
+ } else {
554
+ this.getOptions(val);
551
555
  }
552
556
  }
553
557
  },
554
558
  theads: {
555
- immediate: true,
556
- handler(val) {
559
+ deep: true,
560
+ handler() {
557
561
  this.chekOpenTotalArea();
558
- if (val && val.length) {
559
- this.getOptions(val);
560
- }
561
562
  }
562
563
  },
563
564
  param: {
@@ -597,6 +598,9 @@ export default {
597
598
  }
598
599
  },
599
600
  created() {
601
+ if (Array.isArray(this.thead) && this.thead.length) {
602
+ this.getOptions(this.thead);
603
+ }
600
604
  this.immediate && this.getTableData();
601
605
  },
602
606
  mounted() {
@@ -604,6 +608,10 @@ export default {
604
608
  this.resetHeight();
605
609
  },
606
610
  methods: {
611
+ getRequestKey(config) {
612
+ const { method, url, params, data } = config;
613
+ return [method, url, qs.stringify(params), qs.stringify(data)].join('&');
614
+ },
607
615
  getIcon(res) {
608
616
  if (
609
617
  this.sizer &&
@@ -627,36 +635,45 @@ export default {
627
635
  item.sysCode ? { sysAppCode: item.sysCode } : {},
628
636
  item.param ? item.param : {}
629
637
  );
630
- util
631
- .ajax({
632
- url: item.sysCode ? findSysCode : item.url,
633
- method: this.method,
634
- params: params,
635
- data: params
636
- })
637
- .then((res) => {
638
- if (res.rCode === 0) {
639
- if (item.type == 'ganged') {
640
- this.$set(this.options, item.field || item.prop, [
641
- JSON.parse(JSON.stringify(res.results))
642
- ]);
638
+ let key = this.getRequestKey({
639
+ method: this.method,
640
+ url: item.sysCode ? findSysCode : item.url,
641
+ params: params,
642
+ data: {}
643
+ });
644
+ if (!this.requests.includes(key)) {
645
+ util
646
+ .ajax({
647
+ url: item.sysCode ? findSysCode : item.url,
648
+ method: this.method,
649
+ params: params,
650
+ data: params
651
+ })
652
+ .then((res) => {
653
+ if (res.rCode === 0) {
654
+ if (item.type == 'ganged') {
655
+ this.$set(this.options, item.field || item.prop, [
656
+ JSON.parse(JSON.stringify(res.results))
657
+ ]);
658
+ } else {
659
+ this.$set(
660
+ this.options,
661
+ item.field || item.prop,
662
+ JSON.parse(JSON.stringify(res.results))
663
+ );
664
+ }
665
+ this.requests.push(key);
643
666
  } else {
644
- this.$set(
645
- this.options,
646
- item.field || item.prop,
647
- JSON.parse(JSON.stringify(res.results))
648
- );
667
+ let msg = res.msg || '系统错误,请联系管理员!';
668
+ this.$message.error(msg);
649
669
  }
650
- } else {
651
- let msg = res.msg || '系统错误,请联系管理员!';
652
- this.$message.error(msg);
653
- }
654
- })
655
- .catch((err) => {
656
- if (err.message && err.message !== 'canceled') {
657
- this.$message.error(err.message);
658
- }
659
- });
670
+ })
671
+ .catch((err) => {
672
+ if (err.message && err.message !== 'canceled') {
673
+ this.$message.error(err.message);
674
+ }
675
+ });
676
+ }
660
677
  } else {
661
678
  if (item.childHead && item.childHead.length) {
662
679
  this.getOptions(item.childHead);
@@ -675,7 +692,7 @@ export default {
675
692
  this.showTotal = true;
676
693
  return;
677
694
  }
678
- const arr = JSON.parse(JSON.stringify(this.thead));
695
+ const arr = JSON.parse(JSON.stringify(this.theads));
679
696
  arr.forEach((item) => {
680
697
  if (item.total) {
681
698
  this.showTotal = true;
@@ -748,6 +765,7 @@ export default {
748
765
  this.list = results.data || results.records || [];
749
766
  this.config.totalCount =
750
767
  results.count || results.total || results.totalCount;
768
+ this.getOptions(this.theadData);
751
769
  }
752
770
  } else {
753
771
  this.theadData = [];
@@ -991,7 +1009,7 @@ export default {
991
1009
  } else if (row) {
992
1010
  rows = JSON.parse(JSON.stringify(row));
993
1011
  }
994
- let thead = this.thead;
1012
+ let thead = this.theads;
995
1013
  if (this.$refs.oaTable) {
996
1014
  thead = this.$refs.oaTable.getThead();
997
1015
  }
@@ -1102,10 +1120,10 @@ export default {
1102
1120
  if (handle.exportXls) {
1103
1121
  let text = '操作';
1104
1122
  if (
1105
- this.thead[this.thead.length - 1] &&
1106
- this.thead[this.thead.length - 1].type === 'handle'
1123
+ this.theads[this.theads.length - 1] &&
1124
+ this.theads[this.theads.length - 1].type === 'handle'
1107
1125
  ) {
1108
- text = this.thead[this.thead.length - 1].title;
1126
+ text = this.theads[this.theads.length - 1].title;
1109
1127
  }
1110
1128
  thead = thead.map((item) => {
1111
1129
  return item.filter((ele) => {
@@ -1207,56 +1225,60 @@ export default {
1207
1225
  }
1208
1226
  },
1209
1227
  resetHeight(warn) {
1210
- if (this.full && !this.height && !this.maxHeight) {
1211
- let height = parseInt(
1212
- util.getStyle(this.$el.parentNode, 'height', '%'),
1213
- 10
1214
- );
1215
- height =
1216
- (height == NaN ? 0 : height) -
1217
- parseInt(util.getStyle(this.$el.parentNode, 'padding-top'), 10) -
1218
- parseInt(util.getStyle(this.$el.parentNode, 'padding-bottom'), 10);
1219
- for (let i = 0; i < this.$el.parentNode.childNodes.length; i++) {
1220
- let ele = this.$el.parentNode.childNodes[i];
1221
- if (ele !== this.$el && ele.offsetHeight !== undefined) {
1228
+ this.$nextTick(() => {
1229
+ if (this.full && !this.height && !this.maxHeight) {
1230
+ let height = this.$el.parentNode.offsetHeight;
1231
+ if (height) {
1232
+ height = parseInt(
1233
+ util.getStyle(this.$el.parentNode, 'height', '%'),
1234
+ 10
1235
+ );
1222
1236
  height =
1223
- height -
1224
- ele.offsetHeight -
1225
- parseInt(util.getStyle(ele, 'margin-top'), 10) -
1226
- parseInt(util.getStyle(ele, 'margin-bottom'), 10);
1237
+ (height == NaN ? 0 : height) -
1238
+ parseInt(util.getStyle(this.$el.parentNode, 'padding-top'), 10) -
1239
+ parseInt(
1240
+ util.getStyle(this.$el.parentNode, 'padding-bottom'),
1241
+ 10
1242
+ );
1243
+ for (let i = 0; i < this.$el.parentNode.childNodes.length; i++) {
1244
+ let ele = this.$el.parentNode.childNodes[i];
1245
+ if (ele !== this.$el && ele.offsetHeight !== undefined) {
1246
+ height =
1247
+ height -
1248
+ ele.offsetHeight -
1249
+ parseInt(util.getStyle(ele, 'margin-top'), 10) -
1250
+ parseInt(util.getStyle(ele, 'margin-bottom'), 10);
1251
+ }
1252
+ }
1253
+ height -= this.showToolbar ? 45 : 0;
1254
+ height -= this.page === false ? 0 : 46;
1255
+ height -= this.title ? this.$refs.title.offsetHeight : 0;
1256
+ height -= parseInt(
1257
+ util.getStyle(this.$refs.esTableContent, 'padding-top'),
1258
+ 10
1259
+ );
1260
+ height -= parseInt(
1261
+ util.getStyle(this.$refs.esTableContent, 'padding-bottom'),
1262
+ 10
1263
+ );
1264
+ let emptyText = this.$refs.esTableContent.querySelector(
1265
+ '.el-table__empty-text'
1266
+ );
1267
+ let eht = 0;
1268
+ if (emptyText) {
1269
+ eht = emptyText.offsetHeight;
1270
+ let thead =
1271
+ this.$refs.esTableContent.querySelector('.el-table__header');
1272
+ thead && (eht += thead.offsetHeight);
1273
+ }
1274
+ if (height > 1 && height - eht > 1) {
1275
+ this.tableHeight = height;
1276
+ } else {
1277
+ console.warn(this.$el.parentNode, `获取不到高度!`);
1278
+ }
1227
1279
  }
1228
1280
  }
1229
- height -= this.showToolbar ? 45 : 0;
1230
- height -= this.page === false ? 0 : 46;
1231
- height -= this.title ? this.$refs.title.offsetHeight : 0;
1232
- height -= parseInt(
1233
- util.getStyle(this.$refs.esTableContent, 'padding-top'),
1234
- 10
1235
- );
1236
- height -= parseInt(
1237
- util.getStyle(this.$refs.esTableContent, 'padding-bottom'),
1238
- 10
1239
- );
1240
- let emptyText = this.$refs.esTableContent.querySelector(
1241
- '.el-table__empty-text'
1242
- );
1243
- let eht = 0;
1244
- if (emptyText) {
1245
- eht = emptyText.offsetHeight;
1246
- let thead =
1247
- this.$refs.esTableContent.querySelector('.el-table__header');
1248
- thead && (eht += thead.offsetHeight);
1249
- }
1250
- if (height > 1 && height - eht > 1) {
1251
- this.tableHeight = height;
1252
- } else if (warn) {
1253
- console.warn(this.$el.parentNode, `获取不到高度!`);
1254
- } else {
1255
- this.$nextTick(() => {
1256
- this.resetHeight(true);
1257
- });
1258
- }
1259
- }
1281
+ });
1260
1282
  },
1261
1283
  validate(callback) {
1262
1284
  let form = this.elForm || this.$refs.esTableForm;
@@ -451,7 +451,7 @@
451
451
 
452
452
  <div
453
453
  v-if="
454
- btnList.length > 2 ||
454
+ btnList.length > 1 ||
455
455
  (!isFlow && (rejectObj.fun || pointsReadingObj.fun || moreList))
456
456
  "
457
457
  placement="top"
@@ -195,9 +195,8 @@
195
195
  {{ item.text }}
196
196
  </div>
197
197
  <el-form-item
198
- v-else
198
+ v-else-if="!item.hide"
199
199
  ref="es-form-pane"
200
- v-show="!item.hide"
201
200
  :key="item.name"
202
201
  :label-width="labelWidth"
203
202
  :prop="item.name"
@@ -246,12 +245,17 @@
246
245
  v-if="
247
246
  item.showLabel !== false &&
248
247
  item.type !== 'table' &&
249
- showLabel &&
250
- item.label
248
+ showLabel
251
249
  "
252
250
  :contents="item.label"
253
- :event="item.label.event"
254
- :events="item.label.events"
251
+ v-bind="
252
+ item.label
253
+ ? {
254
+ event: item.label.event,
255
+ events: item.label.events
256
+ }
257
+ : {}
258
+ "
255
259
  :plain="item.plain || item.name === undefined"
256
260
  ></es-label>
257
261
  <es-input-number
@@ -1134,9 +1138,8 @@
1134
1138
  {{ item.text }}
1135
1139
  </div>
1136
1140
  <el-form-item
1137
- v-else
1141
+ v-else-if="!item.hide"
1138
1142
  ref="es-form-pane"
1139
- v-show="!item.hide"
1140
1143
  :key="item.name"
1141
1144
  :label-width="labelWidth"
1142
1145
  :prop="item.name"
@@ -1184,12 +1187,17 @@
1184
1187
  v-if="
1185
1188
  item.showLabel !== false &&
1186
1189
  item.type !== 'table' &&
1187
- showLabel &&
1188
- item.label
1190
+ showLabel
1189
1191
  "
1190
1192
  :contents="item.label"
1191
- :event="item.label.event"
1192
- :events="item.label.events"
1193
+ v-bind="
1194
+ item.label
1195
+ ? {
1196
+ event: item.label.event,
1197
+ events: item.label.events
1198
+ }
1199
+ : {}
1200
+ "
1193
1201
  :plain="item.plain || item.name === undefined"
1194
1202
  ></es-label>
1195
1203
  <es-input-number
@@ -2096,9 +2104,8 @@
2096
2104
  {{ item.text }}
2097
2105
  </div>
2098
2106
  <el-form-item
2099
- v-else
2107
+ v-else-if="!item.hide"
2100
2108
  ref="es-form-pane"
2101
- v-show="!item.hide"
2102
2109
  :key="item.name"
2103
2110
  :label-width="labelWidth"
2104
2111
  :prop="item.name"
@@ -2150,12 +2157,17 @@
2150
2157
  v-if="
2151
2158
  item.showLabel !== false &&
2152
2159
  item.type !== 'table' &&
2153
- showLabel &&
2154
- item.label
2160
+ showLabel
2155
2161
  "
2156
2162
  :contents="item.label"
2157
- :event="item.label.event"
2158
- :events="item.label.events"
2163
+ v-bind="
2164
+ item.label
2165
+ ? {
2166
+ event: item.label.event,
2167
+ events: item.label.events
2168
+ }
2169
+ : {}
2170
+ "
2159
2171
  :plain="item.plain || item.name === undefined"
2160
2172
  ></es-label>
2161
2173
  <es-input-number
@@ -2990,9 +3002,8 @@
2990
3002
  {{ item.text }}
2991
3003
  </div>
2992
3004
  <el-form-item
2993
- v-else
3005
+ v-else-if="!item.hide"
2994
3006
  ref="es-form-pane"
2995
- v-show="!item.hide"
2996
3007
  :key="item.name"
2997
3008
  :label-width="labelWidth"
2998
3009
  :prop="item.name"
@@ -3040,12 +3051,17 @@
3040
3051
  v-if="
3041
3052
  item.showLabel !== false &&
3042
3053
  item.type !== 'table' &&
3043
- showLabel &&
3044
- item.label
3054
+ showLabel
3045
3055
  "
3046
3056
  :contents="item.label"
3047
- :event="item.label.event"
3048
- :events="item.label.events"
3057
+ v-bind="
3058
+ item.label
3059
+ ? {
3060
+ event: item.label.event,
3061
+ events: item.label.events
3062
+ }
3063
+ : {}
3064
+ "
3049
3065
  :plain="item.plain || item.name === undefined"
3050
3066
  ></es-label>
3051
3067
  <es-input-number
@@ -110,10 +110,16 @@
110
110
  :rowspan="item.labelRow"
111
111
  >
112
112
  <es-label
113
- v-if="item.type !== 'table' && item.label"
113
+ v-if="item.type !== 'table'"
114
114
  :contents="item.label"
115
- :event="item.label.event"
116
- :events="item.label.events"
115
+ v-bind="
116
+ item.label
117
+ ? {
118
+ event: item.label.event,
119
+ events: item.label.events
120
+ }
121
+ : {}
122
+ "
117
123
  :plain="item.plain"
118
124
  :rules="item.rules"
119
125
  ></es-label>
@@ -156,13 +162,18 @@
156
162
  ></expand-dom>
157
163
  <template v-else>
158
164
  <es-label
159
- v-if="item.type === 'label' || item.type === 'empty'"
165
+ v-if="
166
+ (item.type === 'label' || item.type === 'empty') &&
167
+ !item.hide
168
+ "
160
169
  :contents="item.text"
161
- :event="item.label.event"
162
- :events="item.label.events"
170
+ v-bind="{
171
+ event: item.event,
172
+ events: item.events
173
+ }"
163
174
  ></es-label>
164
175
  <el-form-item
165
- v-else
176
+ v-else-if="!item.hide"
166
177
  label-width="0"
167
178
  :prop="item.name"
168
179
  :rules="getRules(item)"
@@ -122,8 +122,7 @@ export default {
122
122
  return '70px';
123
123
  }
124
124
  }
125
-
126
- return this.subMenu.length && this.isShow
125
+ return this.subMenu && this.subMenu.length && this.isShow
127
126
  ? parseInt(this.width, 10) + 70 + 'px'
128
127
  : '70px';
129
128
  }
@@ -190,6 +190,7 @@ import {
190
190
  } from 'eoss-ui/src/config/api.js';
191
191
  import util from 'eoss-ui/src/utils/util.js';
192
192
  import picture from './picture.js';
193
+ import store from 'eoss-ui/src/utils/store';
193
194
  export default {
194
195
  name: 'EsUpload',
195
196
  components: {
@@ -694,37 +695,50 @@ export default {
694
695
  //根据code获取附件参数配置
695
696
  getAdjunctPropertie() {
696
697
  if (this.code !== undefined) {
697
- util
698
- .ajax({
699
- method: this.method,
700
- url: this.properties,
701
- data: { code: this.code, ...this.param },
702
- params: { code: this.code, ...this.param }
703
- })
704
- .then((res) => {
705
- if (res.rCode === 0) {
706
- if (res.results) {
707
- this.excludeNames = res.results.excludeName;
708
- if (res.results.fileTypeExtName) {
709
- let fileTypeExtName = res.results.fileTypeExtName.split(';');
710
- this.fileAccept = fileTypeExtName
711
- .filter((item) => {
712
- return item;
713
- })
714
- .join(',');
698
+ let config = store.get(this.code);
699
+ if (config) {
700
+ this.fileAccept = config.accept;
701
+ this.fileSize = config.size;
702
+ this.fileTotalSize = config.totalSize;
703
+ } else {
704
+ util
705
+ .ajax({
706
+ method: this.method,
707
+ url: this.properties,
708
+ data: { code: this.code, ...this.param },
709
+ params: { code: this.code, ...this.param }
710
+ })
711
+ .then((res) => {
712
+ if (res.rCode === 0) {
713
+ if (res.results) {
714
+ this.excludeNames = res.results.excludeName;
715
+ if (res.results.fileTypeExtName) {
716
+ let fileTypeExtName =
717
+ res.results.fileTypeExtName.split(';');
718
+ this.fileAccept = fileTypeExtName
719
+ .filter((item) => {
720
+ return item;
721
+ })
722
+ .join(',');
723
+ }
724
+ this.fileSize = res.results.limitFileSize
725
+ ? res.results.limitFileSize
726
+ : 0;
727
+ this.fileTotalSize = res.results.limitTotalSize;
728
+ store.set(this.code, {
729
+ accept: this.fileAccept,
730
+ size: this.fileSize,
731
+ totalSize: this.fileTotalSize
732
+ });
715
733
  }
716
- this.fileSize = res.results.limitFileSize
717
- ? res.results.limitFileSize
718
- : 0;
719
- this.fileTotalSize = res.results.limitTotalSize;
720
734
  }
721
- }
722
- })
723
- .catch((err) => {
724
- if (err.message && err.message !== 'canceled') {
725
- this.$message.error(err.message);
726
- }
727
- });
735
+ })
736
+ .catch((err) => {
737
+ if (err.message && err.message !== 'canceled') {
738
+ this.$message.error(err.message);
739
+ }
740
+ });
741
+ }
728
742
  }
729
743
  },
730
744
  getFiles(params) {
package/src/index.js CHANGED
@@ -117,7 +117,7 @@ if (typeof window !== 'undefined' && window.Vue) {
117
117
  }
118
118
 
119
119
  export default {
120
- version: '0.4.84',
120
+ version: '0.4.86',
121
121
  install,
122
122
  Button,
123
123
  ButtonGroup,
package/src/utils/util.js CHANGED
@@ -396,6 +396,10 @@ const ajax = function ({
396
396
  if (!header['content-type']) {
397
397
  header['content-type'] = 'application/x-www-form-urlencoded;charset=UTF-8';
398
398
  }
399
+ } else {
400
+ if (!header['content-type']) {
401
+ header['content-type'] = 'application/json;charset=UTF-8';
402
+ }
399
403
  }
400
404
  return http({
401
405
  method,