From 3f96c9c6502243b06efd4bb34a189e72e3a5557c Mon Sep 17 00:00:00 2001
From: yearning <10538594+wangweifeng1999@user.noreply.gitee.com>
Date: 星期一, 28 九月 2026 19:24:55 +0800
Subject: [PATCH] 复制项目
---
frontend/src/components/ChangePasswordModal.tsx | 69 ++++++++++++++++++++++++++++++++++
1 files changed, 69 insertions(+), 0 deletions(-)
diff --git a/frontend/src/components/ChangePasswordModal.tsx b/frontend/src/components/ChangePasswordModal.tsx
new file mode 100644
index 0000000..bd611bc
--- /dev/null
+++ b/frontend/src/components/ChangePasswordModal.tsx
@@ -0,0 +1,69 @@
+import { Form, Input, Modal, message } from "antd";
+import { api } from "../api";
+
+export default function ChangePasswordModal({
+ open,
+ onClose,
+}: {
+ open: boolean;
+ onClose: () => void;
+}) {
+ const [form] = Form.useForm<{
+ old_password: string;
+ new_password: string;
+ confirm: string;
+ }>();
+
+ return (
+ <Modal
+ title="淇敼瀵嗙爜"
+ open={open}
+ destroyOnClose
+ onCancel={() => {
+ form.resetFields();
+ onClose();
+ }}
+ onOk={async () => {
+ const v = await form.validateFields();
+ try {
+ await api.post("/api/auth/change-password", {
+ old_password: v.old_password,
+ new_password: v.new_password,
+ });
+ message.success("瀵嗙爜宸蹭慨鏀�");
+ form.resetFields();
+ onClose();
+ } catch (e: unknown) {
+ const msg =
+ (e as { response?: { data?: { detail?: string } } })?.response?.data?.detail || "淇敼澶辫触";
+ message.error(typeof msg === "string" ? msg : "淇敼澶辫触");
+ }
+ }}
+ >
+ <Form form={form} layout="vertical">
+ <Form.Item name="old_password" label="鍘熷瘑鐮�" rules={[{ required: true }]}>
+ <Input.Password autoComplete="current-password" />
+ </Form.Item>
+ <Form.Item name="new_password" label="鏂板瘑鐮�" rules={[{ required: true, min: 6 }]}>
+ <Input.Password autoComplete="new-password" />
+ </Form.Item>
+ <Form.Item
+ name="confirm"
+ label="纭鏂板瘑鐮�"
+ dependencies={["new_password"]}
+ rules={[
+ { required: true },
+ ({ getFieldValue }) => ({
+ validator(_, value) {
+ if (!value || getFieldValue("new_password") === value) return Promise.resolve();
+ return Promise.reject(new Error("涓ゆ杈撳叆鐨勬柊瀵嗙爜涓嶄竴鑷�"));
+ },
+ }),
+ ]}
+ >
+ <Input.Password autoComplete="new-password" />
+ </Form.Item>
+ </Form>
+ </Modal>
+ );
+}
--
Gitblit v1.8.0