UNPKG

@scenemesh/entity-engine

Version:

一个“元数据驱动 + 组件适配 + 动态关系 + 视图管线”式的实体引擎。以 **Model + View + FieldType + SuiteAdapter + DataSource** 为五大支点,统一 CRUD / 查询 / 引用管理 / 视图渲染 / 扩展注册,支持在运行期无侵入拼装出 **表单、网格、主从、看板、仪表盘、流程/树形视图** 等多形态界面。

145 lines (143 loc) 4.61 kB
import { EntityView, useEntityEngine, useEntitySession, useMasterDetailViewContainer } from "./chunk-2MQEKMBU.mjs"; // src/modules/build-in/views/auth/auth-view-comp.tsx import { useState } from "react"; import { notifications } from "@mantine/notifications"; import { Text, Paper, Title, Anchor, Button, Checkbox, TextInput, PasswordInput } from "@mantine/core"; import { jsx, jsxs } from "react/jsx-runtime"; function AuthViewLoginComp(props) { const { model, baseObjectId, viewData, behavior } = props; const [username, setUsername] = useState(""); const [password, setPassword] = useState(""); const [rememberMe, setRememberMe] = useState(false); const [error, setError] = useState(""); const engine = useEntityEngine(); const { session, sessionRefresh } = useEntitySession(); const { performAction } = useMasterDetailViewContainer(); const getCsrfToken = async () => { const response = await fetch(engine.settings.getUrl("/auth/csrf")); const { csrfToken } = await response.json(); return csrfToken; }; const handleSubmit = async (e) => { e.preventDefault(); const csrfToken = await getCsrfToken(); if (!csrfToken) { setError("Could not retrieve CSRF token."); return; } const body = new URLSearchParams(); body.append("csrfToken", csrfToken); body.append("username", username); body.append("password", password); body.append("remember", rememberMe ? "true" : "false"); body.append("json", "true"); body.append("redirect", "false"); const response = await fetch(engine.settings.getUrl("/auth/callback/credentials"), { method: "POST", headers: { "Content-Type": "application/x-www-form-urlencoded" }, body }); if (response.ok && response.status === 200) { console.log("Login successful", response); notifications.show({ title: "\u767B\u5F55\u6210\u529F", message: "\u6B22\u8FCE\u56DE\u6765\uFF0C\u4F60\u5DF2\u6210\u529F\u767B\u5F55\u3002", color: "green", autoClose: 5e3 }); await sessionRefresh?.(); window.location.reload(); } else { setError("\u90AE\u7BB1\u6216\u5BC6\u7801\u9519\u8BEF."); } }; return /* @__PURE__ */ jsx("div", { className: "entity-auth-wrapper", children: /* @__PURE__ */ jsxs(Paper, { className: "entity-auth-form", children: [ /* @__PURE__ */ jsx(Title, { order: 2, className: "entity-auth-title", children: "\u6B22\u8FCE\u767B\u5F55" }), /* @__PURE__ */ jsxs("form", { onSubmit: handleSubmit, children: [ error && /* @__PURE__ */ jsx(Text, { c: "red", children: error }), /* @__PURE__ */ jsx( TextInput, { label: "\u90AE\u7BB1\u5730\u5740", placeholder: "hello@gmail.com", size: "md", radius: "md", onChange: (e) => setUsername(e.target.value) } ), /* @__PURE__ */ jsx( PasswordInput, { label: "\u767B\u5F55\u5BC6\u7801", placeholder: "Your password", mt: "md", size: "md", radius: "md", onChange: (e) => setPassword(e.target.value) } ), /* @__PURE__ */ jsx( Checkbox, { label: "\u4FDD\u6301\u767B\u5F55", mt: "xl", size: "md", onChange: (e) => setRememberMe(e.target.checked) } ), /* @__PURE__ */ jsx( Button, { fullWidth: true, mt: "xl", size: "md", radius: "md", type: "submit", onClick: handleSubmit, children: "\u767B\u5F55" } ), /* @__PURE__ */ jsxs(Text, { ta: "center", mt: "md", children: [ "\u8FD8\u6CA1\u6709\u5BC6\u7801?", " ", /* @__PURE__ */ jsx(Anchor, { href: "#", fw: 500, onClick: (event) => event.preventDefault(), children: "\u6CE8\u518C" }) ] }) ] }) ] }) }); } // src/modules/build-in/views/auth/auth.view.tsx import { jsx as jsx2 } from "react/jsx-runtime"; var AuthView = class extends EntityView { constructor() { super(...arguments); this.info = { viewName: "auth", displayName: "\u8BA4\u8BC1\u89C6\u56FE", icon: "auth_icon", description: "\u8BA4\u8BC1\u89C6\u56FE, \u5305\u542B\u767B\u5F55\u3001\u6CE8\u518C\u7B49\u529F\u80FD" }; this.Component = (props) => /* @__PURE__ */ jsx2(AuthViewLoginComp, { ...props }); } }; var auth_view_default = AuthView; export { AuthView, auth_view_default as default }; //# sourceMappingURL=auth.view-77EA2JLU.mjs.map