@huyooo/ui 1.0.6 → 2.0.0

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 (75) hide show
  1. package/dist/AuthkitAppSetting-rtYZcSAR.js +2677 -0
  2. package/dist/{Contact-BWuVR9ho.js → Contact-CcWf3UEZ.js} +9 -9
  3. package/dist/{CustomTable-BzGfaAVH.js → CustomTable-HDwqEcmB.js} +1 -1
  4. package/dist/FeedbackModal.vue_vue_type_script_setup_true_lang-DpOmbAg-.js +1491 -0
  5. package/dist/{LegalDocViewer-DM8FYBpf.js → LegalDocViewer-C0tsIbz9.js} +747 -748
  6. package/dist/MessageHandle-BUufez4S.js +1233 -0
  7. package/dist/{MessageList-Ce-_LNTk.js → MessageList-rttvPmxV.js} +4 -4
  8. package/dist/PaySubscriptions-p75aBnHm.js +1331 -0
  9. package/dist/{PricingPlans-CV97ck9p.js → PricingPlans-CQ0qk9Hb.js} +99 -105
  10. package/dist/{ReferrerReferees-DgygiIiE.js → ReferrerReferees-BU9IEQgz.js} +47 -46
  11. package/dist/Upload.vue_vue_type_script_setup_true_lang-bh0NFq9E.js +78 -0
  12. package/dist/{UserMenuInvitationsItem.vue_vue_type_script_setup_true_lang-zgjpFVln.js → UserMenuInvitationsItem.vue_vue_type_script_setup_true_lang-DG4AuHiO.js} +64 -65
  13. package/dist/WidthContainer-DSE4QbW0.js +717 -0
  14. package/dist/api/billingSubscriptionApi.d.ts +4 -1
  15. package/dist/apiClients-Ctcq8NZs.js +245 -0
  16. package/dist/authkit.js +10 -10
  17. package/dist/common/globalConfig.d.ts +36 -18
  18. package/dist/common.js +2 -2
  19. package/dist/components/Authkit/Auth/AuthkitOauthCallback.vue.d.ts +2 -2
  20. package/dist/components/Authkit/AuthkitProvider.vue.d.ts +0 -5
  21. package/dist/components/Feedback/FeedbackDetails.vue.d.ts +30 -0
  22. package/dist/components/Upload/Upload.vue.d.ts +6 -6
  23. package/dist/composables/Authkit/useAuthkitAuth.d.ts +3 -0
  24. package/dist/composables/Billing/usePaymentReturn.d.ts +1 -0
  25. package/dist/composables/uploadFeedbackAttachment.d.ts +2 -1
  26. package/dist/composables/useMessageList.d.ts +2 -1
  27. package/dist/composables.d.ts +2 -2
  28. package/dist/composables.js +46 -46
  29. package/dist/feedback.js +2 -2
  30. package/dist/{fetchAuthPageAboutUs-dzTSwRsB.js → fetchAuthPageAboutUs-DiCqMUX3.js} +4 -4
  31. package/dist/{index-BkLvw1PU.js → index-Cn6LcfZO.js} +1 -1
  32. package/dist/legalDocs/resolveAppId.d.ts +1 -1
  33. package/dist/main.d.ts +4 -3
  34. package/dist/main.js +464 -469
  35. package/dist/message.js +53 -52
  36. package/dist/pay.js +4 -4
  37. package/dist/privateCom.js +1 -1
  38. package/dist/referrer.js +1 -1
  39. package/dist/{useUploadCos-C8BqFPkx.js → runtime-BzCSCUNv.js} +2712 -2609
  40. package/dist/runtime.d.ts +18 -0
  41. package/dist/style.css +1 -1
  42. package/dist/types/api/auth.generated.d.ts +0 -10
  43. package/dist/upload/browserCosTransport.d.ts +25 -0
  44. package/dist/upload/browserUploadService.d.ts +20 -0
  45. package/dist/upload.d.ts +2 -1
  46. package/dist/upload.js +5 -4
  47. package/dist/{useAuthkitAppsAuthPageInfo-CNudJd04.js → useAuthkitAppsAuthPageInfo-DZ1p-P3Q.js} +18 -21
  48. package/dist/useAuthkitAuth-BPTZUSkM.js +272 -0
  49. package/dist/{useAuthkitCreateAndUpdate-BsINsI-E.js → useAuthkitCreateAndUpdate-Bbv7vZZn.js} +1 -1
  50. package/dist/useAuthkitUsersProfile-CW_exa7E.js +39 -0
  51. package/dist/useBillingStatusOptions-Br-iL77Z.js +61 -0
  52. package/dist/{useEnsureAuthenticated-DNkCCy_Y.js → useEnsureAuthenticated-CncOvj2H.js} +2 -2
  53. package/dist/{useLegalDocs-DQP_Yq6B.js → useLegalDocs-D44qU_q0.js} +25 -25
  54. package/dist/useMessageNotifications-D9uikt21.js +80 -0
  55. package/dist/{useRoutePermission-CEiya9AM.js → useRoutePermission-BrQX7NTq.js} +2 -2
  56. package/dist/{useSEO-CDWxbk8B.js → useSEO-_TNouXE_.js} +89 -86
  57. package/dist/useSubscriptionCheckout-BDDCRxSs.js +353 -0
  58. package/dist/user.js +1 -1
  59. package/dist/utils/apiClients.d.ts +20 -12
  60. package/dist/utils/apiMiddlewares.d.ts +9 -23
  61. package/package.json +1 -1
  62. package/dist/AuthkitAppSetting-BN8-xgNq.js +0 -2674
  63. package/dist/FeedbackModal.vue_vue_type_script_setup_true_lang-B9BqGWm8.js +0 -1480
  64. package/dist/MessageHandle-mEkCsv9e.js +0 -1173
  65. package/dist/PaySubscriptions-CXkEjqr2.js +0 -1326
  66. package/dist/Upload.vue_vue_type_script_setup_true_lang-VGh2V4o0.js +0 -76
  67. package/dist/WidthContainer-PeWkCK0p.js +0 -721
  68. package/dist/apiClients-BcXOLuYu.js +0 -272
  69. package/dist/composables/Upload/useUploadCos.d.ts +0 -12
  70. package/dist/useAuthkitAuth-3m0yW6uP.js +0 -267
  71. package/dist/useAuthkitUsersProfile-DJlMsftY.js +0 -40
  72. package/dist/useBillingStatusOptions-CfHQOFNw.js +0 -71
  73. package/dist/useMessageNotifications-CAphguOm.js +0 -75
  74. package/dist/useSubscriptionCheckout-d_M_rKRa.js +0 -368
  75. package/dist/utils/billingFetch.d.ts +0 -1
