@ibiz-template/vue3-components 0.7.41-alpha.20 → 0.7.41-alpha.22

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 (141) hide show
  1. package/dist/ibiz-markdown-editor-Bd4vTqbM.js +1 -0
  2. package/dist/{index-K6B-Odyq.js → index-mjpFeLkH.js} +1 -1
  3. package/dist/{index-Bt6TkADL.js → index-pz3nYBld.js} +1 -1
  4. package/dist/index-zV2qOpaC.js +11 -0
  5. package/dist/index.min.css +1 -1
  6. package/dist/index.system.min.js +1 -1
  7. package/dist/wang-editor-Xio5lpNl.js +1 -0
  8. package/dist/{xlsx-util-mN5WSU7v.js → xlsx-util-8tqSNsIL.js} +1 -1
  9. package/es/common/action-toolbar/action-toolbar.css +1 -1
  10. package/es/common/action-toolbar/action-toolbar.d.ts +1 -1
  11. package/es/common/action-toolbar/action-toolbar.mjs +49 -7
  12. package/es/common/index.mjs +2 -1
  13. package/es/control/dashboard/dashboard.d.ts +2 -2
  14. package/es/control/dashboard/dashboard.mjs +3 -2
  15. package/es/control/dashboard/portlet/actionbar-portlet/actionbar-portlet.d.ts +1 -0
  16. package/es/control/dashboard/portlet/actionbar-portlet/actionbar-portlet.mjs +3 -0
  17. package/es/control/dashboard/portlet/actionbar-portlet/index.d.ts +1 -0
  18. package/es/control/dashboard/portlet/portlet-layout/portlet-layout.d.ts +4 -3
  19. package/es/control/dashboard/portlet/portlet-layout/portlet-layout.mjs +6 -3
  20. package/es/control/data-view/data-view.css +1 -1
  21. package/es/control/data-view/data-view.mjs +4 -1
  22. package/es/control/form/edit-form/edit-form.mjs +10 -1
  23. package/es/control/form/form/form.d.ts +1 -1
  24. package/es/control/form/form/form.mjs +2 -1
  25. package/es/control/form/form-detail/form-group-panel/form-group-panel.d.ts +1 -0
  26. package/es/control/form/form-detail/form-group-panel/form-group-panel.mjs +3 -0
  27. package/es/control/form/form-detail/form-group-panel/index.d.ts +1 -0
  28. package/es/control/form/form-detail/form-mdctrl/form-mdctrl-form/form-mdctrl-form.mjs +3 -1
  29. package/es/control/form/form-detail/form-mdctrl/form-mdctrl.d.ts +2 -1
  30. package/es/control/form/form-detail/form-mdctrl/form-mdctrl.mjs +4 -1
  31. package/es/control/form/form-detail/form-mdctrl/index.d.ts +2 -1
  32. package/es/control/form/form-detail/form-mdctrl/mdctrl-container/mdctrl-container.mjs +2 -2
  33. package/es/control/grid/grid/grid.mjs +3 -7
  34. package/es/control/grid/grid-column/grid-field-column/attachment-column/attachment-column.mjs +4 -3
  35. package/es/control/grid/grid-column/grid-field-column/attachment-column/file-util.d.ts +4 -0
  36. package/es/control/grid/grid-column/grid-field-column/attachment-column/file-util.mjs +30 -3
  37. package/es/control/grid/grid-column/grid-field-column/grid-field-column.mjs +1 -1
  38. package/es/control/kanban/kanban.css +1 -1
  39. package/es/control/kanban/kanban.mjs +11 -6
  40. package/es/control/kanban/swimlane-kanban/swimlane-kanban.css +1 -1
  41. package/es/control/kanban/swimlane-kanban/swimlane-kanban.mjs +3 -0
  42. package/es/control/list/list.d.ts +1 -1
  43. package/es/control/list/list.mjs +4 -1
  44. package/es/control/search-bar/index.d.ts +1 -0
  45. package/es/control/search-bar/search-bar.css +1 -1
  46. package/es/control/search-bar/search-bar.d.ts +3 -2
  47. package/es/control/search-bar/search-bar.mjs +26 -3
  48. package/es/control/search-bar/search-groups/search-groups.css +1 -1
  49. package/es/control/search-bar/search-groups/search-groups.d.ts +11 -1
  50. package/es/control/search-bar/search-groups/search-groups.mjs +14 -1
  51. package/es/control/toolbar/index.d.ts +3 -3
  52. package/es/control/toolbar/toolbar.d.ts +5 -5
  53. package/es/control/toolbar/toolbar.mjs +1 -1
  54. package/es/control/tree-grid/tree-grid.mjs +2 -1
  55. package/es/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-field-column/index.d.ts +5 -4
  56. package/es/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-field-column/tree-grid-ex-field-column.d.ts +5 -4
  57. package/es/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-field-column/tree-grid-ex-field-column.mjs +8 -5
  58. package/es/control/tree-grid-ex/tree-grid-ex.d.ts +1 -1
  59. package/es/control/tree-grid-ex/tree-grid-ex.mjs +3 -2
  60. package/es/editor/carousel/ibiz-carousel/ibiz-carousel.mjs +2 -2
  61. package/es/editor/code/monaco-editor/monaco-editor.mjs +7 -3
  62. package/es/editor/data-picker/ibiz-mpicker/ibiz-mpicker.d.ts +1 -1
  63. package/es/editor/data-picker/ibiz-mpicker/ibiz-mpicker.mjs +4 -1
  64. package/es/editor/html/wang-editor/wang-editor.d.ts +2 -0
  65. package/es/editor/html/wang-editor/wang-editor.mjs +10 -6
  66. package/es/editor/index.mjs +6 -0
  67. package/es/editor/markdown/ibiz-markdown-editor/ibiz-markdown-editor.d.ts +2 -0
  68. package/es/editor/markdown/ibiz-markdown-editor/ibiz-markdown-editor.mjs +2 -2
  69. package/es/editor/text-box/index.d.ts +1 -0
  70. package/es/editor/text-box/index.mjs +1 -0
  71. package/es/editor/text-box/input/input.mjs +7 -3
  72. package/es/editor/text-box/signature/signature.css +1 -0
  73. package/es/editor/text-box/signature/signature.d.ts +102 -0
  74. package/es/editor/text-box/signature/signature.mjs +238 -0
  75. package/es/editor/text-box/text-box-editor.provider.mjs +4 -0
  76. package/es/editor/upload/ibiz-file-upload/ibiz-file-upload.d.ts +2 -0
  77. package/es/editor/upload/ibiz-image-cropping/ibiz-image-cropping.d.ts +2 -0
  78. package/es/editor/upload/ibiz-image-upload/ibiz-image-upload.d.ts +2 -0
  79. package/es/editor/upload/use/use-iview-upload.mjs +12 -3
  80. package/es/locale/en/index.d.ts +7 -0
  81. package/es/locale/en/index.mjs +7 -0
  82. package/es/locale/zh-CN/index.d.ts +7 -0
  83. package/es/locale/zh-CN/index.mjs +7 -0
  84. package/es/panel-component/panel-static-carousel/panel-static-carousel.d.ts +1 -1
  85. package/es/panel-component/user-message/async-action/async-data-export/async-data-export.mjs +1 -1
  86. package/es/util/app-util/app-util.mjs +7 -7
  87. package/es/util/open-view-util/open-view-util.mjs +1 -1
  88. package/es/view-engine/gantt-view.engine.mjs +4 -0
  89. package/lib/common/action-toolbar/action-toolbar.cjs +49 -7
  90. package/lib/common/action-toolbar/action-toolbar.css +1 -1
  91. package/lib/common/index.cjs +1 -0
  92. package/lib/control/dashboard/dashboard.cjs +2 -1
  93. package/lib/control/dashboard/portlet/actionbar-portlet/actionbar-portlet.cjs +3 -0
  94. package/lib/control/dashboard/portlet/portlet-layout/portlet-layout.cjs +6 -3
  95. package/lib/control/data-view/data-view.cjs +3 -0
  96. package/lib/control/data-view/data-view.css +1 -1
  97. package/lib/control/form/edit-form/edit-form.cjs +10 -1
  98. package/lib/control/form/form/form.cjs +1 -0
  99. package/lib/control/form/form-detail/form-group-panel/form-group-panel.cjs +3 -0
  100. package/lib/control/form/form-detail/form-mdctrl/form-mdctrl-form/form-mdctrl-form.cjs +3 -1
  101. package/lib/control/form/form-detail/form-mdctrl/form-mdctrl.cjs +4 -1
  102. package/lib/control/form/form-detail/form-mdctrl/mdctrl-container/mdctrl-container.cjs +2 -2
  103. package/lib/control/grid/grid/grid.cjs +2 -6
  104. package/lib/control/grid/grid-column/grid-field-column/attachment-column/attachment-column.cjs +4 -3
  105. package/lib/control/grid/grid-column/grid-field-column/attachment-column/file-util.cjs +30 -3
  106. package/lib/control/grid/grid-column/grid-field-column/grid-field-column.cjs +1 -1
  107. package/lib/control/kanban/kanban.cjs +10 -5
  108. package/lib/control/kanban/kanban.css +1 -1
  109. package/lib/control/kanban/swimlane-kanban/swimlane-kanban.cjs +3 -0
  110. package/lib/control/kanban/swimlane-kanban/swimlane-kanban.css +1 -1
  111. package/lib/control/list/list.cjs +3 -0
  112. package/lib/control/search-bar/search-bar.cjs +25 -2
  113. package/lib/control/search-bar/search-bar.css +1 -1
  114. package/lib/control/search-bar/search-groups/search-groups.cjs +14 -1
  115. package/lib/control/search-bar/search-groups/search-groups.css +1 -1
  116. package/lib/control/toolbar/toolbar.cjs +1 -1
  117. package/lib/control/tree-grid/tree-grid.cjs +1 -0
  118. package/lib/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-field-column/tree-grid-ex-field-column.cjs +8 -5
  119. package/lib/control/tree-grid-ex/tree-grid-ex.cjs +2 -1
  120. package/lib/editor/carousel/ibiz-carousel/ibiz-carousel.cjs +2 -2
  121. package/lib/editor/code/monaco-editor/monaco-editor.cjs +7 -3
  122. package/lib/editor/data-picker/ibiz-mpicker/ibiz-mpicker.cjs +4 -1
  123. package/lib/editor/html/wang-editor/wang-editor.cjs +10 -6
  124. package/lib/editor/index.cjs +6 -0
  125. package/lib/editor/markdown/ibiz-markdown-editor/ibiz-markdown-editor.cjs +2 -2
  126. package/lib/editor/text-box/index.cjs +2 -0
  127. package/lib/editor/text-box/input/input.cjs +7 -3
  128. package/lib/editor/text-box/signature/signature.cjs +240 -0
  129. package/lib/editor/text-box/signature/signature.css +1 -0
  130. package/lib/editor/text-box/text-box-editor.provider.cjs +4 -0
  131. package/lib/editor/upload/use/use-iview-upload.cjs +12 -3
  132. package/lib/locale/en/index.cjs +7 -0
  133. package/lib/locale/zh-CN/index.cjs +7 -0
  134. package/lib/panel-component/user-message/async-action/async-data-export/async-data-export.cjs +1 -1
  135. package/lib/util/app-util/app-util.cjs +7 -7
  136. package/lib/util/open-view-util/open-view-util.cjs +1 -1
  137. package/lib/view-engine/gantt-view.engine.cjs +4 -0
  138. package/package.json +7 -7
  139. package/dist/ibiz-markdown-editor-e33m6ees.js +0 -1
  140. package/dist/index-hzGAQk1t.js +0 -11
  141. package/dist/wang-editor-qbGW8Rzj.js +0 -1
