@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.
- package/dist/ibiz-markdown-editor-Bd4vTqbM.js +1 -0
- package/dist/{index-K6B-Odyq.js → index-mjpFeLkH.js} +1 -1
- package/dist/{index-Bt6TkADL.js → index-pz3nYBld.js} +1 -1
- package/dist/index-zV2qOpaC.js +11 -0
- package/dist/index.min.css +1 -1
- package/dist/index.system.min.js +1 -1
- package/dist/wang-editor-Xio5lpNl.js +1 -0
- package/dist/{xlsx-util-mN5WSU7v.js → xlsx-util-8tqSNsIL.js} +1 -1
- package/es/common/action-toolbar/action-toolbar.css +1 -1
- package/es/common/action-toolbar/action-toolbar.d.ts +1 -1
- package/es/common/action-toolbar/action-toolbar.mjs +49 -7
- package/es/common/index.mjs +2 -1
- package/es/control/dashboard/dashboard.d.ts +2 -2
- package/es/control/dashboard/dashboard.mjs +3 -2
- package/es/control/dashboard/portlet/actionbar-portlet/actionbar-portlet.d.ts +1 -0
- package/es/control/dashboard/portlet/actionbar-portlet/actionbar-portlet.mjs +3 -0
- package/es/control/dashboard/portlet/actionbar-portlet/index.d.ts +1 -0
- package/es/control/dashboard/portlet/portlet-layout/portlet-layout.d.ts +4 -3
- package/es/control/dashboard/portlet/portlet-layout/portlet-layout.mjs +6 -3
- package/es/control/data-view/data-view.css +1 -1
- package/es/control/data-view/data-view.mjs +4 -1
- package/es/control/form/edit-form/edit-form.mjs +10 -1
- package/es/control/form/form/form.d.ts +1 -1
- package/es/control/form/form/form.mjs +2 -1
- package/es/control/form/form-detail/form-group-panel/form-group-panel.d.ts +1 -0
- package/es/control/form/form-detail/form-group-panel/form-group-panel.mjs +3 -0
- package/es/control/form/form-detail/form-group-panel/index.d.ts +1 -0
- package/es/control/form/form-detail/form-mdctrl/form-mdctrl-form/form-mdctrl-form.mjs +3 -1
- package/es/control/form/form-detail/form-mdctrl/form-mdctrl.d.ts +2 -1
- package/es/control/form/form-detail/form-mdctrl/form-mdctrl.mjs +4 -1
- package/es/control/form/form-detail/form-mdctrl/index.d.ts +2 -1
- package/es/control/form/form-detail/form-mdctrl/mdctrl-container/mdctrl-container.mjs +2 -2
- package/es/control/grid/grid/grid.mjs +3 -7
- package/es/control/grid/grid-column/grid-field-column/attachment-column/attachment-column.mjs +4 -3
- package/es/control/grid/grid-column/grid-field-column/attachment-column/file-util.d.ts +4 -0
- package/es/control/grid/grid-column/grid-field-column/attachment-column/file-util.mjs +30 -3
- package/es/control/grid/grid-column/grid-field-column/grid-field-column.mjs +1 -1
- package/es/control/kanban/kanban.css +1 -1
- package/es/control/kanban/kanban.mjs +11 -6
- package/es/control/kanban/swimlane-kanban/swimlane-kanban.css +1 -1
- package/es/control/kanban/swimlane-kanban/swimlane-kanban.mjs +3 -0
- package/es/control/list/list.d.ts +1 -1
- package/es/control/list/list.mjs +4 -1
- package/es/control/search-bar/index.d.ts +1 -0
- package/es/control/search-bar/search-bar.css +1 -1
- package/es/control/search-bar/search-bar.d.ts +3 -2
- package/es/control/search-bar/search-bar.mjs +26 -3
- package/es/control/search-bar/search-groups/search-groups.css +1 -1
- package/es/control/search-bar/search-groups/search-groups.d.ts +11 -1
- package/es/control/search-bar/search-groups/search-groups.mjs +14 -1
- package/es/control/toolbar/index.d.ts +3 -3
- package/es/control/toolbar/toolbar.d.ts +5 -5
- package/es/control/toolbar/toolbar.mjs +1 -1
- package/es/control/tree-grid/tree-grid.mjs +2 -1
- package/es/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-field-column/index.d.ts +5 -4
- package/es/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-field-column/tree-grid-ex-field-column.d.ts +5 -4
- package/es/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-field-column/tree-grid-ex-field-column.mjs +8 -5
- package/es/control/tree-grid-ex/tree-grid-ex.d.ts +1 -1
- package/es/control/tree-grid-ex/tree-grid-ex.mjs +3 -2
- package/es/editor/carousel/ibiz-carousel/ibiz-carousel.mjs +2 -2
- package/es/editor/code/monaco-editor/monaco-editor.mjs +7 -3
- package/es/editor/data-picker/ibiz-mpicker/ibiz-mpicker.d.ts +1 -1
- package/es/editor/data-picker/ibiz-mpicker/ibiz-mpicker.mjs +4 -1
- package/es/editor/html/wang-editor/wang-editor.d.ts +2 -0
- package/es/editor/html/wang-editor/wang-editor.mjs +10 -6
- package/es/editor/index.mjs +6 -0
- package/es/editor/markdown/ibiz-markdown-editor/ibiz-markdown-editor.d.ts +2 -0
- package/es/editor/markdown/ibiz-markdown-editor/ibiz-markdown-editor.mjs +2 -2
- package/es/editor/text-box/index.d.ts +1 -0
- package/es/editor/text-box/index.mjs +1 -0
- package/es/editor/text-box/input/input.mjs +7 -3
- package/es/editor/text-box/signature/signature.css +1 -0
- package/es/editor/text-box/signature/signature.d.ts +102 -0
- package/es/editor/text-box/signature/signature.mjs +238 -0
- package/es/editor/text-box/text-box-editor.provider.mjs +4 -0
- package/es/editor/upload/ibiz-file-upload/ibiz-file-upload.d.ts +2 -0
- package/es/editor/upload/ibiz-image-cropping/ibiz-image-cropping.d.ts +2 -0
- package/es/editor/upload/ibiz-image-upload/ibiz-image-upload.d.ts +2 -0
- package/es/editor/upload/use/use-iview-upload.mjs +12 -3
- package/es/locale/en/index.d.ts +7 -0
- package/es/locale/en/index.mjs +7 -0
- package/es/locale/zh-CN/index.d.ts +7 -0
- package/es/locale/zh-CN/index.mjs +7 -0
- package/es/panel-component/panel-static-carousel/panel-static-carousel.d.ts +1 -1
- package/es/panel-component/user-message/async-action/async-data-export/async-data-export.mjs +1 -1
- package/es/util/app-util/app-util.mjs +7 -7
- package/es/util/open-view-util/open-view-util.mjs +1 -1
- package/es/view-engine/gantt-view.engine.mjs +4 -0
- package/lib/common/action-toolbar/action-toolbar.cjs +49 -7
- package/lib/common/action-toolbar/action-toolbar.css +1 -1
- package/lib/common/index.cjs +1 -0
- package/lib/control/dashboard/dashboard.cjs +2 -1
- package/lib/control/dashboard/portlet/actionbar-portlet/actionbar-portlet.cjs +3 -0
- package/lib/control/dashboard/portlet/portlet-layout/portlet-layout.cjs +6 -3
- package/lib/control/data-view/data-view.cjs +3 -0
- package/lib/control/data-view/data-view.css +1 -1
- package/lib/control/form/edit-form/edit-form.cjs +10 -1
- package/lib/control/form/form/form.cjs +1 -0
- package/lib/control/form/form-detail/form-group-panel/form-group-panel.cjs +3 -0
- package/lib/control/form/form-detail/form-mdctrl/form-mdctrl-form/form-mdctrl-form.cjs +3 -1
- package/lib/control/form/form-detail/form-mdctrl/form-mdctrl.cjs +4 -1
- package/lib/control/form/form-detail/form-mdctrl/mdctrl-container/mdctrl-container.cjs +2 -2
- package/lib/control/grid/grid/grid.cjs +2 -6
- package/lib/control/grid/grid-column/grid-field-column/attachment-column/attachment-column.cjs +4 -3
- package/lib/control/grid/grid-column/grid-field-column/attachment-column/file-util.cjs +30 -3
- package/lib/control/grid/grid-column/grid-field-column/grid-field-column.cjs +1 -1
- package/lib/control/kanban/kanban.cjs +10 -5
- package/lib/control/kanban/kanban.css +1 -1
- package/lib/control/kanban/swimlane-kanban/swimlane-kanban.cjs +3 -0
- package/lib/control/kanban/swimlane-kanban/swimlane-kanban.css +1 -1
- package/lib/control/list/list.cjs +3 -0
- package/lib/control/search-bar/search-bar.cjs +25 -2
- package/lib/control/search-bar/search-bar.css +1 -1
- package/lib/control/search-bar/search-groups/search-groups.cjs +14 -1
- package/lib/control/search-bar/search-groups/search-groups.css +1 -1
- package/lib/control/toolbar/toolbar.cjs +1 -1
- package/lib/control/tree-grid/tree-grid.cjs +1 -0
- package/lib/control/tree-grid-ex/tree-grid-ex-column/tree-grid-ex-field-column/tree-grid-ex-field-column.cjs +8 -5
- package/lib/control/tree-grid-ex/tree-grid-ex.cjs +2 -1
- package/lib/editor/carousel/ibiz-carousel/ibiz-carousel.cjs +2 -2
- package/lib/editor/code/monaco-editor/monaco-editor.cjs +7 -3
- package/lib/editor/data-picker/ibiz-mpicker/ibiz-mpicker.cjs +4 -1
- package/lib/editor/html/wang-editor/wang-editor.cjs +10 -6
- package/lib/editor/index.cjs +6 -0
- package/lib/editor/markdown/ibiz-markdown-editor/ibiz-markdown-editor.cjs +2 -2
- package/lib/editor/text-box/index.cjs +2 -0
- package/lib/editor/text-box/input/input.cjs +7 -3
- package/lib/editor/text-box/signature/signature.cjs +240 -0
- package/lib/editor/text-box/signature/signature.css +1 -0
- package/lib/editor/text-box/text-box-editor.provider.cjs +4 -0
- package/lib/editor/upload/use/use-iview-upload.cjs +12 -3
- package/lib/locale/en/index.cjs +7 -0
- package/lib/locale/zh-CN/index.cjs +7 -0
- package/lib/panel-component/user-message/async-action/async-data-export/async-data-export.cjs +1 -1
- package/lib/util/app-util/app-util.cjs +7 -7
- package/lib/util/open-view-util/open-view-util.cjs +1 -1
- package/lib/view-engine/gantt-view.engine.cjs +4 -0
- package/package.json +7 -7
- package/dist/ibiz-markdown-editor-e33m6ees.js +0 -1
- package/dist/index-hzGAQk1t.js +0 -11
- package/dist/wang-editor-qbGW8Rzj.js +0 -1
|
@@ -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,
|
|
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":"
|
|
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,
|
|
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) => {
|
package/es/editor/index.mjs
CHANGED
|
@@ -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,
|
|
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
|
*/
|