cnhis-design-vue 2.1.159 → 2.1.160

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 (108) hide show
  1. package/CHANGELOG.md +19 -4
  2. package/es/affix/index.js +8 -8
  3. package/es/age/index.js +10 -10
  4. package/es/alert/index.js +8 -8
  5. package/es/anchor/index.js +8 -8
  6. package/es/auto-complete/index.js +8 -8
  7. package/es/avatar/index.js +8 -8
  8. package/es/back-top/index.js +8 -8
  9. package/es/badge/index.js +8 -8
  10. package/es/base/index.js +8 -8
  11. package/es/big-table/index.js +80 -71
  12. package/es/breadcrumb/index.js +8 -8
  13. package/es/button/index.js +33 -33
  14. package/es/calendar/index.js +8 -8
  15. package/es/captcha/index.js +3 -3
  16. package/es/card/index.js +8 -8
  17. package/es/card-reader-sdk/index.js +1 -1
  18. package/es/carousel/index.js +8 -8
  19. package/es/cascader/index.js +8 -8
  20. package/es/checkbox/index.js +9 -9
  21. package/es/col/index.js +8 -8
  22. package/es/collapse/index.js +8 -8
  23. package/es/color-picker/index.js +1 -1
  24. package/es/comment/index.js +8 -8
  25. package/es/config-provider/index.js +8 -8
  26. package/es/date-picker/index.js +8 -8
  27. package/es/descriptions/index.js +8 -8
  28. package/es/direct/index.js +16 -16
  29. package/es/divider/index.js +8 -8
  30. package/es/drag-layout/index.js +3 -3
  31. package/es/drawer/index.js +8 -8
  32. package/es/dropdown/index.js +8 -8
  33. package/es/editor/index.js +1 -1
  34. package/es/ellipsis/index.js +1 -1
  35. package/es/empty/index.js +8 -8
  36. package/es/fabric-chart/index.js +9 -9
  37. package/es/form/index.js +8 -8
  38. package/es/form-model/index.js +8 -8
  39. package/es/form-table/index.js +74 -74
  40. package/es/full-calendar/index.js +4 -4
  41. package/es/index/index.js +862 -543
  42. package/es/index/style.css +1 -1
  43. package/es/input/index.js +9 -9
  44. package/es/input-number/index.js +8 -8
  45. package/es/layout/index.js +8 -8
  46. package/es/list/index.js +8 -8
  47. package/es/locale-provider/index.js +8 -8
  48. package/es/map/index.js +9 -9
  49. package/es/mentions/index.js +8 -8
  50. package/es/menu/index.js +8 -8
  51. package/es/message/index.js +8 -8
  52. package/es/multi-chat/index.js +76 -76
  53. package/es/multi-chat-client/index.js +70 -70
  54. package/es/multi-chat-history/index.js +4 -4
  55. package/es/multi-chat-record/index.js +14 -14
  56. package/es/multi-chat-setting/index.js +22 -22
  57. package/es/multi-chat-sip/index.js +1 -1
  58. package/es/notification/index.js +8 -8
  59. package/es/page-header/index.js +8 -8
  60. package/es/pagination/index.js +8 -8
  61. package/es/popconfirm/index.js +8 -8
  62. package/es/popover/index.js +8 -8
  63. package/es/progress/index.js +8 -8
  64. package/es/radio/index.js +9 -9
  65. package/es/rate/index.js +8 -8
  66. package/es/result/index.js +8 -8
  67. package/es/row/index.js +8 -8
  68. package/es/scale-container/index.js +9 -9
  69. package/es/scale-view/index.js +27 -27
  70. package/es/select/index.js +12 -12
  71. package/es/select-label/index.js +11 -11
  72. package/es/select-person/index.js +2 -2
  73. package/es/select-tag/index.js +4 -4
  74. package/es/shortcut-setter/index.js +10 -10
  75. package/es/skeleton/index.js +8 -8
  76. package/es/slider/index.js +8 -8
  77. package/es/slider-tree/index.js +9 -9
  78. package/es/space/index.js +8 -8
  79. package/es/spin/index.js +8 -8
  80. package/es/statistic/index.js +8 -8
  81. package/es/steps/index.js +8 -8
  82. package/es/switch/index.js +8 -8
  83. package/es/table-filter/index.js +492 -182
  84. package/es/table-filter/style.css +1 -1
  85. package/es/tabs/index.js +8 -8
  86. package/es/tag/index.js +9 -9
  87. package/es/time-picker/index.js +8 -8
  88. package/es/timeline/index.js +8 -8
  89. package/es/tooltip/index.js +8 -8
  90. package/es/transfer/index.js +8 -8
  91. package/es/tree/index.js +8 -8
  92. package/es/tree-select/index.js +8 -8
  93. package/es/upload/index.js +8 -8
  94. package/es/verification-code/index.js +2 -2
  95. package/lib/cui.common.js +815 -473
  96. package/lib/cui.umd.js +815 -473
  97. package/lib/cui.umd.min.js +15 -15
  98. package/package.json +1 -1
  99. package/packages/big-table/src/utils/headerFilter.js +6 -0
  100. package/packages/table-filter/src/base-search-com/BaseSearch.vue +20 -6
  101. package/packages/table-filter/src/components/render-widget/components/SelectDynamic.vue +3 -2
  102. package/packages/table-filter/src/components/render-widget/components/SelectTree.vue +145 -0
  103. package/packages/table-filter/src/components/render-widget/components/index.js +2 -1
  104. package/packages/table-filter/src/components/render-widget/enums.js +2 -1
  105. package/packages/table-filter/src/components/render-widget/index.vue +3 -0
  106. package/packages/table-filter/src/components/render-widget/mixins/dynamic-method.js +47 -28
  107. package/packages/table-filter/src/components/render-widget/widgetCfgMaps.js +26 -1
  108. package/packages/table-filter/src/mixins/renderWidget.js +10 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cnhis-design-vue",
