@huyooo/ui 1.0.7 → 2.0.1

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-DCQH9IpU.js +2678 -0
  2. package/dist/{Contact-BWuVR9ho.js → Contact-C7ROEqe-.js} +9 -9
  3. package/dist/{CustomTable-BzGfaAVH.js → CustomTable-GgvDEidl.js} +1 -1
  4. package/dist/FeedbackModal.vue_vue_type_script_setup_true_lang-C1hPqnNT.js +1531 -0
  5. package/dist/{LegalDocViewer-DM8FYBpf.js → LegalDocViewer-D_QUh0uf.js} +747 -748
  6. package/dist/MessageHandle-DKoySsCG.js +1233 -0
  7. package/dist/{MessageList-Ce-_LNTk.js → MessageList-HSiKkUoD.js} +4 -4
  8. package/dist/PaySubscriptions-NcATVJGm.js +1331 -0
  9. package/dist/{PricingPlans-CV97ck9p.js → PricingPlans-CZn6eJby.js} +99 -105
  10. package/dist/{ReferrerReferees-DgygiIiE.js → ReferrerReferees-BoOQIssE.js} +47 -46
  11. package/dist/Upload.vue_vue_type_script_setup_true_lang-CkS2S9Xc.js +83 -0
  12. package/dist/{UserMenuInvitationsItem.vue_vue_type_script_setup_true_lang-0Td42Nb3.js → UserMenuInvitationsItem.vue_vue_type_script_setup_true_lang-BrNx6JWe.js} +64 -65
  13. package/dist/WidthContainer-BJLdZfzF.js +717 -0
  14. package/dist/api/billingSubscriptionApi.d.ts +4 -1
  15. package/dist/apiClients-CR-hEwog.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 +11 -0
  22. package/dist/components/Upload/Upload.vue.d.ts +7 -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 +8 -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-BnKWq_TL.js} +4 -4
  31. package/dist/{index-BkLvw1PU.js → index-BhVwozr0.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-DMCyhVcI.js} +2305 -2185
  40. package/dist/runtime.d.ts +22 -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 +22 -0
  44. package/dist/upload/browserUploadService.d.ts +21 -0
  45. package/dist/upload.d.ts +2 -1
  46. package/dist/upload.js +5 -4
  47. package/dist/{useAuthkitAppsAuthPageInfo-CNudJd04.js → useAuthkitAppsAuthPageInfo-Byu0yvrx.js} +18 -21
  48. package/dist/useAuthkitAuth-M2vTpEcb.js +272 -0
  49. package/dist/{useAuthkitCreateAndUpdate-BsINsI-E.js → useAuthkitCreateAndUpdate-D2_Bdazi.js} +1 -1
  50. package/dist/useAuthkitUsersProfile-DdUAENic.js +39 -0
  51. package/dist/useBillingStatusOptions-Jq6Wqfxb.js +61 -0
  52. package/dist/{useEnsureAuthenticated-DNkCCy_Y.js → useEnsureAuthenticated-Hel8hWLJ.js} +2 -2
  53. package/dist/{useLegalDocs-DQP_Yq6B.js → useLegalDocs-BOjqYRyQ.js} +25 -25
  54. package/dist/useMessageNotifications-AznFeFMD.js +80 -0
  55. package/dist/{useRoutePermission-CEiya9AM.js → useRoutePermission-BmUXTwQc.js} +2 -2
  56. package/dist/{useSEO-CDWxbk8B.js → useSEO-Chz4Zxuu.js} +89 -86
  57. package/dist/useSubscriptionCheckout-3ivcOcgC.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-DrL_XBqf.js +0 -1481
  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-CFMQRsCy.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
