@ibiz-template/vue3-components 0.7.30-alpha.3 → 0.7.31-alpha.0

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 (167) hide show
  1. package/dist/chart-0UV2FAN6.js +1 -0
  2. package/dist/index-YQyitjSg.js +1 -0
  3. package/dist/index-maJGu4b8.js +4 -0
  4. package/dist/index-trS6uS3E.js +1 -0
  5. package/dist/index.min.css +1 -1
  6. package/dist/index.system.min.js +1 -1
  7. package/dist/wang-editor-AcjI1Mdj.js +1 -0
  8. package/dist/{xlsx-util-cTIccUxx.js → xlsx-util-OUxT4A8O.js} +1 -1
  9. package/es/common/fullscreen-toolbar/fullscreen-toolbar.css +1 -1
  10. package/es/common/fullscreen-toolbar/fullscreen-toolbar.mjs +10 -0
  11. package/es/common/index.mjs +2 -0
  12. package/es/common/pql-editor/components/index.d.ts +1 -0
  13. package/es/common/pql-editor/components/index.mjs +3 -0
  14. package/es/common/pql-editor/components/pql-editor-suggestion/pql-editor-suggestion.css +1 -0
  15. package/es/common/pql-editor/components/pql-editor-suggestion/pql-editor-suggestion.d.ts +28 -0
  16. package/es/common/pql-editor/components/pql-editor-suggestion/pql-editor-suggestion.mjs +49 -0
  17. package/es/common/pql-editor/pql-editor.css +1 -0
  18. package/es/common/pql-editor/pql-editor.d.ts +68 -0
  19. package/es/common/pql-editor/pql-editor.mjs +606 -0
  20. package/es/common/pql-editor/pql-editor.module.d.ts +47 -0
  21. package/es/common/pql-editor/pql-editor.module.mjs +176 -0
  22. package/es/common/pql-editor/utils/index.d.ts +15 -0
  23. package/es/common/pql-editor/utils/index.mjs +270 -0
  24. package/es/control/chart/chart.css +1 -1
  25. package/es/control/chart/chart.d.ts +5 -5
  26. package/es/control/chart/chart.mjs +60 -36
  27. package/es/control/dashboard/custom-dashboard-container/custom-dashboard-container.d.ts +16 -13
  28. package/es/control/dashboard/portlet/portlet-layout/portlet-layout.css +1 -1
  29. package/es/control/dashboard/portlet/portlet-layout/portlet-layout.d.ts +8 -0
  30. package/es/control/dashboard/portlet/portlet-layout/portlet-layout.mjs +12 -2
  31. package/es/control/dashboard/portlet/report-portlet/index.d.ts +1 -0
  32. package/es/control/dashboard/portlet/report-portlet/report-portlet.d.ts +1 -0
  33. package/es/control/dashboard/portlet/report-portlet/report-portlet.mjs +10 -2
  34. package/es/control/dashboard/portlet/report-portlet/report-portlet.provider.d.ts +2 -2
  35. package/es/control/drtab/drtab-control.util.mjs +1 -1
  36. package/es/control/form/form-detail/form-mdctrl/form-mdctrl-repeater/repeater-grid/repeater-grid.d.ts +15 -12
  37. package/es/control/grid/grid/grid.mjs +2 -2
  38. package/es/control/grid/grid-column/grid-field-column/grid-field-column.d.ts +4 -2
  39. package/es/control/grid/grid-column/grid-field-column/grid-field-column.mjs +32 -2
  40. package/es/control/grid/grid-column/grid-field-column/index.d.ts +4 -0
  41. package/es/control/list/list.mjs +13 -1
  42. package/es/control/search-bar/filter-tree/filter-tree.css +1 -1
  43. package/es/control/search-bar/filter-tree/filter-tree.d.ts +30 -3
  44. package/es/control/search-bar/filter-tree/filter-tree.mjs +83 -9
  45. package/es/control/search-bar/search-bar.mjs +10 -1
  46. package/es/control/tree-grid/index.d.ts +1 -0
  47. package/es/control/tree-grid/tree-grid.d.ts +1 -0
  48. package/es/control/tree-grid/tree-grid.mjs +4 -1
  49. package/es/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-field-column/index.d.ts +1 -1
  50. package/es/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-field-column/tree-grid-ex-field-column.d.ts +1 -1
  51. package/es/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-field-column/tree-grid-ex-field-column.mjs +4 -9
  52. package/es/editor/array/ibiz-array/ibiz-array.d.ts +1 -1
  53. package/es/editor/autocomplete/ibiz-autocomplete/ibiz-autocomplete.d.ts +1 -1
  54. package/es/editor/carousel/ibiz-carousel/ibiz-carousel.d.ts +1 -1
  55. package/es/editor/cascader/ibiz-cascader/ibiz-cascader.d.ts +1 -1
  56. package/es/editor/check-box/ibiz-checkbox/ibiz-checkbox.d.ts +1 -1
  57. package/es/editor/check-box-list/checkbox-list-editor.controller.d.ts +7 -0
  58. package/es/editor/check-box-list/checkbox-list-editor.controller.mjs +11 -0
  59. package/es/editor/check-box-list/ibiz-checkbox-list/ibiz-checkbox-list.css +1 -1
  60. package/es/editor/check-box-list/ibiz-checkbox-list/ibiz-checkbox-list.d.ts +1 -1
  61. package/es/editor/check-box-list/ibiz-checkbox-list/ibiz-checkbox-list.mjs +2 -1
  62. package/es/editor/code/monaco-editor/monaco-editor.d.ts +1 -1
  63. package/es/editor/color-picker/ibiz-color-picker/ibiz-color-picker.d.ts +1 -1
  64. package/es/editor/data-picker/ibiz-mpicker/ibiz-mpicker.d.ts +1 -1
  65. package/es/editor/data-picker/ibiz-picker/ibiz-picker.d.ts +1 -1
  66. package/es/editor/data-picker/ibiz-picker-dropdown/ibiz-picker-dropdown.d.ts +1 -1
  67. package/es/editor/data-picker/ibiz-picker-embed-view/ibiz-picker-embed-view.d.ts +2 -2
  68. package/es/editor/data-picker/ibiz-picker-link/ibiz-picker-link.d.ts +1 -1
  69. package/es/editor/data-picker/ibiz-picker-select-view/ibiz-picker-select-view.d.ts +1 -1
  70. package/es/editor/date-picker/ibiz-date-picker/ibiz-date-picker.d.ts +1 -1
  71. package/es/editor/date-range/ibiz-date-range-picker/ibiz-date-range-picker.d.ts +1 -1
  72. package/es/editor/dropdown-list/ibiz-dropdown/ibiz-dropdown.d.ts +1 -1
  73. package/es/editor/dropdown-list/ibiz-dropdown/ibiz-dropdown.mjs +1 -1
  74. package/es/editor/dropdown-list/ibiz-emoji-picker/ibiz-emoji-picker.d.ts +1 -1
  75. package/es/editor/html/wang-editor/wang-editor.d.ts +1 -1
  76. package/es/editor/html/wang-editor/wang-editor.mjs +3 -0
  77. package/es/editor/list-box/ibiz-list-box/ibiz-list-box.d.ts +1 -1
  78. package/es/editor/number-range/ibiz-number-range-picker/ibiz-number-range-picker.d.ts +1 -1
  79. package/es/editor/preset/preset-rawitem/ibiz-preset-rawitem/ibiz-preset-rawitem.d.ts +1 -1
  80. package/es/editor/radio-button-list/ibiz-radio/ibiz-radio.css +1 -1
  81. package/es/editor/radio-button-list/ibiz-radio/ibiz-radio.d.ts +1 -1
  82. package/es/editor/radio-button-list/ibiz-radio/ibiz-radio.mjs +2 -1
  83. package/es/editor/radio-button-list/radio-button-list.controller.d.ts +8 -0
  84. package/es/editor/radio-button-list/radio-button-list.controller.mjs +23 -0
  85. package/es/editor/rate/ibiz-rate/ibiz-rate.d.ts +1 -1
  86. package/es/editor/raw/ibiz-raw/ibiz-raw.d.ts +1 -1
  87. package/es/editor/slider/ibiz-slider/ibiz-slider.d.ts +1 -1
  88. package/es/editor/span/span/span.css +1 -1
  89. package/es/editor/span/span/span.d.ts +1 -1
  90. package/es/editor/span/span/span.mjs +2 -1
  91. package/es/editor/span/span-link/span-link.d.ts +1 -1
  92. package/es/editor/stepper/ibiz-stepper/ibiz-stepper.d.ts +1 -1
  93. package/es/editor/switch/ibiz-switch/ibiz-switch.d.ts +1 -1
  94. package/es/editor/text-box/ibiz-input-ip/ibiz-input-ip.d.ts +1 -1
  95. package/es/editor/text-box/ibiz-input-number/ibiz-input-number.d.ts +1 -1
  96. package/es/editor/text-box/input/input.d.ts +1 -1
  97. package/es/editor/upload/ibiz-file-upload/ibiz-file-upload.d.ts +1 -1
  98. package/es/editor/upload/ibiz-image-preview/ibiz-image-preview.d.ts +1 -1
  99. package/es/editor/upload/ibiz-image-upload/ibiz-image-upload.d.ts +1 -1
  100. package/es/editor/user/ibiz-searchcond-edit/ibiz-searchcond-edit.d.ts +1 -1
  101. package/es/interface/i-pql-item.d.ts +52 -0
  102. package/es/interface/i-pql-item.mjs +1 -0
  103. package/es/interface/i-pql-node.d.ts +37 -0
  104. package/es/interface/i-pql-node.mjs +1 -0
  105. package/es/interface/i-schema-field.d.ts +51 -0
  106. package/es/interface/i-schema-field.mjs +1 -0
  107. package/es/interface/index.d.ts +3 -0
  108. package/es/interface/index.mjs +5 -0
  109. package/es/locale/en/index.d.ts +9 -4
  110. package/es/locale/en/index.mjs +6 -6
  111. package/es/locale/zh-CN/index.d.ts +9 -4
  112. package/es/locale/zh-CN/index.mjs +6 -6
  113. package/es/panel-component/short-cut/index.d.ts +1 -1
  114. package/es/panel-component/short-cut/short-cut.d.ts +1 -1
  115. package/es/util/fullscreen/fullscreen-util.d.ts +8 -2
  116. package/es/util/fullscreen/fullscreen-util.mjs +22 -2
  117. package/es/view-engine/edit-view.engine.mjs +28 -32
  118. package/lib/common/fullscreen-toolbar/fullscreen-toolbar.cjs +10 -0
  119. package/lib/common/fullscreen-toolbar/fullscreen-toolbar.css +1 -1
  120. package/lib/common/index.cjs +2 -0
  121. package/lib/common/pql-editor/components/index.cjs +7 -0
  122. package/lib/common/pql-editor/components/pql-editor-suggestion/pql-editor-suggestion.cjs +51 -0
  123. package/lib/common/pql-editor/components/pql-editor-suggestion/pql-editor-suggestion.css +1 -0
  124. package/lib/common/pql-editor/pql-editor.cjs +608 -0
  125. package/lib/common/pql-editor/pql-editor.css +1 -0
  126. package/lib/common/pql-editor/pql-editor.module.cjs +182 -0
  127. package/lib/common/pql-editor/utils/index.cjs +280 -0
  128. package/lib/control/chart/chart.cjs +59 -35
  129. package/lib/control/chart/chart.css +1 -1
  130. package/lib/control/dashboard/portlet/portlet-layout/portlet-layout.cjs +12 -2
  131. package/lib/control/dashboard/portlet/portlet-layout/portlet-layout.css +1 -1
  132. package/lib/control/dashboard/portlet/report-portlet/report-portlet.cjs +9 -1
  133. package/lib/control/drtab/drtab-control.util.cjs +1 -1
  134. package/lib/control/grid/grid/grid.cjs +2 -2
  135. package/lib/control/grid/grid-column/grid-field-column/grid-field-column.cjs +32 -2
  136. package/lib/control/list/list.cjs +13 -1
  137. package/lib/control/search-bar/filter-tree/filter-tree.cjs +82 -8
  138. package/lib/control/search-bar/filter-tree/filter-tree.css +1 -1
  139. package/lib/control/search-bar/search-bar.cjs +10 -1
  140. package/lib/control/tree-grid/tree-grid.cjs +4 -1
  141. package/lib/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-field-column/tree-grid-ex-field-column.cjs +3 -8
  142. package/lib/editor/check-box-list/checkbox-list-editor.controller.cjs +11 -0
  143. package/lib/editor/check-box-list/ibiz-checkbox-list/ibiz-checkbox-list.cjs +2 -1
  144. package/lib/editor/check-box-list/ibiz-checkbox-list/ibiz-checkbox-list.css +1 -1
  145. package/lib/editor/dropdown-list/ibiz-dropdown/ibiz-dropdown.cjs +1 -1
  146. package/lib/editor/html/wang-editor/wang-editor.cjs +3 -0
  147. package/lib/editor/radio-button-list/ibiz-radio/ibiz-radio.cjs +2 -1
  148. package/lib/editor/radio-button-list/ibiz-radio/ibiz-radio.css +1 -1
  149. package/lib/editor/radio-button-list/radio-button-list.controller.cjs +23 -0
  150. package/lib/editor/span/span/span.cjs +2 -1
  151. package/lib/editor/span/span/span.css +1 -1
  152. package/lib/interface/i-pql-item.cjs +3 -0
  153. package/lib/interface/i-pql-node.cjs +3 -0
  154. package/lib/interface/i-schema-field.cjs +3 -0
  155. package/lib/interface/index.cjs +7 -0
  156. package/lib/locale/en/index.cjs +6 -6
  157. package/lib/locale/zh-CN/index.cjs +6 -6
  158. package/lib/util/fullscreen/fullscreen-util.cjs +22 -2
  159. package/lib/view-engine/edit-view.engine.cjs +28 -32
  160. package/package.json +10 -9
  161. package/dist/chart-JFzIz6Oa.js +0 -1
  162. package/dist/index-Nw4GzACH.js +0 -1
  163. package/dist/index-Va9AxP7w.js +0 -4
  164. package/dist/index-qjfHTzTv.js +0 -1
  165. package/dist/wang-editor-YqnK5uQU.js +0 -1
  166. /package/es/node_modules/.pnpm/{@ibiz-template_core@0.7.28_axios@1.6.8_lodash-es@4.17.21_qs@6.11.2_qx-util@0.4.8_ramda@0.29.1 → @ibiz-template_core@0.7.30_axios@1.6.8_lodash-es@4.17.21_qs@6.11.2_qx-util@0.4.8_ramda@0.29.1}/node_modules/@ibiz-template/core/out/utils/namespace/namespace.mjs +0 -0
  167. /package/lib/node_modules/.pnpm/{@ibiz-template_core@0.7.28_axios@1.6.8_lodash-es@4.17.21_qs@6.11.2_qx-util@0.4.8_ramda@0.29.1 → @ibiz-template_core@0.7.30_axios@1.6.8_lodash-es@4.17.21_qs@6.11.2_qx-util@0.4.8_ramda@0.29.1}/node_modules/@ibiz-template/core/out/utils/namespace/namespace.cjs +0 -0
