@ibiz-template/mob-vue3-components 0.7.41-alpha.7 → 0.7.41-alpha.9

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 (142) hide show
  1. package/dist/{index-O-XmMUt3.js → index-JSf84k9b.js} +2 -2
  2. package/dist/index-JSf84k9b.js.map +1 -0
  3. package/dist/{index-NP0RBfWK.js → index-OsiEgFnw.js} +2 -2
  4. package/dist/index-OsiEgFnw.js.map +1 -0
  5. package/dist/index-m5kpisiW.js +76 -0
  6. package/dist/index-m5kpisiW.js.map +1 -0
  7. package/dist/index.min.css +8 -8
  8. package/dist/index.system.min.js +1 -1
  9. package/dist/{quill-editor-preview-Dui7L0ne.js → quill-editor-preview-4GJgBqkz.js} +2 -2
  10. package/dist/{quill-editor-preview-Dui7L0ne.js.map → quill-editor-preview-4GJgBqkz.js.map} +1 -1
  11. package/dist/{quill-editor-BMC0diFC.js → quill-editor-wtClM5Dv.js} +2 -2
  12. package/dist/{quill-editor-BMC0diFC.js.map → quill-editor-wtClM5Dv.js.map} +1 -1
  13. package/dist/{quill-O7hIDmrl.js → quill-fQu2PNuh.js} +2 -2
  14. package/dist/{quill-O7hIDmrl.js.map → quill-fQu2PNuh.js.map} +1 -1
  15. package/es/common/button-list/button-list.d.ts +1 -0
  16. package/es/common/date-range-picker/components/range-picker/range-picker.d.ts +1 -1
  17. package/es/common/date-range-picker/date-range-picker.d.ts +2 -2
  18. package/es/common/emoji-select/components/emoji-list/emoji-list.d.ts +1 -1
  19. package/es/common/emoji-select/icons/search.d.ts +1 -0
  20. package/es/common/index.mjs +2 -1
  21. package/es/common/md-ctrl-setting/md-ctrl-setting.d.ts +3 -3
  22. package/es/control/app-menu/custom-menu-design/custom-menu-design.d.ts +1 -1
  23. package/es/control/dashboard/portlet/portlet-part/portlet-part.state.d.ts +1 -0
  24. package/es/control/dashboard/portlet/portlet-part/portlet-part.state.mjs +1 -0
  25. package/es/control/data-view/data-view.d.ts +2 -2
  26. package/es/control/data-view/data-view.mjs +2 -3
  27. package/es/control/data-view/index.d.ts +2 -2
  28. package/es/control/drbar/drbar.controller.d.ts +1 -0
  29. package/es/control/drbar/drbar.controller.mjs +3 -0
  30. package/es/control/drbar/drbar.d.ts +2 -2
  31. package/es/control/drbar/index.d.ts +2 -2
  32. package/es/control/drtab/drtab.controller.d.ts +1 -0
  33. package/es/control/drtab/drtab.controller.mjs +3 -0
  34. package/es/control/drtab/drtab.d.ts +2 -2
  35. package/es/control/drtab/index.d.ts +2 -2
  36. package/es/control/form/form-detail/form-group-panel/form-group-panel.css +1 -1
  37. package/es/control/form/form-detail/form-item/form-item-container/form-item-container.d.ts +1 -1
  38. package/es/control/form/form-detail/form-mdctrl/form-mdctrl-form/form-mdctrl-form.d.ts +1 -1
  39. package/es/control/form/form-detail/form-mdctrl/mdctrl-container/mdctrl-container.d.ts +3 -3
  40. package/es/control/list/list/index.d.ts +2 -2
  41. package/es/control/list/list/list.d.ts +2 -2
  42. package/es/control/list/list-render-util.d.ts +1 -0
  43. package/es/control/list/md-ctrl/index.d.ts +2 -2
  44. package/es/control/list/md-ctrl/md-ctrl.d.ts +2 -2
  45. package/es/control/pickup-view-panel/pickup-view-panel.controller.d.ts +2 -0
  46. package/es/control/pickup-view-panel/pickup-view-panel.controller.mjs +3 -0
  47. package/es/control/search-bar/filter-tree/filter-tree.d.ts +2 -2
  48. package/es/control/toolbar/index.d.ts +2 -2
  49. package/es/control/toolbar/popper-toolbar/popper-toolbar.d.ts +1 -1
  50. package/es/control/toolbar/toolbar.d.ts +2 -2
  51. package/es/editor/data-picker/ibiz-mpicker/ibiz-mpicker.d.ts +1 -1
  52. package/es/editor/data-picker/ibiz-mpicker/ibiz-mpicker.mjs +144 -26
  53. package/es/editor/data-picker/ibiz-picker/ibiz-picker.d.ts +2 -2
  54. package/es/editor/date-range/ibiz-date-range-picker/ibiz-date-range-picker.d.ts +2 -2
  55. package/es/editor/dropdown-list/ibiz-dropdown/ibiz-dropdown.d.ts +2 -2
  56. package/es/editor/dropdown-list/ibiz-emoji-picker/ibiz-emoji-picker.d.ts +1 -0
  57. package/es/editor/index.mjs +7 -1
  58. package/es/editor/number-range/ibiz-number-range-picker/ibiz-number-range-picker.d.ts +1 -1
  59. package/es/editor/text-box/index.d.ts +1 -0
  60. package/es/editor/text-box/index.mjs +1 -0
  61. package/es/editor/text-box/signature/signature.css +1 -0
  62. package/es/editor/text-box/signature/signature.d.ts +104 -0
  63. package/es/editor/text-box/signature/signature.mjs +256 -0
  64. package/es/editor/text-box/text-box-editor.provider.mjs +3 -0
  65. package/es/index.mjs +1 -0
  66. package/es/locale/en/index.d.ts +28 -5
  67. package/es/locale/en/index.mjs +14 -0
  68. package/es/locale/zh-CN/index.d.ts +28 -5
  69. package/es/locale/zh-CN/index.mjs +14 -0
  70. package/es/mob-app/App.mjs +17 -1
  71. package/es/mob-app/guard/auth-guard/auth-guard.mjs +95 -2
  72. package/es/mob-app/util/unauthorized-handler/unauthorized-handler.d.ts +13 -5
  73. package/es/mob-app/util/unauthorized-handler/unauthorized-handler.mjs +50 -15
  74. package/es/panel-component/auth-sso/auth-sso.css +1 -1
  75. package/es/panel-component/auth-sso/auth-sso.d.ts +8 -3
  76. package/es/panel-component/auth-sso/auth-sso.mjs +78 -6
  77. package/es/panel-component/auth-sso/index.d.ts +7 -1
  78. package/es/panel-component/user-message/index.d.ts +1 -1
  79. package/es/panel-component/user-message/user-message.d.ts +1 -1
  80. package/es/util/app-util/app-util.d.ts +59 -1
  81. package/es/util/app-util/app-util.mjs +56 -1
  82. package/es/view-engine/login-view.engine.d.ts +2 -2
  83. package/es/view-engine/login-view.engine.mjs +2 -0
  84. package/es/view-engine/mob-data-view-engine.d.ts +2 -2
  85. package/es/view-engine/mob-data-view-engine.mjs +0 -1
  86. package/es/view-engine/mob-edit-view.engine.d.ts +2 -2
  87. package/es/view-engine/mob-edit-view.engine.mjs +5 -1
  88. package/es/view-engine/mob-md-view-engine.d.ts +2 -2
  89. package/es/view-engine/mob-md-view-engine.mjs +0 -1
  90. package/es/view-engine/mob-mpickup-view-engine.d.ts +20 -14
  91. package/es/view-engine/mob-mpickup-view-engine.mjs +34 -26
  92. package/es/view-engine/mob-opt-view.engine.d.ts +2 -2
  93. package/es/view-engine/mob-pickup-md-view.engine.d.ts +2 -2
  94. package/es/view-engine/mob-pickup-md-view.engine.mjs +0 -1
  95. package/es/view-engine/mob-pickup-view.engine.d.ts +9 -2
  96. package/es/view-engine/mob-pickup-view.engine.mjs +15 -1
  97. package/es/view-engine/mob-tab-search-view.engine.d.ts +2 -2
  98. package/es/view-engine/mob-tab-search-view.engine.mjs +0 -1
  99. package/es/view-engine/mob-wf-dyna-action-view.engine.d.ts +2 -2
  100. package/es/view-engine/mob-wf-dyna-action-view.engine.mjs +0 -1
  101. package/es/view-engine/mob-wf-dyna-edit-view.engine.d.ts +2 -2
  102. package/es/view-engine/mob-wf-dyna-edit-view.engine.mjs +0 -1
  103. package/es/view-engine/mob-wf-dyna-start-view.engine.d.ts +2 -2
  104. package/es/view-engine/mob-wf-dyna-start-view.engine.mjs +0 -1
  105. package/lib/common/index.cjs +1 -0
  106. package/lib/control/dashboard/portlet/portlet-part/portlet-part.state.cjs +1 -0
  107. package/lib/control/data-view/data-view.cjs +2 -3
  108. package/lib/control/drbar/drbar.controller.cjs +3 -0
  109. package/lib/control/drtab/drtab.controller.cjs +3 -0
  110. package/lib/control/form/form-detail/form-group-panel/form-group-panel.css +1 -1
  111. package/lib/control/pickup-view-panel/pickup-view-panel.controller.cjs +3 -0
  112. package/lib/editor/data-picker/ibiz-mpicker/ibiz-mpicker.cjs +144 -26
  113. package/lib/editor/index.cjs +7 -0
  114. package/lib/editor/text-box/index.cjs +2 -0
  115. package/lib/editor/text-box/signature/signature.cjs +258 -0
  116. package/lib/editor/text-box/signature/signature.css +1 -0
  117. package/lib/editor/text-box/text-box-editor.provider.cjs +3 -0
  118. package/lib/index.cjs +2 -0
  119. package/lib/locale/en/index.cjs +14 -0
  120. package/lib/locale/zh-CN/index.cjs +14 -0
  121. package/lib/mob-app/App.cjs +16 -0
  122. package/lib/mob-app/guard/auth-guard/auth-guard.cjs +95 -2
  123. package/lib/mob-app/util/unauthorized-handler/unauthorized-handler.cjs +50 -15
  124. package/lib/panel-component/auth-sso/auth-sso.cjs +77 -5
  125. package/lib/panel-component/auth-sso/auth-sso.css +1 -1
  126. package/lib/util/app-util/app-util.cjs +55 -0
  127. package/lib/view-engine/login-view.engine.cjs +2 -0
  128. package/lib/view-engine/mob-data-view-engine.cjs +0 -1
  129. package/lib/view-engine/mob-edit-view.engine.cjs +5 -1
  130. package/lib/view-engine/mob-md-view-engine.cjs +0 -1
  131. package/lib/view-engine/mob-mpickup-view-engine.cjs +34 -26
  132. package/lib/view-engine/mob-pickup-md-view.engine.cjs +0 -1
  133. package/lib/view-engine/mob-pickup-view.engine.cjs +15 -1
  134. package/lib/view-engine/mob-tab-search-view.engine.cjs +0 -1
  135. package/lib/view-engine/mob-wf-dyna-action-view.engine.cjs +0 -1
  136. package/lib/view-engine/mob-wf-dyna-edit-view.engine.cjs +0 -1
  137. package/lib/view-engine/mob-wf-dyna-start-view.engine.cjs +0 -1
  138. package/package.json +6 -6
  139. package/dist/index-NP0RBfWK.js.map +0 -1
  140. package/dist/index-O-XmMUt3.js.map +0 -1
  141. package/dist/index-komJV5bQ.js +0 -76
  142. package/dist/index-komJV5bQ.js.map +0 -1
