muxi feng commited on
Commit
28f2243
·
1 Parent(s): 47eb5bf

增加登出接口和其他的配置

Browse files
app/api/user/findpwd/route.ts CHANGED
@@ -2,21 +2,16 @@ import { NextRequest } from "next/server";
2
 
3
  export async function POST(req: NextRequest) {
4
  try {
5
- const token=req.headers.get("auth") ?? ""
6
- const admin=process.env.ADMIN
7
- const key=process.env.KEY
8
- const user=req.nextUrl.searchParams.get("user")
9
- let res=await fetch("https://dujiaoka.dwzynj.top/main/api/user/find_password.php?admin="+admin+"&key="+key+"&user="+user, {
10
- method: "GET",
11
- headers:{
12
- "token":token
13
- },
14
  })
15
  let msg=await res.json()
16
  // console.log(msg)
17
  return new Response(JSON.stringify(msg))
18
  } catch (e) {
19
- console.error("[shuixian] ", e);
20
  return new Response(JSON.stringify(e));
21
  }
22
  }
 
2
 
3
  export async function POST(req: NextRequest) {
4
  try {
5
+ const mail=req.nextUrl.searchParams.get("mail")
6
+ const code=req.nextUrl.searchParams.get("code")
7
+ let res=await fetch("https://eladmin.dwzynj.top/api/users/restPwd?mail="+mail+"&code="+code, {
8
+ method: "POST"
 
 
 
 
 
9
  })
10
  let msg=await res.json()
11
  // console.log(msg)
12
  return new Response(JSON.stringify(msg))
13
  } catch (e) {
14
+ console.error("[eladmin] ", e);
15
  return new Response(JSON.stringify(e));
16
  }
17
  }
app/api/user/logout/route.ts ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import { NextRequest, NextResponse } from "next/server";
2
+ import { auth } from "../../auth";
3
+
4
+ export async function POST(req: NextRequest) {
5
+ try {
6
+ const authResult = auth(req);
7
+ if (authResult.error) {
8
+ return NextResponse.json(authResult, {
9
+ status: 401,
10
+ });
11
+ }
12
+ const token=req.headers.get("auth") ?? ""
13
+ let res=await fetch("https://eladmin.dwzynj.top/auth/logout", {
14
+ method: "DELETE",
15
+ headers:{
16
+ "Authorization":token
17
+ }
18
+ })
19
+ if(res.status==401){
20
+ let msg={
21
+ flag:false,
22
+ msg:"未登录!"
23
+ }
24
+ // console.log(res.status)
25
+ return new Response(JSON.stringify(msg))
26
+ }
27
+ let msg=await res.json()
28
+ console.log(msg)
29
+ return new Response(JSON.stringify(msg))
30
+ } catch (e) {
31
+ console.error("[eladmin] ", e);
32
+ return new Response(JSON.stringify(e));
33
+ }
34
+ }
app/api/user/restmail/route.ts ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import { NextRequest } from "next/server";
2
+
3
+ export async function POST(req: NextRequest) {
4
+ try {
5
+ const mail=req.nextUrl.searchParams.get("mail")
6
+ let res=await fetch("https://eladmin.dwzynj.top/api/code/email/resetPass?email="+mail, {
7
+ method: "POST"
8
+ })
9
+ let msg=await res.json()
10
+ // console.log(res.status)
11
+ return new Response(JSON.stringify(msg))
12
+ } catch (e) {
13
+ console.error("[eladmin] ", e);
14
+ return new Response(JSON.stringify(e));
15
+ }
16
+ }
app/api/user/sig/route.ts CHANGED
@@ -28,7 +28,7 @@ export async function POST(req: NextRequest) {
28
  // console.log(msg)
29
  return new Response(JSON.stringify(msg))
30
  } catch (e) {
31
- console.error("[shuixian] ", e);
32
  return new Response(JSON.stringify(e));
33
  }
34
  }
 
28
  // console.log(msg)
29
  return new Response(JSON.stringify(msg))
30
  } catch (e) {
31
+ console.error("[eladmin] ", e);
32
  return new Response(JSON.stringify(e));
33
  }
34
  }
