From e876e76ec7b580b6b69f82f517741bc9362ffadc Mon Sep 17 00:00:00 2001 From: lkddi Date: Sat, 25 Apr 2026 13:39:08 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BF=81=E7=A7=BB=E7=94=A8=E6=88=B7=E7=BC=96?= =?UTF-8?q?=E8=BE=91=E5=BC=B9=E7=AA=97=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resources/js/admin/user-editor.js | 73 +++++++++++++++++++++ resources/js/app.js | 1 + resources/views/admin/users/index.blade.php | 53 --------------- 3 files changed, 74 insertions(+), 53 deletions(-) create mode 100644 resources/js/admin/user-editor.js diff --git a/resources/js/admin/user-editor.js b/resources/js/admin/user-editor.js new file mode 100644 index 0000000..1a770da --- /dev/null +++ b/resources/js/admin/user-editor.js @@ -0,0 +1,73 @@ +// 用户后台编辑 Alpine 组件,负责编辑弹窗提交、状态提示和保存中状态。 + +/** + * 读取 CSRF 令牌,供用户编辑 AJAX 请求使用。 + * + * @returns {string} + */ +function getCsrfToken() { + return document.querySelector('meta[name="csrf-token"]')?.getAttribute("content") ?? ""; +} + +/** + * 注册用户编辑弹窗组件。 + * + * @returns {void} + */ +function registerUserEditorComponent() { + document.addEventListener("alpine:init", () => { + window.Alpine.data("userEditor", () => ({ + showEditModal: false, + editingUser: {}, + editToast: false, + editToastOk: true, + editToastMsg: "", + editSaving: false, + + /** + * 提交用户编辑表单,并用弹窗内提示反馈保存结果。 + * + * @param {HTMLFormElement} formEl + * @returns {Promise} + */ + async submitEditUser(formEl) { + this.editSaving = true; + this.editToast = false; + + const formData = new FormData(formEl); + formData.append("_method", "PUT"); + + try { + const response = await fetch(this.editingUser.requestUrl, { + method: "POST", + headers: { + Accept: "application/json", + "X-CSRF-TOKEN": getCsrfToken(), + }, + body: formData, + }); + const json = await response.json(); + + this.editToastOk = json.status === "success"; + this.editToastMsg = json.message || (json.status === "success" ? "保存成功!" : "保存失败"); + this.editToast = true; + + if (json.status === "success") { + window.setTimeout(() => { + this.showEditModal = false; + }, 1500); + } + } catch (error) { + this.editToastOk = false; + this.editToastMsg = "网络请求异常,请检查连接后重试。"; + this.editToast = true; + console.error("Edit User Request Failed:", error); + } finally { + this.editSaving = false; + } + }, + })); + }); +} + +registerUserEditorComponent(); diff --git a/resources/js/app.js b/resources/js/app.js index 5334389..94ac488 100644 --- a/resources/js/app.js +++ b/resources/js/app.js @@ -11,6 +11,7 @@ import { bindAdminOpsControls } from './admin/ops.js'; import './admin/positions-inline-patch.js'; import { bindAdminRoomControls } from './admin/rooms.js'; import { bindAdminSignInRulesControls } from './admin/sign-in-rules.js'; +import './admin/user-editor.js'; // 后台共用入口只注册轻量事件代理,具体页面通过 data-* 属性决定是否响应。 bindAdminAiProvidersControls(); diff --git a/resources/views/admin/users/index.blade.php b/resources/views/admin/users/index.blade.php index 9fa3b21..a6215e1 100644 --- a/resources/views/admin/users/index.blade.php +++ b/resources/views/admin/users/index.blade.php @@ -321,57 +321,4 @@ - - @endsection