@@ -1,5 +1,6 @@
1
1
  import { ref, watch, computed, resolveComponent, createVNode, defineComponent } from 'vue';
2
2
  import { getDataPickerProps, getEditorEmits, useNamespace } from '@ibiz-template/vue3-util';
3
+ import { clone } from 'lodash-es';
3
4
  import './ibiz-mpicker.css';
4
5
  import { IBizDataMPicker } from '../../common/data-mpicker/ibiz-data-mpicker.mjs';
5
6
  import { IBizCommonRightIcon } from '../../common/right-icon/right-icon.mjs';
@@ -24,39 +25,119 @@ const IBizMPicker = /* @__PURE__ */ defineComponent({
24
25
  value: item[c.keyName] || item.srfkey,
25
26
  srfmajortext: item[c.textName] || item.srfmajortext,
26
27
  text: item[c.textName] || item.srfmajortext,
28
+ [c.keyName]: item[c.keyName] || item.srfkey,
29
+ [c.textName]: item[c.textName] || item.srfmajortext,
27
30
  ...item
28
31
  };
29
32
  };
30
- watch(() => props.value, (newVal) => {
33
+ const resetCurValue = () => {
31
34
  curValue.value = [];
32
35
  selectItems.value = [];
33
- if (newVal) {
34
- selectItems.value = JSON.parse(newVal).map(formatter);
36
+ if (props.value) {
37
+ if (c.model.valueType === "OBJECTS") {
38
+ props.value.forEach((item) => {
39
+ const _item = clone(item);
40
+ Object.assign(_item, {
41
+ [c.keyName]: item[c.objectIdField],
42
+ [c.textName]: item[c.objectNameField]
43
+ });
44
+ if (c.objectValueField) {
45
+ Object.assign(_item, {
46
+ ...item[c.objectValueField]
47
+ });
48
+ delete _item[c.objectValueField];
49
+ }
50
+ if (_item[c.keyName]) {
51
+ selectItems.value.push(formatter(_item));
52
+ }
53
+ });
54
+ } else if (c.objectIdField && c.model.valueSeparator) {
55
+ const values = props.value.split(c.model.valueSeparator);
56
+ values.forEach((value) => {
57
+ selectItems.value.push(formatter({
58
+ [c.keyName]: value
59
+ }));
60
+ });
61
+ } else {
62
+ try {
63
+ selectItems.value = JSON.parse(props.value).map(formatter);
64
+ } catch (error) {
65
+ ibiz.log.error(ibiz.i18n.t("editor.mpicker.simpleErr", {
66
+ value: props.value
67
+ }));
68
+ }
69
+ }
35
70
  selectItems.value.forEach((item) => {
36
- curValue.value.push(item.srfkey);
37
- const index = items.value.findIndex((i) => Object.is(i.srfkey, item.srfkey));
71
+ curValue.value.push(item[c.keyName]);
72
+ const index = items.value.findIndex(
73
+ (i) => Object.is(i[c.keyName], item[c.keyName]) || Object.is(i.srfkey, item.srfkey)
74
+ // 兼容写法,适配移动端老逻辑
75
+ );
38
76
  if (index < 0) {
39
77
  items.value.push(formatter(item));
40
78
  }
41
79
  });
42
80
  }
81
+ };
82
+ watch(() => props.value, () => {
83
+ resetCurValue();
43
84
  }, {
44
85
  immediate: true,
45
86
  deep: true
46
87
  });
47
- const handleOpenViewClose = (result) => {
48
- const valArr = [];
88
+ const handleOpenViewClose = async (result) => {
89
+ const selects = [];
49
90
  if (result && Array.isArray(result)) {
50
- result.forEach((select) => {
51
- const formattedItem = formatter(select);
52
- valArr.push(formattedItem);
91
+ const calcPromises = result.map(async (select) => {
92
+ const item = formatter(select);
93
+ if (select.srfnodeid) {
94
+ Object.assign(item, select._deData);
95
+ }
96
+ const dataItems = await c.calcFillDataItems(item);
97
+ const res = {};
98
+ dataItems.forEach((dataItem) => {
99
+ Object.assign(res, {
100
+ [dataItem.id]: dataItem.value
101
+ });
102
+ });
103
+ return res;
104
+ });
105
+ const dataItemsList = await Promise.all(calcPromises);
106
+ result.forEach((select, _index) => {
107
+ Object.assign(select, {
108
+ ...formatter(select),
109
+ [c.keyName]: select[c.keyName] ? select[c.keyName] : select.srfkey,
110
+ [c.textName]: select[c.textName] ? select[c.textName] : select.srfmajortext
111
+ });
112
+ const data = dataItemsList[_index];
113
+ if (c.model.valueType === "OBJECTS") {
114
+ selects.push({
115
+ ...c.handleObjectParams(select),
116
+ ...data
117
+ });
118
+ } else if (c.objectIdField && c.model.valueSeparator) {
119
+ selects.push(select[c.keyName]);
120
+ } else {
121
+ selects.push({
122
+ [c.keyName]: select[c.keyName],
123
+ [c.textName]: select[c.textName],
124
+ ...data
125
+ });
126
+ }
53
127
  const index = items.value.findIndex((item) => Object.is(item[c.keyName], select[c.keyName]));
54
128
  if (index < 0) {
55
- items.value.push(formattedItem);
129
+ items.value.push(select);
56
130
  }
57
131
  });
58
132
  }
59
- const value = valArr.length > 0 ? JSON.stringify(valArr) : "";
133
+ let value = null;
134
+ if (selects.length > 0) {
135
+ if (c.model.valueType === "OBJECTS") {
136
+ value = selects;
137
+ } else {
138
+ value = c.objectIdField && c.model.valueSeparator ? selects.join(c.model.valueSeparator) : JSON.stringify(selects);
139
+ }
140
+ }
60
141
  emit("change", value);
61
142
  };
62
143
  const openPickUpView = async (event) => {
@@ -74,21 +155,58 @@ const IBizMPicker = /* @__PURE__ */ defineComponent({
74
155
  handleOpenViewClose(res);
75
156
  }
76
157
  };
77
- const onSelect = (selects) => {
78
- const valArr = [];
79
- if (selects.length > 0) {
80
- selects.forEach((select) => {
81
- const findItem = items.value.find((item) => Object.is(item.srfkey, select));
82
- if (findItem) {
83
- valArr.push(formatter(findItem));
158
+ const onSelect = async (selects) => {
159
+ const val = [];
160
+ let value = null;
161
+ const selections = selects.map((select) => {
162
+ let index = items.value.findIndex((item2) => Object.is(item2[c.keyName], select));
163
+ let item = {};
164
+ if (index >= 0) {
165
+ item = items.value[index];
166
+ } else {
167
+ index = selectItems.value.findIndex((selectItem) => Object.is(selectItem[c.keyName], select));
168
+ if (index >= 0) {
169
+ item = selectItems.value[index];
84
170
  }
171
+ }
172
+ return item;
173
+ });
174
+ const calcPromises = selections.map(async (select) => {
175
+ const dataItems = await c.calcFillDataItems(select);
176
+ const res = {};
177
+ dataItems.forEach((dataItem) => {
178
+ Object.assign(res, {
179
+ [dataItem.id]: dataItem.value
180
+ });
85
181
  });
86
- const value = valArr.length > 0 ? JSON.stringify(valArr) : "";
87
- selectItems.value = valArr;
88
- emit("change", value);
89
- } else {
90
- emit("change", "");
182
+ return res;
183
+ });
184
+ const dataItemsList = await Promise.all(calcPromises);
185
+ selections.forEach((item, index) => {
186
+ const data = dataItemsList[index];
187
+ if (c.model.valueType === "OBJECTS") {
188
+ val.push({
189
+ ...c.handleObjectParams(item),
190
+ ...data
191
+ });
192
+ } else if (c.objectIdField && c.model.valueSeparator) {
193
+ val.push(item[c.keyName]);
194
+ } else {
195
+ val.push({
196
+ [c.keyName]: item[c.keyName],
197
+ [c.textName]: item[c.textName],
198
+ ...data
199
+ });
200
+ }
201
+ });
202
+ if (val.length > 0) {
203
+ if (c.model.valueType === "OBJECTS") {
204
+ value = val;
205
+ } else {
206
+ value = c.objectIdField && c.model.valueSeparator ? val.join(c.model.valueSeparator) : JSON.stringify(val);
207
+ }
91
208
  }
209
+ emit("change", value);
92
210
  };
93
211
  const onSearch = async (query = "") => {
94
212
  if (c.model.appDataEntityId) {
@@ -111,7 +229,7 @@ const IBizMPicker = /* @__PURE__ */ defineComponent({
111
229
  selectItems.value.forEach((select) => {
112
230
  if (c.model.valueType === "OBJECTS") {
113
231
  val.push(c.handleObjectParams(select));
114
- } else if (c.objectIdField) {
232
+ } else if (c.objectIdField && c.model.valueSeparator) {
115
233
  val.push(select[c.keyName]);
116
234
  } else {
117
235
  val.push({
@@ -124,7 +242,7 @@ const IBizMPicker = /* @__PURE__ */ defineComponent({
124
242
  if (c.model.valueType === "OBJECTS") {
125
243
  value = val;
126
244
  } else {
127
- value = c.objectIdField ? val.join(c.model.valueSeparator) : JSON.stringify(val);
245
+ value = c.objectIdField && c.model.valueSeparator ? val.join(c.model.valueSeparator) : JSON.stringify(val);
128
246
  }
129
247
  }
130
248
  emit("change", value);
@@ -50,8 +50,8 @@ export declare const IBizPicker: import("vue").DefineComponent<{
50
50
  onConfirm: (item: IData) => void;
51
51
  showPicker: Ref<boolean>;
52
52
  openPicker: () => Promise<void>;
53
- renderPopHeader: () => JSX.Element;
54
- renderPopContent: () => JSX.Element;
53
+ renderPopHeader: () => import("vue/jsx-runtime").JSX.Element;
54
+ renderPopContent: () => import("vue/jsx-runtime").JSX.Element;
55
55
  }, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
56
56
  change: (_value: unknown, _name?: string | undefined, _ignore?: boolean | undefined) => boolean;
57
57
  blur: (_event?: import("@ibiz-template/core").IApiData | undefined) => boolean;
@@ -51,10 +51,10 @@ export declare const IBizDateRangePicker: import("vue").DefineComponent<{
51
51
  rangeText: import("vue").ComputedRef<string>;
52
52
  showmode: "DEFAULT" | "CALENDAR";
53
53
  openCalendar: () => void;
54
- renderCalendarMode: () => JSX.Element;
54
+ renderCalendarMode: () => import("vue/jsx-runtime").JSX.Element;
55
55
  onFocus: () => void;
56
56
  onBlur: () => void;
57
- expandHidden: (text: string) => JSX.Element;
57
+ expandHidden: (text: string) => import("vue/jsx-runtime").JSX.Element;
58
58
  }, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
59
59
  change: (_value: unknown, _name?: string | undefined, _ignore?: boolean | undefined) => boolean;
60
60
  blur: (_event?: import("@ibiz-template/core").IApiData | undefined) => boolean;
@@ -43,8 +43,8 @@ export declare const IBizDropdown: import("vue").DefineComponent<{
43
43
  treeNodes: Ref<import("@ibiz-template/core").IApiData[]>;
44
44
  showPicker: Ref<boolean>;
45
45
  getCodeListItem: (text: string | undefined) => import("@ibiz-template/core").IApiData | undefined;
46
- renderPopHeader: () => JSX.Element;
47
- renderPopContent: () => JSX.Element;
46
+ renderPopHeader: () => import("vue/jsx-runtime").JSX.Element;
47
+ renderPopContent: () => import("vue/jsx-runtime").JSX.Element;
48
48
  }, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
49
49
  change: (_value: unknown, _name?: string | undefined, _ignore?: boolean | undefined) => boolean;
50
50
  blur: (_event?: import("@ibiz-template/core").IApiData | undefined) => boolean;
@@ -1,4 +1,5 @@
1
1
  import './ibiz-emoji-picker.scss';
2
+ import { JSX } from 'vue/jsx-runtime';
2
3
  import { DropDownListEditorController } from '../dropdown-list-editor.controller';
3
4
  /**
4
5
  * 表情选择器(扩展)
@@ -26,6 +26,7 @@ import './check-box/index.mjs';
26
26
  import './common/index.mjs';
27
27
  import { IBizInput } from './text-box/input/input.mjs';
28
28
  import { IBizInputNumber } from './text-box/ibiz-input-number/ibiz-input-number.mjs';
29
+ import { IBizSignature } from './text-box/signature/signature.mjs';
29
30
  import { IBizSpan } from './span/span/span.mjs';
30
31
  import { IBizSwitch } from './switch/ibiz-switch/ibiz-switch.mjs';
31
32
  import { IBizRadio } from './radio-button-list/ibiz-radio/ibiz-radio.mjs';
@@ -101,6 +102,7 @@ const IBizEditor = {
101
102
  v.component(NotSupportedEditor.name, NotSupportedEditor);
102
103
  v.component(IBizInput.name, IBizInput);
103
104
  v.component(IBizInputNumber.name, IBizInputNumber);
105
+ v.component(IBizSignature.name, IBizSignature);
104
106
  v.component(IBizSpan.name, IBizSpan);
105
107
  v.component(IBizSwitch.name, IBizSwitch);
106
108
  v.component(IBizRadio.name, IBizRadio);
@@ -159,6 +161,10 @@ const IBizEditor = {
159
161
  registerEditorProvider("PASSWORD", () => textBoxEditorProvider);
160
162
  registerEditorProvider("TEXTAREA", () => textBoxEditorProvider);
161
163
  registerEditorProvider("NUMBER", () => new TextBoxEditorProvider("NUMBER"));
164
+ registerEditorProvider(
165
+ "MOBTEXT_SIGNATURE",
166
+ () => new TextBoxEditorProvider("SIGNATURE")
167
+ );
162
168
  registerEditorProvider(
163
169
  "MOBDROPDOWNLIST",
164
170
  () => new DropDownListEditorProvider()
@@ -378,4 +384,4 @@ const IBizEditor = {
378
384
  }
379
385
  };
380
386
 
381
- export { CascaderEditorProvider, CheckBoxListEditorProvider, ColorPickerEditorProvider, DataPickerEditorProvider, DatePickerEditorProvider, DateRangeEditorProvider, DropDownListEditorProvider, FileUploaderEditorProvider, HtmlEditorProvider, IBizCascader, IBizCheckboxList, IBizColorPicker, IBizDatePicker, IBizDateRangePicker, IBizDropdown, IBizEditor, IBizEditorCarousel, IBizEmojiPicker, IBizFileUpload, IBizImageCropping, IBizImageSelect, IBizImageUpload, IBizInput, IBizInputNumber, IBizMPicker, IBizNumberRangePicker, IBizPicker, IBizPickerSelectView, IBizRadio, IBizRate, IBizSlider, IBizSpan, IBizStepper, IBizSwitch, MarkDownEditorProvider, NumberRangeEditorProvider, RadioButtonListEditorProvider, RateEditorProvider, SliderEditorProvider, SpanEditorProvider, StepperEditorProvider, SwitchEditorProvider, TextBoxEditorProvider, IBizEditor as default };
387
+ export { CascaderEditorProvider, CheckBoxListEditorProvider, ColorPickerEditorProvider, DataPickerEditorProvider, DatePickerEditorProvider, DateRangeEditorProvider, DropDownListEditorProvider, FileUploaderEditorProvider, HtmlEditorProvider, IBizCascader, IBizCheckboxList, IBizColorPicker, IBizDatePicker, IBizDateRangePicker, IBizDropdown, IBizEditor, IBizEditorCarousel, IBizEmojiPicker, IBizFileUpload, IBizImageCropping, IBizImageSelect, IBizImageUpload, IBizInput, IBizInputNumber, IBizMPicker, IBizNumberRangePicker, IBizPicker, IBizPickerSelectView, IBizRadio, IBizRate, IBizSignature, IBizSlider, IBizSpan, IBizStepper, IBizSwitch, MarkDownEditorProvider, NumberRangeEditorProvider, RadioButtonListEditorProvider, RateEditorProvider, SliderEditorProvider, SpanEditorProvider, StepperEditorProvider, SwitchEditorProvider, TextBoxEditorProvider, IBizEditor as default };
@@ -52,7 +52,7 @@ export declare const IBizNumberRangePicker: import("vue").DefineComponent<{
52
52
  endPlaceHolder: string;
53
53
  rangeSeparator: string;
54
54
  editorRef: Ref<any>;
55
- renderClear: () => JSX.Element | null;
55
+ renderClear: () => import("vue/jsx-runtime").JSX.Element | null;
56
56
  }, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
57
57
  change: (_value: unknown, _name?: string | undefined, _ignore?: boolean | undefined) => boolean;
58
58
  blur: (_event?: import("@ibiz-template/core").IApiData | undefined) => boolean;
@@ -1,4 +1,5 @@
1
1
  export { IBizInput } from './input/input';
2
2
  export { IBizInputNumber } from './ibiz-input-number/ibiz-input-number';
3
+ export { IBizSignature } from './signature/signature';
3
4
  export * from './text-box-editor.controller';
4
5
  export * from './text-box-editor.provider';
@@ -1,5 +1,6 @@
1
1
  export { IBizInput } from './input/input.mjs';
2
2
  export { IBizInputNumber } from './ibiz-input-number/ibiz-input-number.mjs';
3
+ export { IBizSignature } from './signature/signature.mjs';
3
4
  export { TextBoxEditorController } from './text-box-editor.controller.mjs';
4
5
  export { TextBoxEditorProvider } from './text-box-editor.provider.mjs';
5
6
 
@@ -0,0 +1 @@
1
+ .ibiz-signature{position:relative;width:100%;height:100%;overflow:hidden;border:none;border-radius:var(--ibiz-border-radius-large)}.ibiz-signature__modal{position:absolute;z-index:6;display:flex;align-items:center;justify-content:center;width:100%;height:100%}.ibiz-signature__modal--background{width:100%;height:100%;background-color:var(--ibiz-color-black);opacity:.1}.ibiz-signature__modal--caption{position:absolute;color:var(--ibiz-color-text-2)}.ibiz-signature__modal--toolbar{position:absolute;top:var(--ibiz-spacing-tight);right:var(--ibiz-spacing-tight)}.ibiz-signature__modal--toolbar .van-button{width:var(--ibiz-spacing-loose);height:auto;height:var(--ibiz-spacing-loose);background-color:var(--van-uploader-delete-background);border:var(--van-uploader-delete-background);opacity:.6}.ibiz-signature__modal--toolbar .van-button+.van-button{margin-left:var(--ibiz-spacing-loose)}.ibiz-signature__content{width:100%;height:100%;background-repeat:no-repeat;background-position:center center;background-size:contain}.ibiz-signature__readonly .ibiz-signature__modal--toolbar{display:none}.ibiz-signature-overlay{--ibiz-signature-overlay-padding-bottom:0px;position:absolute;z-index:1;width:0;height:0;background-color:var(--ibiz-color-bg-1);opacity:0}.ibiz-signature-overlay.is-full-screen{position:fixed;inset:0;z-index:9999;width:100vw;height:100vh;opacity:1}.ibiz-signature-overlay.is-full-screen .ibiz-signature-overlay__container{position:absolute;top:0;left:0;width:calc(100vh - var(--ibiz-signature-overlay-padding-bottom));height:100vw;transform:rotate(90deg) translateY(-100%);transform-origin:top left}.ibiz-signature-overlay.is-full-screen .ibiz-signature-overlay__header{position:absolute;z-index:6;padding:var(--ibiz-spacing-extra-tight);text-align:left}.ibiz-signature-overlay.is-full-screen .ibiz-signature-overlay__footer{position:absolute;right:var(--ibiz-spacing-tight);bottom:var(--ibiz-spacing-base);z-index:6}.ibiz-signature-overlay.is-full-screen .ibiz-signature-overlay__footer .van-button{height:auto;padding:var(--ibiz-spacing-tight) var(--ibiz-spacing-loose);font-size:var(--ibiz-font-size-header-6)}.ibiz-signature-overlay.is-full-screen .ibiz-signature-overlay__footer .van-button+.van-button{margin-left:var(--ibiz-spacing-loose)}.ibiz-signature-overlay.is-full-screen .ibiz-signature-overlay__pad{position:absolute;top:0;left:0;width:100vw;height:calc(100vh - var(--ibiz-signature-overlay-padding-bottom));transform:rotate(-90deg) translateX(-100%);transform-origin:top left}.ibiz-signature-overlay.is-readonly .ibiz-signature-pad-container__footer .van-button+.van-button,.ibiz-signature-overlay.is-readonly .ibiz-signature-pad-container__header{display:none}.ibiz-signature-overlay.is-readonly .ibiz-signature-pad{pointer-events:none}.ibiz-signature-overlay.is-disabled .ibiz-signature-pad{pointer-events:none}
@@ -0,0 +1,104 @@
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:"Array<{label: string;type: string;buttonType?: string}>","defaultvalue":[{"label":"撤销","type":"UNDO"},{"label":"重写","type":"REWRITE"},{"label":"确认","type":"CONFIRM","buttonType":"PRIMARY"}],description:配置全屏签名面板的操作按钮。数组中每个对象表示一个按钮: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、rgb(255,0,0)等)}
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:canvascontextoptions,parameterType:'object',defaultvalue:'{}',description:Canvas 2D上下文初始化配置。用于设置Canvas渲染上下文的额外参数(如alpha、willReadFrequently等CanvasRenderingContext2DSettings属性)}
20
+ * @ignoreprops overflowMode
21
+ * @ignoreemits infoTextChange
22
+ */
23
+ export declare const IBizSignature: import("vue").DefineComponent<{
24
+ value: (StringConstructor | NumberConstructor)[];
25
+ controller: import("@ibiz-template/vue3-util").RequiredProp<import("vue").PropType<TextBoxEditorController>, undefined, undefined>;
26
+ data: import("@ibiz-template/vue3-util").RequiredProp<import("vue").PropType<import("@ibiz-template/core").IApiData>, undefined, undefined>;
27
+ disabled: {
28
+ type: BooleanConstructor;
29
+ };
30
+ readonly: {
31
+ type: BooleanConstructor;
32
+ default: boolean;
33
+ };
34
+ autoFocus: {
35
+ type: BooleanConstructor;
36
+ default: boolean;
37
+ };
38
+ overflowMode: {
39
+ type: StringConstructor;
40
+ };
41
+ controlParams: {
42
+ type: ObjectConstructor;
43
+ required: boolean;
44
+ };
45
+ }, {
46
+ c: TextBoxEditorController;
47
+ ns: import("@ibiz-template/core").Namespace;
48
+ signatureRef: Ref<any>;
49
+ fullScreen: Ref<boolean>;
50
+ currentDataURL: Ref<string>;
51
+ buttons: ({
52
+ label: string;
53
+ type: string;
54
+ buttonType?: undefined;
55
+ } | {
56
+ label: string;
57
+ type: string;
58
+ buttonType: string;
59
+ })[];
60
+ getSafeDistance: () => string;
61
+ handleModalClick: () => void;
62
+ handleConfirm: () => void;
63
+ handleRemove: (_evt: MouseEvent) => void;
64
+ handlePadContainerClick: () => void;
65
+ handleButtonClick: (_type: string) => void;
66
+ }, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
67
+ change: (_value: unknown, _name?: string | undefined, _ignore?: boolean | undefined) => boolean;
68
+ blur: (_event?: import("@ibiz-template/core").IApiData | undefined) => boolean;
69
+ focus: (_event?: import("@ibiz-template/core").IApiData | undefined) => boolean;
70
+ enter: (_event?: import("@ibiz-template/core").IApiData | undefined) => boolean;
71
+ infoTextChange: (_text: string) => boolean;
72
+ }, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
73
+ value: (StringConstructor | NumberConstructor)[];
74
+ controller: import("@ibiz-template/vue3-util").RequiredProp<import("vue").PropType<TextBoxEditorController>, undefined, undefined>;
75
+ data: import("@ibiz-template/vue3-util").RequiredProp<import("vue").PropType<import("@ibiz-template/core").IApiData>, undefined, undefined>;
76
+ disabled: {
77
+ type: BooleanConstructor;
78
+ };
79
+ readonly: {
80
+ type: BooleanConstructor;
81
+ default: boolean;
82
+ };
83
+ autoFocus: {
84
+ type: BooleanConstructor;
85
+ default: boolean;
86
+ };
87
+ overflowMode: {
88
+ type: StringConstructor;
89
+ };
90
+ controlParams: {
91
+ type: ObjectConstructor;
92
+ required: boolean;
93
+ };
94
+ }>> & {
95
+ onFocus?: ((_event?: import("@ibiz-template/core").IApiData | undefined) => any) | undefined;
96
+ onBlur?: ((_event?: import("@ibiz-template/core").IApiData | undefined) => any) | undefined;
97
+ onChange?: ((_value: unknown, _name?: string | undefined, _ignore?: boolean | undefined) => any) | undefined;
98
+ onInfoTextChange?: ((_text: string) => any) | undefined;
99
+ onEnter?: ((_event?: import("@ibiz-template/core").IApiData | undefined) => any) | undefined;
100
+ }, {
101
+ disabled: boolean;
102
+ readonly: boolean;
103
+ autoFocus: boolean;
104
+ }, {}>;