@@ -0,0 +1,182 @@
1
+ 'use strict';
2
+
3
+ var editor = require('@wangeditor/editor');
4
+ require('../../node_modules/.pnpm/snabbdom@3.5.1/node_modules/snabbdom/build/index.cjs');
5
+ var index = require('./utils/index.cjs');
6
+ var h = require('../../node_modules/.pnpm/snabbdom@3.5.1/node_modules/snabbdom/build/h.cjs');
7
+
8
+ "use strict";
9
+ const pqlType = [
10
+ "pql-field",
11
+ "pql-field-value",
12
+ "pql-field-operator",
13
+ "pql-field-connection"
14
+ ];
15
+ function withPqlPlugin(editor$1) {
16
+ var _a;
17
+ const { isVoid, isInline, deleteBackward, deleteFragment, insertText } = editor$1;
18
+ const newEditor = editor$1;
19
+ const config = newEditor.getConfig();
20
+ const pql = (_a = config.EXTEND_CONF) == null ? void 0 : _a.pql;
21
+ let timer;
22
+ const updateCursor = () => {
23
+ var _a2;
24
+ const { selection } = editor$1;
25
+ if (selection && ((_a2 = selection.focus) == null ? void 0 : _a2.offset) === 0) {
26
+ const node = editor.SlateEditor.node(editor$1, selection)[0];
27
+ if (node) {
28
+ const el = editor$1.toDOMNode(node);
29
+ if (index.isMove(el)) {
30
+ editor$1.move(1);
31
+ }
32
+ }
33
+ }
34
+ };
35
+ newEditor.isVoid = (el) => {
36
+ const type = editor.DomEditor.getNodeType(el);
37
+ if (pqlType.includes(type)) {
38
+ return true;
39
+ }
40
+ return isVoid(el);
41
+ };
42
+ newEditor.isInline = (el) => {
43
+ const type = editor.DomEditor.getNodeType(el);
44
+ if (pqlType.includes(type)) {
45
+ return true;
46
+ }
47
+ return isInline(el);
48
+ };
49
+ newEditor.deleteBackward = (unit) => {
50
+ deleteBackward(unit);
51
+ if (pql && pql.showSuggestion) {
52
+ window.clearTimeout(timer);
53
+ timer = window.setTimeout(() => {
54
+ updateCursor();
55
+ pql.showSuggestion();
56
+ }, 10);
57
+ }
58
+ };
59
+ newEditor.deleteFragment = (direction) => {
60
+ deleteFragment(direction);
61
+ if (pql && pql.showSuggestion) {
62
+ window.clearTimeout(timer);
63
+ timer = window.setTimeout(() => {
64
+ updateCursor();
65
+ pql.showSuggestion();
66
+ }, 10);
67
+ }
68
+ };
69
+ newEditor.insertText = (text) => {
70
+ insertText(text);
71
+ if (pql && pql.showSuggestion) {
72
+ window.clearTimeout(timer);
73
+ timer = window.setTimeout(() => {
74
+ pql.showSuggestion();
75
+ }, 10);
76
+ }
77
+ };
78
+ return newEditor;
79
+ }
80
+ function renderPqlElement(el) {
81
+ const { type, label = "" } = el;
82
+ if (type === "pql-field-operator" || type === "pql-field-connection") {
83
+ return h.h(
84
+ "span",
85
+ {
86
+ props: {
87
+ contentEditable: false
88
+ },
89
+ style: {
90
+ display: "inline-block",
91
+ lineHeight: "22px"
92
+ }
93
+ },
94
+ [label]
95
+ );
96
+ }
97
+ if (type === "pql-field-value") {
98
+ return h.h(
99
+ "span",
100
+ {
101
+ props: {
102
+ contentEditable: false
103
+ },
104
+ style: {
105
+ display: "inline-block",
106
+ lineHeight: "22px",
107
+ color: "#5dcfff"
108
+ }
109
+ },
110
+ [label]
111
+ );
112
+ }
113
+ const vNode = h.h(
114
+ "span",
115
+ {
116
+ props: {
117
+ contentEditable: false
118
+ },
119
+ style: {
120
+ color: "#6698ff",
121
+ backgroundColor: "#edf2fd",
122
+ display: "inline-block",
123
+ padding: "0 5px",
124
+ borderRadius: "3px",
125
+ lineHeight: "22px"
126
+ }
127
+ },
128
+ [label]
129
+ );
130
+ return vNode;
131
+ }
132
+ function pqlToHtml(el) {
133
+ const type = el.type || "";
134
+ if (!type) {
135
+ return el.text || "";
136
+ }
137
+ const html = '<span\n data-pql="true"\n data-w-e-type="'.concat(type, '"\n data-w-e-is-void\n data-w-e-is-inline\n data-label="').concat(el.label || "", '"\n data-value="').concat(el.value || "", '"\n ></span>');
138
+ return html;
139
+ }
140
+ function parsePqlHtml(domElem) {
141
+ const type = domElem.getAttribute("data-w-e-type") || "";
142
+ const label = domElem.getAttribute("data-label") || "";
143
+ const value = domElem.getAttribute("data-value") || "";
144
+ if (type) {
145
+ return {
146
+ type,
147
+ label,
148
+ value,
149
+ children: [{ text: "" }]
150
+ };
151
+ }
152
+ return {
153
+ children: [{ text: "" }]
154
+ };
155
+ }
156
+ const PqlModule = {
157
+ editorPlugin: withPqlPlugin,
158
+ renderElems: pqlType.map((type) => {
159
+ return {
160
+ type,
161
+ renderElem: renderPqlElement
162
+ };
163
+ }),
164
+ elemsToHtml: pqlType.map((type) => {
165
+ return {
166
+ type,
167
+ elemToHtml: pqlToHtml
168
+ };
169
+ }),
170
+ parseElemsHtml: [
171
+ {
172
+ selector: 'span[data-pql="true"]',
173
+ parseElemHtml: parsePqlHtml
174
+ }
175
+ ]
176
+ };
177
+
178
+ exports.PqlModule = PqlModule;
179
+ exports.parsePqlHtml = parsePqlHtml;
180
+ exports.pqlToHtml = pqlToHtml;
181
+ exports.renderPqlElement = renderPqlElement;
182
+ exports.withPqlPlugin = withPqlPlugin;
@@ -0,0 +1,280 @@
1
+ 'use strict';
2
+
3
+ var core = require('@ibiz-template/core');
4
+ var runtime = require('@ibiz-template/runtime');
5
+
6
+ "use strict";
7
+ const FilterModes = [
8
+ { valueOP: runtime.ValueOP.EQ, label: "\u7B49\u4E8E", sqlOP: "=" },
9
+ { valueOP: runtime.ValueOP.NOT_EQ, label: "\u4E0D\u7B49\u4E8E", sqlOP: "<>" },
10
+ { valueOP: runtime.ValueOP.GT, label: "\u5927\u4E8E", sqlOP: ">" },
11
+ { valueOP: runtime.ValueOP.GT_AND_EQ, label: "\u5927\u4E8E\u7B49\u4E8E", sqlOP: ">=" },
12
+ { valueOP: runtime.ValueOP.LT, label: "\u5C0F\u4E8E", sqlOP: "<" },
13
+ { valueOP: runtime.ValueOP.LT_AND_EQ, label: "\u5C0F\u4E8E\u7B49\u4E8E", sqlOP: "<=" },
14
+ { valueOP: runtime.ValueOP.IS_NULL, label: "\u4E3A\u7A7A", sqlOP: "Nil" },
15
+ { valueOP: runtime.ValueOP.IS_NOT_NULL, label: "\u975E\u7A7A", sqlOP: "NotNil" },
16
+ { valueOP: runtime.ValueOP.IN, label: "\u5C5E\u4E8E", sqlOP: "In" },
17
+ { valueOP: runtime.ValueOP.NOT_IN, label: "\u4E0D\u5C5E\u4E8E", sqlOP: "NotIn" },
18
+ { valueOP: runtime.ValueOP.LIKE, label: "\u6587\u672C\u5305\u542B", sqlOP: "%" },
19
+ { valueOP: runtime.ValueOP.LIFT_LIKE, label: "\u6587\u672C\u5DE6\u5305\u542B", sqlOP: "%#" },
20
+ { valueOP: runtime.ValueOP.RIGHT_LIKE, label: "\u6587\u672C\u53F3\u5305\u542B", sqlOP: "#%" },
21
+ { valueOP: runtime.ValueOP.EXISTS, label: "\u5B58\u5728", sqlOP: "EXISTS" },
22
+ { valueOP: runtime.ValueOP.NOT_EXISTS, label: "\u4E0D\u5B58\u5728", sqlOP: "NOTEXISTS" }
23
+ ];
24
+ const ExcludeOPs = [
25
+ runtime.ValueOP.IS_NULL,
26
+ runtime.ValueOP.IS_NOT_NULL,
27
+ runtime.ValueOP.EXISTS,
28
+ runtime.ValueOP.NOT_EXISTS
29
+ ];
30
+ const filterModeMap = /* @__PURE__ */ new Map();
31
+ FilterModes.forEach((mode) => {
32
+ filterModeMap.set(mode.valueOP, mode);
33
+ });
34
+ const symbolMap = /* @__PURE__ */ new Map();
35
+ FilterModes.forEach((mode) => {
36
+ symbolMap.set(mode.sqlOP, mode.valueOP);
37
+ });
38
+ const generateItems = (children) => {
39
+ if (!children.length) {
40
+ return [];
41
+ }
42
+ const items = [];
43
+ for (let i = 0; i < children.length; i++) {
44
+ if (i !== 0) {
45
+ const connection = children[i];
46
+ if (connection && connection.type === "pql-field-connection") {
47
+ if (i === children.length - 1) {
48
+ throw new core.RuntimeError("pql\u8282\u70B9\u89E3\u6790\u9519\u8BEF");
49
+ }
50
+ items.push({
51
+ type: "connection",
52
+ value: {
53
+ label: connection.label,
54
+ value: connection.value
55
+ }
56
+ });
57
+ } else {
58
+ throw new core.RuntimeError("pql\u8282\u70B9\u89E3\u6790\u9519\u8BEF");
59
+ }
60
+ }
61
+ const key = children[i !== 0 ? ++i : i];
62
+ const operator = children[++i];
63
+ if (key && operator && key.type === "pql-field" && operator.type === "pql-field-operator") {
64
+ if (operator.value && ExcludeOPs.includes(operator.value)) {
65
+ items.push({
66
+ type: "condition",
67
+ key: {
68
+ label: key.label,
69
+ value: key.value
70
+ },
71
+ operator: {
72
+ label: operator.label,
73
+ value: operator.value
74
+ }
75
+ });
76
+ continue;
77
+ } else {
78
+ const value = children[++i];
79
+ if (value && (value.type === "pql-field-value" || value.text)) {
80
+ items.push({
81
+ type: "condition",
82
+ key: {
83
+ label: key.label,
84
+ value: key.value
85
+ },
86
+ operator: {
87
+ label: operator.label,
88
+ value: operator.value
89
+ },
90
+ value: {
91
+ label: value.type === "pql-field-value" ? value.label : value.text,
92
+ value: value.type === "pql-field-value" ? value.value : value.text
93
+ }
94
+ });
95
+ continue;
96
+ }
97
+ }
98
+ }
99
+ throw new core.RuntimeError("pql\u8282\u70B9\u89E3\u6790\u9519\u8BEF");
100
+ }
101
+ return items;
102
+ };
103
+ const generateCustomCond = (items, fields) => {
104
+ const map = /* @__PURE__ */ new Map();
105
+ fields.forEach((item) => {
106
+ map.set(item.appDEFieldId, item);
107
+ });
108
+ let cond = "";
109
+ items.forEach((item) => {
110
+ var _a, _b, _c;
111
+ if (item.type === "condition") {
112
+ const { key, operator, value } = item;
113
+ const symbol = (_a = filterModeMap.get(operator == null ? void 0 : operator.value)) == null ? void 0 : _a.sqlOP;
114
+ cond += "$".concat(JSON.stringify({
115
+ name: (key == null ? void 0 : key.value) || "",
116
+ caption: (key == null ? void 0 : key.label) || ""
117
+ }), " ").concat(symbol, " $").concat(JSON.stringify({
118
+ value: (value == null ? void 0 : value.value) || "",
119
+ caption: (value == null ? void 0 : value.label) || "",
120
+ field: "".concat(((_b = map.get((key == null ? void 0 : key.value) || "")) == null ? void 0 : _b.appDataEntityFullTag) || "", ".").concat((key == null ? void 0 : key.value) || "")
121
+ }));
122
+ }
123
+ if (item.type === "connection") {
124
+ cond += " ".concat((_c = item.value) == null ? void 0 : _c.value, " ");
125
+ }
126
+ });
127
+ return cond;
128
+ };
129
+ const parseCustomCond = (cond) => {
130
+ var _a;
131
+ try {
132
+ const items = cond.split(" ");
133
+ const pqlItems = [];
134
+ for (let i = 0; i < items.length; i++) {
135
+ if (i !== 0) {
136
+ const connection = items[i];
137
+ if (connection === "and" || connection === "or") {
138
+ if (i === items.length - 1) {
139
+ throw new core.RuntimeError("pql\u81EA\u5B9A\u4E49\u6761\u4EF6\u89E3\u6790\u9519\u8BEF");
140
+ }
141
+ pqlItems.push({
142
+ type: "connection",
143
+ value: {
144
+ label: connection,
145
+ value: connection
146
+ }
147
+ });
148
+ } else {
149
+ throw new core.RuntimeError("pql\u81EA\u5B9A\u4E49\u6761\u4EF6\u89E3\u6790\u9519\u8BEF");
150
+ }
151
+ }
152
+ const key = items[i !== 0 ? ++i : i];
153
+ const operator = items[++i];
154
+ const value = items[++i];
155
+ if (key && /^\$/.test(key) && operator && value && /^\$/.test(value)) {
156
+ const keyObj = JSON.parse(key.slice(1));
157
+ const valueObj = JSON.parse(value.slice(1));
158
+ pqlItems.push({
159
+ type: "condition",
160
+ key: {
161
+ label: keyObj.caption,
162
+ value: keyObj.name
163
+ },
164
+ operator: {
165
+ label: ((_a = filterModeMap.get(symbolMap.get(operator))) == null ? void 0 : _a.label) || "",
166
+ value: symbolMap.get(operator)
167
+ },
168
+ value: {
169
+ label: valueObj.caption,
170
+ value: valueObj.value
171
+ }
172
+ });
173
+ continue;
174
+ }
175
+ throw new core.RuntimeError("pql\u81EA\u5B9A\u4E49\u6761\u4EF6\u89E3\u6790\u9519\u8BEF");
176
+ }
177
+ return pqlItems;
178
+ } catch (err) {
179
+ ibiz.log.error(err == null ? void 0 : err.message);
180
+ }
181
+ };
182
+ const pqlItemsToPqlNodes = async (items, fields, getCodeListItems) => {
183
+ const nodes = [];
184
+ const codeListMap = /* @__PURE__ */ new Map();
185
+ const fieldList = fields.filter(
186
+ (child) => items.some((item) => {
187
+ var _a;
188
+ return ((_a = item.key) == null ? void 0 : _a.value) === child.appDEFieldId;
189
+ })
190
+ );
191
+ await Promise.all(
192
+ fieldList.map(async (item) => {
193
+ if (item.appCodeListId) {
194
+ const codeItems = await getCodeListItems(item.appCodeListId);
195
+ if (codeItems) {
196
+ codeListMap.set(item.appDEFieldId, codeItems);
197
+ }
198
+ }
199
+ })
200
+ );
201
+ items.forEach((item) => {
202
+ var _a, _b;
203
+ if (item.type === "condition") {
204
+ const { key, operator, value } = item;
205
+ nodes.push({
206
+ type: "pql-field",
207
+ label: key == null ? void 0 : key.label,
208
+ value: key == null ? void 0 : key.value
209
+ });
210
+ nodes.push({
211
+ type: "pql-field-operator",
212
+ label: operator == null ? void 0 : operator.label,
213
+ value: operator == null ? void 0 : operator.value
214
+ });
215
+ const field = fields.find((child) => child.appDEFieldId === (key == null ? void 0 : key.value));
216
+ if (field && field.appCodeListId) {
217
+ const codeItems = codeListMap.get(field.appDEFieldId);
218
+ const codeItem = codeItems == null ? void 0 : codeItems.find((child) => child.value === (value == null ? void 0 : value.value));
219
+ if (codeItem) {
220
+ nodes.push({
221
+ type: "pql-field-value",
222
+ label: value == null ? void 0 : value.label,
223
+ value: value == null ? void 0 : value.value
224
+ });
225
+ } else {
226
+ nodes.push({
227
+ text: value == null ? void 0 : value.value
228
+ });
229
+ }
230
+ } else {
231
+ nodes.push({
232
+ text: value == null ? void 0 : value.value
233
+ });
234
+ }
235
+ }
236
+ if (item.type === "connection") {
237
+ nodes.push({
238
+ type: "pql-field-connection",
239
+ label: (_a = item.value) == null ? void 0 : _a.label,
240
+ value: (_b = item.value) == null ? void 0 : _b.value
241
+ });
242
+ }
243
+ });
244
+ return nodes;
245
+ };
246
+ const pqlNodeToHtml = (node) => {
247
+ const type = node.type || "";
248
+ if (!type) {
249
+ return node.text || "";
250
+ }
251
+ const html = '<span\n data-pql="true"\n data-w-e-type="'.concat(type, '"\n data-w-e-is-void\n data-w-e-is-inline\n data-label="').concat(node.label || "", '"\n data-value="').concat(node.value || "", '"\n ></span>');
252
+ return html;
253
+ };
254
+ const pqlNodesToHtml = (nodes) => {
255
+ let html = "<p>";
256
+ nodes.forEach((node) => {
257
+ html += pqlNodeToHtml(node);
258
+ });
259
+ html += "</p>";
260
+ return html;
261
+ };
262
+ function isMove(el) {
263
+ if (!el) {
264
+ return false;
265
+ }
266
+ if (el.getAttribute("data-slate-node") === "element" && el.getAttribute("data-slate-inline") && el.getAttribute("data-slate-void")) {
267
+ return true;
268
+ }
269
+ return isMove(el.parentElement);
270
+ }
271
+
272
+ exports.ExcludeOPs = ExcludeOPs;
273
+ exports.FilterModes = FilterModes;
274
+ exports.generateCustomCond = generateCustomCond;
275
+ exports.generateItems = generateItems;
276
+ exports.isMove = isMove;
277
+ exports.parseCustomCond = parseCustomCond;
278
+ exports.pqlItemsToPqlNodes = pqlItemsToPqlNodes;
279
+ exports.pqlNodeToHtml = pqlNodeToHtml;
280
+ exports.pqlNodesToHtml = pqlNodesToHtml;
@@ -48,7 +48,7 @@ const ChartControl = /* @__PURE__ */ vue.defineComponent({
48
48
  required: false
49
49
  }
50
50
  },
