迁移用户编辑弹窗脚本
This commit is contained in:
@@ -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<void>}
|
||||||
|
*/
|
||||||
|
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();
|
||||||
@@ -11,6 +11,7 @@ import { bindAdminOpsControls } from './admin/ops.js';
|
|||||||
import './admin/positions-inline-patch.js';
|
import './admin/positions-inline-patch.js';
|
||||||
import { bindAdminRoomControls } from './admin/rooms.js';
|
import { bindAdminRoomControls } from './admin/rooms.js';
|
||||||
import { bindAdminSignInRulesControls } from './admin/sign-in-rules.js';
|
import { bindAdminSignInRulesControls } from './admin/sign-in-rules.js';
|
||||||
|
import './admin/user-editor.js';
|
||||||
|
|
||||||
// 后台共用入口只注册轻量事件代理,具体页面通过 data-* 属性决定是否响应。
|
// 后台共用入口只注册轻量事件代理,具体页面通过 data-* 属性决定是否响应。
|
||||||
bindAdminAiProvidersControls();
|
bindAdminAiProvidersControls();
|
||||||
|
|||||||
@@ -321,57 +321,4 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script>
|
|
||||||
document.addEventListener('alpine:init', () => {
|
|
||||||
Alpine.data('userEditor', () => ({
|
|
||||||
showEditModal: false,
|
|
||||||
editingUser: {},
|
|
||||||
editToast: false,
|
|
||||||
editToastOk: true,
|
|
||||||
editToastMsg: '',
|
|
||||||
editSaving: false,
|
|
||||||
|
|
||||||
async submitEditUser(formEl) {
|
|
||||||
this.editSaving = true;
|
|
||||||
this.editToast = false;
|
|
||||||
|
|
||||||
const formData = new FormData(formEl);
|
|
||||||
formData.append('_method', 'PUT'); // 必须带有伪造方法给 Laravel
|
|
||||||
|
|
||||||
try {
|
|
||||||
const res = await fetch(this.editingUser.requestUrl, {
|
|
||||||
method: 'POST',
|
|
||||||
headers: {
|
|
||||||
'Accept': 'application/json',
|
|
||||||
'X-CSRF-TOKEN': document.querySelector(
|
|
||||||
'meta[name="csrf-token"]')
|
|
||||||
.content,
|
|
||||||
},
|
|
||||||
body: formData,
|
|
||||||
});
|
|
||||||
const json = await res.json();
|
|
||||||
|
|
||||||
this.editToastOk = json.status === 'success';
|
|
||||||
this.editToastMsg = json.message || (json.status === 'success' ? '保存成功!' :
|
|
||||||
'保存失败');
|
|
||||||
this.editToast = true;
|
|
||||||
|
|
||||||
if (json.status === 'success') {
|
|
||||||
setTimeout(() => {
|
|
||||||
this.showEditModal = false;
|
|
||||||
}, 1500);
|
|
||||||
}
|
|
||||||
} catch (e) {
|
|
||||||
this.editToastOk = false;
|
|
||||||
this.editToastMsg = '网络请求异常,请检查连接后重试。';
|
|
||||||
this.editToast = true;
|
|
||||||
console.error('Edit User Request Failed:', e); // 输出详细报错方便调试
|
|
||||||
}
|
|
||||||
|
|
||||||
this.editSaving = false;
|
|
||||||
}
|
|
||||||
}));
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
|
|
||||||
@endsection
|
@endsection
|
||||||
|
|||||||
Reference in New Issue
Block a user