@@ -1,1480 +0,0 @@
1
- /* empty css */
2
- /* empty css */
3
- import { U as Ye } from "./userMenuModal-D-nDaYqM.js";
4
- import { defineComponent as q, useModel as Je, openBlock as s, createBlock as B, Teleport as Ze, createElementBlock as c, withKeys as Qe, createElementVNode as b, toDisplayString as F, withModifiers as G, createCommentVNode as R, mergeModels as et, ref as m, computed as A, Fragment as V, renderList as z, createVNode as f, unref as a, normalizeStyle as ee, withCtx as v, createTextVNode as E, normalizeClass as ie, onBeforeUnmount as tt, onUnmounted as at, watch as fe, readonly as st, nextTick as te } from "vue";
5
- import { ImagePreviewGroup as ge, Avatar as re, Space as oe, Descriptions as nt, DescriptionsItem as ae, Tag as Z, Spin as lt, Empty as it, Button as pe, Message as ue, Form as rt, FormItem as Y, Input as ot, Select as Ce, Option as Ue, Textarea as ut, Breadcrumb as ct, BreadcrumbItem as xe, Modal as dt } from "@arco-design/web-vue";
6
- import { M as ft } from "./Menu-uCexrsKP.js";
7
- /* empty css */
8
- import { C as ce } from "./index-BkLvw1PU.js";
9
- /* empty css */
10
- /* empty css */
11
- import { o as O, g as Fe } from "./apiClients-BcXOLuYu.js";
12
- /* empty css */
13
- import { g as vt, u as pt } from "./useUploadCos-C8BqFPkx.js";
14
- import { _ as W } from "./_plugin-vue_export-helper-CHgC5LLL.js";
15
- import { r as mt, m as Se, a as gt, M as bt } from "./MessageList-Ce-_LNTk.js";
16
- import { f as Q } from "./index-D56hUMeD.js";
17
- import { Bubble as Ie, Sender as kt } from "ant-design-x-vue";
18
- import { u as yt } from "./useAuthkitUsersProfile-DJlMsftY.js";
19
- import { u as _t } from "./useUserMenu-ClPBlvaM.js";
20
- /* empty css */
21
- import { Icon as ht } from "@iconify/vue";
22
- import { _ as wt, g as Ct, i as Ut } from "./plugin-vue_export-helper-LjDO2Zua.js";
23
- const xt = {
24
- class: "video-preview__header"
25
- }, St = {
26
- class: "video-preview__title"
27
- }, $t = {
28
- class: "video-preview__stage"
29
- }, Ft = ["src"], It = /* @__PURE__ */ q({
30
- __name: "VideoPreview",
31
- props: /* @__PURE__ */ et({
32
- src: {
33
- type: String,
34
- default: ""
35
- },
36
- title: {
37
- type: String,
38
- default: ""
39
- }
40
- }, {
41
- visible: {
42
- type: Boolean,
43
- default: !1
44
- },
45
- visibleModifiers: {}
46
- }),
47
- emits: ["update:visible"],
48
- setup(e) {
49
- const t = Je(e, "visible"), i = e;
50
- function o() {
51
- t.value = !1;
52
- }
53
- return (g, l) => (s(), B(Ze, {
54
- to: "body"
55
- }, [t.value ? (s(), c("div", {
56
- key: 0,
57
- class: "video-preview",
58
- tabindex: "0",
59
- onClick: o,
60
- onKeydown: Qe(o, ["esc"])
61
- }, [b("div", xt, [b("div", St, F(i.title), 1), b("button", {
62
- type: "button",
63
- class: "video-preview__close",
64
- onClick: G(o, ["stop"])
65
- }, " × ")]), b("div", $t, [i.src ? (s(), c("video", {
66
- key: 0,
67
- class: "video-preview__video",
68
- src: i.src,
69
- controls: "",
70
- autoplay: "",
71
- onClick: l[0] || (l[0] = G(() => {
72
- }, ["stop"]))
73
- }, null, 8, Ft)) : R("", !0)])], 32)) : R("", !0)]));
74
- }
75
- }), be = /* @__PURE__ */ W(It, [["__scopeId", "data-v-3f517bc8"]]), At = {
76
- key: 0,
77
- class: "message-attachments"
78
- }, Pt = ["title", "onClick"], Rt = ["src", "alt"], Bt = ["title", "onClick"], Tt = ["src"], Mt = ["href", "title"], Lt = {
79
- class: "message-attachment-main"
80
- }, Vt = {
81
- class: "message-attachment-name"
82
- }, Et = {
83
- class: "message-attachment-meta"
84
- }, Dt = /* @__PURE__ */ q({
85
- __name: "FeedbackMessageAttachments",
86
- props: {
87
- attachments: {
88
- type: Array,
89
- default: () => []
90
- }
91
- },
92
- setup(e) {
93
- const t = e, i = m(!1), o = m(0), g = m(!1), l = m(""), k = m(""), x = A(() => t.attachments.filter((h) => h.kind === "image")), _ = A(() => t.attachments.filter((h) => h.kind === "video")), S = A(() => t.attachments.filter((h) => h.kind === "file")), L = A(() => x.value.map((h) => h.url || ""));
94
- function w(h) {
95
- o.value = h, i.value = !0;
96
- }
97
- function $(h) {
98
- l.value = h.url || "", k.value = h.name, g.value = !0;
99
- }
100
- function P(h) {
101
- return h < 1024 ? `${h} B` : h < 1024 * 1024 ? `${(h / 1024).toFixed(1)} KB` : h < 1024 * 1024 * 1024 ? `${(h / 1024 / 1024).toFixed(1)} MB` : `${(h / 1024 / 1024 / 1024).toFixed(1)} GB`;
102
- }
103
- return (h, I) => (s(), c(V, null, [t.attachments.length > 0 ? (s(), c("div", At, [(s(!0), c(V, null, z(x.value, (u, U) => (s(), c("button", {
104
- key: u.key,
105
- type: "button",
106
- class: "message-media message-media--image",
107
- title: u.name,
108
- onClick: (T) => w(U)
109
- }, [b("img", {
110
- src: u.url,
111
- alt: u.name,
112
- class: "message-media__content"
113
- }, null, 8, Rt)], 8, Pt))), 128)), (s(!0), c(V, null, z(_.value, (u) => (s(), c("button", {
114
- key: u.key,
115
- type: "button",
116
- class: "message-media message-media--video",
117
- title: u.name,
118
- onClick: (U) => $(u)
119
- }, [b("video", {
120
- class: "message-media__content",
121
- src: u.url,
122
- muted: "",
123
- preload: "metadata"
124
- }, null, 8, Tt), I[3] || (I[3] = b("span", {
125
- class: "message-video-play"
126
- }, "播放", -1))], 8, Bt))), 128)), (s(!0), c(V, null, z(S.value, (u) => (s(), c("a", {
127
- key: u.key,
128
- class: "message-file",
129
- href: u.url,
130
- target: "_blank",
131
- rel: "noopener noreferrer",
132
- title: u.name
133
- }, [I[4] || (I[4] = b("span", {
134
- class: "message-file-icon"
135
- }, "FILE", -1)), b("span", Lt, [b("span", Vt, F(u.name), 1), b("span", Et, F(P(u.size)), 1)])], 8, Mt))), 128))])) : R("", !0), f(a(ge), {
136
- "src-list": L.value,
137
- visible: i.value,
138
- "onUpdate:visible": I[0] || (I[0] = (u) => i.value = u),
139
- current: o.value,
140
- "onUpdate:current": I[1] || (I[1] = (u) => o.value = u)
141
- }, null, 8, ["src-list", "visible", "current"]), f(be, {
142
- visible: g.value,
143
- "onUpdate:visible": I[2] || (I[2] = (u) => g.value = u),
144
- title: k.value,
145
- src: l.value
146
- }, null, 8, ["visible", "title", "src"])], 64));
147
- }
148
- }), Ae = /* @__PURE__ */ W(Dt, [["__scopeId", "data-v-49a094a3"]]), qt = /* @__PURE__ */ q({
149
- __name: "FeedbackRefresh",
150
- setup(e) {
151
- return (t, i) => (s(), B(a(ht), {
152
- class: "icon",
153
- icon: "mingcute:refresh-2-line"
154
- }));
155
- }
156
- }), $e = /* @__PURE__ */ W(qt, [["__scopeId", "data-v-64bb6fc2"]]), Ot = ["src"], zt = {
157
- key: 1
158
- }, Nt = {
159
- class: "feedback-message-body"
160
- }, jt = {
161
- key: 0,
162
- class: "feedback-text-bubble"
163
- }, Kt = {
164
- key: 1,
165
- class: "feedback-bubble-stack feedback-bubble-stack--end"
166
- }, Wt = ["src"], Ht = {
167
- key: 1
168
- }, Gt = /* @__PURE__ */ q({
169
- __name: "FeedbackBubbleEnd",
170
- props: {
171
- text: {
172
- type: String,
173
- default: ""
174
- },
175
- attachments: {
176
- type: Array,
177
- default: () => []
178
- },
179
- avatarUrl: {
180
- type: String,
181
- default: ""
182
- },
183
- avatarText: {
184
- type: String,
185
- default: "U"
186
- },
187
- bubbleStyle: {
188
- type: Object,
189
- default: () => ({
190
- paddingLeft: "52px"
191
- })
192
- },
193
- showRefresh: {
194
- type: Boolean,
195
- default: !1
196
- },
197
- showClipboard: {
198
- type: Boolean,
199
- default: !1
200
- }
201
- },
202
- emits: ["refresh"],
203
- setup(e, {
204
- emit: t
205
- }) {
206
- const i = e, o = t;
207
- function g(_) {
208
- return _.startsWith("http://") || _.startsWith("https://") || _.startsWith("data:");
209
- }
210
- const l = A(() => {
211
- const _ = i.avatarUrl.trim();
212
- return g(_) ? _ : "";
213
- }), k = A(() => i.attachments.length > 0);
214
- function x() {
215
- o("refresh");
216
- }
217
- return (_, S) => k.value ? (s(), c("div", {
218
- key: 0,
219
- class: "feedback-message-group feedback-message-group--end",
220
- style: ee(i.bubbleStyle)
221
- }, [f(a(re), {
222
- class: "feedback-message-avatar"
223
- }, {
224
- default: v(() => [l.value ? (s(), c("img", {
225
- key: 0,
226
- alt: "avatar",
227
- src: l.value
228
- }, null, 8, Ot)) : (s(), c("span", zt, F(i.avatarText), 1))]),
229
- _: 1
230
- }), b("div", Nt, [i.text ? (s(), c("div", jt, F(i.text), 1)) : R("", !0), i.showClipboard || i.showRefresh ? (s(), B(a(oe), {
231
- key: 1,
232
- class: "feedback-message-footer"
233
- }, {
234
- default: v(() => [i.showClipboard ? (s(), B(ce, {
235
- key: 0,
236
- value: i.text
237
- }, null, 8, ["value"])) : R("", !0), i.showRefresh ? (s(), B($e, {
238
- key: 1,
239
- onClick: x
240
- })) : R("", !0)]),
241
- _: 1
242
- })) : R("", !0), f(Ae, {
243
- attachments: i.attachments
244
- }, null, 8, ["attachments"])])], 4)) : (s(), c("div", Kt, [f(a(Ie), {
245
- placement: "end",
246
- style: ee(i.bubbleStyle)
247
- }, {
248
- avatar: v(() => [f(a(re), null, {
249
- default: v(() => [l.value ? (s(), c("img", {
250
- key: 0,
251
- alt: "avatar",
252
- src: l.value
253
- }, null, 8, Wt)) : (s(), c("span", Ht, F(i.avatarText), 1))]),
254
- _: 1
255
- })]),
256
- message: v(() => [i.text ? (s(), c(V, {
257
- key: 0
258
- }, [E(F(i.text), 1)], 64)) : R("", !0)]),
259
- footer: v(() => [f(a(oe), null, {
260
- default: v(() => [i.showClipboard && i.text ? (s(), B(ce, {
261
- key: 0,
262
- value: i.text
263
- }, null, 8, ["value"])) : R("", !0), i.showRefresh ? (s(), B($e, {
264
- key: 1,
265
- onClick: x
266
- })) : R("", !0)]),
267
- _: 1
268
- })]),
269
- _: 1
270
- }, 8, ["style"])]));
271
- }
272
- }), Xt = /* @__PURE__ */ W(Gt, [["__scopeId", "data-v-ed8f32cc"]]), Yt = ["src"], Jt = {
273
- key: 1
274
- }, Zt = {
275
- class: "feedback-message-body"
276
- }, Qt = {
277
- key: 0,
278
- class: "feedback-text-bubble"
279
- }, ea = {
280
- key: 1,
281
- class: "feedback-bubble-stack feedback-bubble-stack--start"
282
- }, ta = ["src"], aa = {
283
- key: 1
284
- }, sa = /* @__PURE__ */ q({
285
- __name: "FeedbackBubbleStart",
286
- props: {
287
- text: {
288
- type: String,
289
- default: ""
290
- },
291
- attachments: {
292
- type: Array,
293
- default: () => []
294
- },
295
- avatarUrl: {
296
- type: String,
297
- default: ""
298
- },
299
- avatarText: {
300
- type: String,
301
- default: "U"
302
- },
303
- bubbleStyle: {
304
- type: Object,
305
- default: () => ({
306
- paddingRight: "52px"
307
- })
308
- },
309
- showClipboard: {
310
- type: Boolean,
311
- default: !1
312
- }
313
- },
314
- setup(e) {
315
- const t = e;
316
- function i(l) {
317
- return l.startsWith("http://") || l.startsWith("https://") || l.startsWith("data:");
318
- }
319
- const o = A(() => {
320
- const l = t.avatarUrl.trim();
321
- return i(l) ? l : "";
322
- }), g = A(() => t.attachments.length > 0);
323
- return (l, k) => g.value ? (s(), c("div", {
324
- key: 0,
325
- class: "feedback-message-group feedback-message-group--start",
326
- style: ee(t.bubbleStyle)
327
- }, [f(a(re), {
328
- class: "feedback-message-avatar"
329
- }, {
330
- default: v(() => [o.value ? (s(), c("img", {
331
- key: 0,
332
- alt: "avatar",
333
- src: o.value
334
- }, null, 8, Yt)) : (s(), c("span", Jt, F(t.avatarText), 1))]),
335
- _: 1
336
- }), b("div", Zt, [t.text ? (s(), c("div", Qt, F(t.text), 1)) : R("", !0), t.showClipboard ? (s(), B(a(oe), {
337
- key: 1,
338
- class: "feedback-message-footer"
339
- }, {
340
- default: v(() => [f(ce, {
341
- value: t.text
342
- }, null, 8, ["value"])]),
343
- _: 1
344
- })) : R("", !0), f(Ae, {
345
- attachments: t.attachments
346
- }, null, 8, ["attachments"])])], 4)) : (s(), c("div", ea, [f(a(Ie), {
347
- placement: "start",
348
- style: ee(t.bubbleStyle)
349
- }, {
350
- avatar: v(() => [f(a(re), null, {
351
- default: v(() => [o.value ? (s(), c("img", {
352
- key: 0,
353
- alt: "avatar",
354
- src: o.value
355
- }, null, 8, ta)) : (s(), c("span", aa, F(t.avatarText), 1))]),
356
- _: 1
357
- })]),
358
- message: v(() => [t.text ? (s(), c(V, {
359
- key: 0
360
- }, [E(F(t.text), 1)], 64)) : R("", !0)]),
361
- footer: v(() => [f(a(oe), null, {
362
- default: v(() => [t.showClipboard && t.text ? (s(), B(ce, {
363
- key: 0,
364
- value: t.text
365
- }, null, 8, ["value"])) : R("", !0)]),
366
- _: 1
367
- })]),
368
- _: 1
369
- }, 8, ["style"])]));
370
- }
371
- }), na = /* @__PURE__ */ W(sa, [["__scopeId", "data-v-a88b5650"]]), la = q({
372
- name: "IconLink",
373
- props: {
374
- size: {
375
- type: [Number, String]
376
- },
377
- strokeWidth: {
378
- type: Number,
379
- default: 4
380
- },
381
- strokeLinecap: {
382
- type: String,
383
- default: "butt",
384
- validator: (e) => ["butt", "round", "square"].includes(e)
385
- },
386
- strokeLinejoin: {
387
- type: String,
388
- default: "miter",
389
- validator: (e) => ["arcs", "bevel", "miter", "miter-clip", "round"].includes(e)
390
- },
391
- rotate: Number,
392
- spin: Boolean
393
- },
394
- emits: {
395
- click: (e) => !0
396
- },
397
- setup(e, {
398
- emit: t
399
- }) {
400
- const i = Ct("icon"), o = A(() => [i, `${i}-link`, {
401
- [`${i}-spin`]: e.spin
402
- }]), g = A(() => {
403
- const k = {};
404
- return e.size && (k.fontSize = Ut(e.size) ? `${e.size}px` : e.size), e.rotate && (k.transform = `rotate(${e.rotate}deg)`), k;
405
- });
406
- return {
407
- cls: o,
408
- innerStyle: g,
409
- onClick: (k) => {
410
- t("click", k);
411
- }
412
- };
413
- }
414
- }), ia = ["stroke-width", "stroke-linecap", "stroke-linejoin"];
415
- function ra(e, t, i, o, g, l) {
416
- return s(), c("svg", {
417
- viewBox: "0 0 48 48",
418
- fill: "none",
419
- xmlns: "http://www.w3.org/2000/svg",
420
- stroke: "currentColor",
421
- class: ie(e.cls),
422
- style: ee(e.innerStyle),
423
- "stroke-width": e.strokeWidth,
424
- "stroke-linecap": e.strokeLinecap,
425
- "stroke-linejoin": e.strokeLinejoin,
426
- onClick: t[0] || (t[0] = (...k) => e.onClick && e.onClick(...k))
427
- }, t[1] || (t[1] = [b("path", {
428
- d: "m14.1 25.414-4.95 4.95a6 6 0 0 0 8.486 8.485l8.485-8.485a6 6 0 0 0 0-8.485m7.779.707 4.95-4.95a6 6 0 1 0-8.486-8.485l-8.485 8.485a6 6 0 0 0 0 8.485"
429
- }, null, -1)]), 14, ia);
430
- }
431
- var ve = /* @__PURE__ */ wt(la, [["render", ra]]);
432
- const oa = Object.assign(ve, {
433
- install: (e, t) => {
434
- var i;
435
- const o = (i = t == null ? void 0 : t.iconPrefix) != null ? i : "";
436
- e.component(o + ve.name, ve);
437
- }
438
- }), Pe = [".jpg", ".jpeg", ".png", ".gif", ".webp", ".mp4", ".webm", ".mov", ".pdf", ".doc", ".docx", ".xls", ".xlsx", ".ppt", ".pptx", ".txt", ".md", ".csv", ".json", ".zip"], Re = Pe.join(","), ua = /* @__PURE__ */ new Set(["image/jpeg", "image/png", "image/gif", "image/webp"]), ca = /* @__PURE__ */ new Set(["video/mp4", "video/webm", "video/quicktime"]);
439
- function da(e) {
440
- const t = e.lastIndexOf(".");
441
- return t < 0 ? "" : e.slice(t).toLowerCase();
442
- }
443
- function fa(e) {
444
- return Pe.includes(da(e.name));
445
- }
446
- function Be(e, t = e.type) {
447
- return ua.has(t) ? "image" : ca.has(t) ? "video" : "file";
448
- }
449
- const se = 9;
450
- function va(e) {
451
- const t = Be(e);
452
- return {
453
- id: `${Date.now()}-${Math.random().toString(36).slice(2, 8)}`,
454
- file: e,
455
- kind: t,
456
- previewUrl: t === "image" || t === "video" ? URL.createObjectURL(e) : void 0
457
- };
458
- }
459
- function Te(e) {
460
- const t = m([]), i = A(() => t.value.length > 0), o = A(() => t.value.filter((w) => w.kind === "image" && !!w.previewUrl)), g = A(() => t.value.filter((w) => w.kind === "video" && !!w.previewUrl)), l = A(() => t.value.filter((w) => w.kind === "file"));
461
- function k(w) {
462
- e == null || e(w);
463
- }
464
- function x(w) {
465
- w.previewUrl && URL.revokeObjectURL(w.previewUrl);
466
- }
467
- function _(w) {
468
- if (w.length === 0) return;
469
- const $ = w.filter(fa);
470
- if (w.length - $.length > 0 && k("仅支持常见图片、浏览器可预览视频、文档、文本、CSV、JSON 和 ZIP 文件"), $.length === 0) return;
471
- const h = se - t.value.length;
472
- if (h <= 0) {
473
- k(`最多只能添加 ${se} 个附件`);
474
- return;
475
- }
476
- const I = $.slice(0, h);
477
- $.length > h && k(`最多只能添加 ${se} 个附件,已跳过多余文件`), t.value.push(...I.map(va));
478
- }
479
- function S(w) {
480
- const $ = t.value[w];
481
- $ && (x($), t.value.splice(w, 1));
482
- }
483
- function L() {
484
- t.value.forEach(x), t.value = [];
485
- }
486
- return tt(() => {
487
- L();
488
- }), {
489
- items: t,
490
- imageItems: o,
491
- videoItems: g,
492
- fileItems: l,
493
- hasAttachments: i,
494
- addFiles: _,
495
- removeAt: S,
496
- clear: L,
497
- maxAttachments: se
498
- };
499
- }
500
- function pa(e, t) {
501
- const {
502
- uploadFile: i
503
- } = pt();
504
- return new Promise((o, g) => {
505
- i({
506
- file: e,
507
- bucketId: t,
508
- onFileFinish(l, k, x) {
509
- if (l) {
510
- g(l);
511
- return;
512
- }
513
- o(x.Key);
514
- },
515
- onError(l) {
516
- g(l);
517
- }
518
- });
519
- });
520
- }
521
- async function Me(e, t) {
522
- const i = [];
523
- for (const o of e) {
524
- const g = await pa(o, t), l = vt(o);
525
- i.push({
526
- key: g,
527
- name: o.name,
528
- size: o.size,
529
- mimeType: l,
530
- kind: Be(o, l)
531
- });
532
- }
533
- return i;
534
- }
535
- function ma(e, t = {}) {
536
- const {
537
- interval: i = 2e3,
538
- immediate: o = !1,
539
- autoStart: g = !1
540
- } = t, l = m(!1);
541
- let k = null;
542
- async function x() {
543
- try {
544
- await e();
545
- } catch (w) {
546
- console.error("轮询回调执行失败:", w);
547
- }
548
- }
549
- function _() {
550
- if (l.value) {
551
- console.warn("轮询已在运行中");
552
- return;
553
- }
554
- l.value = !0, o && x(), k = setInterval(x, i);
555
- }
556
- function S() {
557
- k && (clearInterval(k), k = null), l.value = !1;
558
- }
559
- function L() {
560
- S(), _();
561
- }
562
- return g && _(), at(() => {
563
- S();
564
- }), {
565
- isPolling: l,
566
- start: _,
567
- stop: S,
568
- restart: L
569
- };
570
- }
571
- const de = m(0);
572
- let J = null, le = null, me = !1;
573
- function ga() {
574
- de.value = 0;
575
- }
576
- async function ba() {
577
- const {
578
- data: e,
579
- error: t
580
- } = await O.feedbackCenter.unreadReplyCount.post({});
581
- return t ? null : typeof (e == null ? void 0 : e.count) == "number" ? e.count : 0;
582
- }
583
- async function H() {
584
- return J || (J = (async () => {
585
- await gt();
586
- const e = await ba();
587
- e !== null && (de.value = e);
588
- })().finally(() => {
589
- J = null;
590
- }), J);
591
- }
592
- function ka() {
593
- me || (me = !0, le = setInterval(() => {
594
- H();
595
- }, 6e4));
596
- }
597
- function ya() {
598
- le && (clearInterval(le), le = null), me = !1;
599
- }
600
- function ws() {
601
- const {
602
- isLoggedIn: e
603
- } = yt(), {
604
- isOpen: t,
605
- messagesTrigger: i,
606
- feedbackTrigger: o
607
- } = _t();
608
- return fe(e, (g) => {
609
- if (g) {
610
- H(), ka();
611
- return;
612
- }
613
- mt(), ga(), ya();
614
- }, {
615
- immediate: !0
616
- }), fe(t, (g) => {
617
- g && e.value && H();
618
- }), fe([i, o], () => {
619
- e.value && window.setTimeout(() => {
620
- H();
621
- }, 1500);
622
- }), {
623
- messageUnreadCount: Se,
624
- feedbackUnreadCount: st(de),
625
- hasMessageBadge: A(() => Se.value > 0),
626
- hasFeedbackBadge: A(() => de.value > 0),
627
- refreshUserMenuBadgeCounts: H
628
- };
629
- }
630
- const ke = [{
631
- key: "bugReports",
632
- label: "问题报告"
633
- }, {
634
- key: "featureSuggestions",
635
- label: "功能建议"
636
- }, {
637
- key: "technicalSupportRequests",
638
- label: "技术支持请求"
639
- }, {
640
- key: "generalOpinions",
641
- label: "一般意见"
642
- }], Le = [{
643
- key: "urgent",
644
- label: "紧急"
645
- }, {
646
- key: "high",
647
- label: "高"
648
- }, {
649
- key: "normal",
650
- label: "普通"
651
- }, {
652
- key: "low",
653
- label: "低"
654
- }], Ve = [{
655
- key: "newFeedback",
656
- label: "新反馈"
657
- }, {
658
- key: "inProgress",
659
- label: "处理中"
660
- }, {
661
- key: "pending",
662
- label: "待处理"
663
- }, {
664
- key: "resolved",
665
- label: "已解决"
666
- }, {
667
- key: "closed",
668
- label: "已关闭"
669
- }];
670
- function _a(e) {
671
- return e ? e.startsWith("http://") || e.startsWith("https://") || e.startsWith("data:") : !1;
672
- }
673
- function ne(e) {
674
- const t = (e.attachments ?? []).filter((i) => _a(i.url));
675
- return {
676
- text: e.content ?? "",
677
- attachments: t
678
- };
679
- }
680
- const ha = {
681
- class: "FeedBackDetails"
682
- }, wa = {
683
- class: "scrollable-content__inner"
684
- }, Ca = {
685
- class: "content"
686
- }, Ua = {
687
- class: "empty-title"
688
- }, xa = {
689
- class: "empty-tips"
690
- }, Sa = {
691
- key: 1,
692
- class: "Bubbles"
693
- }, $a = {
694
- class: "sender-container"
695
- }, Fa = {
696
- key: 0,
697
- class: "attachments-preview"
698
- }, Ia = ["onClick"], Aa = ["src"], Pa = ["src"], Ra = {
699
- class: "attachment-file-name"
700
- }, Ba = ["onClick"], Ta = ["accept"], Ma = /* @__PURE__ */ q({
701
- __name: "FeedbackDetails",
702
- props: {
703
- id: {
704
- type: String,
705
- required: !0,
706
- default: () => ""
707
- },
708
- senderRole: {
709
- type: String,
710
- required: !0,
711
- validator: (e) => ["user", "support"].includes(e)
712
- }
713
- },
714
- setup(e) {
715
- function t(r) {
716
- return r === "inProgress" ? "orangered" : r === "pending" ? "gold" : r === "resolved" ? "green" : r === "closed" ? "gray" : "arcoblue";
717
- }
718
- const i = m(""), o = m(!1), g = m(null), l = m(null), k = m(null), x = m(!1), _ = m(!1), S = m(0), L = m(!1), w = m(""), $ = m(""), P = Te((r) => {
719
- ue.warning(r);
720
- }), h = A(() => P.imageItems.value.map((r) => r.previewUrl || "")), I = A(() => i.value.trim().length > 0 || P.hasAttachments.value), u = () => {
721
- var r;
722
- (r = g.value) == null || r.focus({
723
- cursor: "end"
724
- }), te(() => {
725
- l.value && (l.value.scrollTop = l.value.scrollHeight);
726
- });
727
- }, U = e, T = A(() => U.senderRole === "support" ? "暂无沟通记录" : "还没有消息"), C = A(() => U.senderRole === "support" ? ["可在下方输入框回复用户", "支持发送文字、图片和文件附件"] : ["请尽量详细描述问题或需求", "可上传多张图片或文件附件,支持与文字一起发送"]), y = A(() => U.senderRole === "support" ? "输入回复内容,Enter 发送" : "补充问题描述或追问,Enter 发送"), p = m(!1), D = m([]), N = m(void 0);
728
- function Ee(r, d) {
729
- const n = "seq" in r && typeof r.seq == "number" ? r.seq : d;
730
- return `${r.senderRole}-${n}-${d}`;
731
- }
732
- function ye(r) {
733
- var d;
734
- return String(((d = r.senderInfo) == null ? void 0 : d.avatarUrl) || "");
735
- }
736
- function _e(r) {
737
- var n;
738
- const d = String(((n = r.senderInfo) == null ? void 0 : n.nickname) || "").trim();
739
- return d ? d.slice(0, 1).toUpperCase() : r.senderRole === "support" ? "S" : "U";
740
- }
741
- const K = m({
742
- id: void 0,
743
- title: "",
744
- description: "",
745
- type: "bugReports",
746
- status: "newFeedback",
747
- reply: "",
748
- createAt: ""
749
- });
750
- function De() {
751
- var r;
752
- (r = k.value) == null || r.click();
753
- }
754
- function qe(r) {
755
- const d = r.target, n = d.files;
756
- n != null && n.length && P.addFiles(Array.from(n)), d.value = "";
757
- }
758
- function Oe(r) {
759
- if (r.kind === "image" && r.previewUrl) {
760
- const d = P.imageItems.value.findIndex((n) => n.id === r.id);
761
- if (d < 0) return;
762
- S.value = d, _.value = !0;
763
- return;
764
- }
765
- r.kind === "video" && r.previewUrl && (w.value = r.previewUrl, $.value = r.file.name, L.value = !0);
766
- }
767
- function ze(r) {
768
- var M;
769
- const d = (M = r.clipboardData) == null ? void 0 : M.items;
770
- if (!d) return;
771
- const n = [];
772
- for (const j of d)
773
- if (j.type.startsWith("image/")) {
774
- const X = j.getAsFile();
775
- X && n.push(X);
776
- }
777
- n.length > 0 && (r.preventDefault(), P.addFiles(n));
778
- }
779
- function Ne(r) {
780
- var d;
781
- (d = r.dataTransfer) != null && d.types.includes("Files") && (x.value = !0);
782
- }
783
- function je() {
784
- x.value = !1;
785
- }
786
- function Ke(r) {
787
- var n;
788
- x.value = !1;
789
- const d = (n = r.dataTransfer) == null ? void 0 : n.files;
790
- d && P.addFiles(Array.from(d));
791
- }
792
- async function We() {
793
- U.senderRole === "support" && K.value.status === "newFeedback" && await he();
794
- }
795
- async function He() {
796
- const r = i.value, d = P.items.value.map((n) => n.file);
797
- if (!(!r.trim() && d.length === 0)) {
798
- o.value = !0;
799
- try {
800
- const n = d.length > 0 ? await Me(d, Fe.feedbackBucketId) : [], M = r.trim(), {
801
- data: j
802
- } = await O.feedbackCenter.update.messages.post({
803
- id: U.id,
804
- message: {
805
- type: "text",
806
- content: M,
807
- attachments: n,
808
- senderRole: U.senderRole
809
- }
810
- });
811
- if (j) {
812
- D.value.push(j.message);
813
- const X = j.message.seq;
814
- typeof X == "number" && (N.value = X), i.value = "", P.clear(), te(() => {
815
- u();
816
- }), await We();
817
- }
818
- } catch {
819
- ue.error("发送失败,请稍后重试");
820
- } finally {
821
- o.value = !1;
822
- }
823
- }
824
- }
825
- async function he() {
826
- p.value = !0;
827
- const {
828
- data: r
829
- } = await O.feedbackCenter.findOne.post({
830
- id: U.id
831
- });
832
- p.value = !1, r && (K.value = r);
833
- }
834
- async function we() {
835
- U.senderRole === "user" && (await O.feedbackCenter.markRead.post({
836
- id: U.id
837
- }), H());
838
- }
839
- async function Ge() {
840
- var d;
841
- const {
842
- data: r
843
- } = await O.messages.list.incremental.post({
844
- id: U.id,
845
- lastSeq: N.value
846
- });
847
- if (r && ((d = r.messages) != null && d.length)) {
848
- const n = r.messages;
849
- D.value.push(...n);
850
- const M = n.at(-1);
851
- M && "seq" in M && typeof M.seq == "number" && (N.value = M.seq), te(() => {
852
- u();
853
- }), await we();
854
- }
855
- }
856
- async function Xe() {
857
- var d;
858
- p.value = !0;
859
- const {
860
- data: r
861
- } = await O.messages.list.post({
862
- id: U.id
863
- });
864
- if (p.value = !1, r && ((d = r.messages) != null && d.length)) {
865
- const n = r.messages;
866
- D.value = n;
867
- const M = n.at(-1);
868
- M && "seq" in M && typeof M.seq == "number" && (N.value = M.seq), te(() => {
869
- u();
870
- });
871
- }
872
- await we();
873
- }
874
- return ma(Ge, {
875
- interval: 2e3,
876
- autoStart: !0
877
- }), he(), Xe(), (r, d) => (s(), c("div", ha, [b("div", {
878
- ref_key: "scrollableContentRef",
879
- ref: l,
880
- class: "scrollable-content"
881
- }, [b("div", wa, [f(a(nt), {
882
- title: "基本信息"
883
- }, {
884
- title: v(() => [...d[4] || (d[4] = [b("div", {
885
- class: "title"
886
- }, "基本信息", -1)])]),
887
- default: v(() => [f(a(ae), {
888
- label: "标题:",
889
- span: 3
890
- }, {
891
- default: v(() => [E(F(K.value.title), 1)]),
892
- _: 1
893
- }), f(a(ae), {
894
- label: "问题描述:",
895
- span: 3
896
- }, {
897
- default: v(() => [E(F(K.value.description || "-"), 1)]),
898
- _: 1
899
- }), f(a(ae), {
900
- label: "反馈类型:",
901
- span: 1
902
- }, {
903
- default: v(() => [f(a(Z), {
904
- color: "arcoblue"
905
- }, {
906
- default: v(() => {
907
- var n;
908
- return [E(F((n = a(Q)(a(ke), K.value.type)) == null ? void 0 : n.label), 1)];
909
- }),
910
- _: 1
911
- })]),
912
- _: 1
913
- }), f(a(ae), {
914
- label: "状态:",
915
- span: 1
916
- }, {
917
- default: v(() => [f(a(Z), {
918
- color: t(K.value.status)
919
- }, {
920
- default: v(() => {
921
- var n;
922
- return [E(F((n = a(Q)(a(Ve), K.value.status)) == null ? void 0 : n.label), 1)];
923
- }),
924
- _: 1
925
- }, 8, ["color"])]),
926
- _: 1
927
- })]),
928
- _: 1
929
- }), b("div", Ca, [d[5] || (d[5] = b("div", {
930
- class: "title"
931
- }, "沟通记录", -1)), f(a(lt), {
932
- class: "messageContent",
933
- loading: p.value
934
- }, {
935
- default: v(() => [D.value.length === 0 ? (s(), B(a(it), {
936
- key: 0,
937
- class: "message-empty"
938
- }, {
939
- description: v(() => [b("div", Ua, F(T.value), 1), b("ul", xa, [(s(!0), c(V, null, z(C.value, (n) => (s(), c("li", {
940
- key: n
941
- }, F(n), 1))), 128))])]),
942
- _: 1
943
- })) : (s(), c("div", Sa, [(s(!0), c(V, null, z(D.value, (n, M) => (s(), c(V, {
944
- key: Ee(n, M)
945
- }, [n.senderRole !== U.senderRole ? (s(), B(na, {
946
- key: 0,
947
- text: a(ne)(n).text,
948
- attachments: a(ne)(n).attachments,
949
- "avatar-url": ye(n),
950
- "avatar-text": _e(n)
951
- }, null, 8, ["text", "attachments", "avatar-url", "avatar-text"])) : (s(), B(Xt, {
952
- key: 1,
953
- text: a(ne)(n).text,
954
- attachments: a(ne)(n).attachments,
955
- "avatar-url": ye(n),
956
- "avatar-text": _e(n)
957
- }, null, 8, ["text", "attachments", "avatar-url", "avatar-text"]))], 64))), 128))]))]),
958
- _: 1
959
- }, 8, ["loading"])])])], 512), b("div", $a, [b("div", {
960
- class: ie(["sender-panel", {
961
- "is-drag-over": x.value
962
- }]),
963
- onDragover: G(Ne, ["prevent"]),
964
- onDragleave: je,
965
- onDrop: G(Ke, ["prevent"]),
966
- onPaste: ze
967
- }, [a(P).hasAttachments.value ? (s(), c("div", Fa, [(s(!0), c(V, null, z(a(P).items.value, (n, M) => (s(), c("div", {
968
- key: n.id,
969
- class: ie(["attachment-preview-item", {
970
- "is-image": n.kind === "image",
971
- "is-video": n.kind === "video"
972
- }]),
973
- onClick: (j) => Oe(n)
974
- }, [n.kind === "image" && n.previewUrl ? (s(), c("img", {
975
- key: 0,
976
- src: n.previewUrl,
977
- alt: "预览",
978
- class: "attachment-thumbnail"
979
- }, null, 8, Aa)) : n.kind === "video" && n.previewUrl ? (s(), c(V, {
980
- key: 1
981
- }, [b("video", {
982
- class: "attachment-thumbnail",
983
- src: n.previewUrl,
984
- muted: "",
985
- preload: "metadata"
986
- }, null, 8, Pa), d[6] || (d[6] = b("span", {
987
- class: "attachment-video-play"
988
- }, "播放", -1))], 64)) : (s(), c(V, {
989
- key: 2
990
- }, [d[7] || (d[7] = b("span", {
991
- class: "attachment-file-icon"
992
- }, "FILE", -1)), b("span", Ra, F(n.file.name), 1)], 64)), b("button", {
993
- type: "button",
994
- class: "attachment-remove-btn",
995
- title: "移除附件",
996
- onClick: G((j) => a(P).removeAt(M), ["stop"])
997
- }, " × ", 8, Ba)], 10, Ia))), 128))])) : R("", !0), f(a(ge), {
998
- "src-list": h.value,
999
- visible: _.value,
1000
- "onUpdate:visible": d[0] || (d[0] = (n) => _.value = n),
1001
- current: S.value,
1002
- "onUpdate:current": d[1] || (d[1] = (n) => S.value = n)
1003
- }, null, 8, ["src-list", "visible", "current"]), f(be, {
1004
- visible: L.value,
1005
- "onUpdate:visible": d[2] || (d[2] = (n) => L.value = n),
1006
- title: $.value,
1007
- src: w.value
1008
- }, null, 8, ["visible", "title", "src"]), f(a(kt), {
1009
- ref_key: "senderRef",
1010
- ref: g,
1011
- value: i.value,
1012
- "onUpdate:value": d[3] || (d[3] = (n) => i.value = n),
1013
- placeholder: y.value,
1014
- loading: o.value,
1015
- "allow-speech": !1,
1016
- "read-only": o.value,
1017
- "send-disabled": !I.value,
1018
- onSubmit: He
1019
- }, {
1020
- prefix: v(() => [f(a(pe), {
1021
- type: "text",
1022
- class: "IconLink",
1023
- disabled: o.value,
1024
- onClick: De
1025
- }, {
1026
- icon: v(() => [f(a(oa))]),
1027
- _: 1
1028
- }, 8, ["disabled"])]),
1029
- _: 1
1030
- }, 8, ["value", "placeholder", "loading", "read-only", "send-disabled"]), b("input", {
1031
- ref_key: "fileInputRef",
1032
- ref: k,
1033
- type: "file",
1034
- accept: a(Re),
1035
- multiple: "",
1036
- class: "hidden-file-input",
1037
- onChange: qe
1038
- }, null, 40, Ta)], 34)])]));
1039
- }
1040
- }), La = /* @__PURE__ */ W(Ma, [["__scopeId", "data-v-f37bf266"]]), Va = {
1041
- class: "FeedBackFrom"
1042
- }, Ea = {
1043
- class: "feedback-attachments-field"
1044
- }, Da = {
1045
- key: 0,
1046
- class: "attachments-preview"
1047
- }, qa = ["onClick"], Oa = ["src"], za = ["src"], Na = {
1048
- class: "attachment-file-name"
1049
- }, ja = ["onClick"], Ka = ["accept"], Wa = /* @__PURE__ */ q({
1050
- __name: "FeedbackForm",
1051
- emits: ["confirm"],
1052
- setup(e, {
1053
- emit: t
1054
- }) {
1055
- const i = t, o = m(), g = m(!1), l = m({
1056
- id: void 0,
1057
- title: "",
1058
- type: "bugReports",
1059
- priority: "normal",
1060
- description: ""
1061
- }), k = m(null), x = m(!1), _ = m(0), S = m(!1), L = m(""), w = m(""), $ = Te((C) => {
1062
- ue.warning(C);
1063
- }), P = A(() => $.imageItems.value.map((C) => C.previewUrl || ""));
1064
- function h() {
1065
- var C;
1066
- (C = k.value) == null || C.click();
1067
- }
1068
- function I(C) {
1069
- const y = C.target, p = y.files;
1070
- p != null && p.length && $.addFiles(Array.from(p)), y.value = "";
1071
- }
1072
- function u(C) {
1073
- if (C.kind === "image" && C.previewUrl) {
1074
- const y = $.imageItems.value.findIndex((p) => p.id === C.id);
1075
- if (y < 0) return;
1076
- _.value = y, x.value = !0;
1077
- return;
1078
- }
1079
- C.kind === "video" && C.previewUrl && (L.value = C.previewUrl, w.value = C.file.name, S.value = !0);
1080
- }
1081
- function U() {
1082
- var C, y;
1083
- l.value = {
1084
- id: void 0,
1085
- title: "",
1086
- type: "bugReports",
1087
- priority: "normal",
1088
- description: ""
1089
- }, $.clear(), (y = (C = o.value) == null ? void 0 : C.resetFields) == null || y.call(C);
1090
- }
1091
- async function T() {
1092
- if (!await o.value.validate()) {
1093
- g.value = !0;
1094
- try {
1095
- const y = $.items.value.map((N) => N.file), p = y.length > 0 ? await Me(y, Fe.feedbackBucketId) : [], {
1096
- error: D
1097
- } = await O.feedbackCenter.create.post({
1098
- title: l.value.title,
1099
- type: l.value.type,
1100
- priority: l.value.priority,
1101
- description: l.value.description,
1102
- attachments: p
1103
- });
1104
- D || (ue.success("新建反馈成功"), U(), i("confirm"));
1105
- } finally {
1106
- g.value = !1;
1107
- }
1108
- }
1109
- }
1110
- return (C, y) => (s(), c("div", Va, [f(a(rt), {
1111
- ref_key: "formRef",
1112
- ref: o,
1113
- model: l.value,
1114
- "auto-label-width": "",
1115
- layout: "vertical"
1116
- }, {
1117
- default: v(() => [f(a(Y), {
1118
- field: "title",
1119
- label: "标题",
1120
- rules: [{
1121
- required: !0,
1122
- message: "请输入标题"
1123
- }]
1124
- }, {
1125
- default: v(() => [f(a(ot), {
1126
- modelValue: l.value.title,
1127
- "onUpdate:modelValue": y[0] || (y[0] = (p) => l.value.title = p),
1128
- placeholder: "请输入标题"
1129
- }, null, 8, ["modelValue"])]),
1130
- _: 1
1131
- }), f(a(Y), {
1132
- field: "type",
1133
- label: "反馈类型",
1134
- rules: [{
1135
- required: !0,
1136
- message: "请选择反馈类型"
1137
- }]
1138
- }, {
1139
- default: v(() => [f(a(Ce), {
1140
- modelValue: l.value.type,
1141
- "onUpdate:modelValue": y[1] || (y[1] = (p) => l.value.type = p),
1142
- placeholder: "请选择反馈类型"
1143
- }, {
1144
- default: v(() => [(s(!0), c(V, null, z(a(ke), (p, D) => (s(), B(a(Ue), {
1145
- key: D,
1146
- value: p.key
1147
- }, {
1148
- default: v(() => [E(F(p.label), 1)]),
1149
- _: 2
1150
- }, 1032, ["value"]))), 128))]),
1151
- _: 1
1152
- }, 8, ["modelValue"])]),
1153
- _: 1
1154
- }), f(a(Y), {
1155
- field: "priority",
1156
- label: "优先级",
1157
- rules: [{
1158
- required: !0,
1159
- message: "请选择优先级"
1160
- }]
1161
- }, {
1162
- default: v(() => [f(a(Ce), {
1163
- modelValue: l.value.priority,
1164
- "onUpdate:modelValue": y[2] || (y[2] = (p) => l.value.priority = p),
1165
- placeholder: "请选择优先级"
1166
- }, {
1167
- default: v(() => [(s(!0), c(V, null, z(a(Le), (p, D) => (s(), B(a(Ue), {
1168
- key: D,
1169
- value: p.key
1170
- }, {
1171
- default: v(() => [E(F(p.label), 1)]),
1172
- _: 2
1173
- }, 1032, ["value"]))), 128))]),
1174
- _: 1
1175
- }, 8, ["modelValue"])]),
1176
- _: 1
1177
- }), f(a(Y), {
1178
- field: "description",
1179
- label: "问题描述",
1180
- rules: [{
1181
- required: !0,
1182
- message: "请输入问题描述"
1183
- }]
1184
- }, {
1185
- default: v(() => [f(a(ut), {
1186
- modelValue: l.value.description,
1187
- "onUpdate:modelValue": y[3] || (y[3] = (p) => l.value.description = p),
1188
- placeholder: "请输入问题描述",
1189
- "allow-clear": "",
1190
- "auto-size": {
1191
- minRows: 5
1192
- }
1193
- }, null, 8, ["modelValue"])]),
1194
- _: 1
1195
- }), f(a(Y), {
1196
- field: "attachments",
1197
- label: "附件"
1198
- }, {
1199
- default: v(() => [b("div", Ea, [f(a(pe), {
1200
- type: "outline",
1201
- disabled: g.value,
1202
- onClick: h
1203
- }, {
1204
- default: v(() => [...y[7] || (y[7] = [E(" 添加图片、视频或文件 ", -1)])]),
1205
- _: 1
1206
- }, 8, ["disabled"]), a($).hasAttachments.value ? (s(), c("div", Da, [(s(!0), c(V, null, z(a($).items.value, (p, D) => (s(), c("div", {
1207
- key: p.id,
1208
- class: ie(["attachment-preview-item", {
1209
- "is-image": p.kind === "image",
1210
- "is-video": p.kind === "video"
1211
- }]),
1212
- onClick: (N) => u(p)
1213
- }, [p.kind === "image" && p.previewUrl ? (s(), c("img", {
1214
- key: 0,
1215
- src: p.previewUrl,
1216
- alt: "预览",
1217
- class: "attachment-thumbnail"
1218
- }, null, 8, Oa)) : p.kind === "video" && p.previewUrl ? (s(), c(V, {
1219
- key: 1
1220
- }, [b("video", {
1221
- class: "attachment-thumbnail",
1222
- src: p.previewUrl,
1223
- muted: "",
1224
- preload: "metadata"
1225
- }, null, 8, za), y[8] || (y[8] = b("span", {
1226
- class: "attachment-video-play"
1227
- }, "播放", -1))], 64)) : (s(), c(V, {
1228
- key: 2
1229
- }, [y[9] || (y[9] = b("span", {
1230
- class: "attachment-file-icon"
1231
- }, "FILE", -1)), b("span", Na, F(p.file.name), 1)], 64)), b("button", {
1232
- type: "button",
1233
- class: "attachment-remove-btn",
1234
- title: "移除附件",
1235
- onClick: G((N) => a($).removeAt(D), ["stop"])
1236
- }, " × ", 8, ja)], 10, qa))), 128))])) : R("", !0), f(a(ge), {
1237
- "src-list": P.value,
1238
- visible: x.value,
1239
- "onUpdate:visible": y[4] || (y[4] = (p) => x.value = p),
1240
- current: _.value,
1241
- "onUpdate:current": y[5] || (y[5] = (p) => _.value = p)
1242
- }, null, 8, ["src-list", "visible", "current"]), f(be, {
1243
- visible: S.value,
1244
- "onUpdate:visible": y[6] || (y[6] = (p) => S.value = p),
1245
- title: w.value,
1246
- src: L.value
1247
- }, null, 8, ["visible", "title", "src"]), b("input", {
1248
- ref_key: "fileInputRef",
1249
- ref: k,
1250
- type: "file",
1251
- accept: a(Re),
1252
- multiple: "",
1253
- class: "hidden-file-input",
1254
- onChange: I
1255
- }, null, 40, Ka)])]),
1256
- _: 1
1257
- }), f(a(pe), {
1258
- loading: g.value,
1259
- type: "primary",
1260
- onClick: T
1261
- }, {
1262
- default: v(() => [...y[10] || (y[10] = [E(" 提交 ", -1)])]),
1263
- _: 1
1264
- }, 8, ["loading"])]),
1265
- _: 1
1266
- }, 8, ["model"])]));
1267
- }
1268
- }), Ha = /* @__PURE__ */ W(Wa, [["__scopeId", "data-v-a63b0678"]]), Ga = {
1269
- class: "message-panel"
1270
- }, Xa = {
1271
- key: 2,
1272
- class: "message-panel__detail"
1273
- }, Ya = /* @__PURE__ */ q({
1274
- __name: "FeedbackList",
1275
- emits: ["toDetail"],
1276
- setup(e, {
1277
- expose: t,
1278
- emit: i
1279
- }) {
1280
- const o = m(!0), g = m([]), l = m(!1), k = m(!1), x = m(""), _ = m({
1281
- total: 0,
1282
- current: 1,
1283
- pageSize: 10
1284
- });
1285
- function S() {
1286
- o.value = !0, _.value.current = 1, h();
1287
- }
1288
- function L(u) {
1289
- x.value = u.id, o.value = !1;
1290
- }
1291
- function w(u) {
1292
- return u === "inProgress" ? "orangered" : u === "pending" ? "gold" : u === "resolved" ? "green" : u === "closed" ? "gray" : "arcoblue";
1293
- }
1294
- function $(u) {
1295
- return u === "urgent" ? "red" : u === "high" ? "orangered" : u === "low" ? "gray" : "blue";
1296
- }
1297
- function P(u) {
1298
- return u.map((U) => ({
1299
- ...U,
1300
- read: U.read ?? !0
1301
- }));
1302
- }
1303
- async function h() {
1304
- l.value = !0;
1305
- const {
1306
- data: u
1307
- } = await O.feedbackCenter.own.post({
1308
- current: _.value.current,
1309
- pageSize: _.value.pageSize
1310
- });
1311
- if (l.value = !1, u) {
1312
- const U = u, T = P(U.items || []);
1313
- g.value = T, _.value.total = U.count || 0, k.value = T.length < _.value.pageSize;
1314
- }
1315
- }
1316
- async function I() {
1317
- if (l.value || k.value) return;
1318
- _.value.current += 1, l.value = !0;
1319
- const {
1320
- data: u
1321
- } = await O.feedbackCenter.own.post({
1322
- current: _.value.current,
1323
- pageSize: _.value.pageSize
1324
- });
1325
- if (l.value = !1, u) {
1326
- const T = P(u.items || []);
1327
- g.value = [...g.value, ...T], k.value = T.length < _.value.pageSize;
1328
- }
1329
- }
1330
- return h(), t({
1331
- refresh: h
1332
- }), (u, U) => (s(), c("div", Ga, [o.value ? R("", !0) : (s(), B(a(ct), {
1333
- key: 0,
1334
- class: "message-panel__breadcrumb"
1335
- }, {
1336
- default: v(() => [f(a(xe), {
1337
- onClick: S
1338
- }, {
1339
- default: v(() => [...U[0] || (U[0] = [E("我的反馈", -1)])]),
1340
- _: 1
1341
- }), f(a(xe), null, {
1342
- default: v(() => [...U[1] || (U[1] = [E("反馈详情", -1)])]),
1343
- _: 1
1344
- })]),
1345
- _: 1
1346
- })), o.value ? (s(), B(bt, {
1347
- key: 1,
1348
- "message-list": g.value,
1349
- loading: l.value,
1350
- finished: k.value,
1351
- "show-read-status": !0,
1352
- "show-view-button": !1,
1353
- "empty-description": "暂无反馈",
1354
- onItemClick: L,
1355
- onLoadMore: I
1356
- }, {
1357
- tags: v(({
1358
- item: T
1359
- }) => [f(a(Z), {
1360
- color: "arcoblue",
1361
- size: "small"
1362
- }, {
1363
- default: v(() => {
1364
- var C;
1365
- return [E(F((C = a(Q)(a(ke), T.type)) == null ? void 0 : C.label), 1)];
1366
- }),
1367
- _: 2
1368
- }, 1024), f(a(Z), {
1369
- color: $(T.priority),
1370
- size: "small"
1371
- }, {
1372
- default: v(() => {
1373
- var C;
1374
- return [E(F(((C = a(Q)(a(Le), T.priority)) == null ? void 0 : C.label) || "普通"), 1)];
1375
- }),
1376
- _: 2
1377
- }, 1032, ["color"]), f(a(Z), {
1378
- color: w(T.status),
1379
- size: "small"
1380
- }, {
1381
- default: v(() => {
1382
- var C;
1383
- return [E(F((C = a(Q)(a(Ve), T.status)) == null ? void 0 : C.label), 1)];
1384
- }),
1385
- _: 2
1386
- }, 1032, ["color"])]),
1387
- description: v(({
1388
- item: T
1389
- }) => [E(F(T.description || "暂无描述"), 1)]),
1390
- _: 1
1391
- }, 8, ["message-list", "loading", "finished"])) : (s(), c("div", Xa, [f(La, {
1392
- id: x.value,
1393
- "sender-role": "user",
1394
- class: "feedback-details-panel"
1395
- }, null, 8, ["id"])]))]));
1396
- }
1397
- }), Ja = {
1398
- key: 0,
1399
- class: "user-menu-modal-content"
1400
- }, Za = {
1401
- class: "left"
1402
- }, Qa = {
1403
- key: 1,
1404
- class: "user-menu-modal-form"
1405
- }, Cs = /* @__PURE__ */ q({
1406
- __name: "FeedbackModal",
1407
- emits: ["confirm", "cancel"],
1408
- setup(e, {
1409
- expose: t,
1410
- emit: i
1411
- }) {
1412
- const o = m(!1), g = m(Symbol("feedback-list")), l = m(Symbol("feedback-form")), k = i;
1413
- function x() {
1414
- S.value = ["FeedbackList"], g.value = Symbol("feedback-list"), l.value = Symbol("feedback-form");
1415
- }
1416
- function _() {
1417
- x(), k("cancel");
1418
- }
1419
- const S = m(["FeedbackList"]), L = m([{
1420
- name: "我的反馈",
1421
- path: "FeedbackList",
1422
- meta: {
1423
- icon: "mingcute:cube-3d-fill"
1424
- }
1425
- }, {
1426
- name: "新建反馈",
1427
- path: "CreateFeedback",
1428
- meta: {
1429
- icon: "mingcute:cube-3d-fill"
1430
- }
1431
- }]), w = A(() => S.value.length !== 0 ? S.value[0] : "");
1432
- function $() {
1433
- S.value = ["FeedbackList"], g.value = Symbol("feedback-list");
1434
- }
1435
- function P(I) {
1436
- S.value = [I.path];
1437
- }
1438
- function h(I) {
1439
- o.value = I, I && x();
1440
- }
1441
- return t({
1442
- setData: h
1443
- }), (I, u) => (s(), B(a(dt), {
1444
- visible: o.value,
1445
- "onUpdate:visible": u[1] || (u[1] = (U) => o.value = U),
1446
- loading: !1,
1447
- "body-class": "AppMessagebodyClass",
1448
- "mask-closable": !1,
1449
- footer: !1,
1450
- width: a(Ye),
1451
- title: "系统反馈",
1452
- "hide-title": !1,
1453
- onCancel: _
1454
- }, {
1455
- default: v(() => [o.value ? (s(), c("div", Ja, [b("div", Za, [f(ft, {
1456
- "selected-keys": S.value,
1457
- "onUpdate:selectedKeys": u[0] || (u[0] = (U) => S.value = U),
1458
- menus: L.value,
1459
- onChange: P
1460
- }, null, 8, ["selected-keys", "menus"])]), w.value === "FeedbackList" ? (s(), B(Ya, {
1461
- key: g.value
1462
- })) : R("", !0), w.value === "CreateFeedback" ? (s(), c("div", Qa, [(s(), B(Ha, {
1463
- key: l.value,
1464
- onConfirm: $
1465
- }))])) : R("", !0)])) : R("", !0)]),
1466
- _: 1
1467
- }, 8, ["visible", "width"]));
1468
- }
1469
- });
1470
- export {
1471
- Xt as B,
1472
- La as F,
1473
- $e as R,
1474
- be as V,
1475
- Ya as _,
1476
- na as a,
1477
- Ha as b,
1478
- Cs as c,
1479
- ws as u
1480
- };