yx-web-sdk 0.0.18 → 0.0.20

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 (59) hide show
  1. package/dist/ait-person-popover/index.js +1 -1
  2. package/dist/chat-card/index.js +1 -1
  3. package/dist/chat-content/index.js +1 -1
  4. package/dist/chat-page/index.js +1 -1
  5. package/dist/chat-room/index.js +1 -1
  6. package/dist/common-avatar/index.js +1 -1
  7. package/dist/components/chat-card/index.vue.d.ts +2 -0
  8. package/dist/components/img-info-wrapper/index.d.ts +0 -0
  9. package/dist/{chat-page → components/img-info-wrapper}/index.vue.d.ts +2 -2
  10. package/dist/img-info-wrapper/index.js +1 -0
  11. package/dist/index/style2.css +30 -162
  12. package/dist/index/style4.css +177 -120
  13. package/dist/index/style6.css +513 -25
  14. package/dist/index/style7.css +143 -466
  15. package/dist/{index-0o2Mn1Jl.mjs → index-BPnLB3av.mjs} +1 -1
  16. package/dist/{index-C14AY1pk.mjs → index-DME8_VYv.mjs} +7 -6
  17. package/dist/{index-sJcDnl5D.mjs → index-Dwglj7_M.mjs} +1 -1
  18. package/dist/index-entry/index.js +5 -5
  19. package/dist/index-entry/style.css +19 -19
  20. package/dist/{index.vue_vue_type_script_setup_true_lang-0YeDxfed.mjs → index.vue_vue_type_script_setup_true_lang-C18d9C8W.mjs} +9 -3
  21. package/dist/{index.vue_vue_type_style_index_0_lang-UfvEW_0n.mjs → index.vue_vue_type_style_index_0_lang-BaKNB-4q.mjs} +137 -57
  22. package/dist/index.vue_vue_type_style_index_0_lang-CBpDXwwP.mjs +589 -0
  23. package/dist/{index.vue_vue_type_style_index_0_lang-BxxUcry3.mjs → index.vue_vue_type_style_index_0_lang-E3PcX8MA.mjs} +3 -3
  24. package/dist/{index.vue_vue_type_style_index_0_lang-BdIDeEyF.mjs → index.vue_vue_type_style_index_0_lang-QCNj8WyS.mjs} +171 -40
  25. package/dist/members-sidebar/index.js +1 -1
  26. package/dist/notice-box/index.js +1 -1
  27. package/dist/server-channel-sidebar/index.js +1 -1
  28. package/dist/stores/channel.d.ts +50 -14
  29. package/dist/stores/qchat.d.ts +3 -3
  30. package/dist/stores/sdk.d.ts +0 -8
  31. package/dist/stores/server.d.ts +26 -26
  32. package/dist/style.css +180 -90
  33. package/dist/types/qchat-server.d.ts +1 -1
  34. package/dist/utils/index.d.ts +10 -2
  35. package/dist/yx-web-sdk.es.js +644 -296
  36. package/dist/yx-web-sdk.umd.js +643 -295
  37. package/package.json +1 -1
  38. package/dist/ait-person-popover/index.d.ts +0 -3
  39. package/dist/ait-person-popover/index.vue.d.ts +0 -39
  40. package/dist/chat-card/index.d.ts +0 -3
  41. package/dist/chat-card/index.vue.d.ts +0 -25
  42. package/dist/chat-content/index.d.ts +0 -3
  43. package/dist/chat-content/index.vue.d.ts +0 -51
  44. package/dist/chat-page/index.d.ts +0 -3
  45. package/dist/chat-room/index.d.ts +0 -3
  46. package/dist/chat-room/index.vue.d.ts +0 -9
  47. package/dist/common-avatar/index.d.ts +0 -3
  48. package/dist/common-avatar/index.vue.d.ts +0 -17
  49. package/dist/icon-font/index.d.ts +0 -48
  50. package/dist/index-entry/index.d.ts +0 -2
  51. package/dist/index-entry/index.vue.d.ts +0 -24
  52. package/dist/index.vue_vue_type_style_index_0_lang-oO4NDv0U.mjs +0 -456
  53. package/dist/members-sidebar/index.d.ts +0 -3
  54. package/dist/members-sidebar/index.vue.d.ts +0 -4
  55. package/dist/notice-box/index.d.ts +0 -3
  56. package/dist/notice-box/index.vue.d.ts +0 -13
  57. package/dist/server-channel-sidebar/index.d.ts +0 -3
  58. package/dist/server-channel-sidebar/index.vue.d.ts +0 -21
  59. /package/dist/{index.vue_vue_type_style_index_0_lang-B2YRkoln.mjs → index.vue_vue_type_style_index_0_lang-BxXBf_VA.mjs} +0 -0
@@ -715,7 +715,7 @@
715
715
  newNode.setAttribute(getMark(option), key);
716
716
  return newNode;
717
717
  }
718
- function _objectSpread$b(target) {
718
+ function _objectSpread$c(target) {
719
719
  for (var i = 1; i < arguments.length; i++) {
720
720
  var source = arguments[i] != null ? Object(arguments[i]) : {};
721
721
  var ownKeys = Object.keys(source);
@@ -725,12 +725,12 @@
725
725
  }));
726
726
  }
727
727
  ownKeys.forEach(function(key) {
728
- _defineProperty$b(target, key, source[key]);
728
+ _defineProperty$c(target, key, source[key]);
729
729
  });
730
730
  }
731
731
  return target;
732
732
  }
