cnhis-design-vue 3.3.3-release.7 → 3.3.3-release.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 (80) hide show
  1. package/es/components/audio-sdk/index.d.ts +5 -5
  2. package/es/components/audio-sdk/src/Index.vue.d.ts +5 -5
  3. package/es/components/audio-sdk/src/Index.vue2.js +4 -1
  4. package/es/components/audio-sdk/src/components/recording-modal.vue.d.ts +5 -5
  5. package/es/components/audio-sdk/src/components/recording.vue.d.ts +5 -5
  6. package/es/components/audio-sdk/src/utils/recorder/fft.d.ts +4 -0
  7. package/es/components/audio-sdk/src/utils/recorder/mp3-engine.d.ts +4 -0
  8. package/es/components/audio-sdk/src/utils/recorder/mp3.d.ts +4 -0
  9. package/es/components/audio-sdk/src/utils/recorder/recorder.d.ts +4 -0
  10. package/es/components/audio-sdk/src/utils/recorder/wave.d.ts +4 -0
  11. package/es/components/bpmn-workflow/src/BpmnWorkflow.d.ts +0 -0
  12. package/es/components/bpmn-workflow/types/BpmnViewer.d.ts +1 -0
  13. package/es/components/bpmn-workflow/types/ModelingModule.d.ts +1 -0
  14. package/es/components/bpmn-workflow/types/MoveCanvasModule.d.ts +1 -0
  15. package/es/components/button-print/src/components/OldPrintComponent.vue2.js +1 -1
  16. package/es/components/card-render/src/components/index.d.ts +23 -23
  17. package/es/components/date-picker/src/DatePicker.vue2.js +8 -1
  18. package/es/components/field-set/src/FieldColor.vue.d.ts +3 -1
  19. package/es/components/field-set/src/FieldFilter.vue.d.ts +3 -1
  20. package/es/components/field-set/src/FieldSet.vue.d.ts +4 -1
  21. package/es/components/field-set/src/FieldSet.vue2.js +6 -4
  22. package/es/components/field-set/src/components/table-row.vue.d.ts +1 -1
  23. package/es/components/field-set/src/types/index.d.ts +1 -0
  24. package/es/components/form-config/src/components/FormConfigEventSetting.vue2.js +1 -1
  25. package/es/components/form-render/src/components/renderer/searchCascade.js +3 -0
  26. package/es/components/form-render/src/hooks/useLowCodeReactions.js +2 -1
  27. package/es/components/iho-chat/index.d.ts +7 -4
  28. package/es/components/iho-chat/src/Index.vue.d.ts +7 -4
  29. package/es/components/iho-chat/src/components/ChatFile.vue.d.ts +2 -2
  30. package/es/components/iho-chat/src/components/ChatFile.vue2.js +5 -15
  31. package/es/components/iho-chat/src/components/ChatFooter.vue.d.ts +3 -0
  32. package/es/components/iho-chat/src/components/ChatFooter.vue2.js +33 -6
  33. package/es/components/iho-chat/src/components/ChatHeader.vue.d.ts +2 -2
  34. package/es/components/iho-chat/src/components/ChatMain.vue.d.ts +3 -3
  35. package/es/components/iho-chat/src/components/ChatMain.vue2.js +7 -15
  36. package/es/components/iho-chat/src/components/ChatRecord.vue.d.ts +2 -2
  37. package/es/components/iho-chat/src/components/ChatRecord.vue2.js +3 -3
  38. package/es/components/iho-chat/src/components/ContextMenu.js +3 -11
  39. package/es/components/iho-chat/src/components/MessageMergeForward.vue.d.ts +2 -2
  40. package/es/components/iho-chat/src/components/MessageMergeForward.vue2.js +3 -3
  41. package/es/components/iho-chat/src/hooks/useData.js +2 -7
  42. package/es/components/iho-chat/src/hooks/useDraggable.js +12 -3
  43. package/es/components/iho-chat/src/utils/index.d.ts +2 -3
  44. package/es/components/iho-chat/src/utils/index.js +20 -39
  45. package/es/components/iho-table/src/plugins/filterRenderPlugin/filter.vue2.js +8 -1
  46. package/es/components/iho-table/src/plugins/headerPlugin/index.js +5 -2
  47. package/es/components/iho-table/src/plugins/highLightSetPlugin.js +2 -1
  48. package/es/components/select-person/src/SelectPerson.vue2.js +1 -1
  49. package/es/shared/assets/img/defaultCover/10review_successful.png.js +1 -1
  50. package/es/shared/assets/img/defaultCover/11review_fail.png.js +1 -1
  51. package/es/shared/assets/img/defaultCover/12no_setting.png.js +1 -1
  52. package/es/shared/assets/img/defaultCover/13no_menu_setting.png.js +1 -1
  53. package/es/shared/assets/img/defaultCover/14no_call_setting.png.js +1 -1
  54. package/es/shared/assets/img/defaultCover/15no_use_tag.png.js +1 -1
  55. package/es/shared/assets/img/defaultCover/16no_table_data.png.js +1 -1
  56. package/es/shared/assets/img/defaultCover/1location.png.js +1 -1
  57. package/es/shared/assets/img/defaultCover/2notfound.png.js +1 -1
  58. package/es/shared/assets/img/defaultCover/3loading.png.js +1 -1
  59. package/es/shared/assets/img/defaultCover/4no_permission.png.js +1 -1
  60. package/es/shared/assets/img/defaultCover/5no_data.png.js +1 -1
  61. package/es/shared/assets/img/defaultCover/6no_network.png.js +1 -1
  62. package/es/shared/assets/img/defaultCover/7no_doctor.png.js +1 -1
  63. package/es/shared/assets/img/defaultCover/8system_error.png.js +1 -1
  64. package/es/shared/assets/img/defaultCover/9system_upgrade.png.js +1 -1
  65. package/es/shared/assets/img/failure.png.js +1 -1
  66. package/es/shared/assets/img/no-permission.png.js +1 -1
  67. package/es/shared/assets/img/nodata.png.js +1 -1
  68. package/es/shared/assets/img/notfound.png.js +1 -1
  69. package/es/shared/assets/img/qr.png.js +1 -1
  70. package/es/shared/assets/img/success.png.js +1 -1
  71. package/es/shared/assets/img/table_style_2.png.js +1 -1
  72. package/es/shared/assets/img/video.png.js +1 -1
  73. package/es/shared/assets/img/video_default_cover.png.js +1 -1
  74. package/es/shared/assets/img/xb_big.png.js +1 -1
  75. package/es/shared/assets/img/xb_small.png.js +1 -1
  76. package/es/shared/components/VueDraggable/src/vuedraggable.d.ts +86 -0
  77. package/es/shared/package.json.js +1 -1
  78. package/es/shared/utils/fabricjs/index.d.ts +6823 -0
  79. package/es/shared/utils/tapable/index.d.ts +139 -0
  80. package/package.json +3 -3