@@ -0,0 +1,2678 @@
1
+ /* empty css */
2
+ /* empty css */
3
+ import { U as Ne } from "./userMenuModal-D-nDaYqM.js";
4
+ import { defineComponent as Y, ref as z, computed as $, openBlock as h, createElementBlock as M, createElementVNode as A, createVNode as p, unref as t, withCtx as o, createTextVNode as k, createCommentVNode as C, toDisplayString as U, createBlock as I, onUnmounted as ke, withDirectives as De, vShow as Be, onMounted as ue, Fragment as ie, createSlots as qe, normalizeClass as ze, renderList as Le, watch as Ae } from "vue";
5
+ import { Avatar as Pe, Input as Q, Textarea as Me, Button as T, Message as G, Form as le, FormItem as L, Alert as J, Space as pe, Popconfirm as Ke, Link as Ie, InputPassword as Fe, Result as He, Modal as We } from "@arco-design/web-vue";
6
+ /* empty css */
7
+ import { f as Ge, g as x, b as Je, h as Ce } from "./apiClients-CR-hEwog.js";
8
+ import { C as Ye } from "./index-BhVwozr0.js";
9
+ /* empty css */
10
+ import { u as ae } from "./useAuthkitUsersProfile-DdUAENic.js";
11
+ import { u as Ee, g as Re } from "./runtime-DMCyhVcI.js";
12
+ import { _ as X } from "./_plugin-vue_export-helper-CHgC5LLL.js";
13
+ /* empty css */
14
+ /* empty css */
15
+ import { C as je } from "./CustomTable-GgvDEidl.js";
16
+ import { u as Se } from "./useAuthkitAppsAuthPageInfo-Byu0yvrx.js";
17
+ import { Icon as Qe } from "@iconify/vue";
18
+ import { i as Xe, M as Ze } from "./Menu-uCexrsKP.js";
19
+ import { u as et } from "./useAuthkitAuth-M2vTpEcb.js";
20
+ import { u as tt } from "./useAuthkitCreateAndUpdate-D2_Bdazi.js";
21
+ const it = {
22
+ class: "personal-information"
23
+ }, at = {
24
+ class: "profile-card"
25
+ }, nt = {
26
+ class: "profile-field profile-field--nickname"
27
+ }, ot = {
28
+ class: "nickname-field"
29
+ }, st = ["disabled"], lt = {
30
+ class: "profile-field"
31
+ }, rt = {
32
+ key: 0,
33
+ class: "profile-actions"
34
+ }, ut = {
35
+ class: "profile-card profile-card--meta"
36
+ }, dt = {
37
+ class: "account-meta"
38
+ }, ct = {
39
+ class: "account-meta__row"
40
+ }, ft = {
41
+ class: "account-meta__row"
42
+ }, pt = {
43
+ class: "account-meta__row"
44
+ }, mt = {
45
+ class: "account-meta__row"
46
+ }, vt = 1e3, ht = /* @__PURE__ */ Y({
47
+ __name: "AuthkitPersonalInformation",
48
+ props: {
49
+ size: {
50
+ type: String,
51
+ required: !0
52
+ }
53
+ },
54
+ emits: ["submit"],
55
+ setup(a, {
56
+ emit: i
57
+ }) {
58
+ const n = i, {
59
+ fetchUserProfile: l
60
+ } = ae(), {
61
+ config: s,
62
+ upload: d
63
+ } = Ee(), u = a, e = z({
64
+ id: void 0,
65
+ nickname: "",
66
+ description: "",
67
+ avatar: "",
68
+ avatarUrl: "",
69
+ email: "",
70
+ phone: ""
71
+ }), y = z({
72
+ nickname: "",
73
+ description: ""
74
+ }), g = z({
75
+ id: "",
76
+ createAt: "",
77
+ status: "",
78
+ loginIdentity: "-"
79
+ }), f = z(!1), v = z(!1), r = $(() => e.value.nickname !== y.value.nickname || e.value.description !== y.value.description);
80
+ function m() {
81
+ y.value = {
82
+ nickname: e.value.nickname,
83
+ description: e.value.description
84
+ };
85
+ }
86
+ function S(V) {
87
+ e.value.id = V.id, e.value.nickname = V.nickname, e.value.description = V.description, e.value.avatar = V.avatar, e.value.avatarUrl = V.avatarUrl, e.value.email = V.email, e.value.phone = V.phone, g.value = {
88
+ id: V.id,
89
+ createAt: V.createAt || "-",
90
+ status: V.status || "",
91
+ loginIdentity: Je(V)
92
+ }, m();
93
+ }
94
+ async function R() {
95
+ v.value = !0;
96
+ const {
97
+ data: V,
98
+ error: w
99
+ } = await x().auth.users.profile.post({});
100
+ if (v.value = !1, w || !V)
101
+ return;
102
+ S(V);
103
+ }
104
+ function B() {
105
+ e.value.nickname = y.value.nickname, e.value.description = y.value.description;
106
+ }
107
+ async function K() {
108
+ if (!e.value.id)
109
+ return;
110
+ v.value = !0;
111
+ const V = {
112
+ id: e.value.id,
113
+ nickname: e.value.nickname,
114
+ description: e.value.description,
115
+ avatar: e.value.avatar
116
+ }, {
117
+ data: w,
118
+ error: q
119
+ } = await x().auth.users.update.baseInfo.post(V);
120
+ v.value = !1, !q && w && (G.success("更新成功"), e.value.avatarUrl = w.avatarUrl || e.value.avatarUrl, m(), await l(), n("submit"));
121
+ }
122
+ function j() {
123
+ const V = document.createElement("input");
124
+ V.type = "file", V.accept = "image/*", V.style.display = "none", document.body.append(V), V.addEventListener("change", async (w) => {
125
+ var D;
126
+ const _ = (D = w.target.files) == null ? void 0 : D[0];
127
+ if (!_ || !e.value.id) {
128
+ V.remove();
129
+ return;
130
+ }
131
+ f.value = !0;
132
+ const {
133
+ data: P,
134
+ error: N
135
+ } = await d.upload({
136
+ bucketId: s.avatarBucketId,
137
+ file: _
138
+ });
139
+ if (N || !P) {
140
+ f.value = !1, G.error((N == null ? void 0 : N.message) || "头像上传失败"), V.remove();
141
+ return;
142
+ }
143
+ const F = await x().auth.users.update.baseInfo.post({
144
+ id: e.value.id,
145
+ nickname: e.value.nickname,
146
+ description: e.value.description,
147
+ avatar: P.key
148
+ });
149
+ f.value = !1, F.error || (G.success("头像已更新"), await R(), await l(), n("submit")), V.remove();
150
+ }), V.click();
151
+ }
152
+ return R(), (V, w) => (h(), M("div", it, [A("section", at, [w[6] || (w[6] = A("h3", {
153
+ class: "profile-card__title"
154
+ }, "个人资料", -1)), A("div", nt, [w[2] || (w[2] = A("label", {
155
+ class: "profile-field__label"
156
+ }, "昵称", -1)), A("div", ot, [A("button", {
157
+ type: "button",
158
+ class: "nickname-field__avatar",
159
+ disabled: f.value,
160
+ title: "更换头像",
161
+ onClick: j
162
+ }, [p(t(Pe), {
163
+ "image-url": e.value.avatarUrl,
164
+ size: 28,
165
+ "object-fit": "cover"
166
+ }, null, 8, ["image-url"])], 8, st), p(t(Q), {
167
+ modelValue: e.value.nickname,
168
+ "onUpdate:modelValue": w[0] || (w[0] = (q) => e.value.nickname = q),
169
+ class: "nickname-field__input",
170
+ size: u.size,
171
+ placeholder: "例如:小明"
172
+ }, null, 8, ["modelValue", "size"])])]), A("div", lt, [w[3] || (w[3] = A("label", {
173
+ class: "profile-field__label"
174
+ }, "个人简介", -1)), p(t(Me), {
175
+ modelValue: e.value.description,
176
+ "onUpdate:modelValue": w[1] || (w[1] = (q) => e.value.description = q),
177
+ size: u.size,
178
+ placeholder: "介绍一下你自己",
179
+ "max-length": vt,
180
+ "show-word-limit": "",
181
+ "auto-size": {
182
+ minRows: 4,
183
+ maxRows: 8
184
+ }
185
+ }, null, 8, ["modelValue", "size"])]), r.value ? (h(), M("div", rt, [p(t(T), {
186
+ size: u.size,
187
+ onClick: B
188
+ }, {
189
+ default: o(() => [...w[4] || (w[4] = [k("取消", -1)])]),
190
+ _: 1
191
+ }, 8, ["size"]), p(t(T), {
192
+ type: "primary",
193
+ size: u.size,
194
+ loading: v.value,
195
+ onClick: K
196
+ }, {
197
+ default: o(() => [...w[5] || (w[5] = [k(" 保存修改 ", -1)])]),
198
+ _: 1
199
+ }, 8, ["size", "loading"])])) : C("", !0)]), A("section", ut, [w[11] || (w[11] = A("h3", {
200
+ class: "profile-card__title"
201
+ }, "账号信息", -1)), A("dl", dt, [A("div", ct, [w[7] || (w[7] = A("dt", null, "用户 ID", -1)), A("dd", null, [A("span", null, U(g.value.id || "-"), 1), g.value.id ? (h(), I(Ye, {
202
+ key: 0,
203
+ value: g.value.id,
204
+ message: "用户 ID 已复制"
205
+ }, null, 8, ["value"])) : C("", !0)])]), A("div", ft, [w[8] || (w[8] = A("dt", null, "注册时间", -1)), A("dd", null, U(g.value.createAt || "-"), 1)]), A("div", pt, [w[9] || (w[9] = A("dt", null, "账号状态", -1)), A("dd", null, U(t(Ge)(g.value.status)), 1)]), A("div", mt, [w[10] || (w[10] = A("dt", null, "登录标识", -1)), A("dd", null, U(g.value.loginIdentity), 1)])])])]));
206
+ }
207
+ }), yt = /* @__PURE__ */ X(ht, [["__scopeId", "data-v-e03e688b"]]), gt = /* @__PURE__ */ Y({
208
+ __name: "AuthkitSendVerifyCode",
209
+ props: {
210
+ size: {
211
+ type: String,
212
+ required: !0
213
+ },
214
+ loading: {
215
+ type: Boolean,
216
+ required: !0,
217
+ default: () => !1
218
+ }
219
+ },
220
+ emits: ["send"],
221
+ setup(a, {
222
+ expose: i,
223
+ emit: n
224
+ }) {
225
+ const l = n, s = a, d = z(!1);
226
+ let u;
227
+ const e = z(0), y = $(() => e.value.toString().padStart(2, "0")), g = $(() => e.value > 0);
228
+ function f() {
229
+ u && (clearInterval(u), u = void 0);
230
+ }
231
+ function v() {
232
+ if (d.value) {
233
+ if (e.value <= 0) {
234
+ f(), d.value = !1;
235
+ return;
236
+ }
237
+ e.value--, e.value <= 0 && (f(), d.value = !1);
238
+ }
239
+ }
240
+ function r() {
241
+ l("send");
242
+ }
243
+ function m(S) {
244
+ !Number.isFinite(S) || S <= 0 || (e.value = Math.ceil(S), d.value = !0, f(), u = setInterval(v, 1e3));
245
+ }
246
+ return i({
247
+ startCountFn: m
248
+ }), ke(() => {
249
+ f();
250
+ }), (S, R) => (h(), I(t(T), {
251
+ class: "OAuthItem",
252
+ type: "primary",
253
+ size: s.size,
254
+ disabled: g.value,
255
+ loading: s.loading,
256
+ onClick: r
257
+ }, {
258
+ default: o(() => [R[0] || (R[0] = A("span", null, " 发送验证码", -1)), De(A("span", {
259
+ class: "verify-code-timer"
260
+ }, U(`(${y.value})`), 513), [[Be, g.value]])]),
261
+ _: 1
262
+ }, 8, ["size", "disabled", "loading"]));
263
+ }
264
+ }), ve = /* @__PURE__ */ X(gt, [["__scopeId", "data-v-63c6fb3a"]]);
265
+ function wt(a) {
266
+ if (!a)
267
+ return null;
268
+ const i = a.match(/请\s*(\d+)\s*秒后再试/);
269
+ if (!i)
270
+ return null;
271
+ const n = Number(i[1]);
272
+ return Number.isFinite(n) && n > 0 ? n : null;
273
+ }
274
+ function _e(a) {
275
+ var n, l;
276
+ const i = (n = a.data) == null ? void 0 : n.cooldownSeconds;
277
+ return typeof i == "number" && i > 0 ? i : wt((l = a.error) == null ? void 0 : l.message);
278
+ }
279
+ function he(a, i) {
280
+ const n = _e(i);
281
+ n && a && a.startCountFn(n);
282
+ }
283
+ const bt = {
284
+ class: "sendVerifyCodeItem"
285
+ }, _t = {
286
+ class: "handle"
287
+ }, kt = /* @__PURE__ */ Y({
288
+ __name: "AuthkitEmailVerify",
289
+ props: {
290
+ email: {
291
+ type: String,
292
+ required: !0,
293
+ default: () => ""
294
+ },
295
+ size: {
296
+ type: String,
297
+ required: !0
298
+ }
299
+ },
300
+ emits: ["next"],
301
+ setup(a, {
302
+ emit: i
303
+ }) {
304
+ const n = i, l = a, s = $(() => Ce(l.email)), d = z(), u = z(!1), e = z(!1), y = z(), g = z({
305
+ userToken: void 0,
306
+ emailVerifyId: void 0
307
+ });
308
+ async function f() {
309
+ u.value = !0;
310
+ const r = await x().auth.verify.email.retry.post({
311
+ email: l.email,
312
+ purpose: "bindEmail"
313
+ });
314
+ u.value = !1, r.data && (g.value.emailVerifyId = r.data.emailVerifyId), he(d.value, r);
315
+ }
316
+ async function v() {
317
+ if (!await y.value.validate(["userToken"])) {
318
+ e.value = !0;
319
+ const {
320
+ error: m
321
+ } = await x().auth.verify.email.post({
322
+ email: l.email,
323
+ userToken: g.value.userToken,
324
+ emailVerifyId: g.value.emailVerifyId,
325
+ purpose: "bindEmail"
326
+ });
327
+ e.value = !1, m || n("next");
328
+ }
329
+ }
330
+ return (r, m) => (h(), I(t(le), {
331
+ ref_key: "formRef",
332
+ ref: y,
333
+ model: g.value,
334
+ "auto-label-width": "",
335
+ size: l.size
336
+ }, {
337
+ default: o(() => [p(t(L), {
338
+ field: "email",
339
+ label: "邮箱",
340
+ rules: [{
341
+ required: !1,
342
+ message: "请输入邮箱"
343
+ }, {
344
+ type: "email",
345
+ message: "请输入有效的邮箱"
346
+ }]
347
+ }, {
348
+ default: o(() => [k(U(s.value), 1)]),
349
+ _: 1
350
+ }), p(t(L), {
351
+ field: "userToken",
352
+ label: "验证码",
353
+ "hide-label": "",
354
+ rules: [{
355
+ required: !0,
356
+ message: "请输入验证码"
357
+ }]
358
+ }, {
359
+ default: o(() => [A("div", bt, [p(t(Q), {
360
+ modelValue: g.value.userToken,
361
+ "onUpdate:modelValue": m[0] || (m[0] = (S) => g.value.userToken = S),
362
+ placeholder: "请输入验证码"
363
+ }, null, 8, ["modelValue"]), p(ve, {
364
+ ref_key: "SendVerifyCodeRef",
365
+ ref: d,
366
+ size: l.size,
367
+ loading: u.value,
368
+ style: {
369
+ "margin-left": "10px"
370
+ },
371
+ onSend: f
372
+ }, null, 8, ["size", "loading"])])]),
373
+ _: 1
374
+ }), p(t(L), {
375
+ field: "",
376
+ label: "",
377
+ rules: []
378
+ }, {
379
+ default: o(() => [A("div", _t, [p(t(T), {
380
+ loading: e.value,
381
+ type: "primary",
382
+ onClick: v
383
+ }, {
384
+ default: o(() => [...m[1] || (m[1] = [k(" 提交 ", -1)])]),
385
+ _: 1
386
+ }, 8, ["loading"])])]),
387
+ _: 1
388
+ })]),
389
+ _: 1
390
+ }, 8, ["model", "size"]));
391
+ }
392
+ }), ye = /* @__PURE__ */ X(kt, [["__scopeId", "data-v-0939d925"]]), zt = {
393
+ class: "sendVerifyCodeItem"
394
+ }, At = {
395
+ class: "handle"
396
+ }, Pt = /* @__PURE__ */ Y({
397
+ __name: "AuthkitPhoneVerify",
398
+ props: {
399
+ phone: {
400
+ type: String,
401
+ required: !0
402
+ },
403
+ size: {
404
+ type: String,
405
+ required: !0
406
+ },
407
+ purpose: {
408
+ type: String,
409
+ default: "bindPhone"
410
+ }
411
+ },
412
+ emits: ["next"],
413
+ setup(a, {
414
+ emit: i
415
+ }) {
416
+ const n = i, l = a, s = z(), d = z(!1), u = z(!1), e = z(), y = z({
417
+ code: void 0
418
+ }), g = $(() => {
419
+ const r = l.phone.trim();
420
+ return r.length < 7 ? r : `${r.slice(0, 3)}****${r.slice(-4)}`;
421
+ });
422
+ async function f() {
423
+ d.value = !0;
424
+ const r = await x().auth.verify.sms.send.post({
425
+ phone: l.phone,
426
+ purpose: l.purpose
427
+ });
428
+ d.value = !1, he(s.value, r);
429
+ }
430
+ async function v() {
431
+ if (!await e.value.validate(["code"])) {
432
+ u.value = !0;
433
+ const {
434
+ error: m
435
+ } = await x().auth.verify.sms.verify.post({
436
+ phone: l.phone,
437
+ code: y.value.code,
438
+ purpose: l.purpose
439
+ });
440
+ u.value = !1, m || n("next");
441
+ }
442
+ }
443
+ return (r, m) => (h(), I(t(le), {
444
+ ref_key: "formRef",
445
+ ref: e,
446
+ model: y.value,
447
+ "auto-label-width": "",
448
+ size: l.size
449
+ }, {
450
+ default: o(() => [p(t(L), {
451
+ field: "phone",
452
+ label: "手机号"
453
+ }, {
454
+ default: o(() => [k(U(g.value), 1)]),
455
+ _: 1
456
+ }), p(t(L), {
457
+ field: "code",
458
+ label: "验证码",
459
+ "hide-label": "",
460
+ rules: [{
461
+ required: !0,
462
+ message: "请输入验证码"
463
+ }]
464
+ }, {
465
+ default: o(() => [A("div", zt, [p(t(Q), {
466
+ modelValue: y.value.code,
467
+ "onUpdate:modelValue": m[0] || (m[0] = (S) => y.value.code = S),
468
+ placeholder: "请输入验证码"
469
+ }, null, 8, ["modelValue"]), p(ve, {
470
+ ref_key: "sendVerifyCodeRef",
471
+ ref: s,
472
+ size: l.size,
473
+ loading: d.value,
474
+ style: {
475
+ "margin-left": "10px"
476
+ },
477
+ onSend: f
478
+ }, null, 8, ["size", "loading"])])]),
479
+ _: 1
480
+ }), p(t(L), {
481
+ field: "",
482
+ label: "",
483
+ rules: []
484
+ }, {
485
+ default: o(() => [A("div", At, [p(t(T), {
486
+ loading: u.value,
487
+ type: "primary",
488
+ onClick: v
489
+ }, {
490
+ default: o(() => [...m[1] || (m[1] = [k("提交", -1)])]),
491
+ _: 1
492
+ }, 8, ["loading"])])]),
493
+ _: 1
494
+ })]),
495
+ _: 1
496
+ }, 8, ["model", "size"]));
497
+ }
498
+ }), ge = /* @__PURE__ */ X(Pt, [["__scopeId", "data-v-d26a59d3"]]), It = {
499
+ class: "handle"
500
+ }, Ct = /* @__PURE__ */ Y({
501
+ __name: "AuthkitPasswordUpdate",
502
+ props: {
503
+ size: {
504
+ type: String,
505
+ required: !0
506
+ },
507
+ requireOldPassword: {
508
+ type: Boolean,
509
+ default: !0
510
+ }
511
+ },
512
+ emits: ["submit"],
513
+ setup(a, {
514
+ emit: i
515
+ }) {
516
+ const n = i, l = z(!1), s = z(), d = a, u = z({
517
+ oldPassword: "",
518
+ password: "",
519
+ confirmPassword: ""
520
+ }), e = [{
521
+ required: !0,
522
+ message: "请输入确认密码"
523
+ }, {
524
+ minLength: 10,
525
+ message: "确认密码不能少于10字符"
526
+ }, {
527
+ validator: (g, f) => {
528
+ g !== u.value.password ? f("两次密码输入不一致,请重新输入") : f();
529
+ }
530
+ }];
531
+ async function y() {
532
+ if (!await s.value.validate()) {
533
+ l.value = !0;
534
+ const f = d.requireOldPassword ? {
535
+ password: u.value.password,
536
+ oldPassword: u.value.oldPassword
537
+ } : {
538
+ password: u.value.password
539
+ }, {
540
+ error: v
541
+ } = await x().auth.users.update.password.post(f);
542
+ l.value = !1, v || n("submit", f);
543
+ }
544
+ }
545
+ return (g, f) => (h(), I(t(le), {
546
+ ref_key: "formRef",
547
+ ref: s,
548
+ model: u.value,
549
+ "auto-label-width": "",
550
+ size: d.size
551
+ }, {
552
+ default: o(() => [d.requireOldPassword ? (h(), I(t(L), {
553
+ key: 0,
554
+ field: "oldPassword",
555
+ label: "当前密码",
556
+ "hide-label": "",
557
+ rules: [{
558
+ required: !0,
559
+ message: "请输入当前密码"
560
+ }]
561
+ }, {
562
+ default: o(() => [p(t(Q), {
563
+ modelValue: u.value.oldPassword,
564
+ "onUpdate:modelValue": f[0] || (f[0] = (v) => u.value.oldPassword = v),
565
+ placeholder: "请输入当前密码",
566
+ type: "password"
567
+ }, null, 8, ["modelValue"])]),
568
+ _: 1
569
+ })) : C("", !0), p(t(L), {
570
+ field: "password",
571
+ label: d.requireOldPassword ? "新密码" : "登录密码",
572
+ "hide-label": "",
573
+ rules: [{
574
+ required: !0,
575
+ message: d.requireOldPassword ? "新密码请输入" : "请输入登录密码"
576
+ }, {
577
+ minLength: 10,
578
+ message: "密码不能少于10字符"
579
+ }]
580
+ }, {
581
+ default: o(() => [p(t(Q), {
582
+ modelValue: u.value.password,
583
+ "onUpdate:modelValue": f[1] || (f[1] = (v) => u.value.password = v),
584
+ placeholder: d.requireOldPassword ? "请输入新密码" : "请输入登录密码",
585
+ type: "password"
586
+ }, null, 8, ["modelValue", "placeholder"])]),
587
+ _: 1
588
+ }, 8, ["label", "rules"]), p(t(L), {
589
+ field: "confirmPassword",
590
+ label: "确认密码",
591
+ "hide-label": "",
592
+ rules: e
593
+ }, {
594
+ default: o(() => [p(t(Q), {
595
+ modelValue: u.value.confirmPassword,
596
+ "onUpdate:modelValue": f[2] || (f[2] = (v) => u.value.confirmPassword = v),
597
+ placeholder: "请输入确认密码",
598
+ type: "password"
599
+ }, null, 8, ["modelValue"])]),
600
+ _: 1
601
+ }), p(t(L), {
602
+ field: "",
603
+ label: "",
604
+ rules: []
605
+ }, {
606
+ default: o(() => [A("div", It, [p(t(T), {
607
+ type: "primary",
608
+ loading: l.value,
609
+ onClick: y
610
+ }, {
611
+ default: o(() => [...f[3] || (f[3] = [k("提交", -1)])]),
612
+ _: 1
613
+ }, 8, ["loading"])])]),
614
+ _: 1
615
+ })]),
616
+ _: 1
617
+ }, 8, ["model", "size"]));
618
+ }
619
+ }), Et = /* @__PURE__ */ X(Ct, [["__scopeId", "data-v-627d759a"]]), Rt = /* @__PURE__ */ Y({
620
+ __name: "AuthkitSetPassword",
621
+ props: {
622
+ size: {
623
+ type: String,
624
+ required: !0
625
+ }
626
+ },
627
+ setup(a) {
628
+ const {
629
+ userProfile: i,
630
+ fetchUserProfile: n,
631
+ isLoggedIn: l
632
+ } = ae(), s = z("hidden"), d = a;
633
+ function u(g) {
634
+ s.value = g;
635
+ }
636
+ function e(g) {
637
+ var f;
638
+ G.success((f = i.value) != null && f.hasPassword ? "密码修改成功" : "密码设置成功"), s.value = "hidden", n();
639
+ }
640
+ function y() {
641
+ s.value = "update";
642
+ }
643
+ return ue(() => {
644
+ l.value && !i.value && n();
645
+ }), (g, f) => {
646
+ var v, r, m, S, R, B, K, j, V;
647
+ return h(), M(ie, null, [!((v = t(i)) != null && v.email) && !((r = t(i)) != null && r.phone) ? (h(), I(t(J), {
648
+ key: 0,
649
+ type: "info",
650
+ title: "先绑定账号"
651
+ }, {
652
+ default: o(() => [...f[1] || (f[1] = [k(" 请先绑定邮箱或手机号,再设置登录密码。 ", -1)])]),
653
+ _: 1
654
+ })) : C("", !0), ((m = t(i)) != null && m.email || (S = t(i)) != null && S.phone) && s.value === "hidden" ? (h(), I(t(J), {
655
+ key: 1,
656
+ title: (R = t(i)) != null && R.hasPassword ? "更改密码" : "设置登录密码"
657
+ }, {
658
+ action: o(() => [p(t(T), {
659
+ size: d.size,
660
+ type: "primary",
661
+ onClick: f[0] || (f[0] = (w) => u("verify"))
662
+ }, {
663
+ default: o(() => {
664
+ var w;
665
+ return [k(U((w = t(i)) != null && w.hasPassword ? "更改密码" : "设置密码"), 1)];
666
+ }),
667
+ _: 1
668
+ }, 8, ["size"])]),
669
+ default: o(() => {
670
+ var w;
671
+ return [k(U((w = t(i)) != null && w.hasPassword ? "为了账户安全,修改密码前会先验证身份。" : "设置登录密码前会先验证身份。") + " ", 1)];
672
+ }),
673
+ _: 1
674
+ }, 8, ["title"])) : C("", !0), s.value === "update" ? (h(), I(Et, {
675
+ key: 2,
676
+ size: d.size,
677
+ "require-old-password": !!((B = t(i)) != null && B.hasPassword),
678
+ onSubmit: e
679
+ }, null, 8, ["size", "require-old-password"])) : C("", !0), s.value === "verify" && ((K = t(i)) != null && K.email) ? (h(), I(ye, {
680
+ key: 3,
681
+ size: d.size,
682
+ email: t(i).email,
683
+ onNext: y
684
+ }, null, 8, ["size", "email"])) : C("", !0), s.value === "verify" && !((j = t(i)) != null && j.email) && ((V = t(i)) != null && V.phone) ? (h(), I(ge, {
685
+ key: 4,
686
+ size: d.size,
687
+ phone: t(i).phone,
688
+ onNext: y
689
+ }, null, 8, ["size", "phone"])) : C("", !0)], 64);
690
+ };
691
+ }
692
+ }), ce = {
693
+ datetime: 180,
694
+ name: 240,
695
+ /** 单按钮操作列(移除等) */
696
+ actionsSingle: 100
697
+ };
698
+ function ee(a) {
699
+ const i = new Uint8Array(a);
700
+ let n = "";
701
+ for (const s of i)
702
+ n += String.fromCharCode(s);
703
+ return btoa(n).replace(/\+/g, "-").replace(/\//g, "_").replace(/=/g, "");
704
+ }
705
+ function me(a) {
706
+ const i = a.replace(/-/g, "+").replace(/_/g, "/"), n = (4 - i.length % 4) % 4, l = i.padEnd(i.length + n, "="), s = atob(l), d = new ArrayBuffer(s.length), u = new Uint8Array(d);
707
+ for (let e = 0; e < s.length; e++)
708
+ u[e] = s.charCodeAt(e);
709
+ return d;
710
+ }
711
+ function we() {
712
+ return (window == null ? void 0 : window.PublicKeyCredential) !== void 0 && typeof window.PublicKeyCredential == "function";
713
+ }
714
+ function Ve(a) {
715
+ const {
716
+ id: i
717
+ } = a;
718
+ return {
719
+ ...a,
720
+ id: me(i),
721
+ transports: a.transports
722
+ };
723
+ }
724
+ function $e(a) {
725
+ return a === "localhost" || /^([a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,}$/i.test(a);
726
+ }
727
+ class W extends Error {
728
+ constructor({
729
+ message: i,
730
+ code: n,
731
+ cause: l,
732
+ name: s
733
+ }) {
734
+ super(i, {
735
+ cause: l
736
+ }), this.name = s ?? l.name, this.code = n;
737
+ }
738
+ }
739
+ function St({
740
+ error: a,
741
+ options: i
742
+ }) {
743
+ var l, s, d;
744
+ const {
745
+ publicKey: n
746
+ } = i;
747
+ if (!n)
748
+ throw Error("options was missing required publicKey property");
749
+ if (a.name === "AbortError") {
750
+ if (i.signal instanceof AbortSignal)
751
+ return new W({
752
+ message: "Registration ceremony was sent an abort signal",
753
+ code: "ERROR_CEREMONY_ABORTED",
754
+ cause: a
755
+ });
756
+ } else if (a.name === "ConstraintError") {
757
+ if (((l = n.authenticatorSelection) == null ? void 0 : l.requireResidentKey) === !0)
758
+ return new W({
759
+ message: "Discoverable credentials were required but no available authenticator supported it",
760
+ code: "ERROR_AUTHENTICATOR_MISSING_DISCOVERABLE_CREDENTIAL_SUPPORT",
761
+ cause: a
762
+ });
763
+ if (i.mediation === "conditional" && ((s = n.authenticatorSelection) == null ? void 0 : s.userVerification) === "required")
764
+ return new W({
765
+ message: "User verification was required during automatic registration but it could not be performed",
766
+ code: "ERROR_AUTO_REGISTER_USER_VERIFICATION_FAILURE",
767
+ cause: a
768
+ });
769
+ if (((d = n.authenticatorSelection) == null ? void 0 : d.userVerification) === "required")
770
+ return new W({
771
+ message: "User verification was required but no available authenticator supported it",
772
+ code: "ERROR_AUTHENTICATOR_MISSING_USER_VERIFICATION_SUPPORT",
773
+ cause: a
774
+ });
775
+ } else {
776
+ if (a.name === "InvalidStateError")
777
+ return new W({
778
+ message: "The authenticator was previously registered",
779
+ code: "ERROR_AUTHENTICATOR_PREVIOUSLY_REGISTERED",
780
+ cause: a
781
+ });
782
+ if (a.name === "NotAllowedError")
783
+ return new W({
784
+ message: a.message,
785
+ code: "ERROR_PASSTHROUGH_SEE_CAUSE_PROPERTY",
786
+ cause: a
787
+ });
788
+ if (a.name === "NotSupportedError")
789
+ return n.pubKeyCredParams.filter((e) => e.type === "public-key").length === 0 ? new W({
790
+ message: 'No entry in pubKeyCredParams was of type "public-key"',
791
+ code: "ERROR_MALFORMED_PUBKEYCREDPARAMS",
792
+ cause: a
793
+ }) : new W({
794
+ message: "No available authenticator supported any of the specified pubKeyCredParams algorithms",
795
+ code: "ERROR_AUTHENTICATOR_NO_SUPPORTED_PUBKEYCREDPARAMS_ALG",
796
+ cause: a
797
+ });
798
+ if (a.name === "SecurityError") {
799
+ const u = window.location.hostname;
800
+ if ($e(u)) {
801
+ if (n.rp.id !== u)
802
+ return new W({
803
+ message: `The RP ID "${n.rp.id}" is invalid for this domain`,
804
+ code: "ERROR_INVALID_RP_ID",
805
+ cause: a
806
+ });
807
+ } else return new W({
808
+ message: `${window.location.hostname} is an invalid domain`,
809
+ code: "ERROR_INVALID_DOMAIN",
810
+ cause: a
811
+ });
812
+ } else if (a.name === "TypeError") {
813
+ if (n.user.id.byteLength < 1 || n.user.id.byteLength > 64)
814
+ return new W({
815
+ message: "User ID was not between 1 and 64 characters",
816
+ code: "ERROR_INVALID_USER_ID_LENGTH",
817
+ cause: a
818
+ });
819
+ } else if (a.name === "UnknownError")
820
+ return new W({
821
+ message: "The authenticator was unable to process the specified options, or could not create a new credential",
822
+ code: "ERROR_AUTHENTICATOR_GENERAL_ERROR",
823
+ cause: a
824
+ });
825
+ }
826
+ return a;
827
+ }
828
+ class Vt {
829
+ createNewAbortSignal() {
830
+ if (this.controller) {
831
+ const n = new Error("Cancelling existing WebAuthn API call for new one");
832
+ n.name = "AbortError", this.controller.abort(n);
833
+ }
834
+ const i = new AbortController();
835
+ return this.controller = i, i.signal;
836
+ }
837
+ cancelCeremony() {
838
+ if (this.controller) {
839
+ const i = new Error("Manually cancelling existing WebAuthn API call");
840
+ i.name = "AbortError", this.controller.abort(i), this.controller = void 0;
841
+ }
842
+ }
843
+ }
844
+ const Te = new Vt(), $t = ["cross-platform", "platform"];
845
+ function Ue(a) {
846
+ if (a && !($t.indexOf(a) < 0))
847
+ return a;
848
+ }
849
+ async function Tt(a) {
850
+ var S;
851
+ const {
852
+ optionsJSON: i,
853
+ useAutoRegister: n = !1
854
+ } = a;
855
+ if (!we())
856
+ throw new Error("WebAuthn is not supported in this browser");
857
+ const l = {
858
+ ...i,
859
+ challenge: me(i.challenge),
860
+ user: {
861
+ ...i.user,
862
+ id: me(i.user.id)
863
+ },
864
+ excludeCredentials: (S = i.excludeCredentials) == null ? void 0 : S.map(Ve)
865
+ }, s = {};
866
+ n && (s.mediation = "conditional"), s.publicKey = l, s.signal = Te.createNewAbortSignal();
867
+ let d;
868
+ try {
869
+ d = await navigator.credentials.create(s);
870
+ } catch (R) {
871
+ throw St({
872
+ error: R,
873
+ options: s
874
+ });
875
+ }
876
+ if (!d)
877
+ throw new Error("Registration was not completed");
878
+ const {
879
+ id: u,
880
+ rawId: e,
881
+ response: y,
882
+ type: g
883
+ } = d;
884
+ let f;
885
+ typeof y.getTransports == "function" && (f = y.getTransports());
886
+ let v;
887
+ if (typeof y.getPublicKeyAlgorithm == "function")
888
+ try {
889
+ v = y.getPublicKeyAlgorithm();
890
+ } catch (R) {
891
+ be("getPublicKeyAlgorithm()", R);
892
+ }
893
+ let r;
894
+ if (typeof y.getPublicKey == "function")
895
+ try {
896
+ const R = y.getPublicKey();
897
+ R !== null && (r = ee(R));
898
+ } catch (R) {
899
+ be("getPublicKey()", R);
900
+ }
901
+ let m;
902
+ if (typeof y.getAuthenticatorData == "function")
903
+ try {
904
+ m = ee(y.getAuthenticatorData());
905
+ } catch (R) {
906
+ be("getAuthenticatorData()", R);
907
+ }
908
+ return {
909
+ id: u,
910
+ rawId: ee(e),
911
+ response: {
912
+ attestationObject: ee(y.attestationObject),
913
+ clientDataJSON: ee(y.clientDataJSON),
914
+ transports: f,
915
+ publicKeyAlgorithm: v,
916
+ publicKey: r,
917
+ authenticatorData: m
918
+ },
919
+ type: g,
920
+ clientExtensionResults: d.getClientExtensionResults(),
921
+ authenticatorAttachment: Ue(d.authenticatorAttachment)
922
+ };
923
+ }
924
+ function be(a, i) {
925
+ console.warn(`The browser extension that intercepted this WebAuthn API call incorrectly implemented ${a}. You should report this error to them.
926
+ `, i);
927
+ }
928
+ function Ut() {
929
+ if (!we())
930
+ return new Promise((i) => i(!1));
931
+ const a = window.PublicKeyCredential;
932
+ return a.isConditionalMediationAvailable === void 0 ? new Promise((i) => i(!1)) : a.isConditionalMediationAvailable();
933
+ }
934
+ function xt({
935
+ error: a,
936
+ options: i
937
+ }) {
938
+ const {
939
+ publicKey: n
940
+ } = i;
941
+ if (!n)
942
+ throw Error("options was missing required publicKey property");
943
+ if (a.name === "AbortError") {
944
+ if (i.signal instanceof AbortSignal)
945
+ return new W({
946
+ message: "Authentication ceremony was sent an abort signal",
947
+ code: "ERROR_CEREMONY_ABORTED",
948
+ cause: a
949
+ });
950
+ } else {
951
+ if (a.name === "NotAllowedError")
952
+ return new W({
953
+ message: a.message,
954
+ code: "ERROR_PASSTHROUGH_SEE_CAUSE_PROPERTY",
955
+ cause: a
956
+ });
957
+ if (a.name === "SecurityError") {
958
+ const l = window.location.hostname;
959
+ if ($e(l)) {
960
+ if (n.rpId !== l)
961
+ return new W({
962
+ message: `The RP ID "${n.rpId}" is invalid for this domain`,
963
+ code: "ERROR_INVALID_RP_ID",
964
+ cause: a
965
+ });
966
+ } else return new W({
967
+ message: `${window.location.hostname} is an invalid domain`,
968
+ code: "ERROR_INVALID_DOMAIN",
969
+ cause: a
970
+ });
971
+ } else if (a.name === "UnknownError")
972
+ return new W({
973
+ message: "The authenticator was unable to process the specified options, or could not create a new assertion signature",
974
+ code: "ERROR_AUTHENTICATOR_GENERAL_ERROR",
975
+ cause: a
976
+ });
977
+ }
978
+ return a;
979
+ }
980
+ async function Ot(a) {
981
+ var m, S;
982
+ const {
983
+ optionsJSON: i,
984
+ useBrowserAutofill: n = !1,
985
+ verifyBrowserAutofillInput: l = !0
986
+ } = a;
987
+ if (!we())
988
+ throw new Error("WebAuthn is not supported in this browser");
989
+ let s;
990
+ ((m = i.allowCredentials) == null ? void 0 : m.length) !== 0 && (s = (S = i.allowCredentials) == null ? void 0 : S.map(Ve));
991
+ const d = {
992
+ ...i,
993
+ challenge: me(i.challenge),
994
+ allowCredentials: s
995
+ }, u = {};
996
+ if (n) {
997
+ if (!await Ut())
998
+ throw Error("Browser does not support WebAuthn autofill");
999
+ if (document.querySelectorAll("input[autocomplete$='webauthn']").length < 1 && l)
1000
+ throw Error('No <input> with "webauthn" as the only or last value in its `autocomplete` attribute was detected');
1001
+ u.mediation = "conditional", d.allowCredentials = [];
1002
+ }
1003
+ u.publicKey = d, u.signal = Te.createNewAbortSignal();
1004
+ let e;
1005
+ try {
1006
+ e = await navigator.credentials.get(u);
1007
+ } catch (R) {
1008
+ throw xt({
1009
+ error: R,
1010
+ options: u
1011
+ });
1012
+ }
1013
+ if (!e)
1014
+ throw new Error("Authentication was not completed");
1015
+ const {
1016
+ id: y,
1017
+ rawId: g,
1018
+ response: f,
1019
+ type: v
1020
+ } = e;
1021
+ let r;
1022
+ return f.userHandle && (r = ee(f.userHandle)), {
1023
+ id: y,
1024
+ rawId: ee(g),
1025
+ response: {
1026
+ authenticatorData: ee(f.authenticatorData),
1027
+ clientDataJSON: ee(f.clientDataJSON),
1028
+ signature: ee(f.signature),
1029
+ userHandle: r
1030
+ },
1031
+ type: v,
1032
+ clientExtensionResults: e.getClientExtensionResults(),
1033
+ authenticatorAttachment: Ue(e.authenticatorAttachment)
1034
+ };
1035
+ }
1036
+ function Nt() {
1037
+ return se() === null;
1038
+ }
1039
+ function se() {
1040
+ return typeof window > "u" ? "非浏览器环境,无法使用 Passkey" : window.isSecureContext ? we() ? null : "当前浏览器不支持 Passkey,请使用 Chrome / Safari / Edge" : "Passkey 需要在安全环境下使用(HTTPS,或 localhost)";
1041
+ }
1042
+ function Dt(a) {
1043
+ return a instanceof Error ? a.name === "NotAllowedError" ? "已取消操作" : a.message.includes("WebAuthn is not supported") ? se() || "当前环境不支持 Passkey" : a.name === "NotSupportedError" ? "当前设备无可用认证器" : a.message || "Passkey 操作失败" : "Passkey 操作失败";
1044
+ }
1045
+ function Bt() {
1046
+ const a = navigator.userAgent;
1047
+ return a.includes("Chrome") ? "Chrome" : a.includes("Safari") ? "Safari" : a.includes("Firefox") ? "Firefox" : a.includes("Edge") ? "Edge" : "Browser";
1048
+ }
1049
+ function qt() {
1050
+ return `${Bt()} - ${(/* @__PURE__ */ new Date()).toLocaleDateString()}`;
1051
+ }
1052
+ function Lt() {
1053
+ const a = z(!1), i = Nt();
1054
+ async function n(d) {
1055
+ const u = se();
1056
+ if (u)
1057
+ throw new Error(u);
1058
+ a.value = !0;
1059
+ try {
1060
+ const {
1061
+ data: e,
1062
+ error: y
1063
+ } = await x().auth.passkey.auth.options.post({
1064
+ email: (d == null ? void 0 : d.trim()) || void 0
1065
+ });
1066
+ if (y || !e)
1067
+ return null;
1068
+ const g = await Ot({
1069
+ optionsJSON: e
1070
+ }), {
1071
+ data: f,
1072
+ error: v
1073
+ } = await x().auth.passkey.auth.verify.post({
1074
+ response: g
1075
+ });
1076
+ return v || !f ? null : f;
1077
+ } finally {
1078
+ a.value = !1;
1079
+ }
1080
+ }
1081
+ async function l(d) {
1082
+ const u = se();
1083
+ if (u)
1084
+ throw new Error(u);
1085
+ a.value = !0;
1086
+ try {
1087
+ const {
1088
+ data: e,
1089
+ error: y
1090
+ } = await x().auth.passkey.register.options.post();
1091
+ if (y || !e)
1092
+ return !1;
1093
+ const g = await Tt({
1094
+ optionsJSON: e
1095
+ }), {
1096
+ error: f
1097
+ } = await x().auth.passkey.register.verify.post({
1098
+ response: g,
1099
+ name: (d == null ? void 0 : d.trim()) || qt()
1100
+ });
1101
+ return !f;
1102
+ } finally {
1103
+ a.value = !1;
1104
+ }
1105
+ }
1106
+ function s(d) {
1107
+ return Dt(d);
1108
+ }
1109
+ return {
1110
+ loading: a,
1111
+ supported: i,
1112
+ loginWithPasskey: n,
1113
+ registerPasskey: l,
1114
+ formatError: s,
1115
+ getPasskeyEnvironmentIssue: se
1116
+ };
1117
+ }
1118
+ const Mt = {
1119
+ class: "passkey-binding"
1120
+ }, Kt = {
1121
+ key: 0,
1122
+ class: "passkey-binding__issue"
1123
+ }, Ft = {
1124
+ key: 4,
1125
+ class: "passkey-binding__toolbar"
1126
+ }, Ht = /* @__PURE__ */ Y({
1127
+ __name: "AuthkitPasskeyBinding",
1128
+ props: {
1129
+ size: {
1130
+ type: String,
1131
+ required: !0
1132
+ }
1133
+ },
1134
+ setup(a) {
1135
+ const i = a, {
1136
+ userProfile: n
1137
+ } = ae(), l = z(!1), s = z(!1), d = z([]), u = se(), {
1138
+ registerPasskey: e,
1139
+ formatError: y
1140
+ } = Lt(), g = z(""), f = z(!1), v = z(), r = $(() => {
1141
+ var _, P;
1142
+ return !!((_ = n.value) != null && _.email || (P = n.value) != null && P.phone);
1143
+ }), m = $(() => r.value && !v.value), S = [{
1144
+ title: "通行密钥",
1145
+ dataIndex: "name",
1146
+ minWidth: ce.name,
1147
+ ellipsis: !0,
1148
+ tooltip: !0
1149
+ }, {
1150
+ title: "上次使用",
1151
+ dataIndex: "lastUsedAt",
1152
+ slotName: "lastUsedAt",
1153
+ minWidth: ce.datetime,
1154
+ ellipsis: !0,
1155
+ tooltip: !0
1156
+ }, {
1157
+ title: "添加时间",
1158
+ dataIndex: "createdAt",
1159
+ slotName: "createdAt",
1160
+ minWidth: ce.datetime,
1161
+ ellipsis: !0,
1162
+ tooltip: !0
1163
+ }, {
1164
+ title: "操作",
1165
+ slotName: "actions",
1166
+ width: ce.actionsSingle,
1167
+ fixed: "right",
1168
+ cellClassName: "passkey-actions-cell"
1169
+ }];
1170
+ async function R() {
1171
+ l.value = !0;
1172
+ const {
1173
+ data: _,
1174
+ error: P
1175
+ } = await x().auth.passkey.list.post();
1176
+ if (l.value = !1, P || !_) {
1177
+ d.value = [];
1178
+ return;
1179
+ }
1180
+ d.value = _.list;
1181
+ }
1182
+ async function B() {
1183
+ s.value = !0;
1184
+ try {
1185
+ if (!await e())
1186
+ return;
1187
+ G.success("Passkey 添加成功"), await R();
1188
+ } catch (_) {
1189
+ G.error(y(_));
1190
+ } finally {
1191
+ s.value = !1;
1192
+ }
1193
+ }
1194
+ function K(_) {
1195
+ var P, N, F;
1196
+ if (g.value = _, f.value = !1, !r.value) {
1197
+ q();
1198
+ return;
1199
+ }
1200
+ if ((P = n.value) != null && P.email && ((N = n.value) != null && N.phone)) {
1201
+ v.value = void 0;
1202
+ return;
1203
+ }
1204
+ v.value = (F = n.value) != null && F.email ? "email" : "phone";
1205
+ }
1206
+ function j(_) {
1207
+ v.value = _;
1208
+ }
1209
+ function V() {
1210
+ f.value = !0, q();
1211
+ }
1212
+ function w() {
1213
+ g.value = "", f.value = !1, v.value = void 0;
1214
+ }
1215
+ async function q() {
1216
+ if (!g.value)
1217
+ return;
1218
+ const {
1219
+ error: _
1220
+ } = await x().auth.passkey.delete.post({
1221
+ credentialId: g.value
1222
+ });
1223
+ _ || (G.success("已移除"), await R()), w();
1224
+ }
1225
+ return ue(() => {
1226
+ R();
1227
+ }), (_, P) => {
1228
+ var N, F;
1229
+ return h(), M("div", Mt, [p(t(J), {
1230
+ type: "info",
1231
+ style: {
1232
+ "margin-bottom": "16px"
1233
+ }
1234
+ }, {
1235
+ default: o(() => [...P[2] || (P[2] = [k(" Passkey 使用设备生物识别(指纹 / 面容)登录,绑定后可在登录页一键验证身份。 ", -1)])]),
1236
+ _: 1
1237
+ }), t(u) ? (h(), M("div", Kt, U(t(u)), 1)) : C("", !0), g.value && !f.value ? (h(), I(t(J), {
1238
+ key: 1,
1239
+ type: "warning",
1240
+ title: "移除前验证身份"
1241
+ }, qe({
1242
+ default: o(() => [P[6] || (P[6] = k(" 移除 Passkey 前请先完成身份验证。 ", -1))]),
1243
+ _: 2
1244
+ }, [m.value ? {
1245
+ name: "action",
1246
+ fn: o(() => [p(t(pe), null, {
1247
+ default: o(() => {
1248
+ var D, Z;
1249
+ return [(D = t(n)) != null && D.email ? (h(), I(t(T), {
1250
+ key: 0,
1251
+ size: i.size,
1252
+ type: "primary",
1253
+ onClick: P[0] || (P[0] = (ne) => j("email"))
1254
+ }, {
1255
+ default: o(() => [...P[3] || (P[3] = [k(" 邮箱验证 ", -1)])]),
1256
+ _: 1
1257
+ }, 8, ["size"])) : C("", !0), (Z = t(n)) != null && Z.phone ? (h(), I(t(T), {
1258
+ key: 1,
1259
+ size: i.size,
1260
+ type: "primary",
1261
+ onClick: P[1] || (P[1] = (ne) => j("phone"))
1262
+ }, {
1263
+ default: o(() => [...P[4] || (P[4] = [k(" 手机验证 ", -1)])]),
1264
+ _: 1
1265
+ }, 8, ["size"])) : C("", !0), p(t(T), {
1266
+ size: i.size,
1267
+ onClick: w
1268
+ }, {
1269
+ default: o(() => [...P[5] || (P[5] = [k("取消", -1)])]),
1270
+ _: 1
1271
+ }, 8, ["size"])];
1272
+ }),
1273
+ _: 1
1274
+ })]),
1275
+ key: "0"
1276
+ } : void 0]), 1024)) : C("", !0), g.value && v.value === "email" && ((N = t(n)) != null && N.email) ? (h(), I(ye, {
1277
+ key: 2,
1278
+ size: i.size,
1279
+ email: t(n).email,
1280
+ onNext: V
1281
+ }, null, 8, ["size", "email"])) : C("", !0), g.value && v.value === "phone" && ((F = t(n)) != null && F.phone) ? (h(), I(ge, {
1282
+ key: 3,
1283
+ size: i.size,
1284
+ phone: t(n).phone,
1285
+ onNext: V
1286
+ }, null, 8, ["size", "phone"])) : C("", !0), g.value ? C("", !0) : (h(), M("div", Ft, [p(t(T), {
1287
+ type: "primary",
1288
+ size: i.size,
1289
+ loading: s.value,
1290
+ disabled: !!t(u),
1291
+ onClick: B
1292
+ }, {
1293
+ default: o(() => [...P[7] || (P[7] = [k(" 添加 Passkey ", -1)])]),
1294
+ _: 1
1295
+ }, 8, ["size", "loading", "disabled"])])), g.value ? C("", !0) : (h(), I(je, {
1296
+ key: 5,
1297
+ columns: S,
1298
+ data: d.value,
1299
+ loading: l.value,
1300
+ pagination: !1,
1301
+ bordered: !1,
1302
+ "row-key": "credentialId"
1303
+ }, {
1304
+ lastUsedAt: o(({
1305
+ record: D
1306
+ }) => [k(U(D.lastUsedAt || "尚未使用"), 1)]),
1307
+ createdAt: o(({
1308
+ record: D
1309
+ }) => [k(U(D.createdAt || "-"), 1)]),
1310
+ actions: o(({
1311
+ record: D
1312
+ }) => [p(t(Ke), {
1313
+ content: "确定移除此 Passkey?移除后将无法使用该设备登录",
1314
+ onOk: (Z) => K(D.credentialId)
1315
+ }, {
1316
+ default: o(() => [p(t(T), {
1317
+ type: "text",
1318
+ status: "danger",
1319
+ size: i.size
1320
+ }, {
1321
+ default: o(() => [...P[8] || (P[8] = [k("移除", -1)])]),
1322
+ _: 1
1323
+ }, 8, ["size"])]),
1324
+ _: 1
1325
+ }, 8, ["onOk"])]),
1326
+ _: 1
1327
+ }, 8, ["data", "loading"]))]);
1328
+ };
1329
+ }
1330
+ }), Wt = /* @__PURE__ */ X(Ht, [["__scopeId", "data-v-08d3a331"]]), Gt = {
1331
+ class: "BindEmail"
1332
+ }, Jt = {
1333
+ class: "content"
1334
+ }, Yt = {
1335
+ class: "sendVerifyCodeItem"
1336
+ }, jt = {
1337
+ class: "handle"
1338
+ }, Qt = {
1339
+ key: 0,
1340
+ class: "skip"
1341
+ }, Xt = /* @__PURE__ */ Y({
1342
+ __name: "AuthkitBindEmail",
1343
+ props: {
1344
+ size: {
1345
+ type: String,
1346
+ required: !0
1347
+ },
1348
+ loading: {
1349
+ type: Boolean,
1350
+ required: !0,
1351
+ default: () => !1
1352
+ },
1353
+ /** 是否显示跳过按钮 */
1354
+ showSkip: {
1355
+ type: Boolean,
1356
+ default: !1
1357
+ },
1358
+ title: {
1359
+ type: String,
1360
+ default: "绑定邮箱"
1361
+ },
1362
+ subtitle: {
1363
+ type: String,
1364
+ default: "请绑定邮箱以完成账号设置,绑定后可使用邮箱登录"
1365
+ },
1366
+ submitText: {
1367
+ type: String,
1368
+ default: "绑定邮箱"
1369
+ }
1370
+ },
1371
+ emits: ["submit", "skip"],
1372
+ setup(a, {
1373
+ emit: i
1374
+ }) {
1375
+ const n = i, l = a, s = z(), d = z(!1), u = z(), e = z({
1376
+ email: void 0,
1377
+ userToken: void 0,
1378
+ emailVerifyId: void 0
1379
+ });
1380
+ async function y() {
1381
+ if (!await u.value.validateField(["email"])) {
1382
+ d.value = !0;
1383
+ const r = await x().auth.verify.email.retry.post({
1384
+ email: e.value.email,
1385
+ purpose: "bindEmail"
1386
+ });
1387
+ d.value = !1, r.data && (e.value.emailVerifyId = r.data.emailVerifyId), he(s.value, r);
1388
+ }
1389
+ }
1390
+ async function g() {
1391
+ u.value.validate().then((v) => {
1392
+ v || n("submit", {
1393
+ email: e.value.email,
1394
+ userToken: e.value.userToken,
1395
+ emailVerifyId: e.value.emailVerifyId
1396
+ });
1397
+ });
1398
+ }
1399
+ function f() {
1400
+ n("skip");
1401
+ }
1402
+ return (v, r) => (h(), M("div", Gt, [p(t(J), {
1403
+ type: "info",
1404
+ title: l.title
1405
+ }, {
1406
+ default: o(() => [k(U(l.subtitle), 1)]),
1407
+ _: 1
1408
+ }, 8, ["title"]), A("div", Jt, [p(t(le), {
1409
+ ref_key: "formRef",
1410
+ ref: u,
1411
+ model: e.value,
1412
+ size: l.size,
1413
+ "auto-label-width": ""
1414
+ }, {
1415
+ default: o(() => [p(t(L), {
1416
+ field: "email",
1417
+ label: "邮箱",
1418
+ "hide-label": "",
1419
+ rules: [{
1420
+ required: !0,
1421
+ message: "请输入邮箱"
1422
+ }, {
1423
+ type: "email",
1424
+ message: "请输入有效的邮箱"
1425
+ }]
1426
+ }, {
1427
+ default: o(() => [p(t(Q), {
1428
+ modelValue: e.value.email,
1429
+ "onUpdate:modelValue": r[0] || (r[0] = (m) => e.value.email = m),
1430
+ placeholder: "请输入邮箱",
1431
+ autocomplete: "email",
1432
+ type: "email"
1433
+ }, null, 8, ["modelValue"])]),
1434
+ _: 1
1435
+ }), p(t(L), {
1436
+ field: "userToken",
1437
+ label: "验证码",
1438
+ "hide-label": "",
1439
+ rules: [{
1440
+ required: !0,
1441
+ message: "请输入验证码"
1442
+ }]
1443
+ }, {
1444
+ default: o(() => [A("div", Yt, [p(t(Q), {
1445
+ modelValue: e.value.userToken,
1446
+ "onUpdate:modelValue": r[1] || (r[1] = (m) => e.value.userToken = m),
1447
+ placeholder: "请输入验证码",
1448
+ autocomplete: "one-time-code"
1449
+ }, null, 8, ["modelValue"]), p(ve, {
1450
+ ref_key: "SendVerifyCodeRef",
1451
+ ref: s,
1452
+ size: l.size,
1453
+ loading: d.value,
1454
+ style: {
1455
+ "margin-left": "10px"
1456
+ },
1457
+ onSend: y
1458
+ }, null, 8, ["size", "loading"])])]),
1459
+ _: 1
1460
+ }), A("div", jt, [p(t(T), {
1461
+ type: "primary",
1462
+ loading: l.loading,
1463
+ long: "",
1464
+ size: l.size,
1465
+ onClick: g
1466
+ }, {
1467
+ default: o(() => [k(U(l.submitText), 1)]),
1468
+ _: 1
1469
+ }, 8, ["loading", "size"])])]),
1470
+ _: 1
1471
+ }, 8, ["model", "size"])]), l.showSkip ? (h(), M("div", Qt, [p(t(Ie), {
1472
+ onClick: f
1473
+ }, {
1474
+ default: o(() => [...r[2] || (r[2] = [k("稍后绑定", -1)])]),
1475
+ _: 1
1476
+ })])) : C("", !0)]));
1477
+ }
1478
+ }), Zt = /* @__PURE__ */ X(Xt, [["__scopeId", "data-v-00ac3b6a"]]), ei = /* @__PURE__ */ Y({
1479
+ __name: "AuthkitEmailBinding",
1480
+ props: {
1481
+ size: {
1482
+ type: String,
1483
+ required: !0
1484
+ }
1485
+ },
1486
+ setup(a) {
1487
+ const {
1488
+ userProfile: i,
1489
+ loading: n,
1490
+ fetchUserProfile: l
1491
+ } = ae(), s = z("hidden"), d = z(!1), u = a, e = $(() => {
1492
+ var v;
1493
+ return !!((v = i.value) != null && v.email) && d.value;
1494
+ });
1495
+ function y(v) {
1496
+ s.value = v;
1497
+ }
1498
+ async function g(v) {
1499
+ n.value = !0;
1500
+ const r = e.value ? x().auth.users.update.myEmail.post({
1501
+ email: v.email,
1502
+ userToken: v.userToken,
1503
+ emailVerifyId: v.emailVerifyId
1504
+ }) : x().auth.auth.bind.email.post({
1505
+ email: v.email,
1506
+ userToken: v.userToken,
1507
+ emailVerifyId: v.emailVerifyId
1508
+ }), {
1509
+ error: m
1510
+ } = await r;
1511
+ n.value = !1, m || (G.success(e.value ? "更改成功" : "绑定成功"), s.value = "hidden", d.value = !1, l());
1512
+ }
1513
+ function f() {
1514
+ d.value = !0, s.value = "update";
1515
+ }
1516
+ return ue(() => {
1517
+ i.value || l();
1518
+ }), (v, r) => {
1519
+ var m, S, R;
1520
+ return h(), M(ie, null, [(m = t(i)) != null && m.email && s.value === "hidden" ? (h(), I(t(J), {
1521
+ key: 0,
1522
+ title: "更改邮箱"
1523
+ }, {
1524
+ action: o(() => [p(t(T), {
1525
+ size: u.size,
1526
+ type: "primary",
1527
+ onClick: r[0] || (r[0] = (B) => y("verify"))
1528
+ }, {
1529
+ default: o(() => [...r[1] || (r[1] = [k("更改邮箱", -1)])]),
1530
+ _: 1
1531
+ }, 8, ["size"])]),
1532
+ default: o(() => [k(U(`您绑定的邮箱为 ${t(Ce)(t(i).email)}`) + " ", 1)]),
1533
+ _: 1
1534
+ })) : C("", !0), !((S = t(i)) != null && S.email) || s.value === "update" ? (h(), I(Zt, {
1535
+ key: 1,
1536
+ loading: t(n),
1537
+ size: u.size,
1538
+ title: e.value ? "更改邮箱" : "绑定邮箱",
1539
+ subtitle: e.value ? "请输入新的邮箱并完成验证" : "请绑定邮箱以完成账号设置,绑定后可使用邮箱登录",
1540
+ "submit-text": e.value ? "更改邮箱" : "绑定邮箱",
1541
+ onSubmit: g
1542
+ }, null, 8, ["loading", "size", "title", "subtitle", "submit-text"])) : C("", !0), s.value === "verify" ? (h(), I(ye, {
1543
+ key: 2,
1544
+ size: u.size,
1545
+ email: (R = t(i)) == null ? void 0 : R.email,
1546
+ onNext: f
1547
+ }, null, 8, ["size", "email"])) : C("", !0)], 64);
1548
+ };
1549
+ }
1550
+ }), ti = {
1551
+ class: "BindPhone"
1552
+ }, ii = {
1553
+ class: "header"
1554
+ }, ai = {
1555
+ class: "title"
1556
+ }, ni = {
1557
+ class: "subtitle"
1558
+ }, oi = {
1559
+ class: "content"
1560
+ }, si = {
1561
+ class: "sendVerifyCodeItem"
1562
+ }, li = {
1563
+ class: "handle"
1564
+ }, ri = {
1565
+ key: 0,
1566
+ class: "skip"
1567
+ }, ui = /* @__PURE__ */ Y({
1568
+ __name: "AuthkitBindPhone",
1569
+ props: {
1570
+ size: {
1571
+ type: String,
1572
+ required: !0
1573
+ },
1574
+ loading: {
1575
+ type: Boolean,
1576
+ required: !0,
1577
+ default: () => !1
1578
+ },
1579
+ showSkip: {
1580
+ type: Boolean,
1581
+ default: !1
1582
+ },
1583
+ title: {
1584
+ type: String,
1585
+ default: "绑定手机号"
1586
+ },
1587
+ subtitle: {
1588
+ type: String,
1589
+ default: "请绑定手机号以完成账号设置"
1590
+ },
1591
+ submitText: {
1592
+ type: String,
1593
+ default: "绑定手机号"
1594
+ }
1595
+ },
1596
+ emits: ["submit", "skip"],
1597
+ setup(a, {
1598
+ emit: i
1599
+ }) {
1600
+ const n = i, l = a, s = z(), d = z(!1), u = z(), e = z({
1601
+ phone: void 0,
1602
+ code: void 0
1603
+ });
1604
+ async function y() {
1605
+ if (!await u.value.validateField(["phone"])) {
1606
+ d.value = !0;
1607
+ const r = await x().auth.verify.sms.send.post({
1608
+ phone: e.value.phone,
1609
+ purpose: "bindPhone"
1610
+ });
1611
+ d.value = !1, he(s.value, r);
1612
+ }
1613
+ }
1614
+ async function g() {
1615
+ u.value.validate().then((v) => {
1616
+ v || n("submit", {
1617
+ phone: e.value.phone,
1618
+ code: e.value.code
1619
+ });
1620
+ });
1621
+ }
1622
+ function f() {
1623
+ n("skip");
1624
+ }
1625
+ return (v, r) => (h(), M("div", ti, [A("div", ii, [A("h3", ai, U(l.title), 1), A("p", ni, U(l.subtitle), 1)]), A("div", oi, [p(t(le), {
1626
+ ref_key: "formRef",
1627
+ ref: u,
1628
+ model: e.value,
1629
+ size: l.size,
1630
+ "auto-label-width": ""
1631
+ }, {
1632
+ default: o(() => [p(t(L), {
1633
+ field: "phone",
1634
+ label: "手机号",
1635
+ "hide-label": "",
1636
+ rules: [{
1637
+ required: !0,
1638
+ message: "请输入手机号"
1639
+ }, {
1640
+ match: /^1[3-9]\d{9}$/,
1641
+ message: "请输入有效的手机号"
1642
+ }]
1643
+ }, {
1644
+ default: o(() => [p(t(Q), {
1645
+ modelValue: e.value.phone,
1646
+ "onUpdate:modelValue": r[0] || (r[0] = (m) => e.value.phone = m),
1647
+ placeholder: "请输入手机号",
1648
+ autocomplete: "tel",
1649
+ type: "tel"
1650
+ }, null, 8, ["modelValue"])]),
1651
+ _: 1
1652
+ }), p(t(L), {
1653
+ field: "code",
1654
+ label: "验证码",
1655
+ "hide-label": "",
1656
+ rules: [{
1657
+ required: !0,
1658
+ message: "请输入验证码"
1659
+ }]
1660
+ }, {
1661
+ default: o(() => [A("div", si, [p(t(Q), {
1662
+ modelValue: e.value.code,
1663
+ "onUpdate:modelValue": r[1] || (r[1] = (m) => e.value.code = m),
1664
+ placeholder: "请输入验证码",
1665
+ autocomplete: "one-time-code"
1666
+ }, null, 8, ["modelValue"]), p(ve, {
1667
+ ref_key: "SendVerifyCodeRef",
1668
+ ref: s,
1669
+ size: l.size,
1670
+ loading: d.value,
1671
+ style: {
1672
+ "margin-left": "10px"
1673
+ },
1674
+ onSend: y
1675
+ }, null, 8, ["size", "loading"])])]),
1676
+ _: 1
1677
+ }), A("div", li, [p(t(T), {
1678
+ type: "primary",
1679
+ loading: l.loading,
1680
+ long: "",
1681
+ size: l.size,
1682
+ onClick: g
1683
+ }, {
1684
+ default: o(() => [k(U(l.submitText), 1)]),
1685
+ _: 1
1686
+ }, 8, ["loading", "size"])])]),
1687
+ _: 1
1688
+ }, 8, ["model", "size"])]), l.showSkip ? (h(), M("div", ri, [p(t(Ie), {
1689
+ onClick: f
1690
+ }, {
1691
+ default: o(() => [...r[2] || (r[2] = [k("稍后绑定", -1)])]),
1692
+ _: 1
1693
+ })])) : C("", !0)]));
1694
+ }
1695
+ }), di = /* @__PURE__ */ X(ui, [["__scopeId", "data-v-1db8897d"]]), ci = /* @__PURE__ */ Y({
1696
+ __name: "AuthkitPhoneBinding",
1697
+ props: {
1698
+ size: {
1699
+ type: String,
1700
+ required: !0
1701
+ }
1702
+ },
1703
+ setup(a) {
1704
+ const {
1705
+ userProfile: i,
1706
+ loading: n,
1707
+ fetchUserProfile: l
1708
+ } = ae(), s = z("hidden"), d = z(!1), u = a, e = $(() => {
1709
+ var m;
1710
+ const r = ((m = i.value) == null ? void 0 : m.phone) || "";
1711
+ return r.length < 7 ? r : `${r.slice(0, 3)}****${r.slice(-4)}`;
1712
+ }), y = $(() => {
1713
+ var r;
1714
+ return !!((r = i.value) != null && r.phone) && d.value;
1715
+ });
1716
+ function g(r) {
1717
+ var m;
1718
+ s.value = r, r === "update" && !((m = i.value) != null && m.phone) && (d.value = !1);
1719
+ }
1720
+ async function f(r) {
1721
+ n.value = !0;
1722
+ const m = y.value ? x().auth.users.update.myPhone.post({
1723
+ phone: r.phone,
1724
+ code: r.code
1725
+ }) : x().auth.auth.bind.phone.post({
1726
+ phone: r.phone,
1727
+ code: r.code
1728
+ }), {
1729
+ error: S
1730
+ } = await m;
1731
+ n.value = !1, S || (G.success(y.value ? "更改成功" : "绑定成功"), s.value = "hidden", d.value = !1, l());
1732
+ }
1733
+ function v() {
1734
+ d.value = !0, s.value = "update";
1735
+ }
1736
+ return ue(() => {
1737
+ i.value || l();
1738
+ }), (r, m) => {
1739
+ var S, R, B;
1740
+ return h(), M(ie, null, [!((S = t(i)) != null && S.phone) && s.value === "hidden" ? (h(), I(t(J), {
1741
+ key: 0,
1742
+ title: "绑定手机号"
1743
+ }, {
1744
+ action: o(() => [p(t(T), {
1745
+ size: u.size,
1746
+ type: "primary",
1747
+ onClick: m[0] || (m[0] = (K) => g("update"))
1748
+ }, {
1749
+ default: o(() => [...m[2] || (m[2] = [k("绑定手机号", -1)])]),
1750
+ _: 1
1751
+ }, 8, ["size"])]),
1752
+ default: o(() => [m[3] || (m[3] = k(" 您还未绑定手机号,请点击绑定手机号。 ", -1))]),
1753
+ _: 1
1754
+ })) : C("", !0), (R = t(i)) != null && R.phone && s.value === "hidden" ? (h(), I(t(J), {
1755
+ key: 1,
1756
+ title: "已绑定手机号"
1757
+ }, {
1758
+ action: o(() => [p(t(T), {
1759
+ size: u.size,
1760
+ type: "primary",
1761
+ onClick: m[1] || (m[1] = (K) => g("verify"))
1762
+ }, {
1763
+ default: o(() => [...m[4] || (m[4] = [k("更改手机号", -1)])]),
1764
+ _: 1
1765
+ }, 8, ["size"])]),
1766
+ default: o(() => [k(U(`您绑定的手机号为 ${e.value}`) + " ", 1)]),
1767
+ _: 1
1768
+ })) : C("", !0), s.value === "update" ? (h(), I(di, {
1769
+ key: 2,
1770
+ loading: t(n),
1771
+ size: u.size,
1772
+ title: y.value ? "更改手机号" : "绑定手机号",
1773
+ subtitle: y.value ? "请输入新的手机号并完成短信验证" : "请绑定手机号以完成账号设置",
1774
+ "submit-text": y.value ? "更改手机号" : "绑定手机号",
1775
+ onSubmit: f
1776
+ }, null, 8, ["loading", "size", "title", "subtitle", "submit-text"])) : C("", !0), s.value === "verify" ? (h(), I(ge, {
1777
+ key: 3,
1778
+ size: u.size,
1779
+ phone: ((B = t(i)) == null ? void 0 : B.phone) || "",
1780
+ onNext: v
1781
+ }, null, 8, ["size", "phone"])) : C("", !0)], 64);
1782
+ };
1783
+ }
1784
+ });
1785
+ function fi() {
1786
+ var i;
1787
+ return typeof window > "u" ? "" : ((i = new URLSearchParams(window.location.search).get("inviteCode")) == null ? void 0 : i.trim()) || "";
1788
+ }
1789
+ function xe() {
1790
+ const {
1791
+ oauthCallbackUrl: a
1792
+ } = Re().config;
1793
+ return a || `${window.location.origin}/`;
1794
+ }
1795
+ function pi() {
1796
+ const a = window.location.pathname + window.location.search + window.location.hash, i = new URLSearchParams(window.location.search);
1797
+ !i.has("token") && !i.has("error") && !i.has("bindSuccess") && sessionStorage.setItem("auth_redirect", a);
1798
+ }
1799
+ async function de(a, i) {
1800
+ const n = Re().config.appId;
1801
+ if (!n) {
1802
+ console.error(`${a} OAuth 失败: appId 未配置`);
1803
+ return;
1804
+ }
1805
+ const l = xe(), s = (i == null ? void 0 : i.inviteCode) || fi() || void 0, d = {
1806
+ appId: n,
1807
+ inviteCode: s,
1808
+ redirectUri: l,
1809
+ acceptedTerms: (i == null ? void 0 : i.acceptedTerms) === !0 ? !0 : void 0
1810
+ };
1811
+ pi();
1812
+ const u = {
1813
+ github: () => x().auth.oauth.github.login.get(d),
1814
+ google: () => x().auth.oauth.google.login.get(d),
1815
+ microsoft: () => x().auth.oauth.microsoft.login.get(d),
1816
+ wechat: () => x().auth.oauth.wechat.login.get(d)
1817
+ }, {
1818
+ data: e,
1819
+ error: y
1820
+ } = await u[a]();
1821
+ if (!y) {
1822
+ if (e != null && e.redirectUri) {
1823
+ window.location.href = e.redirectUri;
1824
+ return;
1825
+ }
1826
+ console.error(`${a} OAuth 重定向URL为空`);
1827
+ }
1828
+ }
1829
+ function mi(a) {
1830
+ de("github", a);
1831
+ }
1832
+ function vi(a) {
1833
+ de("google", a);
1834
+ }
1835
+ function hi(a) {
1836
+ de("microsoft", a);
1837
+ }
1838
+ function yi(a) {
1839
+ de("wechat", a);
1840
+ }
1841
+ function gi() {
1842
+ return {
1843
+ githubAuth: mi,
1844
+ googleAuth: vi,
1845
+ microsoftAuth: hi,
1846
+ wechatAuth: yi,
1847
+ startOauth: de,
1848
+ getOauthCallbackUrl: xe
1849
+ };
1850
+ }
1851
+ const wi = ["src", "alt", "width", "height"], bi = /* @__PURE__ */ Y({
1852
+ __name: "AuthProviderIcon",
1853
+ props: {
1854
+ icon: {},
1855
+ size: {
1856
+ default: 24
1857
+ },
1858
+ alt: {
1859
+ default: ""
1860
+ },
1861
+ class: {
1862
+ default: ""
1863
+ }
1864
+ },
1865
+ setup(a) {
1866
+ const i = a;
1867
+ return (n, l) => t(Xe)(i.icon) ? (h(), I(t(Qe), {
1868
+ key: 0,
1869
+ icon: i.icon,
1870
+ width: i.size,
1871
+ height: i.size,
1872
+ class: ze(i.class)
1873
+ }, null, 8, ["icon", "width", "height", "class"])) : i.icon ? (h(), M("img", {
1874
+ key: 1,
1875
+ src: i.icon,
1876
+ alt: i.alt,
1877
+ width: i.size,
1878
+ height: i.size,
1879
+ class: ze(["auth-provider-icon__image", i.class])
1880
+ }, null, 10, wi)) : C("", !0);
1881
+ }
1882
+ }), _i = /* @__PURE__ */ X(bi, [["__scopeId", "data-v-1d09c1ef"]]), re = {
1883
+ github: "selfhst:github",
1884
+ google: "selfhst:google",
1885
+ microsoft: "selfhst:microsoft",
1886
+ wechat: "selfhst:wechat"
1887
+ }, ki = "selfhst:ksuite-kpaste", zi = 32, Ai = 2, fa = zi + Ai * 2, pa = 12, Pi = 24, fe = {
1888
+ github: "GitHub",
1889
+ google: "Google",
1890
+ microsoft: "Microsoft",
1891
+ wechat: "微信"
1892
+ }, Ii = {
1893
+ class: "oauth-binding-account"
1894
+ }, Ci = {
1895
+ key: 1,
1896
+ class: "oauth-binding-account__icon"
1897
+ }, Ei = {
1898
+ class: "oauth-binding-account__info"
1899
+ }, Ri = {
1900
+ class: "oauth-binding-account__provider"
1901
+ }, Si = {
1902
+ class: "oauth-binding-account__name"
1903
+ }, Vi = {
1904
+ class: "oauth-binding-verify-actions"
1905
+ }, $i = /* @__PURE__ */ Y({
1906
+ __name: "AuthkitOAuthBinding",
1907
+ props: {
1908
+ provider: {
1909
+ type: String,
1910
+ required: !0
1911
+ },
1912
+ label: {
1913
+ type: String,
1914
+ required: !0
1915
+ },
1916
+ size: {
1917
+ type: String,
1918
+ required: !0
1919
+ }
1920
+ },
1921
+ setup(a) {
1922
+ const {
1923
+ config: i
1924
+ } = Ee(), n = a, {
1925
+ userProfile: l,
1926
+ fetchUserProfile: s
1927
+ } = ae(), {
1928
+ appsData: d
1929
+ } = Se(), {
1930
+ getOauthCallbackUrl: u
1931
+ } = gi(), e = z("hidden"), y = z(), g = z(!1);
1932
+ let f;
1933
+ const v = $(() => {
1934
+ var c;
1935
+ return ((c = l.value) == null ? void 0 : c[n.provider]) || null;
1936
+ }), r = $(() => {
1937
+ const c = v.value;
1938
+ return c ? c.login || c.name || c.nickname || c.displayName || c.userPrincipalName || c.email || c.mail || c.openid || n.label : "";
1939
+ }), m = $(() => {
1940
+ const c = v.value;
1941
+ return (c == null ? void 0 : c.avatar_url) || (c == null ? void 0 : c.picture) || (c == null ? void 0 : c.headimgurl) || "";
1942
+ }), S = $(() => re[n.provider]), R = $(() => {
1943
+ const c = d.value.authMethods;
1944
+ return c.signUp.email || c.login.emailPassword || c.login.emailCode;
1945
+ }), B = $(() => {
1946
+ const c = d.value.authMethods;
1947
+ return c.signUp.phone || c.login.phonePassword || c.login.phoneCode;
1948
+ }), K = $(() => {
1949
+ var c;
1950
+ return R.value && !!((c = l.value) != null && c.email);
1951
+ }), j = $(() => {
1952
+ var c;
1953
+ return B.value && !!((c = l.value) != null && c.phone);
1954
+ }), V = $(() => {
1955
+ const c = [];
1956
+ return K.value && c.push("email"), j.value && c.push("phone"), c;
1957
+ }), w = $(() => R.value || B.value), q = $(() => e.value !== "hidden" && V.value.length > 1 && !y.value), _ = $(() => {
1958
+ var c;
1959
+ return e.value !== "hidden" && y.value === "email" && !!((c = l.value) != null && c.email);
1960
+ }), P = $(() => {
1961
+ var c;
1962
+ return e.value !== "hidden" && y.value === "phone" && !!((c = l.value) != null && c.phone);
1963
+ }), N = $(() => e.value === "unbind" ? "解绑" : "绑定");
1964
+ function F(c) {
1965
+ if (c === "hidden") {
1966
+ e.value = c, y.value = void 0;
1967
+ return;
1968
+ }
1969
+ if (!w.value) {
1970
+ c === "bind" && Z(), c === "unbind" && ne();
1971
+ return;
1972
+ }
1973
+ const E = V.value;
1974
+ if (E.length === 0) {
1975
+ G.error("请先绑定应用已开启的邮箱或手机号后再操作第三方账号");
1976
+ return;
1977
+ }
1978
+ e.value = c, y.value = E.length === 1 ? E[0] : void 0;
1979
+ }
1980
+ function D(c) {
1981
+ y.value = c;
1982
+ }
1983
+ async function Z() {
1984
+ const c = i.appId;
1985
+ if (!c) {
1986
+ console.error(`${n.label} OAuth 失败: appId 未配置`);
1987
+ return;
1988
+ }
1989
+ const E = u(), H = x().auth, oe = {
1990
+ github: () => H.oauth.github.login.get({
1991
+ appId: c,
1992
+ mode: "bind",
1993
+ redirectUri: E
1994
+ }),
1995
+ google: () => H.oauth.google.login.get({
1996
+ appId: c,
1997
+ mode: "bind",
1998
+ redirectUri: E
1999
+ }),
2000
+ microsoft: () => H.oauth.microsoft.login.get({
2001
+ appId: c,
2002
+ mode: "bind",
2003
+ redirectUri: E
2004
+ }),
2005
+ wechat: () => H.oauth.wechat.login.get({
2006
+ appId: c,
2007
+ mode: "bind",
2008
+ redirectUri: E
2009
+ })
2010
+ }, {
2011
+ data: te,
2012
+ error: Oe
2013
+ } = await oe[n.provider]();
2014
+ Oe || !(te != null && te.redirectUri) || (g.value = !0, window.open(te.redirectUri, "_blank"));
2015
+ }
2016
+ async function ne() {
2017
+ const {
2018
+ error: c
2019
+ } = await x().auth.users.unbind.oauth.post({
2020
+ provider: n.provider
2021
+ });
2022
+ c || (G.success("解绑成功"), e.value = "hidden", s());
2023
+ }
2024
+ function O() {
2025
+ e.value === "bind" && (e.value = "hidden", Z()), e.value === "unbind" && ne();
2026
+ }
2027
+ function b() {
2028
+ g.value && s();
2029
+ }
2030
+ return ue(() => {
2031
+ l.value || s(), f = setInterval(b, 1e3);
2032
+ }), ke(() => {
2033
+ f && clearInterval(f);
2034
+ }), (c, E) => {
2035
+ var H, oe;
2036
+ return h(), M(ie, null, [!v.value && e.value === "hidden" ? (h(), I(t(J), {
2037
+ key: 0,
2038
+ title: `绑定${n.label}`
2039
+ }, {
2040
+ action: o(() => [p(t(T), {
2041
+ size: n.size,
2042
+ type: "primary",
2043
+ onClick: E[0] || (E[0] = (te) => F("bind"))
2044
+ }, {
2045
+ default: o(() => [k(" 绑定" + U(n.label), 1)]),
2046
+ _: 1
2047
+ }, 8, ["size"])]),
2048
+ default: o(() => [k(" 您还未绑定" + U(n.label) + "账号,请点击绑定。 ", 1)]),
2049
+ _: 1
2050
+ }, 8, ["title"])) : C("", !0), v.value && e.value === "hidden" ? (h(), I(t(J), {
2051
+ key: 1,
2052
+ title: `解绑${n.label}`
2053
+ }, {
2054
+ action: o(() => [p(t(T), {
2055
+ size: n.size,
2056
+ type: "primary",
2057
+ onClick: E[1] || (E[1] = (te) => F("unbind"))
2058
+ }, {
2059
+ default: o(() => [k(" 解绑" + U(n.label), 1)]),
2060
+ _: 1
2061
+ }, 8, ["size"])]),
2062
+ default: o(() => [A("div", Ii, [m.value ? (h(), I(t(Pe), {
2063
+ key: 0,
2064
+ class: "oauth-binding-account__avatar",
2065
+ "image-url": m.value,
2066
+ size: 42
2067
+ }, null, 8, ["image-url"])) : (h(), M("div", Ci, [p(_i, {
2068
+ icon: S.value,
2069
+ size: t(Pi),
2070
+ alt: n.label
2071
+ }, null, 8, ["icon", "size", "alt"])])), A("div", Ei, [A("div", Ri, U(n.label), 1), A("div", Si, U(r.value), 1)])])]),
2072
+ _: 1
2073
+ }, 8, ["title"])) : C("", !0), q.value ? (h(), I(t(J), {
2074
+ key: 2,
2075
+ title: `${N.value}前验证身份`
2076
+ }, {
2077
+ action: o(() => [A("div", Vi, [K.value ? (h(), I(t(T), {
2078
+ key: 0,
2079
+ size: n.size,
2080
+ type: "primary",
2081
+ onClick: E[2] || (E[2] = (te) => D("email"))
2082
+ }, {
2083
+ default: o(() => [...E[4] || (E[4] = [k(" 邮箱验证 ", -1)])]),
2084
+ _: 1
2085
+ }, 8, ["size"])) : C("", !0), j.value ? (h(), I(t(T), {
2086
+ key: 1,
2087
+ size: n.size,
2088
+ type: "primary",
2089
+ onClick: E[3] || (E[3] = (te) => D("phone"))
2090
+ }, {
2091
+ default: o(() => [...E[5] || (E[5] = [k(" 手机验证 ", -1)])]),
2092
+ _: 1
2093
+ }, 8, ["size"])) : C("", !0)])]),
2094
+ default: o(() => [E[6] || (E[6] = k(" 请选择一种已绑定的验证方式。 ", -1))]),
2095
+ _: 1
2096
+ }, 8, ["title"])) : C("", !0), _.value ? (h(), I(ye, {
2097
+ key: 3,
2098
+ size: n.size,
2099
+ email: (H = t(l)) == null ? void 0 : H.email,
2100
+ onNext: O
2101
+ }, null, 8, ["size", "email"])) : C("", !0), P.value ? (h(), I(ge, {
2102
+ key: 4,
2103
+ size: n.size,
2104
+ phone: ((oe = t(l)) == null ? void 0 : oe.phone) || "",
2105
+ onNext: O
2106
+ }, null, 8, ["size", "phone"])) : C("", !0)], 64);
2107
+ };
2108
+ }
2109
+ }), Ti = /* @__PURE__ */ X($i, [["__scopeId", "data-v-8af8b028"]]), Ui = {
2110
+ class: "dependency-list"
2111
+ }, xi = {
2112
+ class: "label"
2113
+ }, Oi = {
2114
+ class: "count"
2115
+ }, Ni = {
2116
+ class: "action-bar"
2117
+ }, Di = {
2118
+ class: "verify-code-row"
2119
+ }, Bi = {
2120
+ class: "verify-code-row"
2121
+ }, qi = /* @__PURE__ */ Y({
2122
+ __name: "AuthkitAccountDelete",
2123
+ props: {
2124
+ size: {
2125
+ type: String,
2126
+ required: !0
2127
+ }
2128
+ },
2129
+ emits: ["deleted"],
2130
+ setup(a, {
2131
+ emit: i
2132
+ }) {
2133
+ const n = a, l = i, {
2134
+ userProfile: s,
2135
+ clearUserProfile: d
2136
+ } = ae(), {
2137
+ clearAuth: u
2138
+ } = et(), e = z("check"), y = z(!1), g = z([]), f = z(!1), v = z(""), r = z(0);
2139
+ let m = null;
2140
+ const S = z("email"), R = $(() => {
2141
+ var E;
2142
+ const O = ((E = s.value) == null ? void 0 : E.email) || "";
2143
+ if (!O) return "";
2144
+ const [b, c] = O.split("@");
2145
+ return b.length <= 2 ? O : `${b.slice(0, 2)}***@${c}`;
2146
+ }), B = $(() => {
2147
+ var b;
2148
+ const O = ((b = s.value) == null ? void 0 : b.phone) || "";
2149
+ return O.length < 7 ? O : `${O.slice(0, 3)}****${O.slice(-4)}`;
2150
+ }), K = $(() => S.value === "email" ? `为确保账号安全,我们将向您的邮箱 ${R.value} 发送验证码` : `为确保账号安全,我们将向您的手机号 ${B.value} 发送验证码`), j = $(() => S.value === "email" ? `验证码已发送至 ${R.value},注销后该账号将无法继续登录,请谨慎操作` : `验证码已发送至 ${B.value},注销后该账号将无法继续登录,请谨慎操作`), V = z(), w = z({
2151
+ userToken: "",
2152
+ code: "",
2153
+ password: "",
2154
+ confirmText: ""
2155
+ }), q = z(!1);
2156
+ function _(O, b) {
2157
+ O !== "注销" ? b('请输入"注销"以确认操作') : b();
2158
+ }
2159
+ async function P() {
2160
+ var O, b;
2161
+ if (y.value = !0, y.value = !1, !((O = s.value) != null && O.email) && !((b = s.value) != null && b.phone)) {
2162
+ G.error("请先绑定邮箱或手机号后再注销账号");
2163
+ return;
2164
+ }
2165
+ if (s.value.email && s.value.phone) {
2166
+ e.value = "chooseMethod";
2167
+ return;
2168
+ }
2169
+ S.value = s.value.email ? "email" : "phone", e.value = "sendCode";
2170
+ }
2171
+ function N(O) {
2172
+ S.value = O, e.value = "sendCode";
2173
+ }
2174
+ async function F() {
2175
+ var c, E;
2176
+ if (S.value === "email") {
2177
+ if (!((c = s.value) != null && c.email)) {
2178
+ G.error("请先绑定邮箱");
2179
+ return;
2180
+ }
2181
+ f.value = !0;
2182
+ const H = await x().auth.verify.email.retry.post({
2183
+ email: s.value.email,
2184
+ purpose: "deleteAccount"
2185
+ });
2186
+ f.value = !1;
2187
+ const oe = _e(H);
2188
+ H.data && (v.value = H.data.emailVerifyId, G.success("验证码已发送"), e.value = "confirm"), D(oe);
2189
+ return;
2190
+ }
2191
+ if (!((E = s.value) != null && E.phone)) {
2192
+ G.error("请先绑定手机号");
2193
+ return;
2194
+ }
2195
+ f.value = !0;
2196
+ const O = await x().auth.verify.sms.send.post({
2197
+ phone: s.value.phone,
2198
+ purpose: "deleteAccount"
2199
+ });
2200
+ f.value = !1;
2201
+ const b = _e(O);
2202
+ O.error || (G.success("验证码已发送"), e.value = "confirm"), D(b);
2203
+ }
2204
+ function D(O) {
2205
+ !O || O <= 0 || (r.value = Math.ceil(O), m && clearInterval(m), m = setInterval(() => {
2206
+ r.value--, r.value <= 0 && m && (clearInterval(m), m = null);
2207
+ }, 1e3));
2208
+ }
2209
+ ke(() => {
2210
+ m && (clearInterval(m), m = null);
2211
+ });
2212
+ async function Z() {
2213
+ var E, H;
2214
+ if (await ((E = V.value) == null ? void 0 : E.validate())) return;
2215
+ q.value = !0;
2216
+ const b = S.value === "email" ? {
2217
+ method: "email",
2218
+ userToken: w.value.userToken,
2219
+ emailVerifyId: v.value,
2220
+ password: w.value.password || void 0,
2221
+ confirmText: w.value.confirmText
2222
+ } : {
2223
+ method: "phone",
2224
+ phone: (H = s.value) == null ? void 0 : H.phone,
2225
+ code: w.value.code,
2226
+ password: w.value.password || void 0,
2227
+ confirmText: w.value.confirmText
2228
+ }, {
2229
+ error: c
2230
+ } = await x().auth.users.deleteAccount.post(b);
2231
+ q.value = !1, c || (e.value = "success", d(), u(), l("deleted"));
2232
+ }
2233
+ function ne() {
2234
+ window.location.href = "/";
2235
+ }
2236
+ return (O, b) => e.value === "check" ? (h(), I(t(J), {
2237
+ key: 0,
2238
+ type: "warning",
2239
+ title: "注销账号"
2240
+ }, {
2241
+ action: o(() => [p(t(T), {
2242
+ size: n.size,
2243
+ type: "primary",
2244
+ status: "danger",
2245
+ loading: y.value,
2246
+ onClick: P
2247
+ }, {
2248
+ default: o(() => [k(U(y.value ? "检查中..." : "开始注销"), 1)]),
2249
+ _: 1
2250
+ }, 8, ["size", "loading"])]),
2251
+ default: o(() => [b[10] || (b[10] = k(" 注销账号后,登录凭据、第三方绑定和当前登录态会被清除;历史订单、用量、审计等业务记录会保留用于对账和安全追溯。 ", -1))]),
2252
+ _: 1
2253
+ })) : e.value === "dependencies" ? (h(), M(ie, {
2254
+ key: 1
2255
+ }, [p(t(J), {
2256
+ type: "error",
2257
+ title: "无法注销账号"
2258
+ }, {
2259
+ default: o(() => [...b[11] || (b[11] = [k(" 您的账号下还有以下资源,请先处理后再注销: ", -1)])]),
2260
+ _: 1
2261
+ }), A("div", Ui, [(h(!0), M(ie, null, Le(g.value, (c) => (h(), M("div", {
2262
+ key: c.type,
2263
+ class: "dependency-item"
2264
+ }, [A("span", xi, U(c.label), 1), A("span", Oi, U(c.count) + " 个", 1)]))), 128))]), A("div", Ni, [p(t(T), {
2265
+ size: n.size,
2266
+ onClick: b[0] || (b[0] = (c) => e.value = "check")
2267
+ }, {
2268
+ default: o(() => [...b[12] || (b[12] = [k("返回", -1)])]),
2269
+ _: 1
2270
+ }, 8, ["size"])])], 64)) : e.value === "chooseMethod" ? (h(), I(t(J), {
2271
+ key: 2,
2272
+ type: "normal",
2273
+ title: "选择验证方式"
2274
+ }, {
2275
+ action: o(() => [p(t(pe), null, {
2276
+ default: o(() => {
2277
+ var c, E;
2278
+ return [p(t(T), {
2279
+ size: n.size,
2280
+ onClick: b[1] || (b[1] = (H) => e.value = "check")
2281
+ }, {
2282
+ default: o(() => [...b[13] || (b[13] = [k("取消", -1)])]),
2283
+ _: 1
2284
+ }, 8, ["size"]), (c = t(s)) != null && c.email ? (h(), I(t(T), {
2285
+ key: 0,
2286
+ size: n.size,
2287
+ type: "primary",
2288
+ onClick: b[2] || (b[2] = (H) => N("email"))
2289
+ }, {
2290
+ default: o(() => [...b[14] || (b[14] = [k(" 邮箱验证 ", -1)])]),
2291
+ _: 1
2292
+ }, 8, ["size"])) : C("", !0), (E = t(s)) != null && E.phone ? (h(), I(t(T), {
2293
+ key: 1,
2294
+ size: n.size,
2295
+ type: "primary",
2296
+ onClick: b[3] || (b[3] = (H) => N("phone"))
2297
+ }, {
2298
+ default: o(() => [...b[15] || (b[15] = [k(" 手机验证 ", -1)])]),
2299
+ _: 1
2300
+ }, 8, ["size"])) : C("", !0)];
2301
+ }),
2302
+ _: 1
2303
+ })]),
2304
+ default: o(() => [b[16] || (b[16] = k(" 请选择一种已绑定的身份验证方式。 ", -1))]),
2305
+ _: 1
2306
+ })) : e.value === "sendCode" ? (h(), I(t(J), {
2307
+ key: 3,
2308
+ type: "normal",
2309
+ title: "身份验证"
2310
+ }, {
2311
+ action: o(() => [p(t(pe), null, {
2312
+ default: o(() => [p(t(T), {
2313
+ size: n.size,
2314
+ onClick: b[4] || (b[4] = (c) => e.value = "check")
2315
+ }, {
2316
+ default: o(() => [...b[17] || (b[17] = [k("取消", -1)])]),
2317
+ _: 1
2318
+ }, 8, ["size"]), p(t(T), {
2319
+ size: n.size,
2320
+ type: "primary",
2321
+ loading: f.value,
2322
+ onClick: F
2323
+ }, {
2324
+ default: o(() => [k(U(f.value ? "发送中..." : "发送验证码"), 1)]),
2325
+ _: 1
2326
+ }, 8, ["size", "loading"])]),
2327
+ _: 1
2328
+ })]),
2329
+ default: o(() => [k(U(K.value) + " ", 1)]),
2330
+ _: 1
2331
+ })) : e.value === "confirm" ? (h(), M(ie, {
2332
+ key: 4
2333
+ }, [p(t(J), {
2334
+ type: "warning",
2335
+ title: "确认注销"
2336
+ }, {
2337
+ default: o(() => [k(U(j.value), 1)]),
2338
+ _: 1
2339
+ }), p(t(le), {
2340
+ ref_key: "formRef",
2341
+ ref: V,
2342
+ model: w.value,
2343
+ size: n.size,
2344
+ class: "confirm-form",
2345
+ layout: "vertical"
2346
+ }, {
2347
+ default: o(() => {
2348
+ var c;
2349
+ return [S.value === "email" ? (h(), I(t(L), {
2350
+ key: 0,
2351
+ field: "userToken",
2352
+ label: "邮箱验证码",
2353
+ rules: [{
2354
+ required: !0,
2355
+ message: "请输入验证码"
2356
+ }]
2357
+ }, {
2358
+ default: o(() => [A("div", Di, [p(t(Q), {
2359
+ modelValue: w.value.userToken,
2360
+ "onUpdate:modelValue": b[5] || (b[5] = (E) => w.value.userToken = E),
2361
+ placeholder: "请输入6位验证码",
2362
+ "max-length": 6,
2363
+ "allow-clear": ""
2364
+ }, null, 8, ["modelValue"]), p(t(T), {
2365
+ disabled: r.value > 0,
2366
+ loading: f.value,
2367
+ onClick: F
2368
+ }, {
2369
+ default: o(() => [k(U(r.value > 0 ? `${r.value}s 后重发` : "重新发送"), 1)]),
2370
+ _: 1
2371
+ }, 8, ["disabled", "loading"])])]),
2372
+ _: 1
2373
+ })) : (h(), I(t(L), {
2374
+ key: 1,
2375
+ field: "code",
2376
+ label: "短信验证码",
2377
+ rules: [{
2378
+ required: !0,
2379
+ message: "请输入验证码"
2380
+ }]
2381
+ }, {
2382
+ default: o(() => [A("div", Bi, [p(t(Q), {
2383
+ modelValue: w.value.code,
2384
+ "onUpdate:modelValue": b[6] || (b[6] = (E) => w.value.code = E),
2385
+ placeholder: "请输入验证码",
2386
+ "allow-clear": ""
2387
+ }, null, 8, ["modelValue"]), p(t(T), {
2388
+ disabled: r.value > 0,
2389
+ loading: f.value,
2390
+ onClick: F
2391
+ }, {
2392
+ default: o(() => [k(U(r.value > 0 ? `${r.value}s 后重发` : "重新发送"), 1)]),
2393
+ _: 1
2394
+ }, 8, ["disabled", "loading"])])]),
2395
+ _: 1
2396
+ })), (c = t(s)) != null && c.hasPassword ? (h(), I(t(L), {
2397
+ key: 2,
2398
+ field: "password",
2399
+ label: "登录密码",
2400
+ rules: [{
2401
+ required: !0,
2402
+ message: "请输入密码"
2403
+ }]
2404
+ }, {
2405
+ default: o(() => [p(t(Fe), {
2406
+ modelValue: w.value.password,
2407
+ "onUpdate:modelValue": b[7] || (b[7] = (E) => w.value.password = E),
2408
+ placeholder: "请输入您的登录密码",
2409
+ "allow-clear": ""
2410
+ }, null, 8, ["modelValue"])]),
2411
+ _: 1
2412
+ })) : C("", !0), p(t(L), {
2413
+ field: "confirmText",
2414
+ label: "请输入「注销」以确认",
2415
+ rules: [{
2416
+ required: !0,
2417
+ message: "请输入确认文字"
2418
+ }, {
2419
+ validator: _
2420
+ }]
2421
+ }, {
2422
+ default: o(() => [p(t(Q), {
2423
+ modelValue: w.value.confirmText,
2424
+ "onUpdate:modelValue": b[8] || (b[8] = (E) => w.value.confirmText = E),
2425
+ placeholder: "注销",
2426
+ "allow-clear": ""
2427
+ }, null, 8, ["modelValue"])]),
2428
+ _: 1
2429
+ }, 8, ["rules"]), p(t(L), null, {
2430
+ default: o(() => [p(t(pe), null, {
2431
+ default: o(() => [p(t(T), {
2432
+ onClick: b[9] || (b[9] = (E) => e.value = "check")
2433
+ }, {
2434
+ default: o(() => [...b[18] || (b[18] = [k("取消", -1)])]),
2435
+ _: 1
2436
+ }), p(t(T), {
2437
+ type: "primary",
2438
+ status: "danger",
2439
+ loading: q.value,
2440
+ onClick: Z
2441
+ }, {
2442
+ default: o(() => [k(U(q.value ? "注销中..." : "确认注销"), 1)]),
2443
+ _: 1
2444
+ }, 8, ["loading"])]),
2445
+ _: 1
2446
+ })]),
2447
+ _: 1
2448
+ })];
2449
+ }),
2450
+ _: 1
2451
+ }, 8, ["model", "size"])], 64)) : e.value === "success" ? (h(), I(t(He), {
2452
+ key: 5,
2453
+ status: "success",
2454
+ title: "账号已注销"
2455
+ }, {
2456
+ subtitle: o(() => [...b[19] || (b[19] = [k(" 您的账号已成功注销,登录凭据和绑定身份已清除 ", -1)])]),
2457
+ extra: o(() => [p(t(T), {
2458
+ type: "primary",
2459
+ onClick: ne
2460
+ }, {
2461
+ default: o(() => [...b[20] || (b[20] = [k("返回首页", -1)])]),
2462
+ _: 1
2463
+ })]),
2464
+ _: 1
2465
+ })) : C("", !0);
2466
+ }
2467
+ }), Li = /* @__PURE__ */ X(qi, [["__scopeId", "data-v-90439767"]]), Mi = {
2468
+ class: "content"
2469
+ }, Ki = {
2470
+ class: "left"
2471
+ }, Fi = {
2472
+ class: "right"
2473
+ }, Hi = /* @__PURE__ */ Y({
2474
+ __name: "AuthkitAppSetting",
2475
+ emits: ["confirm", "cancel"],
2476
+ setup(a, {
2477
+ expose: i,
2478
+ emit: n
2479
+ }) {
2480
+ const l = n;
2481
+ function s() {
2482
+ w.value = !1, e.value = ["PersonalInformation"], l("cancel");
2483
+ }
2484
+ function d() {
2485
+ s();
2486
+ }
2487
+ const u = z("large"), e = z(["PersonalInformation"]), y = [{
2488
+ provider: "github",
2489
+ name: fe.github,
2490
+ meta: {
2491
+ icon: re.github
2492
+ }
2493
+ }, {
2494
+ provider: "google",
2495
+ name: fe.google,
2496
+ meta: {
2497
+ icon: re.google
2498
+ }
2499
+ }, {
2500
+ provider: "microsoft",
2501
+ name: fe.microsoft,
2502
+ meta: {
2503
+ icon: re.microsoft
2504
+ }
2505
+ }, {
2506
+ provider: "wechat",
2507
+ name: fe.wechat,
2508
+ meta: {
2509
+ icon: re.wechat
2510
+ }
2511
+ }], {
2512
+ appsData: g
2513
+ } = Se(), f = $(() => {
2514
+ const _ = g.value.authMethods;
2515
+ return _.signUp.email || _.login.emailPassword || _.login.emailCode;
2516
+ }), v = $(() => {
2517
+ const _ = g.value.authMethods;
2518
+ return _.signUp.phone || _.login.phonePassword || _.login.phoneCode;
2519
+ }), r = $(() => {
2520
+ const _ = g.value.authMethods;
2521
+ return _.login.emailPassword || _.login.phonePassword;
2522
+ }), m = $(() => r.value || f.value || v.value), S = $(() => g.value.authMethods.login.passkey), R = $(() => y.filter((_) => {
2523
+ var P, N;
2524
+ return (N = (P = g.value.oauth) == null ? void 0 : P[_.provider]) == null ? void 0 : N.enabled;
2525
+ }).map((_) => ({
2526
+ ..._,
2527
+ path: `OAuthBinding:${_.provider}`
2528
+ }))), B = $(() => {
2529
+ const _ = [];
2530
+ f.value && _.push({
2531
+ name: "邮箱",
2532
+ path: "EmailBinding",
2533
+ meta: {
2534
+ icon: "ic:baseline-email"
2535
+ }
2536
+ }), v.value && _.push({
2537
+ name: "手机号",
2538
+ path: "PhoneBinding",
2539
+ meta: {
2540
+ icon: "mingcute:phone-fill"
2541
+ }
2542
+ }), m.value && _.push({
2543
+ name: "登录密码",
2544
+ path: "SetPassword",
2545
+ meta: {
2546
+ icon: "mdi:password"
2547
+ }
2548
+ }), S.value && _.push({
2549
+ name: "Passkey",
2550
+ path: "PasskeyBinding",
2551
+ meta: {
2552
+ icon: ki
2553
+ }
2554
+ }), _.push({
2555
+ name: "注销账号",
2556
+ path: "AccountDelete",
2557
+ meta: {
2558
+ icon: "mdi:account-remove"
2559
+ }
2560
+ });
2561
+ const P = [{
2562
+ name: "个人信息",
2563
+ path: "PersonalInformation",
2564
+ meta: {
2565
+ icon: "mingcute:user-edit-fill"
2566
+ },
2567
+ children: []
2568
+ }, {
2569
+ name: "账户管理",
2570
+ path: "AccountManage",
2571
+ meta: {
2572
+ icon: "mingcute:badge-fill"
2573
+ },
2574
+ children: _
2575
+ }];
2576
+ return R.value.length > 0 && P.push({
2577
+ name: "第三方账户",
2578
+ path: "AccountBinding",
2579
+ meta: {
2580
+ icon: "mingcute:link-fill"
2581
+ },
2582
+ children: R.value
2583
+ }), P;
2584
+ }), K = $(() => R.value.find((_) => _.path === e.value[0]));
2585
+ function j(_) {
2586
+ const P = _.path;
2587
+ e.value = [P];
2588
+ }
2589
+ const {
2590
+ changeType: V,
2591
+ show: w
2592
+ } = tt(l);
2593
+ Ae(R, (_) => {
2594
+ e.value[0].startsWith("OAuthBinding:") && !_.some((P) => P.path === e.value[0]) && (e.value = ["PersonalInformation"]);
2595
+ }), Ae(B, (_) => {
2596
+ const P = e.value[0];
2597
+ _.some((F) => {
2598
+ var D;
2599
+ return F.path === P || ((D = F.children) == null ? void 0 : D.some((Z) => Z.path === P));
2600
+ }) || (e.value = ["PersonalInformation"]);
2601
+ });
2602
+ function q(_, P) {
2603
+ w.value = P, V.value = "编辑";
2604
+ }
2605
+ return i({
2606
+ setData: q
2607
+ }), (_, P) => t(w) ? (h(), I(t(We), {
2608
+ key: 0,
2609
+ visible: !0,
2610
+ "body-class": "AppSettingbodyClass",
2611
+ "mask-closable": !1,
2612
+ footer: !1,
2613
+ width: t(Ne),
2614
+ onCancel: s
2615
+ }, {
2616
+ title: o(() => [...P[1] || (P[1] = [k(" 用户信息 ", -1)])]),
2617
+ default: o(() => [A("div", Mi, [A("div", Ki, [p(Ze, {
2618
+ "selected-keys": e.value,
2619
+ "onUpdate:selectedKeys": P[0] || (P[0] = (N) => e.value = N),
2620
+ menus: B.value,
2621
+ onChange: j
2622
+ }, null, 8, ["selected-keys", "menus"])]), A("div", Fi, [e.value[0] === "PersonalInformation" ? (h(), I(yt, {
2623
+ key: 0,
2624
+ size: u.value
2625
+ }, null, 8, ["size"])) : C("", !0), e.value[0] === "EmailBinding" ? (h(), I(ei, {
2626
+ key: 1,
2627
+ size: u.value
2628
+ }, null, 8, ["size"])) : C("", !0), e.value[0] === "PhoneBinding" ? (h(), I(ci, {
2629
+ key: 2,
2630
+ size: u.value
2631
+ }, null, 8, ["size"])) : C("", !0), e.value[0] === "SetPassword" ? (h(), I(Rt, {
2632
+ key: 3,
2633
+ size: u.value
2634
+ }, null, 8, ["size"])) : C("", !0), e.value[0] === "PasskeyBinding" ? (h(), I(Wt, {
2635
+ key: 4,
2636
+ size: u.value
2637
+ }, null, 8, ["size"])) : C("", !0), K.value ? (h(), I(Ti, {
2638
+ key: 5,
2639
+ provider: K.value.provider,
2640
+ label: K.value.name,
2641
+ size: u.value
2642
+ }, null, 8, ["provider", "label", "size"])) : C("", !0), e.value[0] === "AccountDelete" ? (h(), I(Li, {
2643
+ key: 6,
2644
+ size: u.value,
2645
+ onDeleted: d
2646
+ }, null, 8, ["size"])) : C("", !0)])])]),
2647
+ _: 1
2648
+ }, 8, ["width"])) : C("", !0);
2649
+ }
2650
+ }), ma = /* @__PURE__ */ X(Hi, [["__scopeId", "data-v-944e5438"]]);
2651
+ export {
2652
+ ma as A,
2653
+ Zt as B,
2654
+ Ti as O,
2655
+ Wt as P,
2656
+ ve as S,
2657
+ ei as _,
2658
+ di as a,
2659
+ ye as b,
2660
+ Et as c,
2661
+ yt as d,
2662
+ ci as e,
2663
+ ge as f,
2664
+ Rt as g,
2665
+ gi as h,
2666
+ Ai as i,
2667
+ fa as j,
2668
+ _i as k,
2669
+ se as l,
2670
+ pa as m,
2671
+ re as n,
2672
+ zi as o,
2673
+ ki as p,
2674
+ he as q,
2675
+ fi as r,
2676
+ Pi as s,
2677
+ Lt as u
2678
+ };