733
- function _defineProperty$b(obj, key, value) {
733
+ function _defineProperty$c(obj, key, value) {
734
734
  if (key in obj) {
735
735
  Object.defineProperty(obj, key, { value, enumerable: true, configurable: true, writable: true });
736
736
  } else {
@@ -751,13 +751,13 @@
751
751
  }
752
752
  function generate(node, key, rootProps) {
753
753
  if (!rootProps) {
754
- return vue.h(node.tag, _objectSpread$b({
754
+ return vue.h(node.tag, _objectSpread$c({
755
755
  key
756
756
  }, node.attrs), (node.children || []).map(function(child, index2) {
757
757
  return generate(child, "".concat(key, "-").concat(node.tag, "-").concat(index2));
758
758
  }));
759
759
  }
760
- return vue.h(node.tag, _objectSpread$b({
760
+ return vue.h(node.tag, _objectSpread$c({
761
761
  key
762
762
  }, rootProps, node.attrs), (node.children || []).map(function(child, index2) {
763
763
  return generate(child, "".concat(key, "-").concat(node.tag, "-").concat(index2));
@@ -840,7 +840,7 @@
840
840
  }
841
841
  return target;
842
842
  }
843
- function _objectSpread$a(target) {
843
+ function _objectSpread$b(target) {
844
844
  for (var i = 1; i < arguments.length; i++) {
845
845
  var source = arguments[i] != null ? Object(arguments[i]) : {};
846
846
  var ownKeys = Object.keys(source);
@@ -850,12 +850,12 @@
850
850
  }));
851
851
  }
852
852
  ownKeys.forEach(function(key) {
853
- _defineProperty$a(target, key, source[key]);
853
+ _defineProperty$b(target, key, source[key]);
854
854
  });
855
855
  }
856
856
  return target;
857
857
  }
858
- function _defineProperty$a(obj, key, value) {
858
+ function _defineProperty$b(obj, key, value) {
859
859
  if (key in obj) {
860
860
  Object.defineProperty(obj, key, { value, enumerable: true, configurable: true, writable: true });
861
861
  } else {
@@ -875,10 +875,10 @@
875
875
  twoToneColorPalette.calculated = !!secondaryColor;
876
876
  }
877
877
  function getTwoToneColors() {
878
- return _objectSpread$a({}, twoToneColorPalette);
878
+ return _objectSpread$b({}, twoToneColorPalette);
879
879
  }
880
880
  var IconBase = function IconBase2(props, context) {
881
- var _props$context$attrs = _objectSpread$a({}, props, context.attrs), icon = _props$context$attrs.icon, primaryColor = _props$context$attrs.primaryColor, secondaryColor = _props$context$attrs.secondaryColor, restProps = _objectWithoutProperties$3(_props$context$attrs, _excluded$3);
881
+ var _props$context$attrs = _objectSpread$b({}, props, context.attrs), icon = _props$context$attrs.icon, primaryColor = _props$context$attrs.primaryColor, secondaryColor = _props$context$attrs.secondaryColor, restProps = _objectWithoutProperties$3(_props$context$attrs, _excluded$3);
882
882
  var colors = twoToneColorPalette;
883
883
  if (primaryColor) {
884
884
  colors = {
@@ -892,11 +892,11 @@
892
892
  }
893
893
  var target = icon;
894
894
  if (target && typeof target.icon === "function") {
895
- target = _objectSpread$a({}, target, {
895
+ target = _objectSpread$b({}, target, {
896
896
  icon: target.icon(colors.primaryColor, colors.secondaryColor)
897
897
  });
898
898
  }
899
- return generate(target.icon, "svg-".concat(target.name), _objectSpread$a({}, restProps, {
899
+ return generate(target.icon, "svg-".concat(target.name), _objectSpread$b({}, restProps, {
900
900
  "data-icon": target.name,
901
901
  width: "1em",
902
902
  height: "1em",
@@ -1034,7 +1034,7 @@
1034
1034
  function _arrayWithHoles(arr) {
1035
1035
  if (Array.isArray(arr)) return arr;
1036
1036
  }
1037
- function _objectSpread$9(target) {
1037
+ function _objectSpread$a(target) {
1038
1038
  for (var i = 1; i < arguments.length; i++) {
1039
1039
  var source = arguments[i] != null ? Object(arguments[i]) : {};
1040
1040
  var ownKeys = Object.keys(source);
@@ -1044,12 +1044,12 @@
1044
1044
  }));
1045
1045
  }
1046
1046
  ownKeys.forEach(function(key) {
1047
- _defineProperty$9(target, key, source[key]);
1047
+ _defineProperty$a(target, key, source[key]);
1048
1048
  });
1049
1049
  }
1050
1050
  return target;
1051
1051
  }
1052
- function _defineProperty$9(obj, key, value) {
1052
+ function _defineProperty$a(obj, key, value) {
1053
1053
  if (key in obj) {
1054
1054
  Object.defineProperty(obj, key, { value, enumerable: true, configurable: true, writable: true });
1055
1055
  } else {
@@ -1087,9 +1087,9 @@
1087
1087
  setTwoToneColor(blue.primary);
1088
1088
  var Icon$1 = function Icon2(props, context) {
1089
1089
  var _classObj;
1090
- var _props$context$attrs = _objectSpread$9({}, props, context.attrs), cls = _props$context$attrs["class"], icon = _props$context$attrs.icon, spin = _props$context$attrs.spin, rotate = _props$context$attrs.rotate, tabindex = _props$context$attrs.tabindex, twoToneColor = _props$context$attrs.twoToneColor, onClick = _props$context$attrs.onClick, restProps = _objectWithoutProperties$2(_props$context$attrs, _excluded$2);
1090
+ var _props$context$attrs = _objectSpread$a({}, props, context.attrs), cls = _props$context$attrs["class"], icon = _props$context$attrs.icon, spin = _props$context$attrs.spin, rotate = _props$context$attrs.rotate, tabindex = _props$context$attrs.tabindex, twoToneColor = _props$context$attrs.twoToneColor, onClick = _props$context$attrs.onClick, restProps = _objectWithoutProperties$2(_props$context$attrs, _excluded$2);
1091
1091
  var _useInjectIconContext = useInjectIconContext(), prefixCls = _useInjectIconContext.prefixCls, rootClassName = _useInjectIconContext.rootClassName;
1092
- var classObj = (_classObj = {}, _defineProperty$9(_classObj, rootClassName.value, !!rootClassName.value), _defineProperty$9(_classObj, prefixCls.value, true), _defineProperty$9(_classObj, "".concat(prefixCls.value, "-").concat(icon.name), Boolean(icon.name)), _defineProperty$9(_classObj, "".concat(prefixCls.value, "-spin"), !!spin || icon.name === "loading"), _classObj);
1092
+ var classObj = (_classObj = {}, _defineProperty$a(_classObj, rootClassName.value, !!rootClassName.value), _defineProperty$a(_classObj, prefixCls.value, true), _defineProperty$a(_classObj, "".concat(prefixCls.value, "-").concat(icon.name), Boolean(icon.name)), _defineProperty$a(_classObj, "".concat(prefixCls.value, "-spin"), !!spin || icon.name === "loading"), _classObj);
1093
1093
  var iconTabIndex = tabindex;
1094
1094
  if (iconTabIndex === void 0 && onClick) {
1095
1095
  iconTabIndex = -1;
@@ -1099,7 +1099,7 @@
1099
1099
  transform: "rotate(".concat(rotate, "deg)")
1100
1100
  } : void 0;
1101
1101
  var _normalizeTwoToneColo = normalizeTwoToneColors(twoToneColor), _normalizeTwoToneColo2 = _slicedToArray(_normalizeTwoToneColo, 2), primaryColor = _normalizeTwoToneColo2[0], secondaryColor = _normalizeTwoToneColo2[1];
1102
- return vue.createVNode("span", _objectSpread$9({
1102
+ return vue.createVNode("span", _objectSpread$a({
1103
1103
  "role": "img",
1104
1104
  "aria-label": icon.name
1105
1105
  }, restProps, {
@@ -1124,7 +1124,7 @@
1124
1124
  Icon$1.getTwoToneColor = getTwoToneColor;
1125
1125
  Icon$1.setTwoToneColor = setTwoToneColor;
1126
1126
  var CloseOutlined$1 = { "icon": { "tag": "svg", "attrs": { "fill-rule": "evenodd", "viewBox": "64 64 896 896", "focusable": "false" }, "children": [{ "tag": "path", "attrs": { "d": "M799.86 166.31c.02 0 .04.02.08.06l57.69 57.7c.04.03.05.05.06.08a.12.12 0 010 .06c0 .03-.02.05-.06.09L569.93 512l287.7 287.7c.04.04.05.06.06.09a.12.12 0 010 .07c0 .02-.02.04-.06.08l-57.7 57.69c-.03.04-.05.05-.07.06a.12.12 0 01-.07 0c-.03 0-.05-.02-.09-.06L512 569.93l-287.7 287.7c-.04.04-.06.05-.09.06a.12.12 0 01-.07 0c-.02 0-.04-.02-.08-.06l-57.69-57.7c-.04-.03-.05-.05-.06-.07a.12.12 0 010-.07c0-.03.02-.05.06-.09L454.07 512l-287.7-287.7c-.04-.04-.05-.06-.06-.09a.12.12 0 010-.07c0-.02.02-.04.06-.08l57.7-57.69c.03-.04.05-.05.07-.06a.12.12 0 01.07 0c.03 0 .05.02.09.06L512 454.07l287.7-287.7c.04-.04.06-.05.09-.06a.12.12 0 01.07 0z" } }] }, "name": "close", "theme": "outlined" };
1127
- function _objectSpread$8(target) {
1127
+ function _objectSpread$9(target) {
1128
1128
  for (var i = 1; i < arguments.length; i++) {
1129
1129
  var source = arguments[i] != null ? Object(arguments[i]) : {};
1130
1130
  var ownKeys = Object.keys(source);
@@ -1134,12 +1134,12 @@
1134
1134
  }));
1135
1135
  }
1136
1136
  ownKeys.forEach(function(key) {
1137
- _defineProperty$8(target, key, source[key]);
1137
+ _defineProperty$9(target, key, source[key]);
1138
1138
  });
1139
1139
  }
1140
1140
  return target;
1141
1141
  }
1142
- function _defineProperty$8(obj, key, value) {
1142
+ function _defineProperty$9(obj, key, value) {
1143
1143
  if (key in obj) {
1144
1144
  Object.defineProperty(obj, key, { value, enumerable: true, configurable: true, writable: true });
1145
1145
  } else {
@@ -1148,14 +1148,46 @@
1148
1148
  return obj;
1149
1149
  }
1150
1150
  var CloseOutlined = function CloseOutlined2(props, context) {
1151
- var p = _objectSpread$8({}, props, context.attrs);
1152
- return vue.createVNode(Icon$1, _objectSpread$8({}, p, {
1151
+ var p = _objectSpread$9({}, props, context.attrs);
1152
+ return vue.createVNode(Icon$1, _objectSpread$9({}, p, {
1153
1153
  "icon": CloseOutlined$1
1154
1154
  }), null);
1155
1155
  };
1156
1156
  CloseOutlined.displayName = "CloseOutlined";
1157
1157
  CloseOutlined.inheritAttrs = false;
1158
1158
  var CrownOutlined$1 = { "icon": { "tag": "svg", "attrs": { "viewBox": "64 64 896 896", "focusable": "false" }, "children": [{ "tag": "path", "attrs": { "d": "M899.6 276.5L705 396.4 518.4 147.5a8.06 8.06 0 00-12.9 0L319 396.4 124.3 276.5c-5.7-3.5-13.1 1.2-12.2 7.9L188.5 865c1.1 7.9 7.9 14 16 14h615.1c8 0 14.9-6 15.9-14l76.4-580.6c.8-6.7-6.5-11.4-12.3-7.9zm-126 534.1H250.3l-53.8-409.4 139.8 86.1L512 252.9l175.7 234.4 139.8-86.1-53.9 409.4zM512 509c-62.1 0-112.6 50.5-112.6 112.6S449.9 734.2 512 734.2s112.6-50.5 112.6-112.6S574.1 509 512 509zm0 160.9c-26.6 0-48.2-21.6-48.2-48.3 0-26.6 21.6-48.3 48.2-48.3s48.2 21.6 48.2 48.3c0 26.6-21.6 48.3-48.2 48.3z" } }] }, "name": "crown", "theme": "outlined" };
1159
+ function _objectSpread$8(target) {
1160
+ for (var i = 1; i < arguments.length; i++) {
1161
+ var source = arguments[i] != null ? Object(arguments[i]) : {};
1162
+ var ownKeys = Object.keys(source);
1163
+ if (typeof Object.getOwnPropertySymbols === "function") {
1164
+ ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
1165
+ return Object.getOwnPropertyDescriptor(source, sym).enumerable;
1166
+ }));
1167
+ }
1168
+ ownKeys.forEach(function(key) {
1169
+ _defineProperty$8(target, key, source[key]);
1170
+ });
1171
+ }
1172
+ return target;
1173
+ }
1174
+ function _defineProperty$8(obj, key, value) {
1175
+ if (key in obj) {
1176
+ Object.defineProperty(obj, key, { value, enumerable: true, configurable: true, writable: true });
1177
+ } else {
1178
+ obj[key] = value;
1179
+ }
1180
+ return obj;
1181
+ }
1182
+ var CrownOutlined = function CrownOutlined2(props, context) {
1183
+ var p = _objectSpread$8({}, props, context.attrs);
1184
+ return vue.createVNode(Icon$1, _objectSpread$8({}, p, {
1185
+ "icon": CrownOutlined$1
1186
+ }), null);
1187
+ };
1188
+ CrownOutlined.displayName = "CrownOutlined";
1189
+ CrownOutlined.inheritAttrs = false;
1190
+ var DeleteOutlined$1 = { "icon": { "tag": "svg", "attrs": { "viewBox": "64 64 896 896", "focusable": "false" }, "children": [{ "tag": "path", "attrs": { "d": "M360 184h-8c4.4 0 8-3.6 8-8v8h304v-8c0 4.4 3.6 8 8 8h-8v72h72v-80c0-35.3-28.7-64-64-64H352c-35.3 0-64 28.7-64 64v80h72v-72zm504 72H160c-17.7 0-32 14.3-32 32v32c0 4.4 3.6 8 8 8h60.4l24.7 523c1.6 34.1 29.8 61 63.9 61h454c34.2 0 62.3-26.8 63.9-61l24.7-523H888c4.4 0 8-3.6 8-8v-32c0-17.7-14.3-32-32-32zM731.3 840H292.7l-24.2-512h487l-24.2 512z" } }] }, "name": "delete", "theme": "outlined" };
1159
1191
  function _objectSpread$7(target) {
1160
1192
  for (var i = 1; i < arguments.length; i++) {
1161
1193
  var source = arguments[i] != null ? Object(arguments[i]) : {};
@@ -1179,14 +1211,14 @@
1179
1211
  }
1180
1212
  return obj;
1181
1213
  }
1182
- var CrownOutlined = function CrownOutlined2(props, context) {
1214
+ var DeleteOutlined = function DeleteOutlined2(props, context) {
1183
1215
  var p = _objectSpread$7({}, props, context.attrs);
1184
1216
  return vue.createVNode(Icon$1, _objectSpread$7({}, p, {
1185
- "icon": CrownOutlined$1
1217
+ "icon": DeleteOutlined$1
1186
1218
  }), null);
1187
1219
  };
1188
- CrownOutlined.displayName = "CrownOutlined";
1189
- CrownOutlined.inheritAttrs = false;
1220
+ DeleteOutlined.displayName = "DeleteOutlined";
1221
+ DeleteOutlined.inheritAttrs = false;
1190
1222
  var ExclamationCircleFilled$1 = { "icon": { "tag": "svg", "attrs": { "viewBox": "64 64 896 896", "focusable": "false" }, "children": [{ "tag": "path", "attrs": { "d": "M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm-32 232c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v272c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8V296zm32 440a48.01 48.01 0 010-96 48.01 48.01 0 010 96z" } }] }, "name": "exclamation-circle", "theme": "filled" };
1191
1223
  function _objectSpread$6(target) {
1192
1224
  for (var i = 1; i < arguments.length; i++) {
@@ -1658,12 +1690,12 @@
1658
1690
  return function(...args) {
1659
1691
  return new Promise((resolve, reject) => {
1660
1692
  queue.push([resolve, reject]);
1661
- clearTimeout(timer);
1693
+ clearTimeout(timer != null ? timer : void 0);
1662
1694
  timer = setTimeout(() => {
1663
1695
  func.apply(this, args).then((res) => {
1664
- queue.map((item) => item[0]).forEach((item) => item(res));
1696
+ queue.forEach(([resolver]) => resolver(res));
1665
1697
  }).catch((err) => {
1666
- queue.map((item) => item[1]).forEach((item) => item(err));
1698
+ queue.forEach(([, rejecter]) => rejecter(err));
1667
1699
  }).finally(() => {
1668
1700
  queue.length = 0;
1669
1701
  timer = null;
@@ -1691,6 +1723,9 @@
1691
1723
  h = Math.min(IMG_MSG_SIDE_MAX, h0 * scale);
1692
1724
  return { width: Math.round(w), height: Math.round(h) };
1693
1725
  }
1726
+ const getMByteSize = (size) => {
1727
+ return (size / 1024 / 1024).toFixed(2);
1728
+ };
1694
1729
  const useGlobalStore = pinia.defineStore("global", {
1695
1730
  state: () => ({
1696
1731
  loginStatus: false
@@ -37637,7 +37672,6 @@
37637
37672
  async getSeverList(options) {
37638
37673
  if (window.qchat) {
37639
37674
  const res = await window.qchat.qchatServer.getServersByPage(options);
37640
- console.log("getSeverList", res);
37641
37675
  this.setSeverList(res);
37642
37676
  }
37643
37677
  },
@@ -37937,8 +37971,11 @@
37937
37971
  serverUnReadCountList: []
37938
37972
  }),
37939
37973
  actions: {
37940
- // 设置频道列表(原 mutations 转为 actions)
37941
- setChannelList(payload) {
37974
+ /**
37975
+ * 设置频道列表并获取未读数
37976
+ * @param payload 频道列表数据
37977
+ */
37978
+ async setChannelList(payload) {
37942
37979
  const serverStore = useServerStore();
37943
37980
  serverStore.resetServerUnReadCount();
37944
37981
  this.channelList = payload.datas;
@@ -37954,65 +37991,89 @@
37954
37991
  });
37955
37992
  }
37956
37993
  this.channelListQueryTag = payload.listQueryTag;
37994
+ await this.subscribleChannels();
37957
37995
  },
37958
- // 订阅频道(原 mutations 转为 actions)
37959
- subscribleChannels() {
37996
+ /**
37997
+ * 订阅频道并获取未读数
37998
+ * @description 先使用 getChannelUnreadInfos 主动查询未读数(获取登录前积累的未读),再订阅频道接收实时更新
37999
+ */
38000
+ async subscribleChannels() {
38001
+ var _a, _b;
37960
38002
  this.channelUnReadInfoList = [];
37961
38003
  const channels = [];
37962
38004
  this.channelList.forEach((item) => {
37963
38005
  channels.push({ serverId: item.serverId, channelId: item.channelId });
37964
38006
  });
37965
- window.qchat.qchatChannel.subscribeChannel({
38007
+ if (channels.length === 0) {
38008
+ return;
38009
+ }
38010
+ try {
38011
+ const unreadInfos = await ((_a = window.qchat) == null ? void 0 : _a.qchatChannel.getChannelUnreadInfos({
38012
+ channels
38013
+ }));
38014
+ this.applyUnreadInfosToChannels(unreadInfos);
38015
+ } catch (error) {
38016
+ console.error("[subscribleChannels] 查询未读数失败:", error);
38017
+ }
38018
+ (_b = window.qchat) == null ? void 0 : _b.qchatChannel.subscribeChannel({
37966
38019
  type: 2,
37967
38020
  opeType: 1,
37968
38021
  channels
37969
- }).then((resp) => {
37970
- const unreadInfos = resp;
37971
- unreadInfos.forEach((item) => {
37972
- if (this.channelList && this.channelList.length > 0) {
37973
- this.channelList.forEach((channelItem) => {
37974
- if (channelItem.channelId === item.channelId) {
37975
- channelItem["unreadCount"] = item.unreadCount;
37976
- }
37977
- });
37978
- }
37979
- this.channelUnReadInfoList.push({
37980
- channelId: item.channelId,
37981
- unreadCount: item.unreadCount,
37982
- serverId: item.serverId
37983
- });
37984
- });
37985
- this.serverUnReadCountList = [];
37986
- this.channelUnReadInfoList.forEach((item) => {
37987
- let existsFlag = false;
37988
- for (let index2 = 0; index2 < this.serverUnReadCountList.length; index2++) {
37989
- const serverCount = this.serverUnReadCountList[index2];
37990
- if (serverCount.serverId === item.serverId) {
37991
- existsFlag = true;
37992
- break;
37993
- }
37994
- }
37995
- if (!existsFlag) {
37996
- this.serverUnReadCountList.push({
37997
- serverId: item.serverId,
37998
- unreadCount: item.unreadCount
37999
- });
38000
- } else {
38001
- for (let index2 = 0; index2 < this.serverUnReadCountList.length; index2++) {
38002
- const serverUnReadCountAgg = this.serverUnReadCountList[index2];
38003
- if (serverUnReadCountAgg.serverId == item.serverId) {
38004
- serverUnReadCountAgg.unreadCount = serverUnReadCountAgg.unreadCount + item.unreadCount;
38005
- break;
38006
- }
38022
+ }).catch((error) => {
38023
+ console.error("[subscribleChannels] 订阅频道失败:", error);
38024
+ });
38025
+ },
38026
+ /**
38027
+ * 将未读信息应用到频道列表
38028
+ * @param unreadInfos 未读信息列表
38029
+ */
38030
+ applyUnreadInfosToChannels(unreadInfos) {
38031
+ unreadInfos.forEach((item) => {
38032
+ if (this.channelList && this.channelList.length > 0) {
38033
+ this.channelList.forEach((channelItem) => {
38034
+ if (channelItem.channelId === item.channelId) {
38035
+ channelItem["unreadCount"] = item.unreadCount;
38007
38036
  }
38008
- }
38037
+ });
38038
+ }
38039
+ this.channelUnReadInfoList.push({
38040
+ channelId: item.channelId,
38041
+ unreadCount: item.unreadCount,
38042
+ serverId: item.serverId
38009
38043
  });
38010
- const serverStore = useServerStore();
38011
- serverStore.setUnReadInfo(this.serverUnReadCountList);
38012
38044
  });
38045
+ this.serverUnReadCountList = [];
38046
+ this.channelUnReadInfoList.forEach((item) => {
38047
+ const existingServer = this.serverUnReadCountList.find(
38048
+ (s) => s.serverId === item.serverId
38049
+ );
38050
+ if (existingServer) {
38051
+ existingServer.unreadCount += item.unreadCount;
38052
+ } else {
38053
+ this.serverUnReadCountList.push({
38054
+ serverId: item.serverId,
38055
+ unreadCount: item.unreadCount
38056
+ });
38057
+ }
38058
+ });
38059
+ const serverStore = useServerStore();
38060
+ serverStore.setUnReadInfo(this.serverUnReadCountList);
38013
38061
  },
38014
- // 设置 channel 的未读消息数(原 mutations 转为 actions)
38062
+ /**
38063
+ * 设置 channel 的未读消息数
38064
+ * @param payload 未读信息
38065
+ * @description 如果是当前频道的未读更新,会忽略(因为用户正在查看该频道)
38066
+ */
38015
38067
  setUnReadNum(payload) {
38068
+ var _a;
38069
+ if (this.currentChannel && this.currentChannel.channelId === payload.channelId) {
38070
+ (_a = window.qchat) == null ? void 0 : _a.qchatMsg.markMessageRead({
38071
+ serverId: payload.serverId,
38072
+ channelId: payload.channelId,
38073
+ time: Date.now()
38074
+ });
38075
+ return;
38076
+ }
38016
38077
  if (this.channelList && this.channelList.length > 0) {
38017
38078
  this.channelList.forEach((channelItem) => {
38018
38079
  if (channelItem.channelId === payload.channelId) {
@@ -38089,6 +38150,7 @@
38089
38150
  },
38090
38151
  // 重置频道未读计数(原 mutations 转为 actions)
38091
38152
  resetChannelUnReadCount() {
38153
+ var _a;
38092
38154
  if (this.currentChannel) {
38093
38155
  if (this.channelUnReadInfoList) {
38094
38156
  let finalIndex = -1;
@@ -38122,7 +38184,7 @@
38122
38184
  maxCount: 99,
38123
38185
  lastMsgTime: (/* @__PURE__ */ new Date()).getTime()
38124
38186
  };
38125
- window.qchat.qchatMsg.markMessageRead(markMessageReadOption);
38187
+ (_a = window.qchat) == null ? void 0 : _a.qchatMsg.markMessageRead(markMessageReadOption);
38126
38188
  this.currentChannel["unreadCount"] = 0;
38127
38189
  }
38128
38190
  },
@@ -38171,6 +38233,15 @@
38171
38233
  (i) => payload.every((j) => j.msgIdClient !== i.msgIdClient)
38172
38234
  );
38173
38235
  },
38236
+ // 更新当前频道消息
38237
+ updateCurChannelMsgs(msg) {
38238
+ this.currentChannelMsgs = this.currentChannelMsgs.map((msgItem) => {
38239
+ if (msgItem.msgIdClient === msg.msgIdClient) {
38240
+ return msg;
38241
+ }
38242
+ return msgItem;
38243
+ });
38244
+ },
38174
38245
  // 设置当前频道消息(原 mutations 转为 actions)
38175
38246
  setCurChannelMsgs(payload) {
38176
38247
  this.currentChannelMsgs = payload;
@@ -38187,7 +38258,7 @@
38187
38258
  throw new Error("QChat no login");
38188
38259
  }
38189
38260
  const res = await window.qchat.qchatChannel.getChannelsByPage(options);
38190
- this.setChannelList(res);
38261
+ await this.setChannelList(res);
38191
38262
  },
38192
38263
  1e3
38193
38264
  );
@@ -38263,7 +38334,27 @@
38263
38334
  });
38264
38335
  return msgs;
38265
38336
  },
38266
- // 发送文本消息
38337
+ /**
38338
+ * 上传图片
38339
+ * @param options - 上传选项,包含图片文件和回调函数
38340
+ * @returns Promise<UploadFileResult> 返回上传结果,包含图片URL、宽高等信息
38341
+ */
38342
+ async uploadImage(options) {
38343
+ if (!window.qchat) {
38344
+ throw new Error("QChat no login");
38345
+ }
38346
+ const uploadResult = await window.qchat.cloudStorage.uploadFile({
38347
+ type: "image",
38348
+ file: options.file,
38349
+ onUploadStart: options.onUploadStart,
38350
+ onUploadDone: options.onUploadDone
38351
+ });
38352
+ return uploadResult;
38353
+ },
38354
+ /**
38355
+ * 发送文本消息
38356
+ * @param options - 发送选项,包含消息内容和可选附件
38357
+ */
38267
38358
  async sendTextMsg(options) {
38268
38359
  var _a;
38269
38360
  if (!window.qchat) {
@@ -38278,6 +38369,8 @@
38278
38369
  channelId: this.currentChannel.channelId,
38279
38370
  type: "text",
38280
38371
  body: options.body,
38372
+ attach: options == null ? void 0 : options.attach,
38373
+ // 如果有附件,塞到attach字段
38281
38374
  ext: (options == null ? void 0 : options.ext) ? JSON.stringify(options == null ? void 0 : options.ext) : void 0,
38282
38375
  mentionAccids: options == null ? void 0 : options.mentionAccids,
38283
38376
  onSendBefore: (msg2) => {
@@ -38424,6 +38517,15 @@
38424
38517
  this.addCurChannelMsgs({ data: [msg], isUnShift: false });
38425
38518
  }
38426
38519
  },
38520
+ // 撤回消息
38521
+ async revokeMessage(options) {
38522
+ if (!window.qchat) {
38523
+ throw new Error("QChat no login");
38524
+ }
38525
+ window.qchat.qchatMsg.revokeMessage(options).then((res) => {
38526
+ this.updateCurChannelMsgs(res);
38527
+ });
38528
+ },
38427
38529
  // 获取频道黑白名单
38428
38530
  async getWhiteBlackMembersPage(options) {
38429
38531
  if (!window.qchat) {
@@ -38464,6 +38566,9 @@
38464
38566
  },
38465
38567
  // 获取频道身份组
38466
38568
  async getChannelRoles(options) {
38569
+ if (!window.qchat) {
38570
+ throw new Error("QChat no login");
38571
+ }
38467
38572
  const res = await window.qchat.qchatRole.getChannelRoles(options);
38468
38573
  return res;
38469
38574
  },
@@ -38523,11 +38628,17 @@
38523
38628
  },
38524
38629
  // 获取成员角色
38525
38630
  async getMemberRoles(options) {
38631
+ if (!window.qchat) {
38632
+ throw new Error("QChat no login");
38633
+ }
38526
38634
  const res = await window.qchat.qchatRole.getMemberRoles(options);
38527
38635
  return res;
38528
38636
  },
38529
38637
  // 获取已存在的成员角色 accids
38530
38638
  async getExistingAccidsOfMemberRoles(options) {
38639
+ if (!window.qchat) {
38640
+ throw new Error("QChat no login");
38641
+ }
38531
38642
  const res = await window.qchat.qchatRole.getExistingAccidsOfMemberRoles(
38532
38643
  options
38533
38644
  );
@@ -38556,9 +38667,9 @@
38556
38667
  }
38557
38668
  });
38558
38669
  pinia.createPinia();
38559
- const _hoisted_1$9 = { class: "yx-common-avatar-container" };
38560
- const _hoisted_2$8 = ["src"];
38561
- const _sfc_main$9 = /* @__PURE__ */ vue.defineComponent({
38670
+ const _hoisted_1$a = { class: "yx-common-avatar-container" };
38671
+ const _hoisted_2$9 = ["src"];
38672
+ const _sfc_main$a = /* @__PURE__ */ vue.defineComponent({
38562
38673
  ...{
38563
38674
  name: "CommonAvatar"
38564
38675
  },
@@ -38614,14 +38725,14 @@
38614
38725
  });
38615
38726
  return (_ctx, _cache) => {
38616
38727
  var _a, _b;
38617
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$9, [
38728
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$a, [
38618
38729
  __props.avatar || ((_a = matchedMember.value) == null ? void 0 : _a.avatar) ? (vue.openBlock(), vue.createElementBlock("img", {
38619
38730
  key: 0,
38620
38731
  alt: "",
38621
38732
  class: "image",
38622
38733
  src: __props.avatar,
38623
38734
  style: vue.normalizeStyle("width:" + widthAndHeight.value + "height:" + widthAndHeight.value + "border:" + borderStyle.value)
38624
- }, null, 12, _hoisted_2$8)) : vue.createCommentVNode("", true),
38735
+ }, null, 12, _hoisted_2$9)) : vue.createCommentVNode("", true),
38625
38736
  !__props.avatar && !((_b = matchedMember.value) == null ? void 0 : _b.avatar) ? (vue.openBlock(), vue.createElementBlock("div", {
38626
38737
  key: 1,
38627
38738
  class: "text",
@@ -38670,26 +38781,87 @@
38670
38781
  };
38671
38782
  }
38672
38783
  });
38784
+ const _hoisted_1$9 = { class: "yx-attach-box-img-info-wrapper" };
38785
+ const _hoisted_2$8 = {
38786
+ style: { "min-width": "21px", "min-height": "18px" },
38787
+ width: "21",
38788
+ height: "18",
38789
+ viewBox: "0 0 21 18",
38790
+ fill: "var(--theme-head-title-link, #3B3E55)",
38791
+ xmlns: "http://www.w3.org/2000/svg"
38792
+ };
38793
+ const _hoisted_3$8 = { class: "yx-attach-box-img-info-text" };
38794
+ const _hoisted_4$8 = { class: "yx-attach-box-img-info-text-name" };
38795
+ const _hoisted_5$7 = ["href", "download"];
38796
+ const _hoisted_6$7 = { class: "yx-attach-box-img-info-text-size" };
38797
+ const _sfc_main$9 = /* @__PURE__ */ vue.defineComponent({
38798
+ ...{ name: "ImgInfoWrapper" },
38799
+ __name: "index",
38800
+ props: {
38801
+ attach: {}
38802
+ },
38803
+ setup(__props) {
38804
+ return (_ctx, _cache) => {
38805
+ var _a, _b, _c, _d;
38806
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$9, [
38807
+ (vue.openBlock(), vue.createElementBlock("svg", _hoisted_2$8, [..._cache[0] || (_cache[0] = [
38808
+ vue.createElementVNode("path", {
38809
+ d: "M15.75 9C16.9926 9 18 7.99264 18 6.75C18 5.50736 16.9926 4.5 15.75 4.5C14.5074 4.5 13.5 5.50736 13.5 6.75C13.5 7.99264 14.5074 9 15.75 9Z",
38810
+ fill: "#9198A1"
38811
+ }, null, -1),
38812
+ vue.createElementVNode("path", {
38813
+ "fill-rule": "evenodd",
38814
+ "clip-rule": "evenodd",
38815
+ d: "M3 0C1.34315 0 0 1.34315 0 3V15C0 16.6569 1.34315 18 3 18H18C19.6569 18 21 16.6569 21 15V3C21 1.34315 19.6569 0 18 0H3ZM18 1.5H3C2.17157 1.5 1.5 2.17157 1.5 3V8.68934L6 4.18934L18.2838 16.4732C18.9765 16.3405 19.5 15.7314 19.5 15V3C19.5 2.17157 18.8284 1.5 18 1.5ZM1.5 15V10.8107L6 6.31066L16.1893 16.5H3C2.17157 16.5 1.5 15.8284 1.5 15Z",
38816
+ fill: "#9198A1"
38817
+ }, null, -1)
38818
+ ])])),
38819
+ vue.createElementVNode("div", _hoisted_3$8, [
38820
+ vue.createElementVNode("div", _hoisted_4$8, [
38821
+ vue.createElementVNode("a", {
38822
+ class: "yx-attach-box-img-info-text-name-link",
38823
+ href: (_a = __props.attach) == null ? void 0 : _a.url,
38824
+ download: (_b = __props.attach) == null ? void 0 : _b.name
38825
+ }, vue.toDisplayString((_c = __props.attach) == null ? void 0 : _c.name), 9, _hoisted_5$7)
38826
+ ]),
38827
+ vue.createElementVNode("div", _hoisted_6$7, vue.toDisplayString(vue.unref(getMByteSize)(((_d = __props.attach) == null ? void 0 : _d.size) || 0)) + "MB", 1)
38828
+ ])
38829
+ ]);
38830
+ };
38831
+ }
38832
+ });
38673
38833
  const _hoisted_1$8 = ["data-msg-id-client"];
38674
- const _hoisted_2$7 = { class: "chatCardAvatar" };
38675
- const _hoisted_3$7 = { class: "chatCardContent" };
38676
- const _hoisted_4$7 = { class: "chatCardInfo" };
38677
- const _hoisted_5$6 = { class: "chatCardInfoName" };
38678
- const _hoisted_6$6 = { class: "chatCardInfoTime" };
38679
- const _hoisted_7$4 = ["innerHTML"];
38680
- const _hoisted_8$4 = ["href"];
38681
- const _hoisted_9$3 = { class: "fileMsgContent" };
38682
- const _hoisted_10$3 = { class: "fileMsgName" };
38683
- const _hoisted_11$3 = { class: "fileMsgSize" };
38684
- const _hoisted_12$3 = { class: "ant-image-mask-info" };
38685
- const _hoisted_13$3 = {
38834
+ const _hoisted_2$7 = {
38835
+ key: 0,
38836
+ class: "chat-withdraw-msg"
38837
+ };
38838
+ const _hoisted_3$7 = { class: "chatCardAvatar" };
38839
+ const _hoisted_4$7 = { class: "chatCardContent" };
38840
+ const _hoisted_5$6 = { class: "chatCardInfo" };
38841
+ const _hoisted_6$6 = { class: "chatCardInfoName" };
38842
+ const _hoisted_7$4 = { class: "chatCardInfoTime" };
38843
+ const _hoisted_8$4 = ["innerHTML"];
38844
+ const _hoisted_9$3 = ["href"];
38845
+ const _hoisted_10$3 = { class: "fileMsgContent" };
38846
+ const _hoisted_11$3 = { class: "fileMsgName" };
38847
+ const _hoisted_12$3 = { class: "fileMsgSize" };
38848
+ const _hoisted_13$3 = { class: "ant-image-mask-info" };
38849
+ const _hoisted_14$3 = {
38686
38850
  key: 4,
38851
+ class: "chatCardMainContent attach-box"
38852
+ };
38853
+ const _hoisted_15$3 = { class: "ant-image-mask-info" };
38854
+ const _hoisted_16$2 = {
38855
+ key: 5,
38687
38856
  class: "chatCardMainContent"
38688
38857
  };
38689
- const _hoisted_14$3 = { class: "chatCardQuoteMsgName" };
38690
- const _hoisted_15$3 = ["innerHTML"];
38691
- const _hoisted_16$2 = { class: "ant-image-mask-info" };
38692
- const _hoisted_17$2 = { class: "chatCardStatus" };
38858
+ const _hoisted_17$2 = { class: "chatCardQuoteMsgAttachBox" };
38859
+ const _hoisted_18$2 = { class: "chatCardQuoteMsgName" };
38860
+ const _hoisted_19$2 = ["innerHTML"];
38861
+ const _hoisted_20$2 = { class: "ant-image-mask-info" };
38862
+ const _hoisted_21$2 = { class: "chatCardStatus" };
38863
+ const MAX_IMG_PREVIEW_SIZE = 2 * 1024 * 1024;
38864
+ const REVOCATION_INTERVAL = 120 * 1e3;
38693
38865
  const _sfc_main$8 = /* @__PURE__ */ vue.defineComponent({
38694
38866
  ...{
38695
38867
  name: "ChatCard"
@@ -38699,10 +38871,30 @@
38699
38871
  msg: {},
38700
38872
  myAccid: { default: "" }
38701
38873
  },
38702
- emits: ["resendText", "resendImg", "resendFile", "quote", "contextMenuSwitch", "quoteMsgClick"],
38874
+ emits: ["resendText", "resendImg", "resendFile", "quote", "contextMenuSwitch", "quoteMsgClick", "revokeMessage"],
38703
38875
  setup(__props, { emit: __emit }) {
38704
38876
  const serverStore = useServerStore();
38705
38877
  const props = __props;
38878
+ const nowTime = vue.ref(Date.now());
38879
+ let timer = null;
38880
+ timer = setInterval(() => {
38881
+ nowTime.value = Date.now();
38882
+ if (nowTime.value - props.msg.time > REVOCATION_INTERVAL) {
38883
+ if (timer) {
38884
+ clearInterval(timer);
38885
+ timer = null;
38886
+ }
38887
+ }
38888
+ }, 1e3);
38889
+ vue.onBeforeUnmount(() => {
38890
+ if (timer) {
38891
+ clearInterval(timer);
38892
+ timer = null;
38893
+ }
38894
+ });
38895
+ const isRevocation = vue.computed(() => {
38896
+ return props.msg.fromAccount === props.myAccid && nowTime.value - props.msg.time <= REVOCATION_INTERVAL;
38897
+ });
38706
38898
  const { copy } = core.useClipboard();
38707
38899
  const emit = __emit;
38708
38900
  const textMsgContextMenuVisible = vue.ref(false);
@@ -38715,13 +38907,25 @@
38715
38907
  textMsgContextMenuVisible.value = true;
38716
38908
  }
38717
38909
  function onCopyClick() {
38718
- copy(props.msg.body).then(() => {
38719
- }).catch((err) => {
38720
- console.error("copy error: ", err);
38721
- antDesignVue.message.error("复制失败");
38722
- }).finally(() => {
38723
- textMsgContextMenuVisible.value = false;
38724
- });
38910
+ var _a;
38911
+ if (props.msg.type === "text") {
38912
+ copy(props.msg.body).then(() => {
38913
+ }).catch((err) => {
38914
+ console.error("copy error: ", err);
38915
+ antDesignVue.message.error("复制失败");
38916
+ }).finally(() => {
38917
+ textMsgContextMenuVisible.value = false;
38918
+ });
38919
+ }
38920
+ if (props.msg.type === "image") {
38921
+ copy((_a = props.msg.attach) == null ? void 0 : _a.url).then(() => {
38922
+ }).catch((err) => {
38923
+ console.error("copy error: ", err);
38924
+ antDesignVue.message.error("复制失败");
38925
+ }).finally(() => {
38926
+ textMsgContextMenuVisible.value = false;
38927
+ });
38928
+ }
38725
38929
  }
38726
38930
  function onQuoteClick() {
38727
38931
  var _a;
@@ -38740,6 +38944,14 @@
38740
38944
  emit("quote", msg);
38741
38945
  textMsgContextMenuVisible.value = false;
38742
38946
  }
38947
+ const onRevocationClick = () => {
38948
+ textMsgContextMenuVisible.value = false;
38949
+ if (!isRevocation.value) {
38950
+ antDesignVue.message.error("消息已超过撤回时间");
38951
+ return;
38952
+ }
38953
+ emit("revokeMessage", props.msg);
38954
+ };
38743
38955
  function onQuoteMsgClick() {
38744
38956
  var _a;
38745
38957
  emit("quoteMsgClick", (_a = msgExt.value) == null ? void 0 : _a.quoteMsg);
@@ -38848,159 +39060,185 @@
38848
39060
  }
38849
39061
  };
38850
39062
  return (_ctx, _cache) => {
38851
- var _a, _b, _c, _d, _e, _f, _g, _h;
39063
+ var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s;
38852
39064
  return vue.openBlock(), vue.createElementBlock("div", {
38853
39065
  class: vue.normalizeClass(["yx-chatCardWrapper", { reverse: __props.msg.fromAccount === __props.myAccid }]),
38854
39066
  "data-msg-id-client": __props.msg.msgIdClient
38855
39067
  }, [
38856
- vue.createElementVNode("div", _hoisted_2$7, [
38857
- vue.createVNode(_sfc_main$9, {
38858
- avatar: myAvatar.value,
38859
- nick: __props.msg.fromNick,
38860
- accid: __props.msg.fromAccount,
38861
- width: 32,
38862
- border: 0,
38863
- style: { "min-width": "32px" }
38864
- }, null, 8, ["avatar", "nick", "accid"])
38865
- ]),
38866
- vue.createElementVNode("div", _hoisted_3$7, [
38867
- vue.createElementVNode("div", null, [
38868
- vue.createElementVNode("div", _hoisted_4$7, [
38869
- vue.createElementVNode("span", _hoisted_5$6, vue.toDisplayString(__props.msg.fromNick), 1),
38870
- vue.createElementVNode("span", _hoisted_6$6, vue.toDisplayString(time.value), 1)
38871
- ]),
38872
- __props.msg.type === "text" ? (vue.openBlock(), vue.createElementBlock("div", {
38873
- key: 0,
38874
- class: vue.normalizeClass(["chatCardMainContent", { myMsg: __props.msg.fromAccount === __props.myAccid, otherMsg: __props.msg.fromAccount !== __props.myAccid }])
38875
- }, [
38876
- vue.createElementVNode("div", {
38877
- class: "textMsg flash-target",
38878
- onContextmenu: vue.withModifiers(onTextMsgContextMenu, ["prevent"]),
38879
- innerHTML: textMsgBody.value
38880
- }, null, 40, _hoisted_7$4)
38881
- ], 2)) : __props.msg.type === "file" ? (vue.openBlock(), vue.createElementBlock("div", {
38882
- key: 1,
38883
- class: vue.normalizeClass(["chatCardMainContent", { myMsg: __props.msg.fromAccount === __props.myAccid, otherMsg: __props.msg.fromAccount !== __props.myAccid }])
38884
- }, [
38885
- vue.createElementVNode("a", {
38886
- class: "fileMsg",
38887
- target: "_blank",
38888
- href: (_b = (_a = __props.msg) == null ? void 0 : _a.attach) == null ? void 0 : _b.url
39068
+ ((_a = __props.msg.updateOperatorInfo) == null ? void 0 : _a.ps) ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$7, vue.toDisplayString(__props.msg.fromAccount === __props.myAccid ? "你" : `“${__props.msg.fromNick}”`) + " " + vue.toDisplayString((_b = __props.msg.updateOperatorInfo) == null ? void 0 : _b.ps), 1)) : (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 1 }, [
39069
+ vue.createElementVNode("div", _hoisted_3$7, [
39070
+ vue.createVNode(_sfc_main$a, {
39071
+ avatar: myAvatar.value,
39072
+ nick: __props.msg.fromNick,
39073
+ accid: __props.msg.fromAccount,
39074
+ width: 32,
39075
+ border: 0,
39076
+ style: { "min-width": "32px" }
39077
+ }, null, 8, ["avatar", "nick", "accid"])
39078
+ ]),
39079
+ vue.createElementVNode("div", _hoisted_4$7, [
39080
+ vue.createElementVNode("div", null, [
39081
+ vue.createElementVNode("div", _hoisted_5$6, [
39082
+ vue.createElementVNode("span", _hoisted_6$6, vue.toDisplayString(__props.msg.fromNick), 1),
39083
+ vue.createElementVNode("span", _hoisted_7$4, vue.toDisplayString(time.value), 1)
39084
+ ]),
39085
+ __props.msg.type === "text" ? (vue.openBlock(), vue.createElementBlock("div", {
39086
+ key: 0,
39087
+ class: vue.normalizeClass(["chatCardMainContent", { myMsg: __props.msg.fromAccount === __props.myAccid, otherMsg: __props.msg.fromAccount !== __props.myAccid }])
38889
39088
  }, [
38890
- ext.value === "pdf" ? (vue.openBlock(), vue.createBlock(vue.unref(FileIconFont), {
38891
- key: 0,
38892
- type: "icon-PDF",
38893
- style: { "font-size": "40px" }
38894
- })) : ext.value === "word" ? (vue.openBlock(), vue.createBlock(vue.unref(FileIconFont), {
38895
- key: 1,
38896
- type: "icon-Word",
38897
- style: { "font-size": "40px" }
38898
- })) : ext.value === "excel" ? (vue.openBlock(), vue.createBlock(vue.unref(FileIconFont), {
38899
- key: 2,
38900
- type: "icon-Excel",
38901
- style: { "font-size": "40px" }
38902
- })) : ext.value === "ppt" ? (vue.openBlock(), vue.createBlock(vue.unref(FileIconFont), {
38903
- key: 3,
38904
- type: "icon-PPT",
38905
- style: { "font-size": "40px" }
38906
- })) : ext.value === "zip" ? (vue.openBlock(), vue.createBlock(vue.unref(FileIconFont), {
38907
- key: 4,
38908
- type: "icon-RAR1",
38909
- style: { "font-size": "40px" }
38910
- })) : ext.value === "video" ? (vue.openBlock(), vue.createBlock(vue.unref(FileIconFont), {
38911
- key: 5,
38912
- type: "icon-shipin",
38913
- style: { "font-size": "40px" }
38914
- })) : ext.value === "audio" ? (vue.openBlock(), vue.createBlock(vue.unref(FileIconFont), {
38915
- key: 6,
38916
- type: "icon-yinle",
38917
- style: { "font-size": "40px" }
38918
- })) : ext.value === "img" ? (vue.openBlock(), vue.createBlock(vue.unref(FileIconFont), {
38919
- key: 7,
38920
- type: "icon-tupian2",
38921
- style: { "font-size": "40px" }
38922
- })) : ext.value === "txt" ? (vue.openBlock(), vue.createBlock(vue.unref(FileIconFont), {
38923
- key: 8,
38924
- type: "icon-qita",
38925
- style: { "font-size": "40px" }
38926
- })) : (vue.openBlock(), vue.createBlock(vue.unref(FileIconFont), {
38927
- key: 9,
38928
- type: "icon-weizhiwenjian",
38929
- style: { "font-size": "40px" }
38930
- })),
38931
- vue.createElementVNode("div", _hoisted_9$3, [
38932
- vue.createElementVNode("div", _hoisted_10$3, vue.toDisplayString((_d = (_c = __props.msg) == null ? void 0 : _c.attach) == null ? void 0 : _d.name), 1),
38933
- vue.createElementVNode("div", _hoisted_11$3, vue.toDisplayString(size.value), 1)
38934
- ])
38935
- ], 8, _hoisted_8$4)
38936
- ], 2)) : __props.msg.type === "image" ? (vue.openBlock(), vue.createElementBlock("div", {
38937
- key: 2,
38938
- class: vue.normalizeClass(["chatCardMainContent flash-target", { myMsg: __props.msg.fromAccount === __props.myAccid, otherMsg: __props.msg.fromAccount !== __props.myAccid }]),
38939
- onContextmenu: vue.withModifiers(onTextMsgContextMenu, ["prevent"])
38940
- }, [
38941
- vue.createVNode(vue.unref(antDesignVue.Image), {
38942
- class: "imgMsg",
38943
- src: (_f = (_e = __props.msg) == null ? void 0 : _e.attach) == null ? void 0 : _f.url,
38944
- width: imageMsgSize.value.width,
38945
- height: imageMsgSize.value.height
38946
- }, {
38947
- previewMask: vue.withCtx(() => [
38948
- vue.createElementVNode("div", _hoisted_12$3, [
38949
- vue.createVNode(vue.unref(EyeOutlined))
39089
+ vue.createElementVNode("div", {
39090
+ class: "textMsg flash-target",
39091
+ onContextmenu: vue.withModifiers(onTextMsgContextMenu, ["prevent"]),
39092
+ innerHTML: textMsgBody.value
39093
+ }, null, 40, _hoisted_8$4)
39094
+ ], 2)) : __props.msg.type === "file" ? (vue.openBlock(), vue.createElementBlock("div", {
39095
+ key: 1,
39096
+ class: vue.normalizeClass(["chatCardMainContent", { myMsg: __props.msg.fromAccount === __props.myAccid, otherMsg: __props.msg.fromAccount !== __props.myAccid }])
39097
+ }, [
39098
+ vue.createElementVNode("a", {
39099
+ class: "fileMsg",
39100
+ target: "_blank",
39101
+ href: (_d = (_c = __props.msg) == null ? void 0 : _c.attach) == null ? void 0 : _d.url
39102
+ }, [
39103
+ ext.value === "pdf" ? (vue.openBlock(), vue.createBlock(vue.unref(FileIconFont), {
39104
+ key: 0,
39105
+ type: "icon-PDF",
39106
+ style: { "font-size": "40px" }
39107
+ })) : ext.value === "word" ? (vue.openBlock(), vue.createBlock(vue.unref(FileIconFont), {
39108
+ key: 1,
39109
+ type: "icon-Word",
39110
+ style: { "font-size": "40px" }
39111
+ })) : ext.value === "excel" ? (vue.openBlock(), vue.createBlock(vue.unref(FileIconFont), {
39112
+ key: 2,
39113
+ type: "icon-Excel",
39114
+ style: { "font-size": "40px" }
39115
+ })) : ext.value === "ppt" ? (vue.openBlock(), vue.createBlock(vue.unref(FileIconFont), {
39116
+ key: 3,
39117
+ type: "icon-PPT",
39118
+ style: { "font-size": "40px" }
39119
+ })) : ext.value === "zip" ? (vue.openBlock(), vue.createBlock(vue.unref(FileIconFont), {
39120
+ key: 4,
39121
+ type: "icon-RAR1",
39122
+ style: { "font-size": "40px" }
39123
+ })) : ext.value === "video" ? (vue.openBlock(), vue.createBlock(vue.unref(FileIconFont), {
39124
+ key: 5,
39125
+ type: "icon-shipin",
39126
+ style: { "font-size": "40px" }
39127
+ })) : ext.value === "audio" ? (vue.openBlock(), vue.createBlock(vue.unref(FileIconFont), {
39128
+ key: 6,
39129
+ type: "icon-yinle",
39130
+ style: { "font-size": "40px" }
39131
+ })) : ext.value === "img" ? (vue.openBlock(), vue.createBlock(vue.unref(FileIconFont), {
39132
+ key: 7,
39133
+ type: "icon-tupian2",
39134
+ style: { "font-size": "40px" }
39135
+ })) : ext.value === "txt" ? (vue.openBlock(), vue.createBlock(vue.unref(FileIconFont), {
39136
+ key: 8,
39137
+ type: "icon-qita",
39138
+ style: { "font-size": "40px" }
39139
+ })) : (vue.openBlock(), vue.createBlock(vue.unref(FileIconFont), {
39140
+ key: 9,
39141
+ type: "icon-weizhiwenjian",
39142
+ style: { "font-size": "40px" }
39143
+ })),
39144
+ vue.createElementVNode("div", _hoisted_10$3, [
39145
+ vue.createElementVNode("div", _hoisted_11$3, vue.toDisplayString((_f = (_e = __props.msg) == null ? void 0 : _e.attach) == null ? void 0 : _f.name), 1),
39146
+ vue.createElementVNode("div", _hoisted_12$3, vue.toDisplayString(size.value), 1)
38950
39147
  ])
38951
- ]),
38952
- _: 1
38953
- }, 8, ["src", "width", "height"])
38954
- ], 34)) : (vue.openBlock(), vue.createElementBlock("div", {
38955
- key: 3,
38956
- class: vue.normalizeClass(["chatCardMainContent", { myMsg: __props.msg.fromAccount === __props.myAccid, otherMsg: __props.msg.fromAccount !== __props.myAccid }])
38957
- }, [..._cache[1] || (_cache[1] = [
38958
- vue.createElementVNode("div", { class: "textMsg" }, vue.toDisplayString("暂不支持该消息"), -1)
38959
- ])], 2)),
38960
- ((_g = msgExt.value) == null ? void 0 : _g.quoteMsg) ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_13$3, [
38961
- vue.createElementVNode("div", {
38962
- class: "chatCardQuoteMsg",
38963
- onClick: onQuoteMsgClick
39148
+ ], 8, _hoisted_9$3)
39149
+ ], 2)) : __props.msg.type === "image" ? (vue.openBlock(), vue.createElementBlock("div", {
39150
+ key: 2,
39151
+ class: vue.normalizeClass(["chatCardMainContent flash-target", { myMsg: __props.msg.fromAccount === __props.myAccid, otherMsg: __props.msg.fromAccount !== __props.myAccid }]),
39152
+ onContextmenu: vue.withModifiers(onTextMsgContextMenu, ["prevent"])
38964
39153
  }, [
38965
- vue.createElementVNode("div", _hoisted_14$3, vue.toDisplayString(msgExt.value.quoteMsg.fromNick) + ":", 1),
38966
- msgExt.value.quoteMsg.body ? (vue.openBlock(), vue.createElementBlock("div", {
39154
+ vue.createVNode(vue.unref(antDesignVue.Image), {
39155
+ class: "imgMsg",
39156
+ src: (_h = (_g = __props.msg) == null ? void 0 : _g.attach) == null ? void 0 : _h.url,
39157
+ width: imageMsgSize.value.width,
39158
+ height: imageMsgSize.value.height
39159
+ }, {
39160
+ previewMask: vue.withCtx(() => [
39161
+ vue.createElementVNode("div", _hoisted_13$3, [
39162
+ vue.createVNode(vue.unref(EyeOutlined))
39163
+ ])
39164
+ ]),
39165
+ _: 1
39166
+ }, 8, ["src", "width", "height"])
39167
+ ], 34)) : (vue.openBlock(), vue.createElementBlock("div", {
39168
+ key: 3,
39169
+ class: vue.normalizeClass(["chatCardMainContent", { myMsg: __props.msg.fromAccount === __props.myAccid, otherMsg: __props.msg.fromAccount !== __props.myAccid }])
39170
+ }, [..._cache[1] || (_cache[1] = [
39171
+ vue.createElementVNode("div", { class: "textMsg" }, vue.toDisplayString("暂不支持该消息"), -1)
39172
+ ])], 2)),
39173
+ __props.msg.type === "text" && ["jpg", "jpeg", "png", "gif"].includes(((_j = (_i = __props.msg) == null ? void 0 : _i.attach) == null ? void 0 : _j.ext) || "") ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_14$3, [
39174
+ ((_l = (_k = __props.msg) == null ? void 0 : _k.attach) == null ? void 0 : _l.size) && ((_n = (_m = __props.msg) == null ? void 0 : _m.attach) == null ? void 0 : _n.size) < MAX_IMG_PREVIEW_SIZE ? (vue.openBlock(), vue.createBlock(vue.unref(antDesignVue.Image), {
38967
39175
  key: 0,
38968
- class: "quoteMsgText",
38969
- innerHTML: msgExt.value.quoteMsg.body
38970
- }, null, 8, _hoisted_15$3)) : vue.createCommentVNode("", true),
38971
- msgExt.value.quoteMsg.type === "image" ? (vue.openBlock(), vue.createBlock(vue.unref(antDesignVue.Image), {
38972
- key: 1,
38973
- class: "imgMsg quoteMsgImg",
38974
- src: (_h = msgExt.value.quoteMsg.attach) == null ? void 0 : _h.url,
38975
- width: quoteImageMsgSize.value.width,
38976
- height: quoteImageMsgSize.value.height,
38977
- onClick: _cache[0] || (_cache[0] = vue.withModifiers(() => {
38978
- }, ["stop", "prevent"]))
39176
+ class: "imgMsg",
39177
+ src: (_p = (_o = __props.msg) == null ? void 0 : _o.attach) == null ? void 0 : _p.url,
39178
+ width: imageMsgSize.value.width,
39179
+ height: imageMsgSize.value.height
38979
39180
  }, {
38980
39181
  previewMask: vue.withCtx(() => [
38981
- vue.createElementVNode("div", _hoisted_16$2, [
39182
+ vue.createElementVNode("div", _hoisted_15$3, [
38982
39183
  vue.createVNode(vue.unref(EyeOutlined))
38983
39184
  ])
38984
39185
  ]),
38985
39186
  _: 1
38986
- }, 8, ["src", "width", "height"])) : vue.createCommentVNode("", true)
38987
- ])
38988
- ])) : vue.createCommentVNode("", true)
38989
- ]),
38990
- vue.createElementVNode("div", _hoisted_17$2, [
38991
- __props.msg.deliveryStatus === "failed" ? (vue.openBlock(), vue.createBlock(vue.unref(antDesignVue.Button), {
38992
- key: 0,
38993
- type: "text",
38994
- danger: "",
38995
- onClick: resendHandler
38996
- }, {
38997
- icon: vue.withCtx(() => [
38998
- vue.createVNode(vue.unref(ExclamationCircleFilled))
38999
- ]),
39000
- _: 1
39001
- })) : __props.msg.deliveryStatus === "sending" ? (vue.openBlock(), vue.createBlock(vue.unref(LoadingOutlined), { key: 1 })) : vue.createCommentVNode("", true)
39187
+ }, 8, ["src", "width", "height"])) : (vue.openBlock(), vue.createBlock(_sfc_main$9, {
39188
+ key: 1,
39189
+ attach: (_q = __props.msg) == null ? void 0 : _q.attach
39190
+ }, null, 8, ["attach"]))
39191
+ ])) : vue.createCommentVNode("", true),
39192
+ ((_r = msgExt.value) == null ? void 0 : _r.quoteMsg) ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_16$2, [
39193
+ vue.createElementVNode("div", {
39194
+ class: "chatCardQuoteMsg",
39195
+ onClick: onQuoteMsgClick
39196
+ }, [
39197
+ vue.createElementVNode("div", _hoisted_17$2, [
39198
+ vue.createVNode(_sfc_main$9, {
39199
+ attach: msgExt.value.quoteMsg.attach
39200
+ }, null, 8, ["attach"])
39201
+ ]),
39202
+ vue.createElementVNode("div", _hoisted_18$2, vue.toDisplayString(msgExt.value.quoteMsg.fromNick) + "", 1),
39203
+ msgExt.value.quoteMsg.body ? (vue.openBlock(), vue.createElementBlock("div", {
39204
+ key: 0,
39205
+ class: "quoteMsgText",
39206
+ innerHTML: msgExt.value.quoteMsg.body
39207
+ }, null, 8, _hoisted_19$2)) : vue.createCommentVNode("", true),
39208
+ msgExt.value.quoteMsg.type === "image" ? (vue.openBlock(), vue.createBlock(vue.unref(antDesignVue.Image), {
39209
+ key: 1,
39210
+ class: "imgMsg quoteMsgImg",
39211
+ src: (_s = msgExt.value.quoteMsg.attach) == null ? void 0 : _s.url,
39212
+ width: quoteImageMsgSize.value.width,
39213
+ height: quoteImageMsgSize.value.height,
39214
+ onClick: _cache[0] || (_cache[0] = vue.withModifiers(() => {
39215
+ }, ["stop", "prevent"]))
39216
+ }, {
39217
+ previewMask: vue.withCtx(() => [
39218
+ vue.createElementVNode("div", _hoisted_20$2, [
39219
+ vue.createVNode(vue.unref(EyeOutlined))
39220
+ ])
39221
+ ]),
39222
+ _: 1
39223
+ }, 8, ["src", "width", "height"])) : vue.createCommentVNode("", true)
39224
+ ])
39225
+ ])) : vue.createCommentVNode("", true)
39226
+ ]),
39227
+ vue.createElementVNode("div", _hoisted_21$2, [
39228
+ __props.msg.deliveryStatus === "failed" ? (vue.openBlock(), vue.createBlock(vue.unref(antDesignVue.Button), {
39229
+ key: 0,
39230
+ type: "text",
39231
+ danger: "",
39232
+ onClick: resendHandler
39233
+ }, {
39234
+ icon: vue.withCtx(() => [
39235
+ vue.createVNode(vue.unref(ExclamationCircleFilled))
39236
+ ]),
39237
+ _: 1
39238
+ })) : __props.msg.deliveryStatus === "sending" ? (vue.openBlock(), vue.createBlock(vue.unref(LoadingOutlined), { key: 1 })) : vue.createCommentVNode("", true)
39239
+ ])
39002
39240
  ])
39003
- ]),
39241
+ ], 64)),
39004
39242
  vue.withDirectives(vue.createElementVNode("div", {
39005
39243
  ref_key: "textMsgContextMenuRef",
39006
39244
  ref: textMsgContextMenuRef,
@@ -39014,7 +39252,12 @@
39014
39252
  vue.createElementVNode("div", {
39015
39253
  class: "yx-chatCardTextMsgContextMenu-item",
39016
39254
  onClick: onQuoteClick
39017
- }, "引用")
39255
+ }, "引用"),
39256
+ isRevocation.value ? (vue.openBlock(), vue.createElementBlock("div", {
39257
+ key: 0,
39258
+ class: "yx-chatCardTextMsgContextMenu-item",
39259
+ onClick: onRevocationClick
39260
+ }, " 撤回 ")) : vue.createCommentVNode("", true)
39018
39261
  ], 4), [
39019
39262
  [vue.vShow, textMsgContextMenuVisible.value]
39020
39263
  ])
@@ -39136,7 +39379,7 @@
39136
39379
  onMousedown: vue.withModifiers(($event) => onSelect($event, index2), ["prevent"])
39137
39380
  }, [
39138
39381
  vue.createElementVNode("div", _hoisted_3$6, [
39139
- vue.createVNode(_sfc_main$9, {
39382
+ vue.createVNode(_sfc_main$a, {
39140
39383
  avatar: item.avatar,
39141
39384
  nick: item.nick,
39142
39385
  accid: item.accid,
@@ -39678,19 +39921,29 @@
39678
39921
  key: 0,
39679
39922
  class: "chatroomInputQuoteWrapper"
39680
39923
  };
39681
- const _hoisted_9$2 = { class: "chatroomInputQuoteText" };
39682
- const _hoisted_10$2 = { class: "chatroomInputQuoteTextName" };
39683
- const _hoisted_11$2 = ["innerHTML"];
39684
- const _hoisted_12$2 = {
39924
+ const _hoisted_9$2 = { class: "chatroomInputQuoteAttachBox" };
39925
+ const _hoisted_10$2 = { class: "chatroomInputQuoteText" };
39926
+ const _hoisted_11$2 = { class: "chatroomInputQuoteTextName" };
39927
+ const _hoisted_12$2 = ["innerHTML"];
39928
+ const _hoisted_13$2 = {
39685
39929
  key: 0,
39686
39930
  class: "chatroomInputQuoteWrapperImg"
39687
39931
  };
39688
- const _hoisted_13$2 = { class: "chatroomInputWrapper" };
39689
- const _hoisted_14$2 = { class: "chatroomInputLeft" };
39690
- const _hoisted_15$2 = { style: { "width": "400px" } };
39691
- const _hoisted_16$1 = ["onClick"];
39692
- const _hoisted_17$1 = { class: "chatroomController" };
39693
- const MAX_IMG_SIZE = 20;
39932
+ const _hoisted_14$2 = {
39933
+ key: 1,
39934
+ class: "chatroomInputAttachmentWrapper"
39935
+ };
39936
+ const _hoisted_15$2 = {
39937
+ key: 0,
39938
+ class: "chatroomInputAttachmentWrapperImg"
39939
+ };
39940
+ const _hoisted_16$1 = { class: "chatroomInputAttachmentWrapperImgMask" };
39941
+ const _hoisted_17$1 = { class: "chatroomInputWrapper" };
39942
+ const _hoisted_18$1 = { class: "chatroomInputLeft" };
39943
+ const _hoisted_19$1 = { style: { "width": "400px" } };
39944
+ const _hoisted_20$1 = ["onClick"];
39945
+ const _hoisted_21$1 = { class: "chatroomController" };
39946
+ const MAX_IMG_SIZE = 10;
39694
39947
  const _sfc_main$5 = /* @__PURE__ */ vue.defineComponent({
39695
39948
  ...{
39696
39949
  name: "ChatContent"
@@ -39716,8 +39969,10 @@
39716
39969
  const props = __props;
39717
39970
  const emit = __emit;
39718
39971
  const quoteMsg = vue.ref();
39972
+ const attachment = vue.ref();
39719
39973
  const curText = vue.ref("");
39720
39974
  const cursorIndex = vue.ref(0);
39975
+ const attachmentUploading = vue.ref(false);
39721
39976
  const contentRef = vue.ref();
39722
39977
  const contentScrollLocked = vue.ref(false);
39723
39978
  const loadingMore = vue.ref(false);
@@ -39805,9 +40060,18 @@
39805
40060
  }
39806
40061
  });
39807
40062
  };
40063
+ const handleRevokeMessage = (msg) => {
40064
+ channelStore.revokeMessage({
40065
+ ps: "撤回了一条消息",
40066
+ message: msg
40067
+ });
40068
+ };
39808
40069
  const handleDeleteQuoteMsg = () => {
39809
40070
  quoteMsg.value = void 0;
39810
40071
  };
40072
+ const handleDeleteAttachment = () => {
40073
+ attachment.value = void 0;
40074
+ };
39811
40075
  vue.watch(
39812
40076
  () => props.msgs,
39813
40077
  (value, oldValue) => {
@@ -39839,11 +40103,27 @@
39839
40103
  }
39840
40104
  }
39841
40105
  );
40106
+ const inputMap = /* @__PURE__ */ new Map();
39842
40107
  vue.watch(
39843
40108
  () => channelStore.currentChannel,
39844
- () => {
39845
- curText.value = "";
39846
- quoteMsg.value = void 0;
40109
+ (value, oldValue) => {
40110
+ if (oldValue == null ? void 0 : oldValue.channelId) {
40111
+ inputMap.set(oldValue == null ? void 0 : oldValue.channelId, {
40112
+ input: curText.value,
40113
+ quoteMsg: quoteMsg.value,
40114
+ attachment: attachment.value
40115
+ });
40116
+ }
40117
+ if ((value == null ? void 0 : value.channelId) && inputMap.has((value == null ? void 0 : value.channelId) || "")) {
40118
+ const mapValue = inputMap.get((value == null ? void 0 : value.channelId) || "");
40119
+ curText.value = (mapValue == null ? void 0 : mapValue.input) || "";
40120
+ quoteMsg.value = mapValue == null ? void 0 : mapValue.quoteMsg;
40121
+ attachment.value = mapValue == null ? void 0 : mapValue.attachment;
40122
+ } else {
40123
+ curText.value = "";
40124
+ quoteMsg.value = void 0;
40125
+ attachment.value = void 0;
40126
+ }
39847
40127
  }
39848
40128
  );
39849
40129
  const inputPlaceholder = vue.computed(
@@ -39879,10 +40159,13 @@
39879
40159
  ext: {
39880
40160
  quoteMsg: quoteMsg.value
39881
40161
  },
39882
- mentionAccids: mentionAccids.value
40162
+ mentionAccids: mentionAccids.value,
40163
+ attach: attachment.value
40164
+ // 传递附件
39883
40165
  });
39884
40166
  curText.value = "";
39885
40167
  quoteMsg.value = void 0;
40168
+ attachment.value = void 0;
39886
40169
  scrollToBottomAfterSend();
39887
40170
  }
39888
40171
  }
@@ -39894,10 +40177,13 @@
39894
40177
  ext: {
39895
40178
  quoteMsg: quoteMsg.value
39896
40179
  },
39897
- mentionAccids: mentionAccids.value
40180
+ mentionAccids: mentionAccids.value,
40181
+ attach: attachment.value
40182
+ // 传递附件
39898
40183
  });
39899
40184
  curText.value = "";
39900
40185
  quoteMsg.value = void 0;
40186
+ attachment.value = void 0;
39901
40187
  scrollToBottomAfterSend();
39902
40188
  }
39903
40189
  };
@@ -39919,8 +40205,8 @@
39919
40205
  });
39920
40206
  }
39921
40207
  };
39922
- const handlePaste = (e) => {
39923
- if (props.sendDisabled) return;
40208
+ const handlePaste = async (e) => {
40209
+ if (props.sendDisabled || attachmentUploading.value) return;
39924
40210
  const clipboardData = e.clipboardData;
39925
40211
  if (!clipboardData) return;
39926
40212
  const items = clipboardData.items;
@@ -39934,20 +40220,51 @@
39934
40220
  antDesignVue.message.error("图片大小最大支持20M");
39935
40221
  return;
39936
40222
  }
39937
- emit("sendImg", file);
39938
- scrollToBottomAfterSend();
40223
+ attachmentUploading.value = true;
40224
+ try {
40225
+ const uploadResult = await channelStore.uploadImage({
40226
+ file,
40227
+ onUploadStart: () => {
40228
+ attachmentUploading.value = true;
40229
+ },
40230
+ onUploadDone: () => {
40231
+ attachmentUploading.value = false;
40232
+ }
40233
+ });
40234
+ attachment.value = uploadResult;
40235
+ } catch (error) {
40236
+ console.error("上传图片失败:", error);
40237
+ antDesignVue.message.error("上传图片失败");
40238
+ attachmentUploading.value = false;
40239
+ }
39939
40240
  }
39940
40241
  return;
39941
40242
  }
39942
40243
  }
39943
40244
  };
39944
- const uploadImgHandler = (file) => {
40245
+ const uploadImgHandler = async (file) => {
39945
40246
  if (!isLt(file.size, MAX_IMG_SIZE)) {
39946
40247
  antDesignVue.message.error(`图片大小最大支持${MAX_IMG_SIZE}M`);
39947
- return;
40248
+ return false;
39948
40249
  }
39949
- emit("sendImg", file);
39950
- scrollToBottomAfterSend();
40250
+ attachmentUploading.value = true;
40251
+ try {
40252
+ const uploadResult = await channelStore.uploadImage({
40253
+ file,
40254
+ onUploadStart: () => {
40255
+ attachmentUploading.value = true;
40256
+ },
40257
+ onUploadDone: () => {
40258
+ attachmentUploading.value = false;
40259
+ }
40260
+ });
40261
+ attachment.value = uploadResult;
40262
+ } catch (error) {
40263
+ console.error("上传图片失败:", error);
40264
+ antDesignVue.message.error("上传图片失败");
40265
+ attachmentUploading.value = false;
40266
+ }
40267
+ return false;
39951
40268
  };
39952
40269
  const emjjData = [
39953
40270
  "😀",
@@ -40141,7 +40458,8 @@
40141
40458
  onResendFile: handleResendFile,
40142
40459
  onContextMenuSwitch,
40143
40460
  onQuote: handleQuote,
40144
- onQuoteMsgClick: handleQuoteMsgClick
40461
+ onQuoteMsgClick: handleQuoteMsgClick,
40462
+ onRevokeMessage: handleRevokeMessage
40145
40463
  }, null, 8, ["msg", "my-avatar", "my-accid"]);
40146
40464
  }), 128))
40147
40465
  ])) : (vue.openBlock(), vue.createElementBlock("div", {
@@ -40162,14 +40480,19 @@
40162
40480
  onClick: handleDeleteQuoteMsg
40163
40481
  }),
40164
40482
  vue.createElementVNode("div", _hoisted_9$2, [
40165
- vue.createElementVNode("div", _hoisted_10$2, vue.toDisplayString(quoteMsg.value.fromNick) + ":", 1),
40483
+ vue.createVNode(_sfc_main$9, {
40484
+ attach: quoteMsg.value.attach
40485
+ }, null, 8, ["attach"])
40486
+ ]),
40487
+ vue.createElementVNode("div", _hoisted_10$2, [
40488
+ vue.createElementVNode("div", _hoisted_11$2, vue.toDisplayString(quoteMsg.value.fromNick) + ":", 1),
40166
40489
  ((_d = quoteMsg.value) == null ? void 0 : _d.body) ? (vue.openBlock(), vue.createElementBlock("div", {
40167
40490
  key: 0,
40168
40491
  class: "chatroomInputQuoteTextBody",
40169
40492
  innerHTML: (_e = quoteMsg.value) == null ? void 0 : _e.body
40170
- }, null, 8, _hoisted_11$2)) : vue.createCommentVNode("", true)
40493
+ }, null, 8, _hoisted_12$2)) : vue.createCommentVNode("", true)
40171
40494
  ]),
40172
- quoteMsg.value.type === "image" ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_12$2, [
40495
+ quoteMsg.value.type === "image" ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_13$2, [
40173
40496
  vue.createVNode(vue.unref(antDesignVue.Image), {
40174
40497
  preview: false,
40175
40498
  class: "imgMsg quoteImg",
@@ -40179,17 +40502,34 @@
40179
40502
  }, null, 8, ["src", "width", "height"])
40180
40503
  ])) : vue.createCommentVNode("", true)
40181
40504
  ])) : vue.createCommentVNode("", true),
40182
- vue.createElementVNode("div", _hoisted_13$2, [
40183
- vue.createElementVNode("div", _hoisted_14$2, [
40505
+ attachment.value ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_14$2, [
40506
+ ["jpg", "jpeg", "png", "gif"].includes(attachment.value.ext || "") && attachment.value.url ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_15$2, [
40507
+ vue.createElementVNode("div", _hoisted_16$1, [
40508
+ vue.createVNode(vue.unref(DeleteOutlined), {
40509
+ class: "chatroomInputAttachmentDeleteBtn",
40510
+ onClick: handleDeleteAttachment
40511
+ })
40512
+ ]),
40513
+ vue.createVNode(vue.unref(antDesignVue.Image), {
40514
+ preview: false,
40515
+ class: "imgMsg quoteImg",
40516
+ src: attachment.value.url,
40517
+ width: 60,
40518
+ height: 60
40519
+ }, null, 8, ["src"])
40520
+ ])) : vue.createCommentVNode("", true)
40521
+ ])) : vue.createCommentVNode("", true),
40522
+ vue.createElementVNode("div", _hoisted_17$1, [
40523
+ vue.createElementVNode("div", _hoisted_18$1, [
40184
40524
  vue.createVNode(vue.unref(antDesignVue.Popover), { placement: "topLeft" }, {
40185
40525
  content: vue.withCtx(() => [
40186
- vue.createElementVNode("div", _hoisted_15$2, [
40526
+ vue.createElementVNode("div", _hoisted_19$1, [
40187
40527
  (vue.openBlock(), vue.createElementBlock(vue.Fragment, null, vue.renderList(emjjData, (value, i) => {
40188
40528
  return vue.createElementVNode("span", {
40189
40529
  key: i,
40190
40530
  style: { "font-size": "16px", "cursor": "pointer" },
40191
40531
  onClick: ($event) => insertEmj(i)
40192
- }, vue.toDisplayString(value), 9, _hoisted_16$1);
40532
+ }, vue.toDisplayString(value), 9, _hoisted_20$1);
40193
40533
  }), 64))
40194
40534
  ])
40195
40535
  ]),
@@ -40234,19 +40574,20 @@
40234
40574
  onBlur: handleInputBlur,
40235
40575
  onPaste: handlePaste
40236
40576
  }, null, 8, ["value", "placeholder", "disabled", "onKeydown", "onClick"]),
40237
- vue.createElementVNode("div", _hoisted_17$1, [
40577
+ vue.createElementVNode("div", _hoisted_21$1, [
40238
40578
  vue.createVNode(vue.unref(antDesignVue.Upload), {
40239
40579
  "before-upload": uploadImgHandler,
40240
40580
  "show-upload-list": false,
40241
40581
  accept: ".jpg,.png,.jpeg",
40242
- disabled: __props.sendDisabled
40582
+ disabled: __props.sendDisabled || attachmentUploading.value,
40583
+ class: "chatroomInputUpload"
40243
40584
  }, {
40244
40585
  default: vue.withCtx(() => [
40245
40586
  vue.createVNode(vue.unref(antDesignVue.Button), {
40246
40587
  class: "chatroomButton",
40247
40588
  type: "text",
40248
- loading: __props.imgUploading,
40249
- disabled: __props.sendDisabled
40589
+ loading: attachmentUploading.value,
40590
+ disabled: __props.sendDisabled || attachmentUploading.value
40250
40591
  }, {
40251
40592
  icon: vue.withCtx(() => [..._cache[4] || (_cache[4] = [
40252
40593
  vue.createElementVNode("svg", {
@@ -40372,7 +40713,13 @@
40372
40713
  );
40373
40714
  const sendMessage = (type, file, option) => {
40374
40715
  if (type === "textMsg") {
40375
- channelStore.sendTextMsg({ body: file, ext: option == null ? void 0 : option.ext, mentionAccids: option == null ? void 0 : option.mentionAccids });
40716
+ channelStore.sendTextMsg({
40717
+ body: file,
40718
+ ext: option == null ? void 0 : option.ext,
40719
+ mentionAccids: option == null ? void 0 : option.mentionAccids,
40720
+ attach: option == null ? void 0 : option.attach
40721
+ // 传递附件
40722
+ });
40376
40723
  return;
40377
40724
  }
40378
40725
  if (type === "SendImg") {
@@ -40866,6 +41213,7 @@
40866
41213
  };
40867
41214
  const getChannelUnread = (channelId) => {
40868
41215
  const channel = channelList.value.find((c) => c.channelId === channelId);
41216
+ console.log("channel", channel);
40869
41217
  return (channel == null ? void 0 : channel.unreadCount) || 0;
40870
41218
  };
40871
41219
  const handleSelectServer = async (server) => {
@@ -40955,11 +41303,11 @@
40955
41303
  cancelText: "取消",
40956
41304
  wrapClassName: "delete-channel-modal",
40957
41305
  async onOk() {
40958
- var _a;
41306
+ var _a, _b;
40959
41307
  try {
40960
- await window.qchat.qchatChannel.deleteChannel({
41308
+ await ((_a = window.qchat) == null ? void 0 : _a.qchatChannel.deleteChannel({
40961
41309
  channelId: channelForm.value.channelId
40962
- });
41310
+ }));
40963
41311
  antDesignVue.message.success("删除成功");
40964
41312
  channelModalVisible.value = false;
40965
41313
  await channelStore.getChannelsByPage({
@@ -40967,7 +41315,7 @@
40967
41315
  timetag: 0,
40968
41316
  limit
40969
41317
  });
40970
- if (((_a = currentChannel.value) == null ? void 0 : _a.channelId) === channelForm.value.channelId) {
41318
+ if (((_b = currentChannel.value) == null ? void 0 : _b.channelId) === channelForm.value.channelId) {
40971
41319
  if (channelStore.channelList.length > 0) {
40972
41320
  emit("selectChannel", channelStore.channelList[0]);
40973
41321
  } else {
@@ -41137,7 +41485,7 @@
41137
41485
  style: vue.normalizeStyle({ width: userPanelWidth.value + "px" })
41138
41486
  }, [
41139
41487
  vue.createElementVNode("div", _hoisted_15, [
41140
- vue.createVNode(_sfc_main$9, {
41488
+ vue.createVNode(_sfc_main$a, {
41141
41489
  avatar: userProfile.value.avatar,
41142
41490
  nick: userProfile.value.nick,
41143
41491
  accid: currentAccount.value,
@@ -41316,7 +41664,7 @@
41316
41664
  };
41317
41665
  }
41318
41666
  });
41319
- const ServerChannelSidebar = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["__scopeId", "data-v-aa044ccf"]]);
41667
+ const ServerChannelSidebar = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["__scopeId", "data-v-961f30d7"]]);
41320
41668
  const _hoisted_1$1 = { class: "members-header" };
41321
41669
  const _hoisted_2$1 = {
41322
41670
  key: 0,
@@ -41453,7 +41801,7 @@
41453
41801
  }, {
41454
41802
  default: vue.withCtx(() => [
41455
41803
  vue.createElementVNode("div", _hoisted_4$1, [
41456
- vue.createVNode(_sfc_main$9, {
41804
+ vue.createVNode(_sfc_main$a, {
41457
41805
  avatar: member.avatar,
41458
41806
  nick: member.nick,
41459
41807
  accid: member.accid,
@@ -41826,7 +42174,7 @@
41826
42174
  };
41827
42175
  }
41828
42176
  });
41829
- const IndexEntry = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-40788bbc"]]);
42177
+ const IndexEntry = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-240f366f"]]);
41830
42178
  const componentList = [
41831
42179
  "chat-card",
41832
42180
  "chat-content",
@@ -41847,7 +42195,7 @@
41847
42195
  ChatContent: _sfc_main$5,
41848
42196
  ChatPage: _sfc_main$3,
41849
42197
  ChatRoom: _sfc_main$4,
41850
- CommonAvatar: _sfc_main$9,
42198
+ CommonAvatar: _sfc_main$a,
41851
42199
  IconFont: IconFont$1,
41852
42200
  IndexEntry,
41853
42201
  MembersSidebar,