app/api/user/updatePass/route.ts ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import { NextRequest, NextResponse } from "next/server";
2
+ import { auth } from "../../auth";
3
+
4
+ export async function POST(req: NextRequest) {
5
+ try {
6
+ const authResult = auth(req);
7
+ if (authResult.error) {
8
+ return NextResponse.json(authResult, {
9
+ status: 401,
10
+ });
11
+ }
12
+ const token=req.headers.get("auth") ?? ""
13
+ let res=await fetch("https://eladmin.dwzynj.top/api/users/updatePass", {
14
+ method: "POST",
15
+ headers:{
16
+ "Content-Type":'application/json;charset=utf-8',
17
+ "Authorization":token
18
+ },
19
+ body:JSON.stringify(await req.json())
20
+ })
21
+ if(res.status==401){
22
+ let msg={
23
+ flag:false,
24
+ message:"未登录!"
25
+ }
26
+ // console.log(res.status)
27
+ return new Response(JSON.stringify(msg))
28
+ }
29
+ let msg=await res.json()
30
+ // console.log(msg)
31
+ return new Response(JSON.stringify(msg))
32
+ } catch (e) {
33
+ console.error("[eladmin] ", e);
34
+ return new Response(JSON.stringify(e));
35
+ }
36
+ }
app/api/user/vip/route.ts CHANGED
@@ -28,7 +28,7 @@ export async function POST(req: NextRequest) {
28
  console.log(msg)
29
  return new Response(JSON.stringify(msg))
30
  } catch (e) {
31
- console.error("[shuixian] ", e);
32
  return new Response(JSON.stringify(e));
33
  }
34
  }
 
28
  console.log(msg)
29
  return new Response(JSON.stringify(msg))
30
  } catch (e) {
31
+ console.error("[eladmin] ", e);
32
  return new Response(JSON.stringify(e));
33
  }
34
  }
app/components/findpwd.module.scss CHANGED
@@ -55,12 +55,12 @@
55
  }
56
 
57
  .wangji{
58
- padding-right: 70px;
59
  font-size: 12px;
60
  }
61
 
62
  .zhuce{
63
- padding-left: 70px;
64
  font-size: 12px;
65
  }
66
 
@@ -68,7 +68,36 @@
68
  background-color: #1db144;
69
  color: white;
70
  padding: 0;
71
- width: 193px;
72
  display: block;
73
  margin: 0 auto;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
74
  }
 
55
  }
56
 
57
  .wangji{
58
+ padding-right: 60px;
59
  font-size: 12px;
60
  }
61
 
62
  .zhuce{
63
+ padding-left: 60px;
64
  font-size: 12px;
65
  }
66
 
 
68
  background-color: #1db144;
69
  color: white;
70
  padding: 0;
71
+ width: 183px;
72
  display: block;
73
  margin: 0 auto;
74
+ }
75
+
76
+ .code{
77
+ border: var(--border-in-light);
78
+ padding: 10px;
79
+ margin-right: 10px;
80
+ border-radius: 10px;
81
+ -webkit-appearance: none;
82
+ -moz-appearance: none;
83
+ appearance: none;
84
+ cursor: pointer;
85
+ background-color: var(--white);
86
+ color: var(--black);
87
+ text-align: left;
88
+ width: 60px;
89
+ }
90
+
91
+ .codebox{
92
+ vertical-align: bottom;
93
+ }
94
+
95
+ .codeButton{
96
+ background-color: #1db144;
97
+ color: white;
98
+ padding: 0;
99
+ width: 93px;
100
+ display: inline;
101
+ margin: 0 auto;
102
+ font-size: 8px;
103
  }
app/components/findpwd.tsx CHANGED
@@ -4,25 +4,59 @@ import ChatIcon from "../icons/chatgpt.svg"
4
  import styles from "./findpwd.module.scss";
5
  import { IconButton } from "./button";
6
  import { useUserStore } from "../store";
7
- import { useState } from "react";
8
 
9
 
