diff --git a/react-ui/src/pages/User/Login/index.tsx b/react-ui/src/pages/User/Login/index.tsx
index a18f785..87759c3 100644
--- a/react-ui/src/pages/User/Login/index.tsx
+++ b/react-ui/src/pages/User/Login/index.tsx
@@ -1,6 +1,8 @@
 import Footer from '@/components/Footer';
 import { getCaptchaImg, login } from '@/services/system/auth';
 import { getFakeCaptcha } from '@/services/ant-design-pro/login';
+import { Modal, Form, Input, Button } from 'antd';
+
 import {
   AlipayCircleOutlined,
   LockOutlined,
@@ -90,6 +92,8 @@
   const { initialState, setInitialState } = useModel('@@initialState');
   const [captchaCode, setCaptchaCode] = useState<string>('');
   const [uuid, setUuid] = useState<string>('');
+const [forgotModalVisible, setForgotModalVisible] = useState(false);
+const [form] = Form.useForm();
 
   const containerClassName = useEmotionCss(() => {
     return {
@@ -190,50 +194,37 @@
             maxWidth: '75vw',
           }}
           logo={<img alt="logo" src="/logo.svg" />}
-          title="Ant Design"
+          title="PT Station"
           subTitle={intl.formatMessage({ id: 'pages.layouts.userLayout.title' })}
           initialValues={{
             autoLogin: true,
           }}
           actions={[
-            <FormattedMessage
-              key="loginWith"
-              id="pages.login.loginWith"
-              defaultMessage="其他登录方式"
-            />,
-            <ActionIcons key="icons" />,
+
           ]}
           onFinish={async (values) => {
             await handleSubmit(values as API.LoginParams);
           }}
-        >
-          <Tabs
-            activeKey={type}
-            onChange={setType}
-            centered
-            items={[
-              {
-                key: 'account',
-                label: intl.formatMessage({
-                  id: 'pages.login.accountLogin.tab',
-                  defaultMessage: '账户密码登录',
-                }),
-              },
-              {
-                key: 'mobile',
-                label: intl.formatMessage({
-                  id: 'pages.login.phoneLogin.tab',
-                  defaultMessage: '手机号登录',
-                }),
-              },
-            ]}
-          />
+        ><Tabs
+  activeKey={type}
+  onChange={setType}
+  centered
+  items={[
+    {
+      key: 'account',
+      label: intl.formatMessage({
+        id: 'pages.login.accountLogin.tab',
+        defaultMessage: '账户密码登录',
+      }),
+    },
+  ]}
+/>
 
           {code !== 200 && loginType === 'account' && (
             <LoginMessage
               content={intl.formatMessage({
                 id: 'pages.login.accountLogin.errorMessage',
-                defaultMessage: '账户或密码错误(admin/admin123)',
+                defaultMessage: '账户或密码错误',
               })}
             />
           )}
@@ -302,7 +293,7 @@
                         message: (
                           <FormattedMessage
                             id="pages.searchTable.updateForm.ruleName.nameRules"
-                            defaultMessage="请输入验证啊"
+                            defaultMessage="请输入验证"
                           />
                         ),
                       },
@@ -418,18 +409,134 @@
             <ProFormCheckbox noStyle name="autoLogin">
               <FormattedMessage id="pages.login.rememberMe" defaultMessage="自动登录" />
             </ProFormCheckbox>
-            <a
-              style={{
-                float: 'right',
-              }}
-            >
-              <FormattedMessage id="pages.login.forgotPassword" defaultMessage="忘记密码" />
-            </a>
+        <a
+          style={{ float: 'right' }}
+          onClick={() => setForgotModalVisible(true)}
+        >
+          <FormattedMessage id="pages.login.forgotPassword" defaultMessage="忘记密码？" />
+        </a>
+
           </div>
         </LoginForm>
+<div style={{ textAlign: 'center', marginTop: 16 }}>
+  <span style={{ marginRight: 8 }}>
+    <FormattedMessage id="pages.login.noAccount" defaultMessage="没有账号？" />
+  </span>
+  <a href="http://localhost:5173/" target="_self">
+    <FormattedMessage id="pages.login.registerNow" defaultMessage="立即注册" />
+  </a>
+</div>
+
+
       </div>
+
+
+      <Modal
+  title="重置密码"
+  open={forgotModalVisible}
+  onCancel={() => setForgotModalVisible(false)}
+  footer={null}
+>
+<Form
+  form={form}
+  onFinish={async (values) => {
+    const { email, code, newPassword, confirmPassword } = values;
+
+    if (newPassword !== confirmPassword) {
+      message.error('两次密码输入不一致');
+      return;
+    }
+
+    const res = await fetch('http://127.0.0.1:6001/reset-password', {
+      method: 'POST',
+      headers: { 'Content-Type': 'application/json' },
+
+      body: JSON.stringify({ email, code, newPassword }),
+    });
+    const data = await res.json();
+
+    if (data.success) {
+      message.success('密码重置成功');
+      setForgotModalVisible(false);
+      form.resetFields();
+    } else {
+      message.error(data.message || '重置失败');
+    }
+  }}
+>
+  <Form.Item name="email" rules={[{ required: true, message: '请输入邮箱' }, { type: 'email' }]}>
+    <Input placeholder="邮箱" />
+  </Form.Item>
+
+  <Form.Item name="code" rules={[{ required: true, message: '请输入验证码' }]}>
+    <Input
+      placeholder="验证码"
+      addonAfter={
+        <a
+          onClick={async () => {
+            const email = form.getFieldValue('email');
+            if (!email) return message.warning('请先输入邮箱');
+            const res = await fetch('http://127.0.0.1:6001/send-code', {
+              method: 'POST',
+              headers: { 'Content-Type': 'application/json' },
+              body: JSON.stringify({ email }),
+            });
+            const result = await res.json();
+            if (result.success) {
+              message.success('验证码发送成功');
+            } else {
+              message.error(result.message || '验证码发送失败');
+            }
+          }}
+        >
+          获取验证码
+        </a>
+      }
+    />
+  </Form.Item>
+
+  <Form.Item
+    name="newPassword"
+    rules={[{ required: true, message: '请输入新密码' }]}
+    hasFeedback
+  >
+    <Input.Password placeholder="新密码" />
+  </Form.Item>
+
+  <Form.Item
+    name="confirmPassword"
+    dependencies={['newPassword']}
+    hasFeedback
+    rules={[
+      { required: true, message: '请确认新密码' },
+      ({ getFieldValue }) => ({
+        validator(_, value) {
+          if (!value || getFieldValue('newPassword') === value) {
+            return Promise.resolve();
+          }
+          return Promise.reject(new Error('两次密码输入不一致'));
+        },
+      }),
+    ]}
+  >
+    <Input.Password placeholder="确认密码" />
+  </Form.Item>
+
+  <Form.Item>
+    <Button type="primary" htmlType="submit" block>
+      重置密码
+    </Button>
+  </Form.Item>
+</Form>
+
+</Modal>
+
       <Footer />
     </div>
+
+
+
+
   );
 };
 