3
- "version": "2.1.159",
3
+ "version": "2.1.160",
4
4
  "description": "前端业务UI库",
5
5
  "keyword": "cnhis-design-vue vue cnhis",
6
6
  "homepage": "http://dv.cnhis.com/",
@@ -354,6 +354,12 @@ export default {
354
354
  end_val: item.end_val || '', // 结束时间
355
355
  unit: item.unit || '' // 年龄
356
356
  };
357
+ if (item.extendKey) {
358
+ temp.extendKey = item.extendKey;
359
+ }
360
+ if (item.extendType) {
361
+ temp.extendType = item.extendType;
362
+ }
357
363
  conObj.push(temp);
358
364
  }
359
365
  // let dateCons = this.dateTeam.map(item => item.con);
@@ -1992,6 +1992,7 @@ export default create({
1992
1992
  };
1993
1993
  // paramsArray.push(utils.setParamsValue(setData[0].params, Object.assign(paramsData, { obj })));
1994
1994
  let resParams = utils.setParamsValue(setData[0].params, Object.assign(paramsData, { obj, table: i })) || {}
1995
+ resParams._originRow = i;
1995
1996
  if(btn?.__printConfig?.number) {
1996
1997
  resParams.templateNumbers = [btn.__printConfig.number]
1997
1998
  }
@@ -1999,7 +2000,7 @@ export default create({
1999
2000
  });
2000
2001
  return paramsArray;
2001
2002
  },