10
  export function FindPwd(){
11
- const [user, setUser] = useState("");
 
12
  const [status, setStatus] = useState("");
 
 
 
13
 
14
- const onUser = (text: string) => {
15
- setUser(text)
16
  };
17
 
18
- function findpwd(){
19
- useUserStore.getState().findPwd(user)
 
 
 
20
  setStatus("false")
 
21
  setTimeout(()=>{
22
  setStatus("")
23
  },4000)
24
  }
25
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
26
  return (
27
  <ErrorBoundary>
28
  <div className="window-header">
@@ -43,10 +77,27 @@ export function FindPwd(){
43
  <input
44
  type="input"
45
  className={styles.name}
46
- placeholder={Locale.User.User}
47
- onInput={(e) => onUser(e.currentTarget.value)}
48
- value={user}
 
 
 
 
 
 
 
 
 
49
  ></input>
 
 
 
 
 
 
 
 
50
  </div>
51
  <div>
52
  <span className={styles.wangji}><a href="/#/login">{Locale.User.Login}</a></span>
 
4
  import styles from "./findpwd.module.scss";
5
  import { IconButton } from "./button";
6
  import { useUserStore } from "../store";
7
+ import { useEffect, useState } from "react";
8
 
9
 
10
  export function FindPwd(){
11
+ const userStore=useUserStore()
12
+ const [email, setEmail] = useState("");
13
  const [status, setStatus] = useState("");
14
+ const [code, setCode] = useState("");
15
+ const [codeStatus, setcodeStatus] = useState("");
16
+ const [getcode, setgetcode] = useState("");
17
 
18
+ const onEmail = (text: string) => {
19
+ setEmail(text)
20
  };
21
 
22
+ const onCode = (text: string) => {
23
+ setCode(text)
24
+ };
25
+
26
+ async function findpwd(){
27
  setStatus("false")
28
+ await useUserStore.getState().findPwd(email,code)
29
  setTimeout(()=>{
30
  setStatus("")
31
  },4000)
32
  }
33
 
34
+ const getMailCode=()=>{
35
+ userStore.getRestPwdCode(email)
36
+ getCode()
37
+ }
38
+ var countdown=60;
39
+ const getCode=()=>{
40
+ if (countdown == 0) {
41
+ setcodeStatus("")
42
+ setgetcode("发送验证码")
43
+ countdown = 60;
44
+ return;
45
+ } else {
46
+ setcodeStatus("true")
47
+ setgetcode("(" + countdown + ")")
48
+ countdown--;
49
+ }
50
+ setTimeout(function() {
51
+ getCode() }
52
+ ,1000)
53
+ }
54
+
55
+ useEffect(()=>{
56
+ setcodeStatus("")
57
+ setgetcode("发送验证码")
58
+ },[])
59
+
60
  return (
61
  <ErrorBoundary>
62
  <div className="window-header">
 
77
  <input
78
  type="input"
79
  className={styles.name}
80
+ placeholder={Locale.User.Email}
81
+ onInput={(e) => onEmail(e.currentTarget.value)}
82
+ value={email}
83
+ ></input>
84
+ </div>
85
+ <div className={styles.codebox}>
86
+ <input
87
+ type="input"
88
+ className={styles.code}
89
+ placeholder={Locale.User.Code}
90
+ onInput={(e) => onCode(e.currentTarget.value)}
91
+ value={code}
92
  ></input>
93
+ <IconButton
94
+ disabled={!!codeStatus}
95
+ text={getcode}
96
+ className={styles.codeButton}
97
+ onClick={()=>{
98
+ getMailCode()
99
+ }}
100
+ ></IconButton>
101
  </div>
102
  <div>
103
  <span className={styles.wangji}><a href="/#/login">{Locale.User.Login}</a></span>
app/components/login.module.scss CHANGED
@@ -24,7 +24,7 @@
24
  -moz-appearance: none;
25
  appearance: none;
26
  cursor: pointer;
27
- width: 100px;
28
  background-color: var(--white);
29
  color: var(--black);
30
  text-align: left;
@@ -74,12 +74,12 @@
74
  }
75
 
76
  .wangji{
77
- padding-right: 60px;
78
  font-size: 12px;
79
  }
80
 
81
  .zhuce{
82
- padding-left: 60px;
83
  font-size: 12px;
84
  }
85
 
@@ -87,7 +87,7 @@
87
  background-color: #1db144;
88
  color: white;
89
  padding: 0;
90
- width: 193px;
91
  display: block;
92
  margin: 0 auto;
93
  }
 
24
  -moz-appearance: none;
25
  appearance: none;
26
  cursor: pointer;
27
+ width: 80px;
28
  background-color: var(--white);
29
  color: var(--black);
30
  text-align: left;
 
74
  }
75
 
76
  .wangji{
77
+ padding-right: 50px;
78
  font-size: 12px;
79
  }
80
 
81
  .zhuce{
82
+ padding-left: 50px;
83
  font-size: 12px;
84
  }
85
 
 
87
  background-color: #1db144;
88
  color: white;
89
  padding: 0;
90
+ width: 183px;
91
  display: block;
92
  margin: 0 auto;
93
  }
app/components/login.tsx CHANGED
@@ -27,8 +27,8 @@ export function Login(){
27
  };
28
 
29
  const loginTo=async ()=>{
30
- await userStore.login(user,password,code)
31
  setStatus("false")
 
32
  setTimeout(()=>{
33
  setStatus("")
34
  },4000)
 
27
  };
28
 
29
  const loginTo=async ()=>{
 
30
  setStatus("false")
31
+ await userStore.login(user,password,code)
32
  setTimeout(()=>{
33
  setStatus("")
34
  },4000)
app/components/register.module.scss CHANGED
@@ -23,7 +23,7 @@
23
  background-color: var(--white);
24
  color: var(--black);
25
  text-align: left;
26
- width: 75px;
27
  }
28
 
29
  .codebox{
@@ -74,12 +74,12 @@
74
  }
75
 
76
  .wangji{
77
- padding-right: 60px;
78
  font-size: 12px;
79
  }
80
 
81
  .zhuce{
82
- padding-left: 60px;
83
  font-size: 12px;
84
  }
85
 
@@ -87,7 +87,7 @@
87
  background-color: #1db144;
88
  color: white;
89
  padding: 0;
90
- width: 193px;
91
  display: block;
92
  margin: 0 auto;
93
  }
 