@@ -1,4 +1,4 @@
1
- import { PropType, VNode } from 'vue';
1
+ import { VNode, PropType } from 'vue';
2
2
  import { IDETreeColumn } from '@ibiz/model-core';
3
3
  import { IControlProvider, TreeGridExController } from '@ibiz-template/runtime';
4
4
  import './tree-grid-ex.scss';
@@ -1,10 +1,10 @@
1
1
  import { isVNode, createVNode, resolveComponent, computed, ref, watchEffect, renderSlot, mergeProps, h, defineComponent } from 'vue';
2
- import { useControlController, useNamespace, hasEmptyPanelRenderer, IBizCustomRender } from '@ibiz-template/vue3-util';
2
+ import { useControlController, useControlPopoverzIndex, useNamespace, hasEmptyPanelRenderer, IBizCustomRender } from '@ibiz-template/vue3-util';
3
3
  import { TreeGridExController } from '@ibiz-template/runtime';
4
- import './tree-grid-ex.css';
5
4
  import { RuntimeError } from '@ibiz-template/core';
6
5
  import { createUUID } from 'qx-util';
7
6
  import { useRowEditPopover } from './use-row-edit-popover.mjs';
7
+ import './tree-grid-ex.css';
8
8
 
9
9
  "use strict";
10
10
  function _isSlot(s) {
@@ -44,6 +44,7 @@ const TreeGridExControl = /* @__PURE__ */ defineComponent({
44
44
  },
45
45
  setup() {
46
46
  const c = useControlController((...args) => new TreeGridExController(...args));
47
+ useControlPopoverzIndex(c);
47
48
  const ns = useNamespace("control-".concat(c.model.controlType.toLowerCase()));
48
49
  const renderNoData = () => {
49
50
  const {
@@ -40,9 +40,9 @@ const IBizCarousel = /* @__PURE__ */ defineComponent({
40
40
  const downloadUrl = getDownloadUrl(props.data, carousel);
41
41
  carousel.imgUrl = carousel.imgUrl || downloadUrl.replace("%fileId%", carousel.id);
42
42
  if (ibiz.config.common.enableDownloadTicket) {
43
- ibiz.util.file.getDownloadTicket(c.context, {
43
+ ibiz.util.file.getDownloadTicket(c.context, c.params, props.data, {
44
44
  fileId: carousel.id
45
- }).then((downloadTicket) => {
45
+ }, c.downloadTicketParams).then((downloadTicket) => {
46
46
  if (downloadTicket && downloadTicket.ticket) {
47
47
  carousel.imgUrl = downloadUrl.replace("%fileId%", downloadTicket.ticket);
48
48
  }
@@ -144,7 +144,7 @@ const IBizCode = /* @__PURE__ */ defineComponent({
144
144
  footerToolbarItems,
145
145
  questionToolbarItems,
146
146
  otherToolbarItems,
147
- question: async (aiChat, ctx, param, other, arr) => {
147
+ question: async (aiChat, ctx, param, other, arr, sessionid) => {
148
148
  id = createUUID();
149
149
  abortController = new AbortController();
150
150
  const deService = await ibiz.hub.getApp(ctx.srfappid).deService.getService(ctx, other.appDataEntityId);
@@ -180,7 +180,8 @@ const IBizCode = /* @__PURE__ */ defineComponent({
180
180
  });
181
181
  }
182
182
  }, abortController, ctx, param, {
183
- messages: arr
183
+ messages: arr,
184
+ sessionid
184
185
  });
185
186
  } catch (error) {
186
187
  aiChat.replaceMessage({
@@ -214,7 +215,10 @@ const IBizCode = /* @__PURE__ */ defineComponent({
214
215
  history: async (ctx, param, other) => {
215
216
  const deService = await ibiz.hub.getApp(ctx.srfappid).deService.getService(ctx, other.appDataEntityId);
216
217
  const historyData = other.appendCurData ? other.appendCurData : {};
217
- const result = await deService.aiChatHistory(ctx, param, historyData);
218
+ const result = await deService.aiChatHistory(ctx, param, {
219
+ historyData,
220
+ sessionid: other.sessionid
221
+ });
218
222
  if (result.data && Array.isArray(result.data)) {
219
223
  let preMsg;
220
224
  result.data.forEach((item) => {
@@ -12,7 +12,7 @@ import './ibiz-mpicker.scss';
12
12
  * @editorparams {"name":"objectnamefield","parameterType":"string","description":"值类型为OBJECTS时的对象名称属性。也用于控制是否触发下拉区域数据的默认加载,配置时会触发默认加载,不配置时不会触发默认加载"}
13
13
  * @editorparams {"name":"objectvaluefield","parameterType":"string","description":"值类型为OBJECTS时的对象值属性"}
14
14
  * @editorparams {"name":"readonly","parameterType":"boolean","defaultvalue":false,"description":"设置编辑器是否为只读态"}
15
- * @editorparams {"name":"AC","parameterType":"boolean","defaultvalue":false,"description":"设置编辑器是否启用AC自填模式"}
15
+ * @editorparams {"name":"ac","parameterType":"boolean","defaultvalue":false,"description":"设置编辑器是否启用AC自填模式"}
16
16
  * @editorparams {"name":"actionpostion","parameterType":"'top' | 'bottom'","defaultvalue":"'bottom'","description":"设置AC自填模式行为组位置,默认在下拉底部"}
17
17
  * @ignoreprops overflowMode
18
18
  */
@@ -172,9 +172,12 @@ const IBizMPicker = /* @__PURE__ */ defineComponent({
172
172
  }
173
173
  };
174
174
  const onSelect = async (selects) => {
175
+ var _a2;
175
176
  setEditable(false);
176
- if (selects.includes("empty") || selects.some((selectKey) => selectKey.includes("DEUIACTION")))
177
+ if (selects.includes("empty") || selects.some((selectKey) => selectKey.includes("DEUIACTION"))) {
178
+ (_a2 = editorRef.value) == null ? void 0 : _a2.blur();
177
179
  return resetCurValue();
180
+ }
178
181
  const val = [];
179
182
  let value = null;
180
183
  const selections = selects.map((select) => {
@@ -17,6 +17,8 @@ import './wang-editor.scss';
17
17
  * @editorparams {"name":"osscat","parameterType":"string","description":"用于计算上传和下载路径的OSS参数"}
18
18
  * @editorparams {name:ac,parameterType:boolean,defaultvalue:false,description:是否启用ac自填模式}
19
19
  * @editorparams {"name":"readonly","parameterType":"boolean","defaultvalue":false,"description":"设置编辑器是否为只读态"}
20
+ * @editorparams {"name":"appentitytag","parameterType":"string","description":"在应用启用下载授权时,用于指定当前文件所属实体。该参数值会作为验证下载权限的依据。配置格式为(应用代码名称.实体代码名称),示例:web.master"}
21
+ * @editorparams {"name":"datafieldtag","parameterType":"string","description":"在应用启用下载授权时,用于指定当前文件所关联的数据属性。完成配置后,将自动从容器数据(涵盖表单数据、表格行数据、面板数据)、上下文环境以及视图参数中获取该属性的实际值,将其作为验证下载权限的依据"}
20
22
  * @ignoreprops autoFocus | overflowMode
21
23
  * @ignoreemits enter | infoTextChange
22
24
  */
@@ -135,7 +135,7 @@ const IBizHtml = /* @__PURE__ */ defineComponent({
135
135
  },
136
136
  // 单个文件上传成功之后
137
137
  onSuccess(file, res) {
138
- if (ibiz.config.common.enableDownloadTicket) {
138
+ if (ibiz.config.common.enableDownloadTicket && res.ticket) {
139
139
  ibiz.util.file.setDownloadTicket(res.id, res.ticket);
140
140
  }
141
141
  console.log("".concat(file.name, " \u4E0A\u4F20\u6210\u529F"), res);
@@ -154,9 +154,9 @@ const IBizHtml = /* @__PURE__ */ defineComponent({
154
154
  let url = downloadUrl.replace("%fileId%", res.id);
155
155
  const alt = res.filename;
156
156
  if (ibiz.config.common.enableDownloadTicket) {
157
- const downloadTicket = await ibiz.util.file.getDownloadTicket(c.context, {
157
+ const downloadTicket = await ibiz.util.file.getDownloadTicket(c.context, c.params, props.data, {
158
158
  fileId: res.id
159
- });
159
+ }, c.downloadTicketParams);
160
160
  if (downloadTicket && downloadTicket.ticket) {
161
161
  url = downloadUrl.replace("%fileId%", downloadTicket.ticket);
162
162
  insertFn(url, alt, "");
@@ -229,7 +229,7 @@ const IBizHtml = /* @__PURE__ */ defineComponent({
229
229
  appendCurData: c.editorParams.srfaiappendcurdata === "true" ? props.data : void 0,
230
230
  // 编辑器参数srfaiappendcurcontent,传入编辑内容作为用户消息,获取历史数据后附加
231
231
  appendCurContent: c.editorParams.srfaiappendcurcontent ? StringUtil.fill(c.editorParams.srfaiappendcurcontent, c.context, c.params, props.data) : void 0,
232
- question: async (aiChat, ctx, param, other, arr) => {
232
+ question: async (aiChat, ctx, param, other, arr, sessionid) => {
233
233
  id = createUUID();
234
234
  abortController = new AbortController();
235
235
  const deService = await ibiz.hub.getApp(ctx.srfappid).deService.getService(ctx, other.appDataEntityId);
@@ -265,7 +265,8 @@ const IBizHtml = /* @__PURE__ */ defineComponent({
265
265
  });
266
266
  }
267
267
  }, abortController, ctx, param, {
268
- messages: arr
268
+ messages: arr,
269
+ sessionid
269
270
  });
270
271
  } catch (error) {
271
272
  aiChat.replaceMessage({
@@ -304,7 +305,10 @@ const IBizHtml = /* @__PURE__ */ defineComponent({
304
305
  history: async (ctx, param, other) => {
305
306
  const deService = await ibiz.hub.getApp(ctx.srfappid).deService.getService(ctx, other.appDataEntityId);
306
307
  const historyData = other.appendCurData ? other.appendCurData : {};
307
- const result = await deService.aiChatHistory(ctx, param, historyData);
308
+ const result = await deService.aiChatHistory(ctx, param, {
309
+ historyData,
310
+ sessionid: other.sessionid
311
+ });
308
312
  if (result.data && Array.isArray(result.data)) {
309
313
  let preMsg;
310
314
  result.data.forEach((item) => {
@@ -36,6 +36,7 @@ import { IBizSpanLink } from './span/span-link/span-link.mjs';
36
36
  import { IBizInput } from './text-box/input/input.mjs';
37
37
  import { IBizInputNumber } from './text-box/ibiz-input-number/ibiz-input-number.mjs';
38
38
  import { IBizInputIP } from './text-box/ibiz-input-ip/ibiz-input-ip.mjs';
39
+ import { IBizSignature } from './text-box/signature/signature.mjs';
39
40
  import { IBizDropdown } from './dropdown-list/ibiz-dropdown/ibiz-dropdown.mjs';
40
41
  import { IBizEmojiPicker } from './dropdown-list/ibiz-emoji-picker/ibiz-emoji-picker.mjs';
41
42
  import { IBizTreePicker } from './dropdown-list/ibiz-tree-picker/ibiz-tree-picker.mjs';
@@ -112,6 +113,7 @@ const IBizEditor = {
112
113
  v.component(IBizInput.name, IBizInput);
113
114
  v.component(IBizInputNumber.name, IBizInputNumber);
114
115
  v.component(IBizInputIP.name, IBizInputIP);
116
+ v.component(IBizSignature.name, IBizSignature);
115
117
  v.component(IBizDropdown.name, IBizDropdown);
116
118
  v.component(IBizEmojiPicker.name, IBizEmojiPicker);
117
119
  v.component(IBizTreePicker.name, IBizTreePicker);
@@ -185,6 +187,10 @@ const IBizEditor = {
185
187
  );
186
188
  registerEditorProvider("MOBTEXTAREA", () => textBoxEditorProvider);
187
189
  registerEditorProvider("MOBPASSWORD", () => textBoxEditorProvider);
190
+ registerEditorProvider(
191
+ "TEXTBOX_SIGNATURE",
192
+ () => new TextBoxEditorProvider("SIGNATURE")
193
+ );
188
194
  registerEditorProvider(
189
195
  "DROPDOWNLIST",
190
196
  () => new DropDownListEditorProvider()
@@ -9,6 +9,8 @@ import './ibiz-markdown-editor.scss';
9
9
  * @editorparams {"name":"uploadparams","parameterType":"string","description":"上传参数,图片或文件上传时,用于计算上传路径"}
10
10
  * @editorparams {"name":"exportparams","parameterType":"string","description":"下载参数,图片或文件下载时,用于计算下载路径"}
11
11
  * @editorparams {"name":"osscat","parameterType":"string","description":"用于计算上传和下载路径的OSS参数"}
12
+ * @editorparams {"name":"appentitytag","parameterType":"string","description":"在应用启用下载授权时,用于指定当前文件所属实体。该参数值会作为验证下载权限的依据。配置格式为(应用代码名称.实体代码名称),示例:web.master"}
13
+ * @editorparams {"name":"datafieldtag","parameterType":"string","description":"在应用启用下载授权时,用于指定当前文件所关联的数据属性。完成配置后,将自动从容器数据(涵盖表单数据、表格行数据、面板数据)、上下文环境以及视图参数中获取该属性的实际值,将其作为验证下载权限的依据"}
12
14
  * @ignoreprops autoFocus | overflowMode
13
15
  * @ignoreemits blur | focus | enter | infoTextChange
14
16
  */
@@ -70,9 +70,9 @@ const IBizMarkDown = /* @__PURE__ */ defineComponent({
70
70
  const downloadUrl = getDownloadUrl(props.data || {}, data.fileid);
71
71
  let url = downloadUrl.replace("%fileId%", data.fileid);
72
72
  if (ibiz.config.common.enableDownloadTicket && c) {
73
- const downloadTicket = await ibiz.util.file.getDownloadTicket(c.context, {
73
+ const downloadTicket = await ibiz.util.file.getDownloadTicket(c.context, c.params, props.data || {}, {
74
74
  fileId: data.fileid
75
- });
75
+ }, c.downloadTicketParams);
76
76
  if (downloadTicket && downloadTicket.ticket) {
77
77
  url = downloadUrl.replace("%fileId%", downloadTicket.ticket);
78
78
  callback(url);
@@ -1,5 +1,6 @@
1
1
  export { IBizInput } from './input/input';
2
2
  export { IBizInputNumber } from './ibiz-input-number/ibiz-input-number';
3
3
  export { IBizInputIP } from './ibiz-input-ip/ibiz-input-ip';
4
+ export { IBizSignature } from './signature/signature';
4
5
  export * from './text-box-editor.controller';
5
6
  export * from './text-box-editor.provider';
@@ -1,6 +1,7 @@
1
1
  export { IBizInput } from './input/input.mjs';
2
2
  export { IBizInputNumber } from './ibiz-input-number/ibiz-input-number.mjs';
3
3
  export { IBizInputIP } from './ibiz-input-ip/ibiz-input-ip.mjs';
4
+ export { IBizSignature } from './signature/signature.mjs';
4
5
  export { TextBoxEditorController } from './text-box-editor.controller.mjs';
5
6
  export { TextBoxEditorProvider } from './text-box-editor.provider.mjs';
6
7
 
@@ -202,7 +202,7 @@ const IBizInput = /* @__PURE__ */ defineComponent({
202
202
  footerToolbarItems,
203
203
  questionToolbarItems,
204
204
  otherToolbarItems,
205
- question: async (aiChat, ctx, param, other, arr) => {
205
+ question: async (aiChat, ctx, param, other, arr, sessionid) => {
206
206
  id = createUUID();
207
207
  abortController = new AbortController();
208
208
  const deService = await ibiz.hub.getApp(ctx.srfappid).deService.getService(ctx, other.appDataEntityId);
@@ -238,7 +238,8 @@ const IBizInput = /* @__PURE__ */ defineComponent({
238
238
  });
239
239
  }
240
240
  }, abortController, ctx, param, {
241
- messages: arr
241
+ messages: arr,
242
+ sessionid
242
243
  });
243
244
  } catch (error) {
244
245
  aiChat.replaceMessage({
@@ -273,7 +274,10 @@ const IBizInput = /* @__PURE__ */ defineComponent({
273
274
  history: async (ctx, param, other) => {
274
275
  const deService = await ibiz.hub.getApp(ctx.srfappid).deService.getService(ctx, other.appDataEntityId);
275
276
  const historyData = other.appendCurData ? other.appendCurData : {};
276
- const result = await deService.aiChatHistory(ctx, param, historyData);
277
+ const result = await deService.aiChatHistory(ctx, param, {
278
+ historyData,
279
+ sessionid: other.sessionid
280
+ });
277
281
  if (result.data && Array.isArray(result.data)) {
278
282
  let preMsg;
279
283
  result.data.forEach((item) => {
@@ -0,0 +1 @@
1
+ .ibiz-signature{--ibiz-signature-min-height:200px;width:100%;height:100%;min-height:var(--ibiz-signature-min-height)}.ibiz-signature__pad .ibiz-signature-pad__container{background-color:var(--ibiz-color-bg-0)}.ibiz-signature__toolbar{display:flex;align-items:center;justify-content:flex-end;width:100%;margin-top:var(--ibiz-spacing-base)}.ibiz-signature--readonly{pointer-events:none}.ibiz-signature--disabled{pointer-events:none}.ibiz-form-item .ibiz-signature.is-show-default:hover .ibiz-signature__toolbar{display:flex}.ibiz-form-item .ibiz-signature.is-show-default .ibiz-signature__toolbar{display:none}
@@ -0,0 +1,102 @@
1
+ import { Ref } from 'vue';
2
+ import { TextBoxEditorController } from '../text-box-editor.controller';
3
+ import './signature.scss';
4
+ /**
5
+ * 电子签名(扩展)
6
+ *
7
+ * @description 用于在业务系统中采集、展示和保存用户签名信息。基于`文本框`编辑器进行扩展,编辑器样式代码名称为:SIGNATURE
8
+ * @primary
9
+ * @editorparams {"name":"mode","parameterType":"'img' | 'file'","defaultvalue":"'img'","description":"指定签名的保存格式。当值为'img'时,直接保存为Base64格式的图片URL(以data:协议开头);当值为'file'时,系统会先将签名图片上传至服务器,再保存服务器返回的文件元信息(包含文件ID和名称)"}
10
+ * @editorparams {"name":"buttons","parameterType":"string","defaultvalue":"'\\[{\"label\":\"撤销\",\"type\":\"undo\"},{\"label\":\"重写\",\"type\":\"rewrite\"},{\"label\":\"确认\",\"type\":\"confirm\",\"buttonType\":\"primary\"}\\]'","description":"配置签名的操作按钮。JSON 字符串数组中每个对象表示一个按钮:label为按钮显示文本;type为按钮触发的事件类型(undo-撤销上一步,rewrite-清空重写,confirm-确认保存);buttonType可选,指定按钮样式(支持primary/success/default/danger/warning)。示例:仅显示确认按钮可配置为\\[{\"label\":\"确认\",\"type\":\"confirm\",\"buttonType\":\"primary\"}\\]"}
11
+ * @editorparams {name:dotsize,parameterType:number,defaultvalue:0,description:点的大小(单位:像素)。控制点击画布时生成的点的尺寸,0表示根据线条宽度自动计算点的大小}
12
+ * @editorparams {name:minwidth,parameterType:number,defaultvalue:2,description:线条最小宽度(单位:像素)。控制签名线条的最细宽度,绘制速度越快,线条越接近此值}
13
+ * @editorparams {name:maxwidth,parameterType:number,defaultvalue:2,description:线条最大宽度(单位:像素)。控制签名线条的最粗宽度,绘制速度越慢,线条越接近此值}
14
+ * @editorparams {"name":"pencolor","parameterType":"string","defaultvalue":"'black'","description":"画笔颜色。签名轨迹的颜色,可接受CSS颜色格式(如#ff0000)"}
15
+ * @editorparams {name:velocityfilterweight,parameterType:number,defaultvalue:0.7,description:线条粗细速度敏感度。用于平滑处理绘制速度的计算,影响线条粗细随速度的变化幅度。值越接近1,当前速度对线条粗细影响越大;值越小,线条过渡越平滑}
16
+ * @editorparams {name:mindistance,parameterType:number,defaultvalue:5,description:绘制点最小记录间距(单位:像素)。当点击画布生成的点与后续绘制线的距离小于此值时,不记录后续绘制的线,用于减少冗余数据并优化绘制流畅度}
17
+ * @editorparams {"name":"backgroundcolor","parameterType":"string","defaultvalue":"'rgba(0,0,0,0)'","description":"画布背景色。签名画布的背景颜色,导出图片时会包含此背景,可接受CSS颜色格式"}
18
+ * @editorparams {name:throttle,parameterType:number,defaultvalue:16,description:事件节流时间(单位:毫秒)。限制绘制事件的触发频率,避免高频操作导致性能问题}
19
+ * @editorparams {"name":"readonly","parameterType":"boolean","defaultvalue":false,"description":"设置编辑器是否为只读态"}
20
+ * @editorparams {"name":"appentitytag","parameterType":"string","description":"在应用启用下载授权时,用于指定当前文件所属实体。该参数值会作为验证下载权限的依据。配置格式为(应用代码名称.实体代码名称),示例:web.master"}
21
+ * @editorparams {"name":"datafieldtag","parameterType":"string","description":"在应用启用下载授权时,用于指定当前文件所关联的数据属性。完成配置后,将自动从容器数据(涵盖表单数据、表格行数据、面板数据)、上下文环境以及视图参数中获取该属性的实际值,将其作为验证下载权限的依据"}
22
+ * @ignoreprops autoFocus | overflowMode
23
+ * @ignoreemits blur | focus | enter | infoTextChange
24
+ */
25
+ export declare const IBizSignature: import("vue").DefineComponent<{
26
+ value: (StringConstructor | NumberConstructor)[];
27
+ controller: import("@ibiz-template/vue3-util").RequiredProp<import("vue").PropType<TextBoxEditorController>, undefined, undefined>;
28
+ data: import("@ibiz-template/vue3-util").RequiredProp<import("vue").PropType<import("@ibiz-template/core").IApiData>, undefined, undefined>;
29
+ disabled: {
30
+ type: BooleanConstructor;
31
+ };
32
+ readonly: {
33
+ type: BooleanConstructor;
34
+ default: boolean;
35
+ };
36
+ autoFocus: {
37
+ type: BooleanConstructor;
38
+ default: boolean;
39
+ };
40
+ overflowMode: {
41
+ type: StringConstructor;
42
+ };
43
+ controlParams: {
44
+ type: ObjectConstructor;
45
+ required: boolean;
46
+ };
47
+ }, {
48
+ c: TextBoxEditorController;
49
+ ns: import("@ibiz-template/core").Namespace;
50
+ signatureRef: Ref<any>;
51
+ fullScreen: Ref<boolean>;
52
+ currentDataURL: Ref<string>;
53
+ buttons: ({
54
+ label: string;
55
+ type: string;
56
+ buttonType?: undefined;
57
+ } | {
58
+ label: string;
59
+ type: string;
60
+ buttonType: string;
61
+ })[];
62
+ showFormDefaultContent: import("vue").ComputedRef<boolean>;
63
+ handleButtonClick: (_type: string) => void;
64
+ }, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
65
+ change: (_value: unknown, _name?: string | undefined, _ignore?: boolean | undefined) => boolean;
66
+ blur: (_event?: import("@ibiz-template/core").IApiData | undefined) => boolean;
67
+ focus: (_event?: import("@ibiz-template/core").IApiData | undefined) => boolean;
68
+ enter: (_event?: import("@ibiz-template/core").IApiData | undefined) => boolean;
69
+ infoTextChange: (_text: string) => boolean;
70
+ }, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
71
+ value: (StringConstructor | NumberConstructor)[];
72
+ controller: import("@ibiz-template/vue3-util").RequiredProp<import("vue").PropType<TextBoxEditorController>, undefined, undefined>;
73
+ data: import("@ibiz-template/vue3-util").RequiredProp<import("vue").PropType<import("@ibiz-template/core").IApiData>, undefined, undefined>;
74
+ disabled: {
75
+ type: BooleanConstructor;
76
+ };
77
+ readonly: {
78
+ type: BooleanConstructor;
79
+ default: boolean;
80
+ };
81
+ autoFocus: {
82
+ type: BooleanConstructor;
83
+ default: boolean;
84
+ };
85
+ overflowMode: {
86
+ type: StringConstructor;
87
+ };
88
+ controlParams: {
89
+ type: ObjectConstructor;
90
+ required: boolean;
91
+ };
92
+ }>> & {
93
+ onFocus?: ((_event?: import("@ibiz-template/core").IApiData | undefined) => any) | undefined;
94
+ onBlur?: ((_event?: import("@ibiz-template/core").IApiData | undefined) => any) | undefined;
95
+ onChange?: ((_value: unknown, _name?: string | undefined, _ignore?: boolean | undefined) => any) | undefined;
96
+ onInfoTextChange?: ((_text: string) => any) | undefined;
97
+ onEnter?: ((_event?: import("@ibiz-template/core").IApiData | undefined) => any) | undefined;
98
+ }, {
99
+ disabled: boolean;
100
+ readonly: boolean;
101
+ autoFocus: boolean;
102
+ }, {}>;
@@ -0,0 +1,238 @@
1
+ import { ref, computed, nextTick, watch, resolveComponent, createVNode, defineComponent } from 'vue';
2
+ import { getInputProps, getEditorEmits, useNamespace } from '@ibiz-template/vue3-util';
3
+ import { CoreConst, getAppCookie, base64ToBlob } from '@ibiz-template/core';
4
+ import './signature.css';
5
+
6
+ "use strict";
7
+ const IBizSignature = /* @__PURE__ */ defineComponent({
8
+ name: "IBizSignature",
9
+ props: getInputProps(),
10
+ emits: getEditorEmits(),
11
+ setup(props, {
12
+ emit
13
+ }) {
14
+ const ns = useNamespace("signature");
15
+ const c = props.controller;
16
+ const editorModel = c.model;
17
+ const headers = ref({
18
+ ["".concat(ibiz.env.tokenHeader, "Authorization")]: "".concat(ibiz.env.tokenPrefix, "Bearer ").concat(getAppCookie(CoreConst.TOKEN))
19
+ });
20
+ const uploadUrl = ref("");
21
+ const downloadUrl = ref("");
22
+ const signatureRef = ref();
23
+ const fullScreen = ref(false);
24
+ const currentDataURL = ref("");
25
+ const currentVal = ref("");
26
+ let saveMode = "img";
27
+ let buttons = [{
28
+ label: ibiz.i18n.t("editor.signature.undo"),
29
+ type: "undo"
30
+ }, {
31
+ label: ibiz.i18n.t("editor.signature.rewrite"),
32
+ type: "rewrite"
33
+ }, {
34
+ label: ibiz.i18n.t("editor.signature.confirm"),
35
+ type: "confirm",
36
+ buttonType: "primary"
37
+ }];
38
+ if (editorModel.editorParams) {
39
+ if (editorModel.editorParams.mode) {
40
+ saveMode = editorModel.editorParams.mode;
41
+ }
42
+ if (editorModel.editorParams.buttons) {
43
+ try {
44
+ buttons = JSON.parse(editorModel.editorParams.buttons);
45
+ } catch (error) {
46
+ ibiz.log.error(error);
47
+ }
48
+ }
49
+ }
50
+ const showFormDefaultContent = computed(() => {
51
+ if (props.controlParams && props.controlParams.editmode === "hover" && !props.readonly) {
52
+ return true;
53
+ }
54
+ return false;
55
+ });
56
+ const restCavans = () => {
57
+ var _a;
58
+ (_a = signatureRef.value) == null ? void 0 : _a.updateSignaturePad(() => {
59
+ nextTick(() => {
60
+ var _a2, _b;
61
+ if (currentDataURL.value) {
62
+ (_a2 = signatureRef.value) == null ? void 0 : _a2.signaturePad.fromDataURL(currentDataURL.value);
63
+ } else {
64
+ (_b = signatureRef.value) == null ? void 0 : _b.signaturePad.clear();
65
+ }
66
+ });
67
+ });
68
+ };
69
+ const handleCurrentVal = async () => {
70
+ var _a, _b;
71
+ if (currentVal.value) {
72
+ ibiz.loading.showRedirect();
73
+ if (saveMode === "img") {
74
+ currentDataURL.value = currentVal.value;
75
+ } else if (downloadUrl.value) {
76
+ const fileData = JSON.parse(currentVal.value)[0];
77
+ const _url = downloadUrl.value.replace("%fileId%", fileData.id);
78
+ try {
79
+ const editorParams = {
80
+ ...c.editorParams
81
+ };
82
+ if (editorParams.exportparams) {
83
+ editorParams.exportParams = JSON.parse(editorParams.exportparams);
84
+ }
85
+ const fileBlob = await ibiz.util.file.requestFile(_url, void 0, {
86
+ context: c.context,
87
+ params: c.params,
88
+ data: props.data,
89
+ file: {
90
+ fileId: fileData.id
91
+ },
92
+ extraParams: editorParams,
93
+ downloadTicketParams: c.downloadTicketParams
94
+ });
95
+ const dataUrl = await ((_a = signatureRef.value) == null ? void 0 : _a.signaturePad.blobToDataURL(fileBlob));
96
+ currentDataURL.value = dataUrl;
97
+ } catch (error) {
98
+ ibiz.log.error(error);
99
+ }
100
+ }
101
+ restCavans();
102
+ (_b = signatureRef.value) == null ? void 0 : _b.signaturePad.loadImage(currentDataURL.value, () => {
103
+ ibiz.loading.hideRedirect();
104
+ });
105
+ }
106
+ };
107
+ watch(() => props.data, (newVal) => {
108
+ if (newVal) {
109
+ const urls = ibiz.util.file.calcFileUpDownUrl(c.context, c.params, newVal, c.editorParams);
110
+ uploadUrl.value = urls.uploadUrl;
111
+ downloadUrl.value = urls.downloadUrl;
112
+ }
113
+ }, {
114
+ immediate: true,
115
+ deep: true
116
+ });
117
+ watch(() => props.value, async (newVal, oldVal) => {
118
+ if (newVal !== oldVal) {
119
+ if (!newVal) {
120
+ currentVal.value = "";
121
+ } else {
122
+ currentVal.value = "".concat(newVal || "");
123
+ }
124
+ await handleCurrentVal();
125
+ }
126
+ }, {
127
+ immediate: true
128
+ });
129
+ const handleEmit = (_value) => {
130
+ emit("change", _value);
131
+ };
132
+ const getFileType = (dataURL) => {
133
+ const parts = dataURL.split(",");
134
+ const mime = parts[0].split(":")[1].split(";")[0];
135
+ return {
136
+ type: mime
137
+ };
138
+ };
139
+ const handleUpload = async (dataURL) => {
140
+ const {
141
+ type
142
+ } = getFileType(dataURL);
143
+ const blob = base64ToBlob(dataURL);
144
+ const fileName = "signature_".concat(Date.now(), ".png");
145
+ const file = new File([blob], fileName, {
146
+ type
147
+ });
148
+ const fileInfo = await ibiz.util.file.fileUpload(uploadUrl.value, file, headers.value);
149
+ return fileInfo;
150
+ };
151
+ const handleRemove = () => {
152
+ var _a;
153
+ (_a = signatureRef.value) == null ? void 0 : _a.signaturePad.clear();
154
+ currentDataURL.value = "";
155
+ handleEmit(null);
156
+ };
157
+ const handleFileChange = async (dataURL) => {
158
+ const file = await handleUpload(dataURL);
159
+ handleEmit(JSON.stringify([{
160
+ name: file.name,
161
+ id: file.id
162
+ }]));
163
+ };
164
+ const handleConfirm = () => {
165
+ var _a, _b, _c;
166
+ fullScreen.value = false;
167
+ if (!((_a = signatureRef.value) == null ? void 0 : _a.signaturePad.isRedrawn()))
168
+ return;
169
+ if ((_b = signatureRef.value) == null ? void 0 : _b.signaturePad.isEmpty()) {
170
+ handleRemove();
171
+ return;
172
+ }
173
+ const dataURL = (_c = signatureRef.value) == null ? void 0 : _c.signaturePad.toDataURL();
174
+ if (dataURL === currentDataURL.value)
175
+ return;
176
+ currentDataURL.value = dataURL;
177
+ switch (saveMode) {
178
+ case "file":
179
+ handleFileChange(dataURL);
180
+ break;
181
+ case "img":
182
+ default:
183
+ handleEmit(dataURL);
184
+ break;
185
+ }
186
+ };
187
+ const handleButtonClick = (_type) => {
188
+ var _a, _b;
189
+ switch (_type) {
190
+ case "undo":
191
+ (_a = signatureRef.value) == null ? void 0 : _a.signaturePad.undoLastStep();
192
+ break;
193
+ case "rewrite":
194
+ (_b = signatureRef.value) == null ? void 0 : _b.signaturePad.clear();
195
+ break;
196
+ case "confirm":
197
+ handleConfirm();
198
+ break;
199
+ default:
200
+ break;
201
+ }
202
+ };
203
+ return {
204
+ c,
205
+ ns,
206
+ signatureRef,
207
+ fullScreen,
208
+ currentDataURL,
209
+ buttons,
210
+ showFormDefaultContent,
211
+ handleButtonClick
212
+ };
213
+ },
214
+ render() {
215
+ return createVNode("div", {
216
+ "class": [this.ns.b(), this.disabled ? this.ns.m("disabled") : "", this.readonly ? this.ns.m("readonly") : "", this.ns.is("show-default", this.showFormDefaultContent)]
217
+ }, [createVNode(resolveComponent("iBizSignaturePad"), {
218
+ "ref": "signatureRef",
219
+ "class": this.ns.e("pad"),
220
+ "options": {
221
+ ...this.c.model.editorParams,
222
+ ...this.$attrs
223
+ }
224
+ }, null), !this.readonly && createVNode("div", {
225
+ "class": this.ns.e("toolbar")
226
+ }, [this.buttons.map((_btn) => {
227
+ return createVNode(resolveComponent("el-button"), {
228
+ "disabled": this.disabled,
229
+ "type": _btn.buttonType && _btn.buttonType.toLowerCase() || "default",
230
+ "onClick": () => this.handleButtonClick(_btn.type)
231
+ }, {
232
+ default: () => [_btn.label]
233
+ });
234
+ })])]);
235
+ }
236
+ });
237
+
238
+ export { IBizSignature };
@@ -19,6 +19,10 @@ class TextBoxEditorProvider {
19
19
  this.formEditor = "IBizInputIP";
20
20
  this.gridEditor = "IBizInputIP";
21
21
  }
22
+ if (editorType === "SIGNATURE") {
23
+ this.formEditor = "IBizSignature";
24
+ this.gridEditor = "IBizSignature";
25
+ }
22
26
  }
23
27
  async createController(editorModel, parentController) {
24
28
  const c = new TextBoxEditorController(editorModel, parentController);
@@ -13,6 +13,8 @@ import './ibiz-file-upload.scss';
13
13
  * @editorparams {"name":"osscat","parameterType":"string","description":"用于计算上传和下载路径的OSS参数"}
14
14
  * @editorparams {"name":"infomap","parameterType":"string","description":"上传文件信息的映射规则字符串,用于将上传成功后返回的文件数据转换为保存数据所需格式。格式为'源键:目标键;源键2:目标键2'。示例:映射规则('filesize:size;fileext:ext'),源对象({filesize:'10000', fileext:'.gif'}),转换结果({size:'10000', ext:'.gif'})"}
15
15
  * @editorparams {"name":"readonly","parameterType":"boolean","defaultvalue":false,"description":"设置编辑器是否为只读态"}
16
+ * @editorparams {"name":"appentitytag","parameterType":"string","description":"在应用启用下载授权时,用于指定当前文件所属实体。该参数值会作为验证下载权限的依据。配置格式为(应用代码名称.实体代码名称),示例:web.master"}
17
+ * @editorparams {"name":"datafieldtag","parameterType":"string","description":"在应用启用下载授权时,用于指定当前文件所关联的数据属性。完成配置后,将自动从容器数据(涵盖表单数据、表格行数据、面板数据)、上下文环境以及视图参数中获取该属性的实际值,将其作为验证下载权限的依据"}
16
18
  * @ignoreprops autoFocus | overflowMode
17
19
  * @ignoreemits blur | focus | enter | infoTextChange
18
20
  */
@@ -15,6 +15,8 @@ import './ibiz-image-cropping.scss';
15
15
  * @editorparams {"name":"osscat","parameterType":"string","description":"用于计算上传和下载路径的OSS参数"}
16
16
  * @editorparams {"name":"infomap","parameterType":"string","description":"上传文件信息的映射规则字符串,用于将上传成功后返回的文件数据转换为保存数据所需格式。格式为'源键:目标键;源键2:目标键2'。示例:映射规则('filesize:size;fileext:ext'),源对象({filesize:'10000', fileext:'.gif'}),转换结果({size:'10000', ext:'.gif'})"}
17
17
  * @editorparams {"name":"readonly","parameterType":"boolean","defaultvalue":false,"description":"设置编辑器是否为只读态"}
18
+ * @editorparams {"name":"appentitytag","parameterType":"string","description":"在应用启用下载授权时,用于指定当前文件所属实体。该参数值会作为验证下载权限的依据。配置格式为(应用代码名称.实体代码名称),示例:web.master"}
19
+ * @editorparams {"name":"datafieldtag","parameterType":"string","description":"在应用启用下载授权时,用于指定当前文件所关联的数据属性。完成配置后,将自动从容器数据(涵盖表单数据、表格行数据、面板数据)、上下文环境以及视图参数中获取该属性的实际值,将其作为验证下载权限的依据"}
18
20
  * @ignoreprops autoFocus | overflowMode
19
21
  * @ignoreemits blur | focus | enter | infoTextChange
20
22
  */