sa2kit 1.6.60 → 1.6.62
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.
- package/dist/UniversalFileService-C3WQAFOV.js +15 -0
- package/dist/{UniversalFileService-J6ET6KZK.js.map → UniversalFileService-C3WQAFOV.js.map} +1 -1
- package/dist/UniversalFileService-O3IEROBN.mjs +6 -0
- package/dist/{UniversalFileService-336GFY6N.mjs.map → UniversalFileService-O3IEROBN.mjs.map} +1 -1
- package/dist/ai/llm/index.d.mts +70 -0
- package/dist/ai/llm/index.d.ts +70 -0
- package/dist/ai/llm/index.js +54 -0
- package/dist/ai/llm/index.js.map +1 -0
- package/dist/ai/llm/index.mjs +5 -0
- package/dist/ai/llm/index.mjs.map +1 -0
- package/dist/ai/llm/ui/electron/index.d.mts +5 -0
- package/dist/ai/llm/ui/electron/index.d.ts +5 -0
- package/dist/ai/llm/ui/electron/index.js +21 -0
- package/dist/ai/llm/ui/electron/index.js.map +1 -0
- package/dist/ai/llm/ui/electron/index.mjs +8 -0
- package/dist/ai/llm/ui/electron/index.mjs.map +1 -0
- package/dist/ai/llm/ui/miniapp/index.d.mts +9 -0
- package/dist/ai/llm/ui/miniapp/index.d.ts +9 -0
- package/dist/ai/llm/ui/miniapp/index.js +107 -0
- package/dist/ai/llm/ui/miniapp/index.js.map +1 -0
- package/dist/ai/llm/ui/miniapp/index.mjs +101 -0
- package/dist/ai/llm/ui/miniapp/index.mjs.map +1 -0
- package/dist/ai/llm/ui/rn/index.d.mts +9 -0
- package/dist/ai/llm/ui/rn/index.d.ts +9 -0
- package/dist/ai/llm/ui/rn/index.js +249 -0
- package/dist/ai/llm/ui/rn/index.js.map +1 -0
- package/dist/ai/llm/ui/rn/index.mjs +243 -0
- package/dist/ai/llm/ui/rn/index.mjs.map +1 -0
- package/dist/ai/llm/ui/web/index.d.mts +15 -0
- package/dist/ai/llm/ui/web/index.d.ts +15 -0
- package/dist/ai/llm/ui/web/index.js +21 -0
- package/dist/ai/llm/ui/web/index.js.map +1 -0
- package/dist/ai/llm/ui/web/index.mjs +8 -0
- package/dist/ai/llm/ui/web/index.mjs.map +1 -0
- package/dist/ar/index.d.mts +7 -0
- package/dist/ar/index.d.ts +7 -0
- package/dist/ar/index.js +17 -0
- package/dist/ar/index.js.map +1 -0
- package/dist/ar/index.mjs +4 -0
- package/dist/ar/index.mjs.map +1 -0
- package/dist/auth/index.js +22 -22
- package/dist/auth/index.mjs +2 -2
- package/dist/auth/legacy/db/index.d.mts +5 -0
- package/dist/auth/legacy/db/index.d.ts +5 -0
- package/dist/auth/legacy/db/index.js +34 -0
- package/dist/auth/legacy/db/index.js.map +1 -0
- package/dist/auth/legacy/db/index.mjs +5 -0
- package/dist/auth/legacy/db/index.mjs.map +1 -0
- package/dist/auth/legacy/index.d.mts +51 -0
- package/dist/auth/legacy/index.d.ts +51 -0
- package/dist/auth/legacy/index.js +146 -0
- package/dist/auth/legacy/index.js.map +1 -0
- package/dist/auth/legacy/index.mjs +13 -0
- package/dist/auth/legacy/index.mjs.map +1 -0
- package/dist/auth/legacy/logic/index.d.mts +9 -0
- package/dist/auth/legacy/logic/index.d.ts +9 -0
- package/dist/auth/legacy/logic/index.js +18 -0
- package/dist/auth/legacy/logic/index.js.map +1 -0
- package/dist/auth/legacy/logic/index.mjs +5 -0
- package/dist/auth/legacy/logic/index.mjs.map +1 -0
- package/dist/auth/legacy/routes/index.d.mts +50 -0
- package/dist/auth/legacy/routes/index.d.ts +50 -0
- package/dist/auth/legacy/routes/index.js +34 -0
- package/dist/auth/legacy/routes/index.js.map +1 -0
- package/dist/auth/legacy/routes/index.mjs +5 -0
- package/dist/auth/legacy/routes/index.mjs.map +1 -0
- package/dist/auth/legacy/schema/index.d.mts +401 -0
- package/dist/auth/legacy/schema/index.d.ts +401 -0
- package/dist/auth/legacy/schema/index.js +29 -0
- package/dist/auth/legacy/schema/index.js.map +1 -0
- package/dist/auth/legacy/schema/index.mjs +4 -0
- package/dist/auth/legacy/schema/index.mjs.map +1 -0
- package/dist/auth/legacy/server/index.d.mts +15 -0
- package/dist/auth/legacy/server/index.d.ts +15 -0
- package/dist/auth/legacy/server/index.js +65 -0
- package/dist/auth/legacy/server/index.js.map +1 -0
- package/dist/auth/legacy/server/index.mjs +8 -0
- package/dist/auth/legacy/server/index.mjs.map +1 -0
- package/dist/auth/legacy/services/index.d.mts +40 -0
- package/dist/auth/legacy/services/index.d.ts +40 -0
- package/dist/auth/legacy/services/index.js +14 -0
- package/dist/auth/legacy/services/index.js.map +1 -0
- package/dist/auth/legacy/services/index.mjs +5 -0
- package/dist/auth/legacy/services/index.mjs.map +1 -0
- package/dist/auth/legacy/ui/miniapp/index.d.mts +10 -0
- package/dist/auth/legacy/ui/miniapp/index.d.ts +10 -0
- package/dist/auth/legacy/ui/miniapp/index.js +23 -0
- package/dist/auth/legacy/ui/miniapp/index.js.map +1 -0
- package/dist/auth/legacy/ui/miniapp/index.mjs +6 -0
- package/dist/auth/legacy/ui/miniapp/index.mjs.map +1 -0
- package/dist/auth/legacy/ui/web/index.d.mts +22 -0
- package/dist/auth/legacy/ui/web/index.d.ts +22 -0
- package/dist/auth/legacy/ui/web/index.js +31 -0
- package/dist/auth/legacy/ui/web/index.js.map +1 -0
- package/dist/auth/legacy/ui/web/index.mjs +6 -0
- package/dist/auth/legacy/ui/web/index.mjs.map +1 -0
- package/dist/calendar/index.d.mts +390 -237
- package/dist/calendar/index.d.ts +390 -237
- package/dist/calendar/index.js +3825 -3785
- package/dist/calendar/index.js.map +1 -1
- package/dist/calendar/index.mjs +3730 -3696
- package/dist/calendar/index.mjs.map +1 -1
- package/dist/calendar/routes/index.js +30 -327
- package/dist/calendar/routes/index.js.map +1 -1
- package/dist/calendar/routes/index.mjs +1 -323
- package/dist/calendar/routes/index.mjs.map +1 -1
- package/dist/calendar/server.d.mts +6 -0
- package/dist/calendar/server.d.ts +6 -0
- package/dist/calendar/server.js +41 -13
- package/dist/calendar/server.js.map +1 -1
- package/dist/calendar/server.mjs +2 -2
- package/dist/calendar/server.mjs.map +1 -1
- package/dist/chunk-24F7KUED.js +263 -0
- package/dist/chunk-24F7KUED.js.map +1 -0
- package/dist/{chunk-YMS6BPXS.js → chunk-27IUMDDK.js} +3 -3
- package/dist/{chunk-YMS6BPXS.js.map → chunk-27IUMDDK.js.map} +1 -1
- package/dist/chunk-37M6NZIF.js +279 -0
- package/dist/chunk-37M6NZIF.js.map +1 -0
- package/dist/chunk-3JMUNOUT.js +144 -0
- package/dist/chunk-3JMUNOUT.js.map +1 -0
- package/dist/chunk-3PFCOTJP.mjs +256 -0
- package/dist/chunk-3PFCOTJP.mjs.map +1 -0
- package/dist/{chunk-NZZZUMMX.mjs → chunk-57MVE5LL.mjs} +3 -3
- package/dist/{chunk-NZZZUMMX.mjs.map → chunk-57MVE5LL.mjs.map} +1 -1
- package/dist/{chunk-622Y6LTH.mjs → chunk-5BLZEVWK.mjs} +196 -468
- package/dist/chunk-5BLZEVWK.mjs.map +1 -0
- package/dist/{chunk-YN4MJFIG.js → chunk-5LCGOCKG.js} +5 -5
- package/dist/{chunk-YN4MJFIG.js.map → chunk-5LCGOCKG.js.map} +1 -1
- package/dist/chunk-6XUQ2B4K.js +219 -0
- package/dist/chunk-6XUQ2B4K.js.map +1 -0
- package/dist/{chunk-NCOXT7SK.js → chunk-77UEPWVQ.js} +4 -4
- package/dist/{chunk-NCOXT7SK.js.map → chunk-77UEPWVQ.js.map} +1 -1
- package/dist/chunk-CFM56MGO.mjs +35 -0
- package/dist/chunk-CFM56MGO.mjs.map +1 -0
- package/dist/chunk-CPSFYP34.mjs +140 -0
- package/dist/chunk-CPSFYP34.mjs.map +1 -0
- package/dist/chunk-D22QBOCM.mjs +336 -0
- package/dist/chunk-D22QBOCM.mjs.map +1 -0
- package/dist/chunk-DA4QV64P.mjs +35 -0
- package/dist/chunk-DA4QV64P.mjs.map +1 -0
- package/dist/chunk-EKDLZND6.js +275 -0
- package/dist/chunk-EKDLZND6.js.map +1 -0
- package/dist/chunk-EKQPFZXQ.js +12 -0
- package/dist/chunk-EKQPFZXQ.js.map +1 -0
- package/dist/chunk-ERAAB5VG.js +324 -0
- package/dist/chunk-ERAAB5VG.js.map +1 -0
- package/dist/chunk-ESLY72VI.mjs +175 -0
- package/dist/chunk-ESLY72VI.mjs.map +1 -0
- package/dist/chunk-FGQGWW73.js +38 -0
- package/dist/chunk-FGQGWW73.js.map +1 -0
- package/dist/chunk-FXQOXLDE.js +120 -0
- package/dist/chunk-FXQOXLDE.js.map +1 -0
- package/dist/chunk-FZELCJR7.mjs +19 -0
- package/dist/chunk-FZELCJR7.mjs.map +1 -0
- package/dist/{chunk-HHVDOIPV.js → chunk-H3P2PGZL.js} +3 -3
- package/dist/{chunk-HHVDOIPV.js.map → chunk-H3P2PGZL.js.map} +1 -1
- package/dist/chunk-HBQMN5QM.mjs +10 -0
- package/dist/chunk-HBQMN5QM.mjs.map +1 -0
- package/dist/chunk-ITRIXMXF.mjs +862 -0
- package/dist/chunk-ITRIXMXF.mjs.map +1 -0
- package/dist/chunk-IUWSCUDC.js +4 -0
- package/dist/chunk-IUWSCUDC.js.map +1 -0
- package/dist/chunk-JCKCKRC2.js +50 -0
- package/dist/chunk-JCKCKRC2.js.map +1 -0
- package/dist/chunk-L7GQNY54.mjs +286 -0
- package/dist/chunk-L7GQNY54.mjs.map +1 -0
- package/dist/{chunk-ZRWED7Q6.js → chunk-LDVJ7URJ.js} +235 -520
- package/dist/chunk-LDVJ7URJ.js.map +1 -0
- package/dist/{chunk-CYTXGBP2.js → chunk-MLP74E3O.js} +573 -1607
- package/dist/chunk-MLP74E3O.js.map +1 -0
- package/dist/chunk-NAX4TUT7.js +182 -0
- package/dist/chunk-NAX4TUT7.js.map +1 -0
- package/dist/chunk-NW4EN4YI.mjs +213 -0
- package/dist/chunk-NW4EN4YI.mjs.map +1 -0
- package/dist/chunk-P3QMT3AY.mjs +44 -0
- package/dist/chunk-P3QMT3AY.mjs.map +1 -0
- package/dist/chunk-PJ4KYAQZ.mjs +631 -0
- package/dist/chunk-PJ4KYAQZ.mjs.map +1 -0
- package/dist/chunk-PLSEAREM.js +345 -0
- package/dist/chunk-PLSEAREM.js.map +1 -0
- package/dist/{chunk-EGJPS7OL.mjs → chunk-QZU4UJZG.mjs} +3 -3
- package/dist/{chunk-EGJPS7OL.mjs.map → chunk-QZU4UJZG.mjs.map} +1 -1
- package/dist/chunk-RJVR33ME.mjs +3 -0
- package/dist/chunk-RJVR33ME.mjs.map +1 -0
- package/dist/chunk-SYBHDB2D.js +650 -0
- package/dist/chunk-SYBHDB2D.js.map +1 -0
- package/dist/chunk-TVKVM7JT.js +21 -0
- package/dist/chunk-TVKVM7JT.js.map +1 -0
- package/dist/{chunk-PONZPO3U.mjs → chunk-UTB72ZJ7.mjs} +414 -1448
- package/dist/chunk-UTB72ZJ7.mjs.map +1 -0
- package/dist/chunk-V7EVKD5G.mjs +116 -0
- package/dist/chunk-V7EVKD5G.mjs.map +1 -0
- package/dist/chunk-VGPR3KLR.js +872 -0
- package/dist/chunk-VGPR3KLR.js.map +1 -0
- package/dist/chunk-VS7WATQD.js +255 -0
- package/dist/chunk-VS7WATQD.js.map +1 -0
- package/dist/chunk-VSP7XJT5.mjs +272 -0
- package/dist/chunk-VSP7XJT5.mjs.map +1 -0
- package/dist/{chunk-CSDIPQQO.mjs → chunk-VTKAIOP5.mjs} +5 -5
- package/dist/{chunk-CSDIPQQO.mjs.map → chunk-VTKAIOP5.mjs.map} +1 -1
- package/dist/chunk-VULJUXTF.mjs +267 -0
- package/dist/chunk-VULJUXTF.mjs.map +1 -0
- package/dist/chunk-XAHM6B3V.js +44 -0
- package/dist/chunk-XAHM6B3V.js.map +1 -0
- package/dist/chunk-YSF5YISM.mjs +248 -0
- package/dist/chunk-YSF5YISM.mjs.map +1 -0
- package/dist/{chunk-OFYBMMWT.mjs → chunk-YYJEVAJI.mjs} +3 -3
- package/dist/{chunk-OFYBMMWT.mjs.map → chunk-YYJEVAJI.mjs.map} +1 -1
- package/dist/components/index.d.mts +1 -0
- package/dist/components/index.d.ts +1 -0
- package/dist/components/index.js +182 -181
- package/dist/components/index.mjs +4 -3
- package/dist/index-DNKZ7-R_.d.mts +184 -0
- package/dist/index-DNKZ7-R_.d.ts +184 -0
- package/dist/index.d.mts +4 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.js +285 -229
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +15 -10
- package/dist/index.mjs.map +1 -1
- package/dist/mikuFusionGame/index.js +3 -3
- package/dist/mikuFusionGame/index.mjs +2 -2
- package/dist/mmd/index.d.mts +67 -9
- package/dist/mmd/index.d.ts +67 -9
- package/dist/mmd/index.js +969 -625
- package/dist/mmd/index.js.map +1 -1
- package/dist/mmd/index.mjs +969 -628
- package/dist/mmd/index.mjs.map +1 -1
- package/dist/portfolio/index.js +10 -9
- package/dist/portfolio/index.mjs +5 -4
- package/dist/qqbot/index.d.mts +2 -0
- package/dist/qqbot/index.d.ts +2 -0
- package/dist/qqbot/index.js +21 -0
- package/dist/qqbot/index.js.map +1 -0
- package/dist/qqbot/index.mjs +4 -0
- package/dist/qqbot/index.mjs.map +1 -0
- package/dist/qqbot/server/index.d.mts +91 -0
- package/dist/qqbot/server/index.d.ts +91 -0
- package/dist/qqbot/server/index.js +21 -0
- package/dist/qqbot/server/index.js.map +1 -0
- package/dist/qqbot/server/index.mjs +4 -0
- package/dist/qqbot/server/index.mjs.map +1 -0
- package/dist/qqbot/ui/web/index.d.mts +10 -0
- package/dist/qqbot/ui/web/index.d.ts +10 -0
- package/dist/qqbot/ui/web/index.js +105 -0
- package/dist/qqbot/ui/web/index.js.map +1 -0
- package/dist/qqbot/ui/web/index.mjs +99 -0
- package/dist/qqbot/ui/web/index.mjs.map +1 -0
- package/dist/screenReceiver/index.d.mts +78 -0
- package/dist/screenReceiver/index.d.ts +78 -0
- package/dist/screenReceiver/index.js +17 -0
- package/dist/screenReceiver/index.js.map +1 -0
- package/dist/screenReceiver/index.mjs +4 -0
- package/dist/screenReceiver/index.mjs.map +1 -0
- package/dist/screenReceiver/server/index.d.mts +36 -0
- package/dist/screenReceiver/server/index.d.ts +36 -0
- package/dist/screenReceiver/server/index.js +160 -0
- package/dist/screenReceiver/server/index.js.map +1 -0
- package/dist/screenReceiver/server/index.mjs +157 -0
- package/dist/screenReceiver/server/index.mjs.map +1 -0
- package/dist/showmasterpiece/db/index.js +42 -42
- package/dist/showmasterpiece/db/index.mjs +1 -1
- package/dist/showmasterpiece/index.js +52 -41
- package/dist/showmasterpiece/index.js.map +1 -1
- package/dist/showmasterpiece/index.mjs +15 -4
- package/dist/showmasterpiece/index.mjs.map +1 -1
- package/dist/showmasterpiece/server/index.js +42 -42
- package/dist/showmasterpiece/server/index.mjs +1 -1
- package/dist/showmasterpiece/ui/miniapp/index.d.mts +2 -0
- package/dist/showmasterpiece/ui/miniapp/index.d.ts +2 -0
- package/dist/showmasterpiece/ui/miniapp/index.js +83 -55
- package/dist/showmasterpiece/ui/miniapp/index.js.map +1 -1
- package/dist/showmasterpiece/ui/miniapp/index.mjs +83 -55
- package/dist/showmasterpiece/ui/miniapp/index.mjs.map +1 -1
- package/dist/showmasterpiece/ui/web/index.js +43 -32
- package/dist/showmasterpiece/ui/web/index.mjs +15 -4
- package/dist/testYourself/index.js +13 -13
- package/dist/testYourself/index.mjs +2 -2
- package/dist/types-B-hOccQw.d.mts +122 -0
- package/dist/types-B8rGXc4e.d.mts +38 -0
- package/dist/types-Cg89HGz2.d.ts +38 -0
- package/dist/types-CvKvpyN8.d.mts +48 -0
- package/dist/types-CvKvpyN8.d.ts +48 -0
- package/dist/types-Dy6x2gJW.d.ts +122 -0
- package/dist/universalFile/server/index.js +11 -11
- package/dist/universalFile/server/index.mjs +4 -4
- package/package.json +101 -1
- package/dist/UniversalFileService-336GFY6N.mjs +0 -6
- package/dist/UniversalFileService-J6ET6KZK.js +0 -15
- package/dist/chunk-622Y6LTH.mjs.map +0 -1
- package/dist/chunk-CYTXGBP2.js.map +0 -1
- package/dist/chunk-GVVS4IMM.mjs +0 -302
- package/dist/chunk-GVVS4IMM.mjs.map +0 -1
- package/dist/chunk-PONZPO3U.mjs.map +0 -1
- package/dist/chunk-WC5QFO3T.js +0 -314
- package/dist/chunk-WC5QFO3T.js.map +0 -1
- package/dist/chunk-ZRWED7Q6.js.map +0 -1
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunkXAHM6B3V_js = require('./chunk-XAHM6B3V.js');
|
|
4
|
+
var chunkNAX4TUT7_js = require('./chunk-NAX4TUT7.js');
|
|
5
|
+
var React3 = require('react');
|
|
6
|
+
var components = require('@tarojs/components');
|
|
7
|
+
|
|
8
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
9
|
+
|
|
10
|
+
var React3__default = /*#__PURE__*/_interopDefault(React3);
|
|
11
|
+
|
|
12
|
+
function LoginModal({ isOpen, onClose, onSuccess, onSwitchToRegister }) {
|
|
13
|
+
const { login } = chunkNAX4TUT7_js.useAuth();
|
|
14
|
+
const [formData, setFormData] = React3.useState({ phone: "", password: "" });
|
|
15
|
+
const [error, setError] = React3.useState("");
|
|
16
|
+
const [loading, setLoading] = React3.useState(false);
|
|
17
|
+
if (!isOpen) return null;
|
|
18
|
+
const handleSubmit = async () => {
|
|
19
|
+
setError("");
|
|
20
|
+
setLoading(true);
|
|
21
|
+
if (!formData.phone || !formData.password) {
|
|
22
|
+
setError("\u8BF7\u586B\u5199\u5B8C\u6574\u4FE1\u606F");
|
|
23
|
+
setLoading(false);
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
if (!chunkXAHM6B3V_js.validatePhoneNumber(formData.phone)) {
|
|
27
|
+
setError("\u8BF7\u8F93\u5165\u6B63\u786E\u7684\u624B\u673A\u53F7");
|
|
28
|
+
setLoading(false);
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
const result = await login(formData);
|
|
32
|
+
if (result.success) {
|
|
33
|
+
onSuccess();
|
|
34
|
+
} else {
|
|
35
|
+
setError(result.message || "\u767B\u5F55\u5931\u8D25");
|
|
36
|
+
}
|
|
37
|
+
setLoading(false);
|
|
38
|
+
};
|
|
39
|
+
return /* @__PURE__ */ React3__default.default.createElement(components.View, { className: "auth-modal" }, /* @__PURE__ */ React3__default.default.createElement(components.View, { className: "auth-card" }, /* @__PURE__ */ React3__default.default.createElement(components.View, { className: "auth-header" }, /* @__PURE__ */ React3__default.default.createElement(components.Text, { className: "auth-title" }, "\u7528\u6237\u767B\u5F55"), /* @__PURE__ */ React3__default.default.createElement(components.Button, { className: "auth-close", onClick: onClose }, "\u5173\u95ED")), /* @__PURE__ */ React3__default.default.createElement(components.View, { className: "auth-form" }, /* @__PURE__ */ React3__default.default.createElement(
|
|
40
|
+
components.Input,
|
|
41
|
+
{
|
|
42
|
+
name: "phone",
|
|
43
|
+
value: formData.phone,
|
|
44
|
+
onInput: (e) => setFormData((prev) => ({ ...prev, phone: e.detail.value })),
|
|
45
|
+
placeholder: "\u8BF7\u8F93\u5165\u624B\u673A\u53F7",
|
|
46
|
+
type: "text"
|
|
47
|
+
}
|
|
48
|
+
), /* @__PURE__ */ React3__default.default.createElement(
|
|
49
|
+
components.Input,
|
|
50
|
+
{
|
|
51
|
+
name: "password",
|
|
52
|
+
value: formData.password,
|
|
53
|
+
onInput: (e) => setFormData((prev) => ({ ...prev, password: e.detail.value })),
|
|
54
|
+
placeholder: "\u8BF7\u8F93\u5165\u5BC6\u7801",
|
|
55
|
+
type: "password"
|
|
56
|
+
}
|
|
57
|
+
), error && /* @__PURE__ */ React3__default.default.createElement(components.Text, { className: "auth-error" }, error), /* @__PURE__ */ React3__default.default.createElement(components.Button, { className: "auth-submit", loading, onClick: handleSubmit }, loading ? "\u767B\u5F55\u4E2D..." : "\u767B\u5F55"), onSwitchToRegister && /* @__PURE__ */ React3__default.default.createElement(components.Button, { className: "auth-switch", onClick: onSwitchToRegister }, "\u53BB\u6CE8\u518C"))));
|
|
58
|
+
}
|
|
59
|
+
function RegisterModal({ isOpen, onClose, onSuccess, onSwitchToLogin }) {
|
|
60
|
+
const { register } = chunkNAX4TUT7_js.useAuth();
|
|
61
|
+
const [formData, setFormData] = React3.useState({
|
|
62
|
+
phone: "",
|
|
63
|
+
name: "",
|
|
64
|
+
password: "",
|
|
65
|
+
confirmPassword: ""
|
|
66
|
+
});
|
|
67
|
+
const [error, setError] = React3.useState("");
|
|
68
|
+
const [loading, setLoading] = React3.useState(false);
|
|
69
|
+
if (!isOpen) return null;
|
|
70
|
+
const handleSubmit = async () => {
|
|
71
|
+
setError("");
|
|
72
|
+
setLoading(true);
|
|
73
|
+
if (!formData.phone || !formData.password || !formData.confirmPassword) {
|
|
74
|
+
setError("\u8BF7\u586B\u5199\u5B8C\u6574\u4FE1\u606F");
|
|
75
|
+
setLoading(false);
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
if (!chunkXAHM6B3V_js.validatePhoneNumber(formData.phone)) {
|
|
79
|
+
setError("\u8BF7\u8F93\u5165\u6B63\u786E\u7684\u624B\u673A\u53F7");
|
|
80
|
+
setLoading(false);
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
const passwordValidation = chunkXAHM6B3V_js.validatePassword(formData.password);
|
|
84
|
+
if (!passwordValidation.valid) {
|
|
85
|
+
setError(passwordValidation.message || "\u5BC6\u7801\u683C\u5F0F\u9519\u8BEF");
|
|
86
|
+
setLoading(false);
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
if (formData.password !== formData.confirmPassword) {
|
|
90
|
+
setError("\u4E24\u6B21\u8F93\u5165\u7684\u5BC6\u7801\u4E0D\u4E00\u81F4");
|
|
91
|
+
setLoading(false);
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
const result = await register({
|
|
95
|
+
phone: formData.phone,
|
|
96
|
+
password: formData.password,
|
|
97
|
+
name: formData.name || void 0
|
|
98
|
+
});
|
|
99
|
+
if (result.success) {
|
|
100
|
+
onSuccess();
|
|
101
|
+
} else {
|
|
102
|
+
setError(result.message || "\u6CE8\u518C\u5931\u8D25");
|
|
103
|
+
}
|
|
104
|
+
setLoading(false);
|
|
105
|
+
};
|
|
106
|
+
return /* @__PURE__ */ React3__default.default.createElement(components.View, { className: "auth-modal" }, /* @__PURE__ */ React3__default.default.createElement(components.View, { className: "auth-card" }, /* @__PURE__ */ React3__default.default.createElement(components.View, { className: "auth-header" }, /* @__PURE__ */ React3__default.default.createElement(components.Text, { className: "auth-title" }, "\u7528\u6237\u6CE8\u518C"), /* @__PURE__ */ React3__default.default.createElement(components.Button, { className: "auth-close", onClick: onClose }, "\u5173\u95ED")), /* @__PURE__ */ React3__default.default.createElement(components.View, { className: "auth-form" }, /* @__PURE__ */ React3__default.default.createElement(
|
|
107
|
+
components.Input,
|
|
108
|
+
{
|
|
109
|
+
name: "phone",
|
|
110
|
+
value: formData.phone,
|
|
111
|
+
onInput: (e) => setFormData((prev) => ({ ...prev, phone: e.detail.value })),
|
|
112
|
+
placeholder: "\u8BF7\u8F93\u5165\u624B\u673A\u53F7",
|
|
113
|
+
type: "text"
|
|
114
|
+
}
|
|
115
|
+
), /* @__PURE__ */ React3__default.default.createElement(
|
|
116
|
+
components.Input,
|
|
117
|
+
{
|
|
118
|
+
name: "name",
|
|
119
|
+
value: formData.name,
|
|
120
|
+
onInput: (e) => setFormData((prev) => ({ ...prev, name: e.detail.value })),
|
|
121
|
+
placeholder: "\u8BF7\u8F93\u5165\u6635\u79F0",
|
|
122
|
+
type: "text"
|
|
123
|
+
}
|
|
124
|
+
), /* @__PURE__ */ React3__default.default.createElement(
|
|
125
|
+
components.Input,
|
|
126
|
+
{
|
|
127
|
+
name: "password",
|
|
128
|
+
value: formData.password,
|
|
129
|
+
onInput: (e) => setFormData((prev) => ({ ...prev, password: e.detail.value })),
|
|
130
|
+
placeholder: "\u8BF7\u8F93\u5165\u5BC6\u7801",
|
|
131
|
+
type: "password"
|
|
132
|
+
}
|
|
133
|
+
), /* @__PURE__ */ React3__default.default.createElement(
|
|
134
|
+
components.Input,
|
|
135
|
+
{
|
|
136
|
+
name: "confirmPassword",
|
|
137
|
+
value: formData.confirmPassword,
|
|
138
|
+
onInput: (e) => setFormData((prev) => ({ ...prev, confirmPassword: e.detail.value })),
|
|
139
|
+
placeholder: "\u8BF7\u786E\u8BA4\u5BC6\u7801",
|
|
140
|
+
type: "password"
|
|
141
|
+
}
|
|
142
|
+
), error && /* @__PURE__ */ React3__default.default.createElement(components.Text, { className: "auth-error" }, error), /* @__PURE__ */ React3__default.default.createElement(components.Button, { className: "auth-submit", loading, onClick: handleSubmit }, loading ? "\u6CE8\u518C\u4E2D..." : "\u6CE8\u518C"), onSwitchToLogin && /* @__PURE__ */ React3__default.default.createElement(components.Button, { className: "auth-switch", onClick: onSwitchToLogin }, "\u53BB\u767B\u5F55"))));
|
|
143
|
+
}
|
|
144
|
+
function ForgotPasswordModal({ isOpen, onClose, onSuccess }) {
|
|
145
|
+
const [step, setStep] = React3.useState("phone");
|
|
146
|
+
const [formData, setFormData] = React3.useState({
|
|
147
|
+
phone: "",
|
|
148
|
+
verificationCode: "",
|
|
149
|
+
newPassword: "",
|
|
150
|
+
confirmPassword: ""
|
|
151
|
+
});
|
|
152
|
+
const [error, setError] = React3.useState("");
|
|
153
|
+
const [loading, setLoading] = React3.useState(false);
|
|
154
|
+
if (!isOpen) return null;
|
|
155
|
+
const handleSendCode = async () => {
|
|
156
|
+
setError("");
|
|
157
|
+
setLoading(true);
|
|
158
|
+
if (!chunkXAHM6B3V_js.validatePhoneNumber(formData.phone)) {
|
|
159
|
+
setError("\u8BF7\u8F93\u5165\u6B63\u786E\u7684\u624B\u673A\u53F7");
|
|
160
|
+
setLoading(false);
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
try {
|
|
164
|
+
const response = await fetch("/api/auth/send-verification-code", {
|
|
165
|
+
method: "POST",
|
|
166
|
+
headers: { "Content-Type": "application/json" },
|
|
167
|
+
body: JSON.stringify({ phone: formData.phone })
|
|
168
|
+
});
|
|
169
|
+
const data = await response.json();
|
|
170
|
+
if (data.success) {
|
|
171
|
+
setStep("verify");
|
|
172
|
+
} else {
|
|
173
|
+
setError(data.message || "\u53D1\u9001\u5931\u8D25");
|
|
174
|
+
}
|
|
175
|
+
} catch (error2) {
|
|
176
|
+
console.error("\u{1F4A5} [ForgotPasswordModal] \u53D1\u9001\u9A8C\u8BC1\u7801\u5F02\u5E38:", error2);
|
|
177
|
+
setError("\u53D1\u9001\u5931\u8D25\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5");
|
|
178
|
+
} finally {
|
|
179
|
+
setLoading(false);
|
|
180
|
+
}
|
|
181
|
+
};
|
|
182
|
+
const handleVerifyCode = () => {
|
|
183
|
+
if (!formData.verificationCode) {
|
|
184
|
+
setError("\u8BF7\u8F93\u5165\u9A8C\u8BC1\u7801");
|
|
185
|
+
return;
|
|
186
|
+
}
|
|
187
|
+
setStep("reset");
|
|
188
|
+
};
|
|
189
|
+
const handleResetPassword = async () => {
|
|
190
|
+
const passwordValidation = chunkXAHM6B3V_js.validatePassword(formData.newPassword);
|
|
191
|
+
if (!passwordValidation.valid) {
|
|
192
|
+
setError(passwordValidation.message || "\u5BC6\u7801\u683C\u5F0F\u9519\u8BEF");
|
|
193
|
+
return;
|
|
194
|
+
}
|
|
195
|
+
if (formData.newPassword !== formData.confirmPassword) {
|
|
196
|
+
setError("\u4E24\u6B21\u8F93\u5165\u7684\u5BC6\u7801\u4E0D\u4E00\u81F4");
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
199
|
+
setLoading(true);
|
|
200
|
+
try {
|
|
201
|
+
const response = await fetch("/api/auth/reset-password", {
|
|
202
|
+
method: "POST",
|
|
203
|
+
headers: { "Content-Type": "application/json" },
|
|
204
|
+
body: JSON.stringify({
|
|
205
|
+
phone: formData.phone,
|
|
206
|
+
verificationCode: formData.verificationCode,
|
|
207
|
+
newPassword: formData.newPassword
|
|
208
|
+
})
|
|
209
|
+
});
|
|
210
|
+
const data = await response.json();
|
|
211
|
+
if (data.success) {
|
|
212
|
+
onSuccess();
|
|
213
|
+
} else {
|
|
214
|
+
setError(data.message || "\u91CD\u7F6E\u5931\u8D25");
|
|
215
|
+
}
|
|
216
|
+
} catch (error2) {
|
|
217
|
+
console.error("\u{1F4A5} [ForgotPasswordModal] \u91CD\u7F6E\u5BC6\u7801\u5F02\u5E38:", error2);
|
|
218
|
+
setError("\u91CD\u7F6E\u5931\u8D25\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5");
|
|
219
|
+
} finally {
|
|
220
|
+
setLoading(false);
|
|
221
|
+
}
|
|
222
|
+
};
|
|
223
|
+
const renderContent = () => {
|
|
224
|
+
if (step === "phone") {
|
|
225
|
+
return /* @__PURE__ */ React3__default.default.createElement(React3__default.default.Fragment, null, /* @__PURE__ */ React3__default.default.createElement(
|
|
226
|
+
components.Input,
|
|
227
|
+
{
|
|
228
|
+
name: "phone",
|
|
229
|
+
value: formData.phone,
|
|
230
|
+
onInput: (e) => setFormData((prev) => ({ ...prev, phone: e.detail.value })),
|
|
231
|
+
placeholder: "\u8BF7\u8F93\u5165\u624B\u673A\u53F7",
|
|
232
|
+
type: "text"
|
|
233
|
+
}
|
|
234
|
+
), /* @__PURE__ */ React3__default.default.createElement(components.Button, { className: "auth-submit", loading, onClick: handleSendCode }, loading ? "\u53D1\u9001\u4E2D..." : "\u53D1\u9001\u9A8C\u8BC1\u7801"));
|
|
235
|
+
}
|
|
236
|
+
if (step === "verify") {
|
|
237
|
+
return /* @__PURE__ */ React3__default.default.createElement(React3__default.default.Fragment, null, /* @__PURE__ */ React3__default.default.createElement(
|
|
238
|
+
components.Input,
|
|
239
|
+
{
|
|
240
|
+
name: "verificationCode",
|
|
241
|
+
value: formData.verificationCode,
|
|
242
|
+
onInput: (e) => setFormData((prev) => ({ ...prev, verificationCode: e.detail.value })),
|
|
243
|
+
placeholder: "\u8BF7\u8F93\u5165\u9A8C\u8BC1\u7801",
|
|
244
|
+
type: "text"
|
|
245
|
+
}
|
|
246
|
+
), /* @__PURE__ */ React3__default.default.createElement(components.Button, { className: "auth-submit", onClick: handleVerifyCode }, "\u4E0B\u4E00\u6B65"));
|
|
247
|
+
}
|
|
248
|
+
return /* @__PURE__ */ React3__default.default.createElement(React3__default.default.Fragment, null, /* @__PURE__ */ React3__default.default.createElement(
|
|
249
|
+
components.Input,
|
|
250
|
+
{
|
|
251
|
+
name: "newPassword",
|
|
252
|
+
value: formData.newPassword,
|
|
253
|
+
onInput: (e) => setFormData((prev) => ({ ...prev, newPassword: e.detail.value })),
|
|
254
|
+
placeholder: "\u8BF7\u8F93\u5165\u65B0\u5BC6\u7801",
|
|
255
|
+
type: "password"
|
|
256
|
+
}
|
|
257
|
+
), /* @__PURE__ */ React3__default.default.createElement(
|
|
258
|
+
components.Input,
|
|
259
|
+
{
|
|
260
|
+
name: "confirmPassword",
|
|
261
|
+
value: formData.confirmPassword,
|
|
262
|
+
onInput: (e) => setFormData((prev) => ({ ...prev, confirmPassword: e.detail.value })),
|
|
263
|
+
placeholder: "\u8BF7\u786E\u8BA4\u65B0\u5BC6\u7801",
|
|
264
|
+
type: "password"
|
|
265
|
+
}
|
|
266
|
+
), /* @__PURE__ */ React3__default.default.createElement(components.Button, { className: "auth-submit", loading, onClick: handleResetPassword }, loading ? "\u63D0\u4EA4\u4E2D..." : "\u91CD\u7F6E\u5BC6\u7801"));
|
|
267
|
+
};
|
|
268
|
+
return /* @__PURE__ */ React3__default.default.createElement(components.View, { className: "auth-modal" }, /* @__PURE__ */ React3__default.default.createElement(components.View, { className: "auth-card" }, /* @__PURE__ */ React3__default.default.createElement(components.View, { className: "auth-header" }, /* @__PURE__ */ React3__default.default.createElement(components.Text, { className: "auth-title" }, "\u627E\u56DE\u5BC6\u7801"), /* @__PURE__ */ React3__default.default.createElement(components.Button, { className: "auth-close", onClick: onClose }, "\u5173\u95ED")), /* @__PURE__ */ React3__default.default.createElement(components.View, { className: "auth-form" }, renderContent(), error && /* @__PURE__ */ React3__default.default.createElement(components.Text, { className: "auth-error" }, error))));
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
exports.ForgotPasswordModal = ForgotPasswordModal;
|
|
272
|
+
exports.LoginModal = LoginModal;
|
|
273
|
+
exports.RegisterModal = RegisterModal;
|
|
274
|
+
//# sourceMappingURL=chunk-EKDLZND6.js.map
|
|
275
|
+
//# sourceMappingURL=chunk-EKDLZND6.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/auth/legacy/ui/miniapp/components/LoginModal.tsx","../src/auth/legacy/ui/miniapp/components/RegisterModal.tsx","../src/auth/legacy/ui/miniapp/components/ForgotPasswordModal.tsx"],"names":["useAuth","useState","validatePhoneNumber","React","View","Text","Button","Input","validatePassword","error"],"mappings":"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","file":"chunk-EKDLZND6.js","sourcesContent":["'use client';\n\nimport React, { useState } from 'react';\nimport { View, Text, Input, Button } from '@tarojs/components';\nimport { useAuth } from '../../../contexts/AuthContext';\nimport { validatePhoneNumber } from '../../../utils/authUtils';\nimport type { LoginModalProps } from '../../../types';\n\ntype MiniappInputEvent = {\n detail: {\n value: string;\n };\n};\n\nexport default function LoginModal({ isOpen, onClose, onSuccess, onSwitchToRegister }: LoginModalProps) {\n const { login } = useAuth();\n const [formData, setFormData] = useState({ phone: '', password: '' });\n const [error, setError] = useState('');\n const [loading, setLoading] = useState(false);\n\n if (!isOpen) return null;\n\n const handleSubmit = async () => {\n setError('');\n setLoading(true);\n\n if (!formData.phone || !formData.password) {\n setError('请填写完整信息');\n setLoading(false);\n return;\n }\n\n if (!validatePhoneNumber(formData.phone)) {\n setError('请输入正确的手机号');\n setLoading(false);\n return;\n }\n\n const result = await login(formData);\n if (result.success) {\n onSuccess();\n } else {\n setError(result.message || '登录失败');\n }\n setLoading(false);\n };\n\n return (\n <View className=\"auth-modal\">\n <View className=\"auth-card\">\n <View className=\"auth-header\">\n <Text className=\"auth-title\">用户登录</Text>\n <Button className=\"auth-close\" onClick={onClose}>\n 关闭\n </Button>\n </View>\n <View className=\"auth-form\">\n <Input\n name=\"phone\"\n value={formData.phone}\n onInput={(e: MiniappInputEvent) => setFormData(prev => ({ ...prev, phone: e.detail.value }))}\n placeholder=\"请输入手机号\"\n type=\"text\"\n />\n <Input\n name=\"password\"\n value={formData.password}\n onInput={(e: MiniappInputEvent) => setFormData(prev => ({ ...prev, password: e.detail.value }))}\n placeholder=\"请输入密码\"\n type=\"password\"\n />\n {error && <Text className=\"auth-error\">{error}</Text>}\n <Button className=\"auth-submit\" loading={loading} onClick={handleSubmit}>\n {loading ? '登录中...' : '登录'}\n </Button>\n {onSwitchToRegister && (\n <Button className=\"auth-switch\" onClick={onSwitchToRegister}>\n 去注册\n </Button>\n )}\n </View>\n </View>\n </View>\n );\n}\n","'use client';\n\nimport React, { useState } from 'react';\nimport { View, Text, Input, Button } from '@tarojs/components';\nimport { useAuth } from '../../../contexts/AuthContext';\nimport { validatePhoneNumber, validatePassword } from '../../../utils/authUtils';\nimport type { RegisterModalProps } from '../../../types';\n\ntype MiniappInputEvent = {\n detail: {\n value: string;\n };\n};\n\nexport default function RegisterModal({ isOpen, onClose, onSuccess, onSwitchToLogin }: RegisterModalProps) {\n const { register } = useAuth();\n const [formData, setFormData] = useState({\n phone: '',\n name: '',\n password: '',\n confirmPassword: '',\n });\n const [error, setError] = useState('');\n const [loading, setLoading] = useState(false);\n\n if (!isOpen) return null;\n\n const handleSubmit = async () => {\n setError('');\n setLoading(true);\n\n if (!formData.phone || !formData.password || !formData.confirmPassword) {\n setError('请填写完整信息');\n setLoading(false);\n return;\n }\n\n if (!validatePhoneNumber(formData.phone)) {\n setError('请输入正确的手机号');\n setLoading(false);\n return;\n }\n\n const passwordValidation = validatePassword(formData.password);\n if (!passwordValidation.valid) {\n setError(passwordValidation.message || '密码格式错误');\n setLoading(false);\n return;\n }\n\n if (formData.password !== formData.confirmPassword) {\n setError('两次输入的密码不一致');\n setLoading(false);\n return;\n }\n\n const result = await register({\n phone: formData.phone,\n password: formData.password,\n name: formData.name || undefined,\n });\n\n if (result.success) {\n onSuccess();\n } else {\n setError(result.message || '注册失败');\n }\n\n setLoading(false);\n };\n\n return (\n <View className=\"auth-modal\">\n <View className=\"auth-card\">\n <View className=\"auth-header\">\n <Text className=\"auth-title\">用户注册</Text>\n <Button className=\"auth-close\" onClick={onClose}>\n 关闭\n </Button>\n </View>\n <View className=\"auth-form\">\n <Input\n name=\"phone\"\n value={formData.phone}\n onInput={(e: MiniappInputEvent) => setFormData(prev => ({ ...prev, phone: e.detail.value }))}\n placeholder=\"请输入手机号\"\n type=\"text\"\n />\n <Input\n name=\"name\"\n value={formData.name}\n onInput={(e: MiniappInputEvent) => setFormData(prev => ({ ...prev, name: e.detail.value }))}\n placeholder=\"请输入昵称\"\n type=\"text\"\n />\n <Input\n name=\"password\"\n value={formData.password}\n onInput={(e: MiniappInputEvent) => setFormData(prev => ({ ...prev, password: e.detail.value }))}\n placeholder=\"请输入密码\"\n type=\"password\"\n />\n <Input\n name=\"confirmPassword\"\n value={formData.confirmPassword}\n onInput={(e: MiniappInputEvent) => setFormData(prev => ({ ...prev, confirmPassword: e.detail.value }))}\n placeholder=\"请确认密码\"\n type=\"password\"\n />\n {error && <Text className=\"auth-error\">{error}</Text>}\n <Button className=\"auth-submit\" loading={loading} onClick={handleSubmit}>\n {loading ? '注册中...' : '注册'}\n </Button>\n {onSwitchToLogin && (\n <Button className=\"auth-switch\" onClick={onSwitchToLogin}>\n 去登录\n </Button>\n )}\n </View>\n </View>\n </View>\n );\n}\n","'use client';\n\nimport React, { useState } from 'react';\nimport { View, Text, Input, Button } from '@tarojs/components';\nimport { validatePhoneNumber, validatePassword } from '../../../utils/authUtils';\nimport type { ForgotPasswordModalProps } from '../../../types';\n\ntype MiniappInputEvent = {\n detail: {\n value: string;\n };\n};\n\nexport default function ForgotPasswordModal({ isOpen, onClose, onSuccess }: ForgotPasswordModalProps) {\n const [step, setStep] = useState<'phone' | 'verify' | 'reset'>('phone');\n const [formData, setFormData] = useState({\n phone: '',\n verificationCode: '',\n newPassword: '',\n confirmPassword: '',\n });\n const [error, setError] = useState('');\n const [loading, setLoading] = useState(false);\n\n if (!isOpen) return null;\n\n const handleSendCode = async () => {\n setError('');\n setLoading(true);\n\n if (!validatePhoneNumber(formData.phone)) {\n setError('请输入正确的手机号');\n setLoading(false);\n return;\n }\n\n try {\n const response = await fetch('/api/auth/send-verification-code', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ phone: formData.phone }),\n });\n const data = await response.json();\n if (data.success) {\n setStep('verify');\n } else {\n setError(data.message || '发送失败');\n }\n } catch (error) {\n console.error('💥 [ForgotPasswordModal] 发送验证码异常:', error);\n setError('发送失败,请稍后重试');\n } finally {\n setLoading(false);\n }\n };\n\n const handleVerifyCode = () => {\n if (!formData.verificationCode) {\n setError('请输入验证码');\n return;\n }\n setStep('reset');\n };\n\n const handleResetPassword = async () => {\n const passwordValidation = validatePassword(formData.newPassword);\n if (!passwordValidation.valid) {\n setError(passwordValidation.message || '密码格式错误');\n return;\n }\n if (formData.newPassword !== formData.confirmPassword) {\n setError('两次输入的密码不一致');\n return;\n }\n\n setLoading(true);\n try {\n const response = await fetch('/api/auth/reset-password', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n phone: formData.phone,\n verificationCode: formData.verificationCode,\n newPassword: formData.newPassword,\n }),\n });\n const data = await response.json();\n if (data.success) {\n onSuccess();\n } else {\n setError(data.message || '重置失败');\n }\n } catch (error) {\n console.error('💥 [ForgotPasswordModal] 重置密码异常:', error);\n setError('重置失败,请稍后重试');\n } finally {\n setLoading(false);\n }\n };\n\n const renderContent = () => {\n if (step === 'phone') {\n return (\n <>\n <Input\n name=\"phone\"\n value={formData.phone}\n onInput={(e: MiniappInputEvent) => setFormData(prev => ({ ...prev, phone: e.detail.value }))}\n placeholder=\"请输入手机号\"\n type=\"text\"\n />\n <Button className=\"auth-submit\" loading={loading} onClick={handleSendCode}>\n {loading ? '发送中...' : '发送验证码'}\n </Button>\n </>\n );\n }\n\n if (step === 'verify') {\n return (\n <>\n <Input\n name=\"verificationCode\"\n value={formData.verificationCode}\n onInput={(e: MiniappInputEvent) => setFormData(prev => ({ ...prev, verificationCode: e.detail.value }))}\n placeholder=\"请输入验证码\"\n type=\"text\"\n />\n <Button className=\"auth-submit\" onClick={handleVerifyCode}>\n 下一步\n </Button>\n </>\n );\n }\n\n return (\n <>\n <Input\n name=\"newPassword\"\n value={formData.newPassword}\n onInput={(e: MiniappInputEvent) => setFormData(prev => ({ ...prev, newPassword: e.detail.value }))}\n placeholder=\"请输入新密码\"\n type=\"password\"\n />\n <Input\n name=\"confirmPassword\"\n value={formData.confirmPassword}\n onInput={(e: MiniappInputEvent) => setFormData(prev => ({ ...prev, confirmPassword: e.detail.value }))}\n placeholder=\"请确认新密码\"\n type=\"password\"\n />\n <Button className=\"auth-submit\" loading={loading} onClick={handleResetPassword}>\n {loading ? '提交中...' : '重置密码'}\n </Button>\n </>\n );\n };\n\n return (\n <View className=\"auth-modal\">\n <View className=\"auth-card\">\n <View className=\"auth-header\">\n <Text className=\"auth-title\">找回密码</Text>\n <Button className=\"auth-close\" onClick={onClose}>\n 关闭\n </Button>\n </View>\n <View className=\"auth-form\">\n {renderContent()}\n {error && <Text className=\"auth-error\">{error}</Text>}\n </View>\n </View>\n </View>\n );\n}\n"]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
// src/auth/legacy/types/index.ts
|
|
4
|
+
var UserRole = /* @__PURE__ */ ((UserRole2) => {
|
|
5
|
+
UserRole2["USER"] = "user";
|
|
6
|
+
UserRole2["ADMIN"] = "admin";
|
|
7
|
+
return UserRole2;
|
|
8
|
+
})(UserRole || {});
|
|
9
|
+
|
|
10
|
+
exports.UserRole = UserRole;
|
|
11
|
+
//# sourceMappingURL=chunk-EKQPFZXQ.js.map
|
|
12
|
+
//# sourceMappingURL=chunk-EKQPFZXQ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/auth/legacy/types/index.ts"],"names":["UserRole"],"mappings":";;;AA+LO,IAAK,QAAA,qBAAAA,SAAAA,KAAL;AACL,EAAAA,UAAA,MAAA,CAAA,GAAO,MAAA;AACP,EAAAA,UAAA,OAAA,CAAA,GAAQ,OAAA;AAFE,EAAA,OAAAA,SAAAA;AAAA,CAAA,EAAA,QAAA,IAAA,EAAA","file":"chunk-EKQPFZXQ.js","sourcesContent":["// ===== 用户相关类型 =====\n\n/**\n * 用户信息接口\n */\nexport interface User {\n id: number;\n phone: string;\n name?: string | null;\n email?: string | null;\n role: string;\n isActive: boolean;\n lastLoginAt?: Date | null;\n createdAt: Date;\n updatedAt: Date;\n}\n\n/**\n * 用户会话接口\n */\nexport interface UserSession {\n id: number;\n userId: number;\n sessionToken: string;\n expiresAt: Date;\n createdAt: Date;\n}\n\n// ===== 请求/响应类型 =====\n\n/**\n * 登录请求接口\n */\nexport interface LoginRequest {\n phone: string;\n password: string;\n}\n\n/**\n * 注册请求接口\n */\nexport interface RegisterRequest {\n phone: string;\n password: string;\n name?: string;\n}\n\n/**\n * 登录响应接口\n */\nexport interface LoginResponse {\n success: boolean;\n message: string;\n user?: User;\n sessionToken?: string;\n}\n\n/**\n * 注册响应接口\n */\nexport interface RegisterResponse {\n success: boolean;\n message: string;\n user?: User;\n sessionToken?: string;\n}\n\n/**\n * 会话验证响应接口\n */\nexport interface SessionValidationResponse {\n valid: boolean;\n user?: User;\n message?: string;\n}\n\n/**\n * 会话验证结果接口\n */\nexport interface SessionValidation {\n valid: boolean;\n user?: User;\n}\n\n// ===== 组件Props类型 =====\n\n/**\n * 登录模态框Props\n */\nexport interface LoginModalProps {\n isOpen: boolean;\n onClose: () => void;\n onSuccess: () => void;\n onSwitchToRegister?: () => void;\n}\n\n/**\n * 注册模态框Props\n */\nexport interface RegisterModalProps {\n isOpen: boolean;\n onClose: () => void;\n onSuccess: () => void;\n onSwitchToLogin?: () => void;\n}\n\n/**\n * 认证守卫Props\n */\nexport interface AuthGuardProps {\n children: React.ReactNode;\n fallback?: React.ReactNode;\n requireAuth?: boolean;\n}\n\n/**\n * 自定义菜单项接口\n */\nexport interface CustomMenuItem {\n id: string;\n label: string;\n icon?: React.ComponentType<any>;\n onClick: () => void;\n requireAuth?: boolean; // 是否需要登录才显示\n}\n\n/**\n * 用户菜单Props\n */\nexport interface UserMenuProps {\n customMenuItems?: CustomMenuItem[]; // 自定义菜单项\n className?: string; // 自定义样式类名\n}\n\n/**\n * 忘记密码模态框Props\n */\nexport interface ForgotPasswordModalProps {\n isOpen: boolean;\n onClose: () => void;\n onSuccess: () => void;\n}\n\n// ===== Hook返回类型 =====\n\n/**\n * useAuth Hook返回值类型\n */\nexport interface UseAuthReturn {\n user: User | null;\n loading: boolean;\n isAuthenticated: boolean;\n login: (credentials: LoginRequest) => Promise<{ success: boolean; user?: User; message?: string }>;\n register: (userData: RegisterRequest) => Promise<{ success: boolean; user?: User; message?: string }>;\n logout: () => Promise<void>;\n refreshUser: () => void;\n}\n\n// ===== 服务相关类型 =====\n\n/**\n * 认证服务接口\n */\nexport interface AuthService {\n verifyPassword(phone: string, password: string): Promise<User | null>;\n createUser(phone: string, password: string, name?: string): Promise<User>;\n createSession(userId: number): Promise<UserSession>;\n validateSession(sessionToken: string): Promise<SessionValidation>;\n deleteSession(sessionToken: string): Promise<void>;\n deleteUserSessions(userId: number): Promise<void>;\n updateLastLogin(userId: number): Promise<void>;\n cleanupExpiredSessions(): Promise<void>;\n getUserByPhone(phone: string): Promise<User | null>;\n sendVerificationCode(phone: string): Promise<string>;\n verifyCode(phone: string, code: string): Promise<boolean>;\n resetPassword(phone: string, newPassword: string): Promise<void>;\n cleanupExpiredVerificationCodes(): Promise<void>;\n}\n\n// ===== 工具函数类型 =====\n\n/**\n * API权限验证函数类型\n */\nexport type ValidateApiAuth = (request: Request) => Promise<User | null>;\n\n// ===== 常量类型 =====\n\n/**\n * 用户角色枚举\n */\nexport enum UserRole {\n USER = 'user',\n ADMIN = 'admin'\n}\n\n/**\n * 会话配置\n */\nexport interface SessionConfig {\n maxAge: number; // 会话最大存活时间(秒)\n cookieName: string; // Cookie名称\n secure: boolean; // 是否使用安全Cookie\n httpOnly: boolean; // 是否仅HTTP访问\n sameSite: 'strict' | 'lax' | 'none'; // SameSite策略\n} "]}
|