23
  background-color: var(--white);
24
  color: var(--black);
25
  text-align: left;
26
+ width: 60px;
27
  }
28
 
29
  .codebox{
 
74
  }
75
 
76
  .wangji{
77
+ padding-right: 50px;
78
  font-size: 12px;
79
  }
80
 
81
  .zhuce{
82
+ padding-left: 50px;
83
  font-size: 12px;
84
  }
85
 
 
87
  background-color: #1db144;
88
  color: white;
89
  padding: 0;
90
+ width: 183px;
91
  display: block;
92
  margin: 0 auto;
93
  }
app/components/user.tsx CHANGED
@@ -2,7 +2,7 @@ import { useState, useEffect } from "react";
2
 
3
  import styles from "./user.module.scss";
4
  import EditIcon from "../icons/edit.svg";
5
- import { List, ListItem, Popover, showModal, showToast } from "./ui-lib";
6
 
7
  import { IconButton } from "./button";
8
  import {
@@ -16,11 +16,84 @@ import { ErrorBoundary } from "./error";
16
  import { useNavigate } from "react-router-dom";
17
  import { Avatar, AvatarPicker } from "./emoji";
18
  import { useUserStore } from "../store/user";
19
- import { useStore } from "zustand";
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
20
 
21
  export function User() {
22
  const navigate = useNavigate();
23
  const [showEmojiPicker, setShowEmojiPicker] = useState(false);
 
24
  const config = useAppConfig();
25
  const updateConfig = config.update;
26
 
@@ -164,7 +237,6 @@ export function User() {
164
 
165
  <ListItem title="充值">
166
  <IconButton
167
- icon={<EditIcon />}
168
  text="购买卡密"
169
  onClick={()=>{
170
  window.location.href="https://qtka.scgzfw.cn/links/879AEC7D"
@@ -174,7 +246,6 @@ export function User() {
174
 
175
  <ListItem title={Locale.User.SigState}>
176
  <IconButton
177
- icon={<EditIcon />}
178
  disabled={!accessStore.auth}
179
  text="签到(送积分)"
180
  onClick={()=>{
@@ -182,6 +253,15 @@ export function User() {
182
  }}
183
  />
184
  </ListItem>
 
 
 
 
 
 
 
 
 
185
  </List>
186
 
187
  <List>
@@ -191,14 +271,18 @@ export function User() {
191
  disabled={!accessStore.auth}
192
  text="登出"
193
  onClick={()=>{
194
- accessStore.updateAuth("")
195
- useStor.reset()
196
- setUserName("")
 
197
  showToast("登出成功!")
198
  }}
199
  />
200
  </ListItem>
201
  </List>
 
 
 
202
  </div>
203
  </ErrorBoundary>
204
  );
 
2
 
3
  import styles from "./user.module.scss";
4
  import EditIcon from "../icons/edit.svg";
5
+ import { List, ListItem, Modal, Popover, showModal, showToast } from "./ui-lib";
6
 
7
  import { IconButton } from "./button";
8
  import {
 
16
  import { useNavigate } from "react-router-dom";
17
  import { Avatar, AvatarPicker } from "./emoji";
18
  import { useUserStore } from "../store/user";
19
+
20
+ function UserPwdModal(props: { onClose?: () => void }) {
21
+ const useStor = useUserStore()
22
+ const [oldPwd, setOldPwd] = useState('');
23
+ const [newPwd, setNewPwd] = useState('');
24
+ const [newPwd1, setNewPwd1] = useState('');
25
+
26
+ async function updatePass():Promise<any>{
27
+ if(newPwd!=newPwd1){
28
+ showToast("两次输入的新密码不一致!")
29
+ return false
30
+ }
31
+ if(oldPwd==newPwd1||oldPwd==newPwd){
32
+ showToast("新密码与旧密码一致!")
33
+ return false
34
+ }
35
+ await useStor.updatePass(oldPwd,newPwd)
36
+ }
37
+
38
+ return (
39
+ <div className="modal-mask">
40
+ <Modal
41
+ title={Locale.User.Pass.Title}
42
+ onClose={() => props.onClose?.()}
43
+ actions={[
44
+ <IconButton
45
+ key="add"
46
+ icon={<EditIcon />}
47
+ onClick={()=>{
48
+ updatePass().then(()=>{
49
+ props.onClose?.()
50
+ })
51
+ }}
52
+ bordered
53
+ text={Locale.User.Save}
54
+ />,
55
+ ]}
56
+ >
57
+ <div>
58
+ <List>
59
+ <ListItem title={Locale.User.Pass.OldPwd}>
60
+ <input
61
+ type="password"
62
+ className={styles.kamicode}
63
+ value={oldPwd}
64
+ onChange={(e)=>{setOldPwd(e.currentTarget.value)}}
65
+ >
66
+ </input>
67
+ </ListItem>
68
+ <ListItem title={Locale.User.Pass.NewPwd}>
69
+ <input
70
+ type="password"
71
+ className={styles.kamicode}
72
+ value={newPwd}
73
+ onChange={(e)=>{setNewPwd(e.currentTarget.value)}}
74
+ >
75
+ </input>
76
+ </ListItem>
77
+ <ListItem title={Locale.User.Pass.NewPwd1}>
78
+ <input
79
+ type="password"
80
+ className={styles.kamicode}
81
+ value={newPwd1}
82
+ onChange={(e)=>{setNewPwd1(e.currentTarget.value)}}
83
+ >
84
+ </input>
85
+ </ListItem>
86
+ </List>
87
+ </div>
88
+ </Modal>
89
+ </div>
90
+ );
91
+ }
92
 
93
  export function User() {
94
  const navigate = useNavigate();
95
  const [showEmojiPicker, setShowEmojiPicker] = useState(false);
96
+ const [shouldShowPwdModal, setShowPwdModal] = useState(false);
97
  const config = useAppConfig();
98
  const updateConfig = config.update;
99
 
 
237
 
238
  <ListItem title="充值">
239
  <IconButton
 
240
  text="购买卡密"
241
  onClick={()=>{
242
  window.location.href="https://qtka.scgzfw.cn/links/879AEC7D"
 
246
 
247
  <ListItem title={Locale.User.SigState}>
248
  <IconButton
 
249
  disabled={!accessStore.auth}
250
  text="签到(送积分)"
251
  onClick={()=>{
 
253
  }}
254
  />
255
  </ListItem>
256
+ <ListItem title={Locale.User.Pass.Title}>
257
+ <IconButton
258
+ disabled={!accessStore.auth}
259
+ text={Locale.User.Pass.Title}
260
+ onClick={()=>{
261
+ setShowPwdModal(true)
262
+ }}
263
+ />
264
+ </ListItem>
265
  </List>
266
 
267
  <List>
 
271
  disabled={!accessStore.auth}
272
  text="登出"
273
  onClick={()=>{
274
+ useStor.logOut().then(()=>{
275
+ accessStore.updateAuth("")
276
+ setUserName("")
277
+ })
278
  showToast("登出成功!")
279
  }}
280
  />
281
  </ListItem>
282
  </List>
283
+ {shouldShowPwdModal && (
284
+ <UserPwdModal onClose={() => setShowPwdModal(false)} />
285
+ )}
286
  </div>
287
  </ErrorBoundary>
288
  );
app/locales/cn.ts CHANGED
@@ -76,7 +76,14 @@ const cn = {
76
  User:"账号(纯数字)",
77
  Password:"密码(最少六位)",
78
  Email:"邮箱",
79
- Code:"验证码"
 
 
 
 
 
 
 
80
  },
81
  Settings: {
82
  Title: "设置",
 
76
  User:"账号(纯数字)",
77
  Password:"密码(最少六位)",
78
  Email:"邮箱",
79
+ Code:"验证码",
80
+ Pass:{
81
+ Title:"修改密码",
82
+ OldPwd:"旧密码",
83
+ NewPwd:"新密码",
84
+ NewPwd1:"确认密码"
85
+ },
86
+ Save:"保存"
87
  },
88
  Settings: {
89
  Title: "设置",
app/locales/de.ts CHANGED
@@ -78,7 +78,14 @@ const de: LocaleType = {
78
  User:"Kontonummer (nur Nummern)",
79
  Password:"Passwort (mindestens 6-stellig)",
80
  Email:"Briefkasten",
81
- Code:"Captcha"
 
 
 
 
 
 
 
82
  },
83
  Settings: {
84
  Title: "Einstellungen",
 
78
  User:"Kontonummer (nur Nummern)",
79
  Password:"Passwort (mindestens 6-stellig)",
80
  Email:"Briefkasten",
81
+ Code:"Captcha",
82
+ Pass:{
83
+ Title:"修改密码",
84
+ OldPwd:"旧密码",
85
+ NewPwd:"新密码",
86
+ NewPwd1:"确认密码"
87
+ },
88
+ Save:"保存"
89
  },
90
  Settings: {
91
  Title: "Einstellungen",
app/locales/en.ts CHANGED
@@ -78,7 +78,14 @@ const en: LocaleType = {
78
  User:"Account Number (Numbers Only)",
79
  Password:"Password (minimum 6 digits)",
80
  Email:"Email",
81
- Code:"Captcha"
 
 
 
 
 
 
 
82
  },
83
  Settings: {
84
  Title: "Settings",
 
78
  User:"Account Number (Numbers Only)",
79
  Password:"Password (minimum 6 digits)",
80
  Email:"Email",
81
+ Code:"Captcha",
82
+ Pass:{
83
+ Title:"Update Password",
84
+ OldPwd:"Old Password",
85
+ NewPwd:"New Password",
86
+ NewPwd1:"Check Password"
87
+ },
88
+ Save:"保存"
89
  },
90
  Settings: {
91
  Title: "Settings",
app/locales/es.ts CHANGED
@@ -78,7 +78,14 @@ const es: LocaleType = {
78
  User:"Número de cuenta (solo números)",
79
  Password:"Contraseña (mínimo 6 dígitos)",
80
  Email:"Buzón",
81
- Code:"Captcha"
 
 
 
 
 
 
 
82
  },
83
  Settings: {
84
  Title: "Configuración",
 
78
  User:"Número de cuenta (solo números)",
79
  Password:"Contraseña (mínimo 6 dígitos)",
80
  Email:"Buzón",
81
+ Code:"Captcha",
82
+ Pass:{
83
+ Title:"修改密码",
84
+ OldPwd:"旧密码",
85
+ NewPwd:"新密码",
86
+ NewPwd1:"确认密码"
87
+ },
88
+ Save:"保存"
89
  },
90
  Settings: {
91
  Title: "Configuración",
app/locales/it.ts CHANGED
@@ -78,7 +78,14 @@ const it: LocaleType = {
78
  User:"Numero di conto (solo numeri)",
79
  Password:"Password (minimo 6 cifre)",
80
  Email:"Cassetta Postale",
81
- Code:"Captcha"
 
 
 
 
 
 
 
82
  },
83
  Settings: {
84
  Title: "Impostazioni",
 
78
  User:"Numero di conto (solo numeri)",
79
  Password:"Password (minimo 6 cifre)",
80
  Email:"Cassetta Postale",
81
+ Code:"Captcha",
82
+ Pass:{
83
+ Title:"修改密码",
84
+ OldPwd:"旧密码",
85
+ NewPwd:"新密码",
86
+ NewPwd1:"确认密码"
87
+ },
88
+ Save:"保存"
89
  },
90
  Settings: {
91
  Title: "Impostazioni",
app/locales/jp.ts CHANGED
@@ -78,7 +78,14 @@ const jp: LocaleType = {
78
  User:"口座番号(番号のみ)",
79
  Password:"パスワード(最低6桁)",
80
  Email:"メールボックス",
81
- Code:"キャプチャ"
 
 
 
 
 
 
 
82
  },
83
  Settings: {
84
  Title: "設定",
 
78
  User:"口座番号(番号のみ)",
79
  Password:"パスワード(最低6桁)",
80
  Email:"メールボックス",
81
+ Code:"キャプチャ",
82
+ Pass:{
83
+ Title:"修改密码",
84
+ OldPwd:"旧密码",
85
+ NewPwd:"新密码",
86
+ NewPwd1:"确认密码"
87
+ },
88
+ Save:"保存"
89
  },
90
  Settings: {
91
  Title: "設定",
app/locales/tr.ts CHANGED
@@ -78,7 +78,14 @@ const tr: LocaleType = {
78
  User:"Hesap Numarası (Yalnızca Numaralar)",
79
  Password:"Şifre (en az 6 haneli)",
80
  Email:"Posta Kutusu",
81
- Code:"Arjantin"
 
 
 
 
 
 
 
82
  },
83
  Settings: {
84
  Title: "Ayarlar",
 
78
  User:"Hesap Numarası (Yalnızca Numaralar)",
79
  Password:"Şifre (en az 6 haneli)",
80
  Email:"Posta Kutusu",
81
+ Code:"Arjantin",
82
+ Pass:{
83
+ Title:"修改密码",
84
+ OldPwd:"旧密码",
85
+ NewPwd:"新密码",
86
+ NewPwd1:"确认密码"
87
+ },
88
+ Save:"保存"
89
  },
90
  Settings: {
91
  Title: "Ayarlar",
app/locales/tw.ts CHANGED
@@ -76,7 +76,14 @@ const tw: LocaleType = {
76
  User:"帳號(純數位)",
77
  Password:"密碼(最少六位)",
78
  Email:"郵箱",
79
- Code:"驗證碼"
 
 
 
 
 
 
 
80
  },
81
  Settings: {
82
  Title: "設定",
 
76
  User:"帳號(純數位)",
77
  Password:"密碼(最少六位)",
78
  Email:"郵箱",
79
+ Code:"驗證碼",
80
+ Pass:{
81
+ Title:"修改密码",
82
+ OldPwd:"旧密码",
83
+ NewPwd:"新密码",
84
+ NewPwd1:"确认密码"
85
+ },
86
+ Save:"保存"
87
  },
88
  Settings: {
89
  Title: "設定",
app/store/user.ts CHANGED
@@ -79,8 +79,11 @@ export interface UserStore {
79
  updateWallet: (wallet: number) => void;
80
  updateName: (name: string) => void;
81
  getUserInfo: () => void;
82
- findPwd: (user: string) => void;
83
  useKami: (code: string) => void;
 
 
 
84
  }
85
  export const DEFAULT_USER = {
86
  user: "",
@@ -202,7 +205,7 @@ export const useUserStore = create<UserStore>()(
202
  }, 1000);
203
  await this.getUserInfo();
204
  } else {
205
- showToast("登录失败!");
206
  }
207
  },
208
  async register(user, password, name, mail, code) {
@@ -285,19 +288,19 @@ export const useUserStore = create<UserStore>()(
285
  }
286
  }
287
  },
288
- async findPwd(user) {
289
- let res = await fetch("/api/user/findpwd?user=" + user, {
290
  method: "POST",
291
  headers: {
292
  ...getHeaders(),
293
  },
294
  });
295
- let response = (await res.json()) as shuixianRes;
296
  console.log(response);
297
- if (response.code == 1) {
298
  showToast("密码已发送至您的邮箱,请注意查收!");
299
  } else {
300
- showToast(response.msg);
301
  }
302
  },
303
  async useKami(code) {
@@ -327,6 +330,53 @@ export const useUserStore = create<UserStore>()(
327
  }
328
  }
329
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
330
  }),
331
  {
332
  name: StoreKey.User,
 
79
  updateWallet: (wallet: number) => void;
80
  updateName: (name: string) => void;
81
  getUserInfo: () => void;
82
+ findPwd: (mail: string,code:string) => void;
83
  useKami: (code: string) => void;
84
+ logOut:()=>any;
85
+ getRestPwdCode:(mail:string)=>void;
86
+ updatePass:(oldPass:string,newPass:string)=>void;
87
  }
88
  export const DEFAULT_USER = {
89
  user: "",
 
205
  }, 1000);
206
  await this.getUserInfo();
207
  } else {
208
+ showToast(response.message);
209
  }
210
  },
211
  async register(user, password, name, mail, code) {
 
288
  }
289
  }
290
  },
291
+ async findPwd(mail,code) {
292
+ let res = await fetch("/api/user/findpwd?mail=" + mail+"&code="+code, {
293
  method: "POST",
294
  headers: {
295
  ...getHeaders(),
296
  },
297
  });
298
+ let response = (await res.json()) as eladminRes;
299
  console.log(response);
300
+ if (response.flag) {
301
  showToast("密码已发送至您的邮箱,请注意查收!");
302
  } else {
303
+ showToast(response.message);
304
  }
305
  },
306
  async useKami(code) {
 
330
  }
331
  }
332
  },
333
+ async logOut(){
334
+ await fetch(
335
+ "/api/user/logout",
336
+ {
337
+ method: "POST",
338
+ headers: {
339
+ ...getHeaders(),
340
+ },
341
+ },
342
+ );
343
+ this.reset()
344
+ },
345
+ async getRestPwdCode(mail){
346
+ await fetch(
347
+ "/api/user/restmail?mail="+mail,
348
+ {
349
+ method: "POST",
350
+ headers: {
351
+ ...getHeaders(),
352
+ },
353
+ },
354
+ );
355
+ showToast("发送成功!可能在垃圾邮箱中!")
356
+ },
357
+ async updatePass(oldPass,newPass){
358
+ let body={
359
+ oldPass:encrypt(oldPass),
360
+ newPass:encrypt(newPass)
361
+ }
362
+ let res=await fetch(
363
+ "/api/user/updatePass",
364
+ {
365
+ method: "POST",
366
+ headers: {
367
+ "Content-Type": "application/json",
368
+ ...getHeaders(),
369
+ },
370
+ body:JSON.stringify(body)
371
+ },
372
+ );
373
+ res=await res.json()
374
+ if(res.message==null){
375
+ showToast("修改成功!")
376
+ }else{
377
+ showToast(res.message)
378
+ }
379
+ }
380
  }),
381
  {
382
  name: StoreKey.User,