2002
- async receivePrintSuccessAboutPrint(res, info) {
2003
+ async receivePrintSuccessAboutPrint(res, info, config) {
2003
2004
  const printBtn = this.printBtn;
2004
2005
  const templateId = info.templateId;
2005
2006
  const formatId = info.formatId;
@@ -2011,7 +2012,7 @@ export default create({
2011
2012
  const result = await this.printConfig.postStepRule(printBtn.settingObj, {
2012
2013
  result: res,
2013
2014
  print: print
2014
- });
2015
+ }, config);
2015
2016
 
2016
2017
  let isSync = result?.method
2017
2018
  if(!isSync || isSync!=='sync') return;
@@ -2023,15 +2024,28 @@ export default create({
2023
2024
  console.log('error', error);
2024
2025
  }
2025
2026
  },
2026
- async receivePrintSuccess(res, info) {
2027
+ async receivePrintSuccess(res, info, config={}) {
2028
+ const {isMulti, errorList=[]} = config
2029
+ let useRes = res;
2030
+ // 批量打印如果有失败就取errorList的最后一项
2031
+ if(isMulti && errorList.length) {
2032
+ useRes = errorList[errorList.length -1];
2033
+ }
2034
+ const {result, message, errinfo} = useRes || {}
2035
+ const messageType = isMulti ? result == 'error' ?'error' : 'success' : 'success';
2036
+ let msg = message;
2037
+ if(messageType === 'error' && errinfo) {
2038
+ msg = (message + `:${errinfo}`)
2039
+ }
2027
2040
  if (info.type === 'print') {
2028
- await this.receivePrintSuccessAboutPrint(res, info);
2041
+ await this.receivePrintSuccessAboutPrint(useRes, info, config);
2029
2042
  }
2030
2043
  if(info.type === 'download' && this.receivePrintSuccessDownloadPdf && typeof this.receivePrintSuccessDownloadPdf === 'function') {
2031
- this.receivePrintSuccessDownloadPdf(res)
2044
+ this.receivePrintSuccessDownloadPdf(useRes, config)
2032
2045
  }
2046
+
2033
2047
  setTimeout(() => {
2034
- this.$message.success(res.message);
2048
+ this.$message[messageType](message);
2035
2049
  }, 3500);
2036
2050
  },
2037
2051
  receivePrintError(res) {
@@ -9,7 +9,7 @@
9
9
  :maxTagCount="maxTagCount"
10
10
  :maxTagPlaceholder="maxTagPlaceholder"
11
11
  :filterOption="false"
12
- :allowClear="true"
12
+ :allowClear="allowClear"
13
13
  :showArrow="true"
14
14
  ref="quickInputSelect"
15
15
  class="quick-dynamic-select"
@@ -90,7 +90,8 @@ export default {
90
90
  placeholder: String,
91
91
  mode: String,
92
92
  handleWordBookSearchRender: Function,
93
- dropdownVisibleChangeRender: Function
93
+ dropdownVisibleChangeRender: Function,
94
+ allowClear: Boolean
94
95
  },
95
96
  data() {
96
97
  return {};
@@ -0,0 +1,145 @@
1
+ <template>
2
+ <div class="valueCfg-SelectDynamicTree">
3
+ <a-tree-select
4
+ v-model="valueCp"
5
+ showSearch
6
+ :multiple="isMultiple"
7
+ :placeholder="placeholder"
8
+ :dropdownMatchSelectWidth="false"
9
+ :maxTagCount="maxTagCount"
10
+ :maxTagPlaceholder="maxTagPlaceholder"
11
+ :tree-data="componentCfg.dataSource"
12
+ :allowClear="allowClear"
13
+ :replaceFields="replaceFields"
14
+ class="valueCfg-dynamic-select-tree"
15
+ dropdownClassName="valueCfg-dynamic-tree-drop"
16
+ ref="quickInputSelectTree"
17
+ treeNodeFilterProp="title"
18
+ @change="handleChange"
19
+ :dropdown-style="{ maxHeight: '293px', overflow: 'auto', zIndex: 2023 }"
20
+ >
21
+ <span
22
+ class="init-key-loading"
23
+ v-if="key === '_init_key_'"
24
+ slot="title"
25
+ slot-scope="{ key, value }"
26
+ style="color: #08c"
27
+ >
28
+ <span v-show="false">{{ value }}</span>
29
+ <a-spin :tip="`${$t('1.1.7.14')}...`" />
30
+ </span>
31
+ </a-tree-select>
32
+ </div>
33
+ </template>
34
+ <script>
35
+ export default {
36
+ name: "SelectTree",
37
+ components: {},
38
+ props: {
39
+ value: { type: [Array, String, Number] },
40
+ componentCfg: { type: Object },
41
+ placeholder: String,
42
+ mode: String,
43
+ handleWordBookSearchRender: Function,
44
+ dropdownVisibleChangeRender: Function,
45
+ isQuick: Boolean,
46
+ allowClear: Boolean,
47
+ },
48
+ data() {
49
+ return {
50
+ open: false,
51
+ replaceFields: {
52
+ children: "children",
53
+ title: "_show_title",
54
+ key: "myName",
55
+ value: "myName"
56
+ }
57
+ };
58
+ },
59
+ model: {
60
+ prop: "value",
61
+ event: "update:value"
62
+ },
63
+ computed: {
64
+ valueCp: {
65
+ set(val) {
66
+ this.$emit("update:value", val);
67
+ },
68
+ get() {
69
+ return this.value;
70
+ }
71
+ },
72
+ isMultiple() {
73
+ return this.mode === "multiple";
74
+ },
75
+ showSelectTitle() {
76
+ let { fetchingWordbook, dataSource } = this.componentCfg || {};
77
+ return !fetchingWordbook && !!dataSource?.length;
78
+ },
79
+
80
+ showKeys() {
81
+ let { showKeys } = this.componentCfg?.dynamicOptionInfo || {};
82
+ return showKeys;
83
+ },
84
+ _showKeys_() {
85
+ let { _showKeys_ } = this.componentCfg || {};
86
+ if (_showKeys_?.length) return _showKeys_;
87
+ return this.showKeys;
88
+ },
89
+ getShowKeysMax() {
90
+ let len = this.showKeys?.length || 1;
91
+ let maxWidth = 100 / len;
92
+ return {
93
+ maxWidth: `${maxWidth}%`
94
+ };
95
+ },
96
+ selectHasTitle() {
97
+ const { showSelectTitle, showKeys, componentCfg } = this;
98
+ return (
99
+ showSelectTitle &&
100
+ Array.isArray(showKeys) &&
101
+ showKeys?.length > 1 &&
102
+ componentCfg?.dataSource?.length
103
+ );
104
+ },
105
+ maxTagCount() {
106
+ if (!Array.isArray(this.value)) return undefined;
107
+ const len = this.value.length || 0;
108
+ return len > 1 ? 0 : 1;
109
+ }
110
+ },
111
+ watch: {
112
+ // value: {
113
+ // immediate: true,
114
+ // handler(val) {}
115
+ // }
116
+ },
117
+ // 生命周期
118
+ created() {},
119
+ mounted() {
120
+ if(!this.isQuick) return;
121
+ this.handleWordBookSearchRender('', this.componentCfg, {skipFirstDef: true});
122
+ },
123
+
124
+ // 方法
125
+ methods: {
126
+ maxTagPlaceholder() {
127
+ if (!Array.isArray(this.value)) return undefined;
128
+ const { alias, title } = this.componentCfg;
129
+ const len = this.value.length || 0;
130
+ return this.value.length > 1 ? `已选${len}个${alias || title}` : "";
131
+ },
132
+ handleChange(value, label, extra) {
133
+ console.log(value, label, extra, "--value, label, extra");
134
+ }
135
+ }
136
+ };
137
+ </script>
138
+ <style lang="less">
139
+ .valueCfg-SelectDynamicTree {
140
+ width: 100%;
141
+ }
142
+ .valueCfg-dynamic-select-tree {
143
+ width: 100%;
144
+ }
145
+ </style>
@@ -6,5 +6,6 @@ import SelectDynamic from './SelectDynamic.vue';
6
6
  import Label from './Label.vue';
7
7
  import SelectLabel from './SelectLabel.vue';
8
8
  import Text from './Text.vue';
9
+ import SelectTree from './SelectTree.vue';
9
10
 
10
- export { CheckboxGroup, Select, NumberRange, DateRangeQuick, SelectDynamic, Label, SelectLabel, Text };
11
+ export { CheckboxGroup, Select, NumberRange, DateRangeQuick, SelectDynamic, Label, SelectLabel, Text, SelectTree };
@@ -11,7 +11,8 @@ export const WidgetTypeEnums = {
11
11
  DATETIME_RANGE: 'DATETIME_RANGE',
12
12
  DATE_RANGE_QUICK: 'DATE_RANGE_QUICK',
13
13
  LABEL: 'LABEL',
14
- SELECT_LABEL: 'SELECT_LABEL'
14
+ SELECT_LABEL: 'SELECT_LABEL',
15
+ SELECT_TREE: 'SELECT_TREE'
15
16
  };
16
17
 
17
18
  export const DatePresetValEnums = {
@@ -92,6 +92,9 @@ export default {
92
92
  Props.dropdownVisibleChangeRender = this.dropdownVisibleChangeRender;
93
93
  Props.handleWordBookSearchRender = this.handleWordBookSearchRender;
94
94
  }
95
+ if(widgetType === WidgetTypeEnums.SELECT_TREE) {
96
+ Props.handleWordBookSearchRender = this.handleWordBookSearchRender;
97
+ }
95
98
  if(widgetType === WidgetTypeEnums.LABEL || widgetType === WidgetTypeEnums.SELECT_LABEL) {
96
99
  Props.getLabelListMethodRender = this.getLabelListMethodRender;
97
100
  }
@@ -7,7 +7,7 @@ export default {
7
7
  },
8
8
  methods: {
9
9
  wordbookDataParamsRender(dynamicOptionInfo) {
10
- let { dataSourceId, dataSourceType = 'WORDBOOK', filterKeys, autograph, defaultParams } = dynamicOptionInfo;
10
+ let { dataSourceId, dataSourceType = 'WORDBOOK', filterKeys, autograph, defaultParams, treeInfo = {} } = dynamicOptionInfo;
11
11
  if (Array.isArray(filterKeys)) {
12
12
  filterKeys = JSON.stringify(filterKeys);
13
13
  }
@@ -17,6 +17,10 @@ export default {
17
17
  fieldKeys: filterKeys,
18
18
  autograph
19
19
  };
20
+ if (treeInfo.enable) {
21
+ params.levelKey = treeInfo.levelKey;
22
+ params.primaryKey = treeInfo.primaryKey;
23
+ }
20
24
  return params;
21
25
  },
22
26
  handleRenderFirstDef(item, rows) {
@@ -50,6 +54,46 @@ export default {
50
54
  this.$set(row, 'fetchingWordbook', false);
51
55
  });
52
56
  },
57
+ handleWordbookRows(list, valueKey, showKeys, isTree) {
58
+ if (!list?.length) return [];
59
+ return list.map(row => {
60
+ let showKeysStr = [];
61
+ // 取值是value, 展示是change_text
62
+ let valueKeyN = `_${valueKey}_`;
63
+ for (let key in row) {
64
+ let showVal = vexutils.stringToValue(row[key], 'change_text');
65
+ if (key === valueKey) {
66
+ row[valueKeyN] = vexutils.stringToValue(row[key]);
67
+ }
68
+ row[key] = showVal;
69
+ }
70
+ showKeys.forEach(s => {
71
+ showKeysStr.push(row[s]);
72
+ });
73
+ let name = row[valueKeyN];
74
+ // 保存的时候值会变成字符串, 如果是数字的话回显会出问题, 这里全部处理成字符串
75
+ if (typeof name === 'number') {
76
+ name = String(name);
77
+ }
78
+ const _show_title = showKeysStr.join(' ');
79
+ if (isTree) {
80
+ row.scopedSlots = {
81
+ title: 'title'
82
+ };
83
+ row.title = _show_title;
84
+ row.key = name;
85
+ row.value = name;
86
+ }
87
+ if (isTree && row.children?.length) {
88
+ row.children = this.handleWordbookRows(row.children, valueKey, showKeys, isTree);
89
+ }
90
+ return {
91
+ ...row,
92
+ myName: name,
93
+ _show_title
94
+ };
95
+ });
96
+ },
53
97
 
54
98
  formatWordbookDataRender(item, data, params) {
55
99
  let searchPageConfig = {
@@ -62,7 +106,7 @@ export default {
62
106
  resArr = [];
63
107
  if (data && data.result === 'SUCCESS') {
64
108
  let reqParams = data?.reqParams || {};
65
- let { showKeys, valueKey } = item?.widgetCfg?.dynamicOptionInfo || {};
109
+ let { showKeys, valueKey, treeInfo = {} } = item?.widgetCfg?.dynamicOptionInfo || {};
66
110
  showKeys = Array.isArray(showKeys) ? showKeys : [showKeys];
67
111
  let { page, hasNextPage, fieldList, rows = [] } = data.map;
68
112
 
@@ -84,32 +128,7 @@ export default {
84
128
  keyword: params?.keyword || undefined,
85
129
  asyncCount: reqParams?.asyncCount || undefined
86
130
  });
87
- let rowsArr = rows.map(row => {
88
- let showKeysStr = [];
89
- // 取值是value, 展示是change_text
90
- let valueKeyN = `_${valueKey}_`;
91
- for (let key in row) {
92
- let showVal = vexutils.stringToValue(row[key], 'change_text');
93
- if (key === valueKey) {
94
- row[valueKeyN] = vexutils.stringToValue(row[key]);
95
- }
96
- row[key] = showVal;
97
- }
98
- showKeys.forEach(s => {
99
- // let str = vexutils.stringToValue(row[s]);
100
- showKeysStr.push(row[s]);
101
- });
102
- // let name = vexutils.stringToValue(row[valueKey]);
103
- let name = row[valueKeyN];
104
- // 保存的时候值会变成字符串, 如果是数字的话回显会出问题, 这里全部处理成字符串
105
- if (typeof name === 'number') {
106
- name = String(name);
107
- }
108
- return Object.assign(row, {
109
- myName: name,
110
- _show_title: showKeysStr.join(' ')
111
- });
112
- });
131
+ let rowsArr = this.handleWordbookRows(rows, valueKey, showKeys, treeInfo?.enable);
113
132
  // 数组对象去重
114
133
  let obj = {};
115
134
  resArr = rowsArr.reduce((cur, next) => {
@@ -1,6 +1,6 @@
1
1
  import { WidgetTypeEnums, DatePresetValEnums } from './enums';
2
2
  import { InputNumber, Input, DatePicker } from 'ant-design-vue';
3
- import { CheckboxGroup, Select, NumberRange, DateRangeQuick, SelectDynamic, Label, SelectLabel, Text } from './components';
3
+ import { CheckboxGroup, Select, NumberRange, DateRangeQuick, SelectDynamic, Label, SelectLabel, Text, SelectTree } from './components';
4
4
  import moment from 'moment';
5
5
  import { presetValToTimestamp } from './helpers/presetValToTimestamp';
6
6
 
@@ -260,6 +260,31 @@ export const WidgetCfgMaps = new Map([
260
260
  setDefaultValue: SetDefVal
261
261
  }
262
262
  ],
263
+ [
264
+ WidgetTypeEnums.SELECT_TREE,
265
+ {
266
+ component: SelectTree,
267
+ props: {},
268
+ eventsBySearch: [
269
+ {
270
+ name: 'change',
271
+ handler(e, search, props) {
272
+ const { mode } = props;
273
+ if (mode !== 'multiple') {
274
+ search();
275
+ }
276
+ }
277
+ }
278
+ ],
279
+ handlerProps(props, { multiple, title, explicitRequired, isQuick } = {}) {
280
+ const allowClear = explicitRequired != 1;
281
+ const Props = { ...props, placeholder: `请选择${title}`, allowClear, isQuick };
282
+ Props.mode = multiple ? 'multiple' : 'default';
283
+ return Props;
284
+ },
285
+ setDefaultValue: SetDefVal
286
+ }
287
+ ],
263
288
  [
264
289
  WidgetTypeEnums.SELECT_DYNAMIC,
265
290
  {
@@ -74,6 +74,12 @@ export default {
74
74
  value: val.length > 0 ? val : null,
75
75
  unit
76
76
  };
77
+ if (widgetCfg.extendKey) {
78
+ obj.extendKey = widgetCfg.extendKey;
79
+ }
80
+ if (widgetCfg.extendType) {
81
+ obj.extendType = widgetCfg.extendType;
82
+ }
77
83
 
78
84
  if (widgetType === WidgetTypeEnums.INPUT && widgetCfg?.accurateSearch?.switchEnable) {
79
85
  obj.isAccurateSearch = isAccurateSearch;
@@ -91,9 +97,12 @@ export default {
91
97
  }
92
98
  return !Array.isArray(value) ? value : value[0];
93
99
  },
100
+ isDynamicTree(cfg) {
101
+ return !cfg?.manualMapping && cfg?.widgetCfg?.dynamicOptionInfo && cfg?.widgetCfg?.dynamicOptionInfo?.treeInfo?.enable;
102
+ },
94
103
  isExplicitDefaultVal(cfg) {
95
104
  const { explicitDefaultVal } = cfg.widgetCfg || {};
96
- return explicitDefaultVal === 'firstOption';
105
+ return explicitDefaultVal === 'firstOption' || this.isDynamicTree(cfg);
97
106
  },
98
107
  isExistDefValByRenderWidget(cfg) {
99
108
  const { defaultValue, defValueUnit } = cfg.widgetCfg || {};