@@ -934,7 +934,7 @@ declare const _default: import("vue").DefineComponent<{
934
934
  OpenOutline: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, import("vue").EmitsOptions, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{}>>, {}>;
935
935
  DownloadOutline: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, import("vue").EmitsOptions, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{}>>, {}>;
936
936
  downloadFile: typeof import("./utils").downloadFile;
937
- getFileDetails: typeof import("./utils").getFileDetails;
937
+ formatJsonstr: typeof import("./utils").formatJsonstr;
938
938
  getFileType: typeof import("./utils").getFileType;
939
939
  getDetail: typeof import("./utils").getDetail;
940
940
  ChatAdd: import("vue").DefineComponent<{
@@ -1354,7 +1354,7 @@ declare const _default: import("vue").DefineComponent<{
1354
1354
  formatTime: typeof import("./utils").formatTime;
1355
1355
  isDoctorRole: typeof import("./utils").isDoctorRole;
1356
1356
  getRoleName: typeof import("./utils").getRoleName;
1357
- getFileDetails: typeof import("./utils").getFileDetails;
1357
+ formatJsonstr: typeof import("./utils").formatJsonstr;
1358
1358
  getFileType: typeof import("./utils").getFileType;
1359
1359
  getDetail: typeof import("./utils").getDetail;
1360
1360
  showAudioAndVideoRecord: typeof import("./utils").showAudioAndVideoRecord;
@@ -1691,7 +1691,6 @@ declare const _default: import("vue").DefineComponent<{
1691
1691
  renderToolbar: ({ nodes }: import("naive-ui").ImageRenderToolbarProps) => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
1692
1692
  [key: string]: any;
1693
1693
  }>[];
1694
- formatImage: (obj: string | AnyObject, type: string) => any;
1695
1694
  getHistoryRecord: () => Promise<void>;
1696
1695
  handleSelectLabel: (event: MouseEvent, msgId: string) => void;
1697
1696
  handleContextmenu: (event: MouseEvent, msgId: string) => Promise<void>;
@@ -1910,7 +1909,7 @@ declare const _default: import("vue").DefineComponent<{
1910
1909
  getForwardTitle: typeof import("./utils").getForwardTitle;
1911
1910
  isDoctorRole: typeof import("./utils").isDoctorRole;
1912
1911
  getRoleName: typeof import("./utils").getRoleName;
1913
- getFileDetails: typeof import("./utils").getFileDetails;
1912
+ formatJsonstr: typeof import("./utils").formatJsonstr;
1914
1913
  getFileType: typeof import("./utils").getFileType;
1915
1914
  getDetail: typeof import("./utils").getDetail;
1916
1915
  showAudioAndVideoRecord: typeof import("./utils").showAudioAndVideoRecord;
@@ -2273,6 +2272,7 @@ declare const _default: import("vue").DefineComponent<{
2273
2272
  isAudioOrVideoMessage: typeof import("./utils").isAudioOrVideoMessage;
2274
2273
  getAVTime: typeof import("./utils").getAVTime;
2275
2274
  getForwardTitle: typeof import("./utils").getForwardTitle;
2275
+ formatJsonstr: typeof import("./utils").formatJsonstr;
2276
2276
  MESSAGE_TYPE: typeof import("./constants").MESSAGE_TYPE;
2277
2277
  ChatbubbleEllipsesOutline: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, import("vue").EmitsOptions, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{}>>, {}>;
2278
2278
  EllipsisHorizontal: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, import("vue").EmitsOptions, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{}>>, {}>;
@@ -2282,6 +2282,7 @@ declare const _default: import("vue").DefineComponent<{
2282
2282
  HappyOutline: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, import("vue").EmitsOptions, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{}>>, {}>;
2283
2283
  }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{}>>, {}>;
2284
2284
  ChatFooter: import("vue").DefineComponent<{}, {
2285
+ SPACE_PLACEHOLDER: string;
2285
2286
  inputRef: import("vue").Ref<HTMLDivElement | undefined>;
2286
2287
  state: {
2287
2288
  orgId: string | number;
@@ -2339,9 +2340,11 @@ declare const _default: import("vue").DefineComponent<{
2339
2340
  isWrap: (event: KeyboardEvent) => boolean;
2340
2341
  handleInput: () => void;
2341
2342
  selectEmoji: (name: string) => void;
2343
+ insertSpace: () => void;
2342
2344
  doUpdateFile: (file: File) => Promise<string>;
2343
2345
  fileChange: (options: import("./types").FileOptions, chatMessageType: import("./constants").MESSAGE_TYPE) => Promise<void>;
2344
2346
  handleMsgSend: () => Promise<void>;
2347
+ removeSpace: () => void;
2345
2348
  doSendMessage: (contentInfo: AnyObject) => Promise<void>;
2346
2349
  clearInput: () => void;
2347
2350
  handleRelay: ({ checkedIds, remark }: {
@@ -1,6 +1,6 @@
1
1
  import { PropType } from 'vue';
2
2
  import { AnyObject } from '../../../../shared/types';
3
- import { downloadFile, getFileDetails, getFileType, getDetail } from '../utils';
3
+ import { downloadFile, formatJsonstr, getFileType, getDetail } from '../utils';
4
4
  declare const _default: import("vue").DefineComponent<{
5
5
  type: {
6
6
  type: StringConstructor;
@@ -82,7 +82,7 @@ declare const _default: import("vue").DefineComponent<{
82
82
  OpenOutline: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, import("vue").EmitsOptions, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{}>>, {}>;
83
83
  DownloadOutline: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, import("vue").EmitsOptions, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{}>>, {}>;
84
84
  downloadFile: typeof downloadFile;
85
- getFileDetails: typeof getFileDetails;
85
+ formatJsonstr: typeof formatJsonstr;
86
86
  getFileType: typeof getFileType;
87
87
  getDetail: typeof getDetail;
88
88
  ChatAdd: import("vue").DefineComponent<{
@@ -13,7 +13,7 @@ import { useScrollLoading } from '../../../../shared/hooks/useScrollLoading.js';
13
13
  import { useData } from '../hooks/useData.js';
14
14
  import 'stompjs';
15
15
  import 'sockjs-client/dist/sockjs.min.js';
16
- import { getFileSize, getFileDetails, getFileType, getDetail, downloadFile } from '../utils/index.js';
16
+ import { formatJsonstr, getFileType, getDetail, downloadFile } from '../utils/index.js';
17
17
  import 'trtc-sdk-v5';
18
18
  import ChatAdd from './ChatAdd.vue.js';
19
19
 
@@ -103,17 +103,7 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
103
103
  const newList = formatImageList(_list);
104
104
  imageList.value = pageInfo.page > 1 ? imageList.value.concat(newList) : newList;
105
105
  } else {
106
- const promiseList = _list.map((item) => {
107
- return new Promise(async (resolve) => {
108
- const size = await getFileSize(item.content.fileUrl);
109
- resolve({
110
- ...item,
111
- size
112
- });
113
- });
114
- });
115
- const newList = await Promise.all(promiseList);
116
- fileList.value = pageInfo.page > 1 ? fileList.value.concat(newList) : newList;
106
+ fileList.value = pageInfo.page > 1 ? fileList.value.concat(_list) : _list;
117
107
  }
118
108
  } catch (error) {
119
109
  } finally {
@@ -209,7 +199,7 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
209
199
  key: image,
210
200
  width: "80",
211
201
  height: "80",
212
- src: unref(getFileDetails)(image, "fileUrl")
202
+ src: unref(formatJsonstr)(image, "fileUrl")
213
203
  }, null, 8, ["src"]);
214
204
  }), 128))])]);
215
205
  }), 128))]),