51
- emits: ["drillDown"],
51
+ emits: ["drillDetail"],
52
52
  setup(props, {
53
53
  emit
54
54
  }) {
@@ -58,9 +58,8 @@ const ChartControl = /* @__PURE__ */ vue.defineComponent({
58
58
  const maxHeight = vue.ref(0);
59
59
  const uuid = qxUtil.createUUID();
60
60
  const showCheck = vue.ref(false);
61
- const drillDownPos = vue.ref({});
62
- const drillDownRef = vue.ref();
63
- let func;
61
+ const drillDetailPos = vue.ref({});
62
+ const drillDetailRef = vue.ref();
64
63
  let tempParams;
65
64
  const initSimpleData = () => {
66
65
  if (!props.data) {
@@ -97,19 +96,35 @@ const ChartControl = /* @__PURE__ */ vue.defineComponent({
97
96
  const getGridData = () => {
98
97
  return c.state.gridData || [];
99
98
  };
100
- const computedDrillDownPos = (params) => {
99
+ const computedDrillDetailPos = (params) => {
101
100
  if (params.event) {
102
101
  const event = params.event.event;
103
- event.stopPropagation();
104
- event.preventDefault();
105
102
  const {
106
103
  offsetX,
107
104
  offsetY
108
105
  } = params.event;
109
- drillDownPos.value = {
110
- top: "".concat(offsetY, "px"),
111
- left: "".concat(offsetX + 16, "px")
112
- };
106
+ const {
107
+ clientWidth
108
+ } = event.target;
109
+ if (offsetX + 160 > clientWidth) {
110
+ drillDetailPos.value = {
111
+ top: "".concat(offsetY - 20, "px"),
112
+ left: "".concat(offsetX - 160, "px")
113
+ };
114
+ } else {
115
+ drillDetailPos.value = {
116
+ top: "".concat(offsetY, "px"),
117
+ left: "".concat(offsetX + 16, "px")
118
+ };
119
+ }
120
+ }
121
+ };
122
+ const setDrillState = () => {
123
+ showCheck.value = false;
124
+ };
125
+ const setTipState = () => {
126
+ if (!showCheck.value) {
127
+ c.changeTooltipState(true);
113
128
  }
114
129
  };
115
130
  let resizeObserver;
@@ -118,6 +133,8 @@ const ChartControl = /* @__PURE__ */ vue.defineComponent({
118
133
  const chart = echarts.init(chartRef.value);
119
134
  c.initChart(chart);
120
135
  window.addEventListener("resize", setHeight);
136
+ window.addEventListener("pointerdown", setDrillState);
137
+ window.addEventListener("click", setTipState);
121
138
  if (chartRef.value && ResizeObserver) {
122
139
  resizeObserver = new ResizeObserver(() => {
123
140
  c.resizeChart();
@@ -125,31 +142,36 @@ const ChartControl = /* @__PURE__ */ vue.defineComponent({
125
142
  resizeObserver.observe(chartRef.value);
126
143
  }
127
144
  setHeight();
128
- if ((_b = (_a = props.modelData.controlParam) == null ? void 0 : _a.ctrlParams) == null ? void 0 : _b.ENABLEDRILLDOWN) {
145
+ const drillDetails = (_b = (_a = props.modelData.controlParam) == null ? void 0 : _a.ctrlParams) == null ? void 0 : _b.ENABLEDRILLDETAIL;
146
+ if (drillDetails == null ? void 0 : drillDetails.length) {
129
147
  chart.on("click", (params) => {
148
+ const serieModel = c.computedClickSerieModel(params);
149
+ if (!serieModel) {
150
+ return;
151
+ }
152
+ const tempDrill = drillDetails.find((item) => {
153
+ return item.name === serieModel.valueField;
154
+ });
155
+ if (!tempDrill || !tempDrill.isDrill) {
156
+ return;
157
+ }
130
158
  tempParams = params;
159
+ computedDrillDetailPos(params);
131
160
  chart.dispatchAction({
132
161
  type: "hideTip"
133
162
  });
134
- showCheck.value = true;
135
163
  c.changeTooltipState(false);
136
- func = vue3Util.useClickOutside(drillDownRef, () => {
137
- showCheck.value = false;
138
- c.changeTooltipState(true);
139
- func.stop();
140
- });
141
- computedDrillDownPos(params);
164
+ showCheck.value = true;
142
165
  });
143
166
  }
144
167
  });
145
- const openDrillDown = (_event) => {
168
+ const openDrillDetail = (_event) => {
169
+ _event.stopPropagation();
170
+ _event.preventDefault();
146
171
  showCheck.value = false;
147
- if (func) {
148
- func.stop();
149
- }
150
172
  c.changeTooltipState(true);
151
- const param = c.computedDrillDownParam(tempParams);
152
- emit("drillDown", param);
173
+ const param = c.computedDrillDetailParam(tempParams);
174
+ emit("drillDetail", param);
153
175
  };
154
176
  vue.watch(() => c.state.showGrid, () => {
155
177
  setHeight();
@@ -179,6 +201,8 @@ const ChartControl = /* @__PURE__ */ vue.defineComponent({
179
201
  };
180
202
  vue.onBeforeUnmount(() => {
181
203
  window.removeEventListener("resize", setHeight);
204
+ window.removeEventListener("pointerdown", setDrillState);
205
+ window.removeEventListener("click", setTipState);
182
206
  resizeObserver == null ? void 0 : resizeObserver.disconnect();
183
207
  });
184
208
  return {
@@ -187,9 +211,9 @@ const ChartControl = /* @__PURE__ */ vue.defineComponent({
187
211
  chartRef,
188
212
  uuid,
189
213
  showCheck,
190
- drillDownPos,
191
- drillDownRef,
192
- openDrillDown,
214
+ drillDetailPos,
215
+ drillDetailRef,
216
+ openDrillDetail,
193
217
  renderGrid
194
218
  };
195
219
  },
@@ -213,12 +237,12 @@ const ChartControl = /* @__PURE__ */ vue.defineComponent({
213
237
  "ref": "chartRef",
214
238
  "class": [this.ns.e("chart")]
215
239
  }, [ibiz.i18n.t("control.chart.chartPlaceholder")]), this.showCheck ? vue.createVNode("div", {
216
- "ref": "drillDownRef",
217
- "class": this.ns.e("drill-down"),
218
- "style": this.drillDownPos,
219
- "onClick": this.openDrillDown
240
+ "ref": "drillDetailRef",
241
+ "class": this.ns.e("drill-detail"),
242
+ "style": this.drillDetailPos,
243
+ "onPointerdown": this.openDrillDetail
220
244
  }, [vue.createVNode("div", {
221
- "class": this.ns.em("drill-down", "item")
245
+ "class": this.ns.em("drill-detail", "item")
222
246
  }, [vue.createVNode("svg", {
223
247
  "viewBox": "0 0 16 16",
224
248
  "xmlns": "http://www.w3.org/2000/svg",
@@ -234,8 +258,8 @@ const ChartControl = /* @__PURE__ */ vue.defineComponent({
234
258
  "d": "M11.626 0c1.057 0 1.923.818 2 1.855l.005.15v3.411a.6.6 0 0 1-1.192.097l-.008-.097.001-1.348V2.005c0-.41-.31-.749-.705-.799l-.101-.006h-9.62c-.41 0-.75.308-.8.704l-.006.101v11.989c0 .41.308.75.705.8l.101.006h5.906l.017-.004.016-.003h2.074a.598.598 0 1 1 .107 1.187l-.095.01V16H2.006a2.006 2.006 0 0 1-2-1.856L0 13.994V2.005C0 .948.818.082 1.856.005L2.006 0h9.62zm-1.595 6.328a3.669 3.669 0 0 1 3.665 3.665c0 .79-.251 1.523-.678 2.123l2.412 2.412a.6.6 0 1 1-.848.85l-2.41-2.412a3.646 3.646 0 0 1-2.14.692 3.67 3.67 0 0 1-3.667-3.665 3.67 3.67 0 0 1 3.666-3.665zm-5.106 5.29a.6.6 0 0 1 .097 1.191l-.097.008H2.85a.6.6 0 0 1-.097-1.192l.097-.008h2.074zm5.106-4.09a2.468 2.468 0 0 0-2.466 2.465 2.468 2.468 0 0 0 2.466 2.466 2.47 2.47 0 0 0 2.466-2.466 2.469 2.469 0 0 0-2.466-2.465zm-4.815-.126a.6.6 0 0 1 .097 1.193l-.097.007h-2.35A.6.6 0 0 1 2.77 7.41l.098-.008h2.349zm5.58-4a.6.6 0 0 1 .097 1.192l-.097.008H2.867A.6.6 0 0 1 2.77 3.41l.097-.008h7.929z",
235
259
  "id": "asp\u5408\u5E76\u5F62\u72B6"
236
260
  }, null)])]), vue.createVNode("div", {
237
- "class": this.ns.em("drill-down", "item-text")
238
- }, [ibiz.i18n.t("control.chart.drillDown")])])]) : null]), this.c.state.showGrid ? vue.createVNode("div", {
261
+ "class": this.ns.em("drill-detail", "item-text")
262
+ }, [ibiz.i18n.t("control.chart.drillDetail")])])]) : null]), this.c.state.showGrid ? vue.createVNode("div", {
239
263
  "class": this.ns.e("grid")
240
264
  }, [this.renderGrid()]) : null])])]
241
265
  });
@@ -1 +1 @@
1
- .ibiz-control-chart{width:100%;height:100%}.ibiz-control-chart__chart-grid{width:100%;height:100%}.ibiz-control-chart__chart-grid.is-show-grid{display:flex;height:calc(100% - 16px)}.ibiz-control-chart__chart-grid--bottom{flex-direction:column}.ibiz-control-chart__chart-grid--top{flex-direction:column-reverse}.ibiz-control-chart__chart-grid--left{flex-direction:row-reverse}.ibiz-control-chart__chart-grid--right{flex-direction:row}.ibiz-control-chart__chart-grid.is-no-data{display:none}.ibiz-control-chart__chart-grid-container{position:relative;flex:1;height:50%}.ibiz-control-chart__chart-grid-container.is-bottom{width:100%;height:50%;min-height:50%}.ibiz-control-chart__chart-grid-container.is-top{width:100%;height:50%;min-height:50%}.ibiz-control-chart__chart-grid-container.is-left{width:50%;min-width:50%;height:100%}.ibiz-control-chart__chart-grid-container.is-right{width:50%;min-width:50%;height:100%}.ibiz-control-chart__chart-grid-container.is-no-grid{flex:unset;width:100%;height:100%}.ibiz-control-chart__chart{width:100%;height:100%}.ibiz-control-chart__drill-down{position:absolute;top:0;left:0;width:150px;padding:var(--ibiz-spacing-tight) 0;background:var(--ibiz-color-bg-1);border:1px solid var(--ibiz-color-border);border-radius:var(--ibiz-border-radius-small);box-shadow:var(--ibiz-color-elevated)}.ibiz-control-chart__drill-down--item{display:flex;gap:var(--ibiz-spacing-tight);align-items:center;height:40px;padding:var(--ibiz-spacing-tight) var(--ibiz-spacing-base-loose);font-size:var(--ibiz-font-size-regular);cursor:pointer}.ibiz-control-chart__drill-down--item:hover{background-color:var(--ibiz-color-fill-1)}.ibiz-control-chart__drill-down--item-text{margin-bottom:var(--ibiz-spacing-super-tight)}.ibiz-control-chart__grid{flex:1;height:auto}.ibiz-control-chart__grid .cell{text-overflow:ellipsis;white-space:nowrap}.ibiz-control-chart__grid .el-table__body-wrapper{border-bottom:1px solid var(--ibiz-color-border)}.ibiz-control-chart__empty{display:none;height:100%}.ibiz-control-chart__empty.is-no-data{display:flex}.ibiz-control-chart-chart-container{width:100%;height:100%}
1
+ .ibiz-control-chart{width:100%;height:100%}.ibiz-control-chart__chart-grid{width:100%;height:100%}.ibiz-control-chart__chart-grid.is-show-grid{display:flex;height:calc(100% - 16px)}.ibiz-control-chart__chart-grid--bottom{flex-direction:column}.ibiz-control-chart__chart-grid--top{flex-direction:column-reverse}.ibiz-control-chart__chart-grid--left{flex-direction:row-reverse}.ibiz-control-chart__chart-grid--right{flex-direction:row}.ibiz-control-chart__chart-grid.is-no-data{display:none}.ibiz-control-chart__chart-grid-container{position:relative;flex:1;height:50%}.ibiz-control-chart__chart-grid-container.is-bottom{width:100%;height:50%;min-height:50%}.ibiz-control-chart__chart-grid-container.is-top{width:100%;height:50%;min-height:50%}.ibiz-control-chart__chart-grid-container.is-left{width:50%;min-width:50%;height:100%}.ibiz-control-chart__chart-grid-container.is-right{width:50%;min-width:50%;height:100%}.ibiz-control-chart__chart-grid-container.is-no-grid{flex:unset;width:100%;height:100%}.ibiz-control-chart__chart{width:100%;height:100%}.ibiz-control-chart__drill-detail{position:absolute;top:0;left:0;width:150px;padding:var(--ibiz-spacing-tight) 0;background:var(--ibiz-color-bg-1);border:1px solid var(--ibiz-color-border);border-radius:var(--ibiz-border-radius-small);box-shadow:var(--ibiz-color-elevated)}.ibiz-control-chart__drill-detail--item{display:flex;gap:var(--ibiz-spacing-tight);align-items:center;height:40px;padding:var(--ibiz-spacing-tight) var(--ibiz-spacing-base-loose);font-size:var(--ibiz-font-size-regular);cursor:pointer}.ibiz-control-chart__drill-detail--item:hover{background-color:var(--ibiz-color-fill-1)}.ibiz-control-chart__drill-detail--item-text{margin-bottom:var(--ibiz-spacing-super-tight)}.ibiz-control-chart__grid{flex:1;height:auto}.ibiz-control-chart__grid .cell{text-overflow:ellipsis;white-space:nowrap}.ibiz-control-chart__grid .el-table__body-wrapper{border-bottom:1px solid var(--ibiz-color-border)}.ibiz-control-chart__empty{display:none;height:100%}.ibiz-control-chart__empty.is-no-data{display:flex}.ibiz-control-chart-chart-container{width:100%;height:100%}
@@ -13,6 +13,9 @@ const PortletLayout = /* @__PURE__ */ vue.defineComponent({
13
13
  controller: {
14
14
  type: runtime.PortletPartController,
15
15
  required: true
16
+ },
17
+ linkAction: {
18
+ type: Object
16
19
  }
17
20
  },
18
21
  setup(props) {
@@ -34,13 +37,19 @@ const PortletLayout = /* @__PURE__ */ vue.defineComponent({
34
37
  const onActionClick = async (detail, event) => {
35
38
  await props.controller.onActionClick(detail, event);
36
39
  };
40
+ const openLink = (event) => {
41
+ if (props.linkAction) {
42
+ props.controller.onActionClick(props.linkAction, event);
43
+ }
44
+ };
37
45
  return {
38
46
  c,
39
47
  ns,
40
48
  popperClass,
41
49
  portletType,
42
50
  isShowHeader,
43
- onActionClick
51
+ onActionClick,
52
+ openLink
44
53
  };
45
54
  },
46
55
  render() {
@@ -57,7 +66,8 @@ const PortletLayout = /* @__PURE__ */ vue.defineComponent({
57
66
  }, [vue.createVNode("div", {
58
67
  "class": this.ns.be("header", "left")
59
68
  }, [model.showTitleBar && vue.createVNode("div", {
60
- "class": this.ns.e("caption")
69
+ "class": [this.ns.e("caption"), this.ns.is("link", !!this.linkAction)],
70
+ "onClick": this.openLink
61
71
  }, [vue.createVNode(vue.resolveComponent("iBizIcon"), {
62
72
  "class": this.ns.e("caption-icon"),
63
73
  "icon": model.sysImage