@@ -246,7 +236,7 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
246
236
  return openBlock(), createElementBlock("div", {
247
237
  class: "file-item",
248
238
  key: i
249
- }, [createElementVNode("span", _hoisted_3, toDisplayString(unref(getFileType)(item.content.msg)), 1), createElementVNode("div", _hoisted_4, [createElementVNode("span", _hoisted_5, toDisplayString(unref(getFileDetails)(item.content.msg, "fileName")), 1), createElementVNode("span", _hoisted_6, toDisplayString(unref(getDetail)(item, true)), 1)]), createElementVNode("div", _hoisted_7, [createVNode(ChatAdd, {
239
+ }, [createElementVNode("span", _hoisted_3, toDisplayString(unref(getFileType)(item.content.msg)), 1), createElementVNode("div", _hoisted_4, [createElementVNode("span", _hoisted_5, toDisplayString(unref(formatJsonstr)(item.content.msg, "fileName")), 1), createElementVNode("span", _hoisted_6, toDisplayString(unref(getDetail)(item, true)), 1)]), createElementVNode("div", _hoisted_7, [createVNode(ChatAdd, {
250
240
  title: function() {
251
241
  var _a, _b, _c;
252
242
  try {
@@ -286,7 +276,7 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
286
276
  trigger: withCtx(() => [createVNode(unref(NIcon), {
287
277
  size: 16,
288
278
  component: unref(DownloadOutline),
289
- onClick: () => unref(downloadFile)(item.content.fileUr, item.content.msg)
279
+ onClick: () => unref(downloadFile)(item.content.msg)
290
280
  }, null, 8, ["component", "onClick"])]),
291
281
  default: withCtx(() => [createTextVNode(function() {
292
282
  var _a, _b, _c;
@@ -4,6 +4,7 @@ import { MESSAGE_TYPE } from '../constants';
4
4
  import { simplifyMessage } from '../utils';
5
5
  import { FileOptions } from '../types';
6
6
  declare const _default: import("vue").DefineComponent<{}, {
7
+ SPACE_PLACEHOLDER: string;
7
8
  inputRef: Ref<HTMLDivElement | undefined>;
8
9
  state: {
9
10
  orgId: string | number;
@@ -61,9 +62,11 @@ declare const _default: import("vue").DefineComponent<{}, {
61
62
  isWrap: (event: KeyboardEvent) => boolean;
62
63
  handleInput: () => void;
63
64
  selectEmoji: (name: string) => void;
65
+ insertSpace: () => void;
64
66
  doUpdateFile: (file: File) => Promise<string>;
65
67
  fileChange: (options: FileOptions, chatMessageType: MESSAGE_TYPE) => Promise<void>;
66
68
  handleMsgSend: () => Promise<void>;
69
+ removeSpace: () => void;
67
70
  doSendMessage: (contentInfo: AnyObject) => Promise<void>;
68
71
  clearInput: () => void;
69
72
  handleRelay: ({ checkedIds, remark }: {
@@ -1,4 +1,4 @@
1
- import { createElementVNode, defineComponent, ref, computed, watch, withDirectives, openBlock, createElementBlock, normalizeStyle, unref, createVNode, withCtx, Fragment, toDisplayString, createCommentVNode, renderList, createBlock, createTextVNode, mergeProps, renderSlot, vShow } from 'vue';
1
+ import { createElementVNode, defineComponent, ref, computed, onMounted, watch, withDirectives, openBlock, createElementBlock, normalizeStyle, unref, createVNode, withCtx, Fragment, toDisplayString, createCommentVNode, renderList, createBlock, createTextVNode, mergeProps, renderSlot, vShow } from 'vue';
2
2
  import { NButton, NIcon, NTooltip, NPopover, NUpload, NUploadTrigger } from 'naive-ui';
3
3
  import ChatAdd from './ChatAdd.vue.js';
4
4
  import { useData } from '../hooks/useData.js';
@@ -92,6 +92,7 @@ const _hoisted_24 = /* @__PURE__ */ createElementVNode("span", {
92
92
  var _sfc_main = /* @__PURE__ */ defineComponent({
93
93
  __name: "ChatFooter",
94
94
  setup(__props) {
95
+ const SPACE_PLACEHOLDER = '<span style="display: inline-block;width: 1px;user-select: none;" data-space="true"></span>';
95
96
  const inputRef = ref();
96
97
  const {
97
98
  state,
@@ -109,7 +110,7 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
109
110
  defaultValue: [state.userInfo]
110
111
  };
111
112
  });
112
- const sendBtnDisabled = computed(() => !content.value.replace(/(&nbsp;|\s|<br>)+/g, ""));
113
+ const sendBtnDisabled = computed(() => !content.value.replace(/(&nbsp;|\s|<br>|<span[^>]*data-space="true"[^>]*>[\s\S]*?<\/span>)+/g, ""));
113
114
  const isForwardDisabled = computed(() => !state.msgList.some((msgItem) => msgItem.checked));
114
115
  const callBtnDisabled = computed(() => state.showVideo || state.showMultipleVideo);
115
116
  function handleCall(chatMessageType, checkedIds = []) {
@@ -154,15 +155,29 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
154
155
  }
155
156
  function handleInput() {
156
157
  var _a;
158
+ if (!inputRef.value)
159
+ return;
157
160
  content.value = ((_a = inputRef.value) == null ? void 0 : _a.innerHTML) || "";
161
+ insertSpace();
158
162
  }
159
163
  function selectEmoji(name) {
160
164
  var _a;
161
165
  commonEmoticons.value.unshift(name);
162
166
  commonEmoticons.value = uniq(commonEmoticons.value).slice(0, 26);
167
+ if (!inputRef.value)
168
+ return;
163
169
  (_a = inputRef.value) == null ? void 0 : _a.focus();
170
+ insertSpace();
164
171
  document.execCommand("insertHTML", false, `<img data-msg=${name} data-type=${MESSAGE_TYPE.EMOJI} class="emoji--min" src=${emojis.findEmoji(name)} />`);
165
172
  }
173
+ function insertSpace() {
174
+ if (!inputRef.value)
175
+ return;
176
+ if (!inputRef.value.innerHTML || inputRef.value.innerHTML === "<br>") {
177
+ Array.from(inputRef.value.childNodes).forEach((child) => child.remove());
178
+ document.execCommand("insertHTML", false, SPACE_PLACEHOLDER);
179
+ }
180
+ }
166
181
  async function doUpdateFile(file) {
167
182
  const formData = new FormData();
168
183
  formData.append("sender", state.userInfo.id);
@@ -191,13 +206,14 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
191
206
  });
192
207
  }
193
208
  async function handleMsgSend() {
209
+ if (sendBtnDisabled.value)
210
+ return console.log("\u8BF7\u8F93\u5165\u5185\u5BB9");
211
+ removeSpace();
194
212
  const {
195
213
  innerHTML = "",
196
214
  innerText = "",
197
215
  outerText = ""
198
216
  } = inputRef.value || {};
199
- if (sendBtnDisabled.value)
200
- return console.log("\u8BF7\u8F93\u5165\u5185\u5BB9");
201
217
  let chatMessageType = MESSAGE_TYPE.TEXT;
202
218
  let msg = "";
203
219
  if (innerHTML) {
@@ -259,6 +275,12 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
259
275
  origin: "btn"
260
276
  });
261
277
  }
278
+ function removeSpace() {
279
+ if (!inputRef.value)
280
+ return;
281
+ const spaceHolders = inputRef.value.querySelectorAll('[data-space="true"]');
282
+ spaceHolders.forEach((space) => space.remove());
283
+ }
262
284
  async function doSendMessage(contentInfo) {
263
285
  const {
264
286
  chatMessageType = MESSAGE_TYPE.TEXT,
@@ -270,7 +292,7 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
270
292
  msg,
271
293
  chatMessageType
272
294
  };
273
- if (chatMessageType === MESSAGE_TYPE.FILE) {
295
+ if ([MESSAGE_TYPE.FILE, MESSAGE_TYPE.IMAGE].includes(chatMessageType)) {
274
296
  _content.fileUrl = url;
275
297
  }
276
298
  if (origin === "btn") {
@@ -288,7 +310,7 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
288
310
  }
289
311
  function clearInput() {
290
312
  if (inputRef.value) {
291
- inputRef.value.innerHTML = "";
313
+ inputRef.value.innerHTML = SPACE_PLACEHOLDER;
292
314
  }
293
315
  content.value = "";
294
316
  }
@@ -323,6 +345,11 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
323
345
  });
324
346
  state.isForward = false;
325
347
  }
348
+ onMounted(() => {
349
+ if (inputRef.value) {
350
+ inputRef.value.innerHTML = SPACE_PLACEHOLDER;
351
+ }
352
+ });
326
353
  watch(() => [state.currentReferenceMsg, state.currentReEditMsg], ([currentReferenceMsg, currentReEditMsg]) => {
327
354
  var _a;
328
355
  if (currentReferenceMsg || currentReEditMsg) {
@@ -401,7 +401,7 @@ declare const _default: import("vue").DefineComponent<{}, {
401
401
  OpenOutline: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, import("vue").EmitsOptions, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{}>>, {}>;
402
402
  DownloadOutline: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, import("vue").EmitsOptions, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{}>>, {}>;
403
403
  downloadFile: typeof import("../utils").downloadFile;
404
- getFileDetails: typeof import("../utils").getFileDetails;
404
+ formatJsonstr: typeof import("../utils").formatJsonstr;
405
405
  getFileType: typeof import("../utils").getFileType;
406
406
  getDetail: typeof import("../utils").getDetail;
407
407
  ChatAdd: import("vue").DefineComponent<{
@@ -821,7 +821,7 @@ declare const _default: import("vue").DefineComponent<{}, {
821
821
  formatTime: typeof import("../utils").formatTime;
822
822
  isDoctorRole: typeof import("../utils").isDoctorRole;
823
823
  getRoleName: typeof import("../utils").getRoleName;
824
- getFileDetails: typeof import("../utils").getFileDetails;
824
+ formatJsonstr: typeof import("../utils").formatJsonstr;
825
825
  getFileType: typeof import("../utils").getFileType;
826
826
  getDetail: typeof import("../utils").getDetail;
827
827
  showAudioAndVideoRecord: typeof import("../utils").showAudioAndVideoRecord;
@@ -1,7 +1,7 @@
1
1
  import { CSSProperties } from 'vue';
2
2
  import { ImageRenderToolbarProps } from 'naive-ui';
3
3
  import { AnyObject } from '../../../../shared/types';
4
- import { simplifyMessage, isAudioOrVideoMessage, getAVTime, getForwardTitle } from '../utils';
4
+ import { simplifyMessage, isAudioOrVideoMessage, getAVTime, getForwardTitle, formatJsonstr } from '../utils';
5
5
  import { MESSAGE_TYPE } from '../constants';
6
6
  declare const _default: import("vue").DefineComponent<{}, {
7
7
  chatMainRef: import("vue").Ref<HTMLElement | undefined>;
@@ -71,7 +71,6 @@ declare const _default: import("vue").DefineComponent<{}, {
71
71
  renderToolbar: ({ nodes }: ImageRenderToolbarProps) => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
72
72
  [key: string]: any;
73
73
  }>[];
74
- formatImage: (obj: AnyObject | string, type: string) => any;
75
74
  getHistoryRecord: () => Promise<void>;
76
75
  handleSelectLabel: (event: MouseEvent, msgId: string) => void;
77
76
  handleContextmenu: (event: MouseEvent, msgId: string) => Promise<void>;
@@ -290,7 +289,7 @@ declare const _default: import("vue").DefineComponent<{}, {
290
289
  getForwardTitle: typeof getForwardTitle;
291
290
  isDoctorRole: typeof import("../utils").isDoctorRole;
292
291
  getRoleName: typeof import("../utils").getRoleName;
293
- getFileDetails: typeof import("../utils").getFileDetails;
292
+ formatJsonstr: typeof formatJsonstr;
294
293
  getFileType: typeof import("../utils").getFileType;
295
294
  getDetail: typeof import("../utils").getDetail;
296
295
  showAudioAndVideoRecord: typeof import("../utils").showAudioAndVideoRecord;
@@ -653,6 +652,7 @@ declare const _default: import("vue").DefineComponent<{}, {
653
652
  isAudioOrVideoMessage: typeof isAudioOrVideoMessage;
654
653
  getAVTime: typeof getAVTime;
655
654
  getForwardTitle: typeof getForwardTitle;
655
+ formatJsonstr: typeof formatJsonstr;
656
656
  MESSAGE_TYPE: typeof MESSAGE_TYPE;
657
657
  ChatbubbleEllipsesOutline: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, import("vue").EmitsOptions, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{}>>, {}>;
658
658
  EllipsisHorizontal: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, import("vue").EmitsOptions, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{}>>, {}>;
@@ -6,7 +6,7 @@ import { useData } from '../hooks/useData.js';
6
6
  import 'stompjs';
7
7
  import 'sockjs-client/dist/sockjs.min.js';
8
8
  import { MESSAGE_TYPE } from '../constants/index.js';
9
- import { isAudioOrVideoMessage, simplifyMessage, getForwardTitle, getAVTime, downloadFile } from '../utils/index.js';
9
+ import { isAudioOrVideoMessage, simplifyMessage, getForwardTitle, formatJsonstr, getAVTime, downloadFile } from '../utils/index.js';
10
10
  import { first, last, isArray, toString } from 'lodash-es';
11
11
  import 'trtc-sdk-v5';
12
12
  import MessageTemplate from './MessageTemplate.vue.js';
@@ -130,7 +130,10 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
130
130
  "color": "rgba(255, 255, 255, 0.75",
131
131
  "size": 24,
132
132
  "component": ArrowDownSharp,
133
- "onClick": () => src && downloadFile(src, "img")
133
+ "onClick": () => src && downloadFile(JSON.stringify({
134
+ fileUrl: src,
135
+ fileName: "image"
136
+ }))
134
137
  }, null),
135
138
  default: () => function() {
136
139
  var _a2, _b2, _c;
@@ -142,17 +145,6 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
142
145
  }()
143
146
  }), nodes.close];
144
147
  }
145
- function formatImage(obj, type) {
146
- try {
147
- if (typeof obj === "string") {
148
- const objParse = JSON.parse(obj);
149
- return objParse[type];
150
- }
151
- return obj[type];
152
- } catch (error) {
153
- return obj;
154
- }
155
- }
156
148
  async function getHistoryRecord() {
157
149
  try {
158
150
  if (!pageInfo.hasMore)
@@ -490,7 +482,7 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
490
482
  }), 128))])], 8, _hoisted_14)) : createCommentVNode("v-if", true), item.content.chatMessageType === unref(MESSAGE_TYPE).IMAGE ? (openBlock(), createBlock(unref(NImage), {
491
483
  key: 4,
492
484
  width: "240",
493
- src: formatImage(item.__content, "fileUrl"),
485
+ src: unref(formatJsonstr)(item.__content, "fileUrl"),
494
486
  onClick: _cache[0] || (_cache[0] = (event) => event.stopPropagation())
495
487
  }, null, 8, ["src"])) : createCommentVNode("v-if", true), unref(isAudioOrVideoMessage)(item.content) ? (openBlock(), createElementBlock(Fragment, {
496
488
  key: 5
@@ -515,7 +507,7 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
515
507
  "row-gap": "0"
516
508
  }
517
509
  }, {
518
- default: withCtx(() => [createElementVNode("span", null, toDisplayString(formatImage(item.__content, "fileName")), 1), createElementVNode("span", _hoisted_19, toDisplayString(item.__size), 1)]),
510
+ default: withCtx(() => [createElementVNode("span", null, toDisplayString(unref(formatJsonstr)(item.__content, "fileName")), 1), createElementVNode("span", _hoisted_19, toDisplayString(unref(formatJsonstr)(item.__content, "fileSize")), 1)]),
519
511
  _: 2
520
512
  }, 1024)]),
521
513
  _: 2
@@ -1,6 +1,6 @@
1
1
  import { PropType } from 'vue';
2
2
  import { AnyObject } from '../../../../shared/types';
3
- import { formatTime, isDoctorRole, getRoleName, getFileDetails, getFileType, getDetail, showAudioAndVideoRecord, getForwardTitle, simplifyMessage } from '../utils';
3
+ import { formatTime, isDoctorRole, getRoleName, formatJsonstr, getFileType, getDetail, showAudioAndVideoRecord, getForwardTitle, simplifyMessage } from '../utils';
4
4
  import { MESSAGE_TYPE } from '../constants';
5
5
  declare const _default: import("vue").DefineComponent<{
6
6
  visible: {
@@ -213,7 +213,7 @@ declare const _default: import("vue").DefineComponent<{
213
213
  formatTime: typeof formatTime;
214
214
  isDoctorRole: typeof isDoctorRole;
215
215
  getRoleName: typeof getRoleName;
216
- getFileDetails: typeof getFileDetails;
216
+ formatJsonstr: typeof formatJsonstr;
217
217
  getFileType: typeof getFileType;
218
218
  getDetail: typeof getDetail;
219
219
  showAudioAndVideoRecord: typeof showAudioAndVideoRecord;
@@ -6,7 +6,7 @@ import 'stompjs';
6
6
  import 'sockjs-client/dist/sockjs.min.js';
7
7
  import { MESSAGE_TYPE } from '../constants/index.js';
8
8
  import { searchChatRecordApi } from '../api/index.js';
9
- import { transformMessage, isDoctorRole, getRoleName, formatTime, getFileDetails, getFileType, getDetail, showAudioAndVideoRecord, getForwardTitle, simplifyMessage } from '../utils/index.js';
9
+ import { transformMessage, isDoctorRole, getRoleName, formatTime, formatJsonstr, getFileType, getDetail, showAudioAndVideoRecord, getForwardTitle, simplifyMessage } from '../utils/index.js';
10
10
  import { last, isArray } from 'lodash-es';
11
11
  import 'trtc-sdk-v5';
12
12
  import DatePicker from '../../../date-picker/index.js';
@@ -369,10 +369,10 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
369
369
  class: normalizeClass(["iho-chatRole", unref(isDoctorRole)(item.roleInfo) ? "isDoctor" : ""])
370
370
  }, toDisplayString(unref(getRoleName)(item.roleInfo)), 3), [[vShow, unref(getRoleName)(item.roleInfo)]])]), createElementVNode("span", _hoisted_9, toDisplayString(unref(formatTime)(item.sendTime).recordTime), 1)]), createElementVNode("div", _hoisted_10, [item.content.chatMessageType === unref(MESSAGE_TYPE).IMAGE ? (openBlock(), createElementBlock("img", {
371
371
  key: 0,
372
- src: unref(getFileDetails)(item.__content, "fileUrl")
372
+ src: unref(formatJsonstr)(item.__content, "fileUrl")
373
373
  }, null, 8, _hoisted_11)) : item.content.chatMessageType === unref(MESSAGE_TYPE).FILE ? (openBlock(), createElementBlock(Fragment, {
374
374
  key: 1
375
- }, [createElementVNode("span", _hoisted_12, toDisplayString(unref(getFileType)(item.__content)), 1), createElementVNode("div", _hoisted_13, [createElementVNode("span", _hoisted_14, toDisplayString(unref(getFileDetails)(item.__content, "fileName")), 1), createElementVNode("span", _hoisted_15, toDisplayString(unref(getDetail)(item)), 1)])], 64)) : item.content.chatMessageType === unref(MESSAGE_TYPE).EMOJI ? (openBlock(), createElementBlock("img", {
375
+ }, [createElementVNode("span", _hoisted_12, toDisplayString(unref(getFileType)(item.__content)), 1), createElementVNode("div", _hoisted_13, [createElementVNode("span", _hoisted_14, toDisplayString(unref(formatJsonstr)(item.__content, "fileName")), 1), createElementVNode("span", _hoisted_15, toDisplayString(unref(getDetail)(item)), 1)])], 64)) : item.content.chatMessageType === unref(MESSAGE_TYPE).EMOJI ? (openBlock(), createElementBlock("img", {
376
376
  key: 2,
377
377
  class: "emoji",
378
378
  src: unref(emojis).findEmoji(item.__content)
@@ -7,7 +7,7 @@ import 'stompjs';
7
7
  import 'sockjs-client/dist/sockjs.min.js';
8
8
  import { STATUS, MESSAGE_TYPE } from '../constants/index.js';
9
9
  import { recallMessageApi } from '../api/index.js';
10
- import { isAudioOrVideoMessage, $message, downloadFile, getFileDetails } from '../utils/index.js';
10
+ import { isAudioOrVideoMessage, $message, downloadFile, formatJsonstr } from '../utils/index.js';
11
11
  import 'lodash-es';
12
12
  import 'trtc-sdk-v5';
13
13
  import { emojis } from '../utils/emoji.js';
@@ -192,7 +192,7 @@ var ContextMenu = /* @__PURE__ */ defineComponent({
192
192
  } else {
193
193
  let data;
194
194
  if ([MESSAGE_TYPE.EMOJI, MESSAGE_TYPE.IMAGE].includes(chatMessageType)) {
195
- const url = chatMessageType === MESSAGE_TYPE.EMOJI ? emojis.findEmoji(content.msg) : getFileDetails(content.msg, "fileUrl");
195
+ const url = chatMessageType === MESSAGE_TYPE.EMOJI ? emojis.findEmoji(content.msg) : formatJsonstr(content.msg, "fileUrl");
196
196
  data = `<img data-msg=${chatMessageType === MESSAGE_TYPE.EMOJI ? content.msg : ""} data-type=${chatMessageType} class=${chatMessageType === MESSAGE_TYPE.EMOJI ? "emoji--min" : "chat-image-copy"} src=${url} />`;
197
197
  } else if (chatMessageType === MESSAGE_TYPE.BLEND) {
198
198
  data = __content;
@@ -211,15 +211,7 @@ var ContextMenu = /* @__PURE__ */ defineComponent({
211
211
  }
212
212
  return;
213
213
  case "download": {
214
- let {
215
- fileUrl: url,
216
- msg: fileName
217
- } = content;
218
- if (chatMessageType === MESSAGE_TYPE.IMAGE) {
219
- url = fileName;
220
- fileName = fileName.match(/\/([^\/?#]+)$/)[1];
221
- }
222
- downloadFile(url, fileName);
214
+ downloadFile(__content);
223
215
  return;
224
216
  }
225
217
  case "withdraw": {
@@ -1,5 +1,5 @@
1
1
  import { AnyObject } from '../../../../shared/types';
2
- import { formatTime, getForwardTitle, isDoctorRole, getRoleName, getFileDetails, getFileType, getDetail, showAudioAndVideoRecord, simplifyMessage } from '../utils';
2
+ import { formatTime, getForwardTitle, isDoctorRole, getRoleName, formatJsonstr, getFileType, getDetail, showAudioAndVideoRecord, simplifyMessage } from '../utils';
3
3
  import { MESSAGE_TYPE } from '../constants';
4
4
  declare const _default: import("vue").DefineComponent<{
5
5
  id: {
@@ -54,7 +54,7 @@ declare const _default: import("vue").DefineComponent<{
54
54
  getForwardTitle: typeof getForwardTitle;
55
55
  isDoctorRole: typeof isDoctorRole;
56
56
  getRoleName: typeof getRoleName;
57
- getFileDetails: typeof getFileDetails;
57
+ formatJsonstr: typeof formatJsonstr;
58
58
  getFileType: typeof getFileType;
59
59
  getDetail: typeof getDetail;
60
60
  showAudioAndVideoRecord: typeof showAudioAndVideoRecord;
@@ -5,7 +5,7 @@ import 'stompjs';
5
5
  import 'sockjs-client/dist/sockjs.min.js';
6
6
  import { MESSAGE_TYPE } from '../constants/index.js';
7
7
  import '../api/index.js';
8
- import { transformMessage, getForwardTitle, isDoctorRole, getRoleName, formatTime, getFileDetails, getFileType, getDetail, showAudioAndVideoRecord, simplifyMessage } from '../utils/index.js';
8
+ import { transformMessage, getForwardTitle, isDoctorRole, getRoleName, formatTime, formatJsonstr, getFileType, getDetail, showAudioAndVideoRecord, simplifyMessage } from '../utils/index.js';
9
9
  import { isArray } from 'lodash-es';
10
10
  import 'trtc-sdk-v5';
11
11
  import { emojis } from '../utils/emoji.js';
@@ -116,10 +116,10 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
116
116
  }
117
117
  }, toDisplayString(unref(getRoleName)(item.roleInfo)), 3), [[vShow, unref(getRoleName)(item.roleInfo)]])]), createElementVNode("span", null, toDisplayString(unref(formatTime)(item.sendTime).recordTime), 1)]), createElementVNode("div", _hoisted_5, [item.content.chatMessageType === unref(MESSAGE_TYPE).IMAGE ? (openBlock(), createElementBlock("img", {
118
118
  key: 0,
119
- src: unref(getFileDetails)(item.__content, "fileUrl")
119
+ src: unref(formatJsonstr)(item.__content, "fileUrl")
120
120
  }, null, 8, _hoisted_6)) : item.content.chatMessageType === unref(MESSAGE_TYPE).FILE ? (openBlock(), createElementBlock(Fragment, {
121
121
  key: 1
122
- }, [createElementVNode("span", _hoisted_7, toDisplayString(unref(getFileType)(item.__content)), 1), createElementVNode("div", _hoisted_8, [createElementVNode("span", _hoisted_9, toDisplayString(unref(getFileDetails)(item.__content, "fileName")), 1), createElementVNode("span", _hoisted_10, toDisplayString(unref(getDetail)(item)), 1)])], 64)) : item.content.chatMessageType === unref(MESSAGE_TYPE).EMOJI ? (openBlock(), createElementBlock("img", {
122
+ }, [createElementVNode("span", _hoisted_7, toDisplayString(unref(getFileType)(item.__content)), 1), createElementVNode("div", _hoisted_8, [createElementVNode("span", _hoisted_9, toDisplayString(unref(formatJsonstr)(item.__content, "fileName")), 1), createElementVNode("span", _hoisted_10, toDisplayString(unref(getDetail)(item)), 1)])], 64)) : item.content.chatMessageType === unref(MESSAGE_TYPE).EMOJI ? (openBlock(), createElementBlock("img", {
123
123
  key: 2,
124
124
  class: "emoji",
125
125
  src: unref(emojis).findEmoji(item.__content)
@@ -1,9 +1,9 @@
1
1
  import { ref, reactive, computed, watch, toRef, inject, toRaw } from 'vue';
2
2
  import { openSessionApi, updateStatusApi, groupUserApi } from '../api/index.js';
3
3
  import { promiseTimeout, useIntervalFn } from '@vueuse/core';
4
- import { isGroup, listSort, formatTime, transformMessage, getFileSize, $message, simplifyMessage } from '../utils/index.js';
4
+ import { isGroup, listSort, formatTime, transformMessage, $message, simplifyMessage } from '../utils/index.js';
5
5
  import { cloneDeep, remove, isArray, uniqBy } from 'lodash-es';
6
- import { STATUS, MESSAGE_TYPE, CHAT_TYPE } from '../constants/index.js';
6
+ import { STATUS, CHAT_TYPE, MESSAGE_TYPE } from '../constants/index.js';
7
7
  import { useTheme } from '../../../../shared/hooks/useTheme.js';
8
8
  import 'date-fns';
9
9
  import '@vue/shared';
@@ -139,11 +139,6 @@ function initData(props, emit) {
139
139
  __content: transformMessage(item.content),
140
140
  __sendTime: formatTime(item.sendTime).recordTime
141
141
  });
142
- if (item.content.chatMessageType === MESSAGE_TYPE.FILE && !item.__size) {
143
- getFileSize(item.content.fileUrl).then((size) => {
144
- item.__size = size;
145
- });
146
- }
147
142
  });
148
143
  if (needUpdateTime()) {
149
144
  resume();
@@ -65,6 +65,7 @@ function useDraggable(target, options = {}) {
65
65
  topRightElement();
66
66
  }
67
67
  };
68
+ const clamp = (val, min, max) => Math.max(min, Math.min(val, max));
68
69
  const onMouseDown = (e) => {
69
70
  var _a;
70
71
  if (!target.value)
@@ -87,12 +88,20 @@ function useDraggable(target, options = {}) {
87
88
  };
88
89
  const onMouseMove = (e) => {
89
90
  var _a;
90
- if (!isDragging.value)
91
+ if (!isDragging.value || !target.value)
91
92
  return;
92
93
  const dx = e.clientX - startMousePos.value.x;
93
94
  const dy = e.clientY - startMousePos.value.y;
94
- x.value = startPos.value.x + dx;
95
- y.value = startPos.value.y + dy;
95
+ const {
96
+ width,
97
+ height
98
+ } = target.value.getBoundingClientRect();
99
+ const minX = 0;
100
+ const minY = 0;
101
+ const maxX = window.innerWidth - width;
102
+ const maxY = window.innerHeight - height;
103
+ x.value = clamp(startPos.value.x + dx, minX, maxX);
104
+ y.value = clamp(startPos.value.y + dy, minY, maxY);
96
105
  updatePosition();
97
106
  (_a = options.onDrag) == null ? void 0 : _a.call(options, {
98
107
  x: x.value,
@@ -9,8 +9,7 @@ export declare function listSort(list: AnyObject[]): AnyObject[];
9
9
  export declare function transformMessage(content: AnyObject): any;
10
10
  export declare function getAVTime(msg: string): string;
11
11
  export declare function simplifyMessage(lastMessage: AnyObject): any;
12
- export declare function downloadFile(url: string, filename: string): void;
13
- export declare function getFileSize(url: string): Promise<unknown>;
12
+ export declare function downloadFile(msg: string): void;
14
13
  export declare function base64ToFile(base64: string): Promise<File | undefined>;
15
14
  export declare function isAudioOrVideoMessage(message: AnyObject): boolean;
16
15
  export declare function formatSeconds(seconds: number): string;
@@ -18,7 +17,7 @@ export declare function isGroup(session: AnyObject): boolean;
18
17
  export declare function getForwardTitle(content: AnyObject): string | undefined;
19
18
  export declare function isDoctorRole(type: string): boolean;
20
19
  export declare function getRoleName(type: string): string;
21
- export declare function getFileDetails(msg: string, type: string): any;
22
20
  export declare function getFileType(msg: string): string;
23
21
  export declare function getDetail(item: AnyObject, isShowSize?: boolean): string;
24
22
  export declare function showAudioAndVideoRecord(chatMessageType: string): "语音通话" | "视频通话";
23
+ export declare function formatJsonstr(obj: AnyObject | string, type: string): any;