refactor(all): 完成项目的前后端逻辑分离,静态页面可以单独部署

This commit is contained in:
zhengxinonly
2024-01-28 17:43:25 +08:00
parent 2b296c1c64
commit 801eed010f
18 changed files with 287 additions and 295 deletions
+169
View File
@@ -0,0 +1,169 @@
<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="utf-8" />
<meta
name="viewport"
content="width=device-width, initial-scale=1, maximum-scale=1"
/>
<title>Pear Admin Flask</title>
<link rel="stylesheet" href="/static/component/pear/css/pear.css" />
<link rel="stylesheet" href="/static/admin/css/admin.css" />
<link rel="stylesheet" href="/static/admin/css/admin.dark.css" />
<link rel="stylesheet" href="/static/admin/css/variables.css" />
<link rel="stylesheet" href="/static/admin/css/reset.css" />
<!-- 依 赖 脚 本 -->
<script src="/static/component/layui/layui.js"></script>
<script src="/static/component/pear/pear.js"></script>
<script src="/static/js/pear_admin_flask.js"></script>
</head>
<!-- 结 构 代 码 -->
<body class="layui-layout-body pear-admin">
<!-- 布 局 框 架 -->
<div class="layui-layout layui-layout-admin">
<!-- 顶 部 样 式 -->
<div class="layui-header">
<!-- 菜 单 顶 部 -->
<div class="layui-logo">
<!-- 图 标 -->
<img class="logo" />
<!-- 标 题 -->
<span class="title"></span>
</div>
<!-- 顶 部 左 侧 功 能 -->
<ul class="layui-nav layui-layout-left">
<li class="collapse layui-nav-item">
<a href="#" class="layui-icon layui-icon-shrink-right"></a>
</li>
<li class="refresh layui-nav-item">
<a
href="#"
class="layui-icon layui-icon-refresh-1"
loading="600"
></a>
</li>
</ul>
<!-- 多 系 统 菜 单 -->
<div id="control" class="layui-layout-control"></div>
<!-- 顶 部 右 侧 菜 单 -->
<ul class="layui-nav layui-layout-right">
<li class="layui-nav-item layui-hide-xs">
<a href="#" class="menuSearch layui-icon layui-icon-search"></a>
</li>
<li class="layui-nav-item layui-hide-xs message"></li>
<li class="layui-nav-item layui-hide-xs">
<a
href="#"
class="fullScreen layui-icon layui-icon-screen-full"
></a>
</li>
<li class="layui-nav-item user">
<!-- 头 像 -->
<a class="layui-icon layui-icon-username" href="javascript:;"></a>
<!-- 功 能 菜 单 -->
<dl class="layui-nav-child">
<dd>
<a
user-menu-url="view/system/person.html"
user-menu-id="5555"
user-menu-title="基本资料"
>基本资料</a
>
</dd>
<dd><a href="javascript:void(0);" class="logout">注销登录</a></dd>
</dl>
</li>
<!-- 主 题 配 置 -->
<li class="layui-nav-item setting">
<a href="#" class="layui-icon layui-icon-more-vertical"></a>
</li>
</ul>
</div>
<!-- 侧 边 区 域 -->
<div class="layui-side layui-bg-black">
<!-- 菜 单 顶 部 -->
<div class="layui-logo">
<!-- 图 标 -->
<img class="logo" />
<!-- 标 题 -->
<span class="title"></span>
</div>
<!-- 菜 单 内 容 -->
<div class="layui-side-scroll">
<div id="sideMenu"></div>
</div>
</div>
<!-- 视 图 页 面 -->
<div class="layui-body">
<!-- 内 容 页 面 -->
<div id="content"></div>
</div>
<!-- 页脚 -->
<div class="layui-footer layui-text"></div>
<!-- 遮 盖 层 -->
<div class="pear-cover"></div>
<!-- 加 载 动 画 -->
<div class="loader-wrapper">
<!-- 动 画 对 象 -->
<div class="loader"></div>
</div>
</div>
<!-- 移 动 端 便 捷 操 作 -->
<div class="pear-collapsed-pe collapse">
<a href="#" class="layui-icon layui-icon-shrink-right"></a>
</div>
<!-- 框 架 初 始 化 -->
<script>
layui.use(["admin", "jquery", "popup"], function () {
var $ = layui.jquery;
var admin = layui.admin;
var popup = layui.popup;
// 请求后端,严重是否已经登录
fetch("/api/v1/user/profile", {
method: "GET",
headers: {
Authorization: "Bearer " + localStorage.getItem("access_token"),
},
})
.then((res) => res.json())
.then(function (data) {
if (data.code !== 0) {
location.href = "/view/login.html";
}
});
// 给 pear-admin-layui 的默认 ajax 请求添加权限
$.ajaxSetup({
headers: {
Authorization: "Bearer " + localStorage.getItem("access_token"),
},
});
admin.setConfigurationPath("/static/config/pear.config.json");
admin.render();
admin.logout(function () {
popup.success("注销成功", function () {
fetch("/api/v1/logout")
.then((res) => res.json())
.then(function (data) {
if (data.code !== 0) {
localStorage.removeItem("access_token");
localStorage.removeItem("refresh_token");
location.href = "/view/login.html";
}
});
});
// 清空 tabs 缓存
return new Promise((resolve) => {
resolve(true);
});
});
});
</script>
</body>
</html>
+149
View File
@@ -0,0 +1,149 @@
<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="utf-8" />
<meta
name="viewport"
content="width=device-width, initial-scale=1, maximum-scale=1"
/>
<title>登录</title>
<link rel="stylesheet" href="/static/component/pear/css/pear.css" />
<link rel="stylesheet" href="/static/admin/css/other/login.css" />
<link rel="stylesheet" href="/static/admin/css/variables.css" />
</head>
<body>
<div class="login-page">
<div class="layui-row">
<div class="layui-col-sm6 login-bg">
<img
class="login-bg-img"
src="/static/admin/images/banner.png"
alt=""
/>
</div>
<div class="layui-col-sm6 login-form">
<div class="layui-form">
<div class="form-center">
<div class="form-center-box">
<div class="top-log-title">
<img
class="top-log"
src="http://www.layui-vue.com/assets/logo.685dda16.jpg"
alt=""
/>
<span>Pear Admin Flask</span>
</div>
<div class="top-desc">
以 超 乎 想 象 的 速 度 构 建 内 部 工 具
</div>
<div style="margin-top: 30px">
<div class="layui-form-item">
<div class="layui-input-wrap">
<div class="layui-input-prefix">
<i class="layui-icon layui-icon-username"></i>
</div>
<input
lay-verify="required"
placeholder="账户"
autocomplete="off"
name="username"
value="正心全栈编程"
class="layui-input"
/>
</div>
</div>
<div class="layui-form-item">
<div class="layui-input-wrap">
<div class="layui-input-prefix">
<i class="layui-icon layui-icon-password"></i>
</div>
<input
type="password"
name="password"
value="123456"
lay-verify="required|confirmPassword"
placeholder="密码"
autocomplete="off"
class="layui-input"
lay-affix="eye"
/>
</div>
</div>
<div class="layui-form-item">
<div class="remember-passsword">
<div class="remember-cehcked">
<input
type="checkbox"
name="like1[write]"
lay-skin="primary"
title="自动登录"
/>
</div>
</div>
</div>
<div class="login-btn">
<button
type="button"
lay-submit
lay-filter="login-in"
class="layui-btn login"
>
登 录
</button>
</div>
<div class="other-login">
<div class="other-login-methods">其他方式</div>
<a class="greenText" href="/view/register.html">注册账号</a>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- 资 源 引 入 -->
<script src="/static/component/layui/layui.js"></script>
<script src="/static/component/pear/pear.js"></script>
<script>
layui.use(["form", "button", "popup", "jquery"], function () {
var form = layui.form;
var button = layui.button;
var popup = layui.popup;
var $ = layui.jquery;
// 登 录 提 交
form.on("submit(login-in)", function (data) {
/// 验证
/// 动画
let btn = button.load({ elem: ".login" });
/// 登录
$.ajax({
url: "/api/v1/login",
type: "POST",
data: JSON.stringify(data.field),
contentType: "application/json",
success: function (res) {
localStorage.setItem("access_token", res.access_token);
localStorage.setItem("refresh_token", res.refresh_token);
btn.stop(function () {
popup.success("登录成功", function () {
location.href = "/";
});
});
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
btn.stop(function () {
popup.failure(XMLHttpRequest.responseJSON.message);
});
},
});
return false;
});
});
</script>
</body>
</html>
+171
View File
@@ -0,0 +1,171 @@
<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="utf-8" />
<meta
name="viewport"
content="width=device-width, initial-scale=1, maximum-scale=1"
/>
<title>登录</title>
<link rel="stylesheet" href="/static/component/pear/css/pear.css" />
<link rel="stylesheet" href="/static/admin/css/other/login.css" />
<link rel="stylesheet" href="/static/admin/css/variables.css" />
</head>
<body>
<div class="login-page">
<div class="layui-row">
<div class="layui-col-sm6 login-bg">
<img
class="login-bg-img"
src="/static/admin/images/banner.png"
alt=""
/>
</div>
<div class="layui-col-sm6 login-form">
<div class="layui-form">
<div class="form-center">
<div class="form-center-box">
<div class="top-log-title">
<img
class="top-log"
src="http://www.layui-vue.com/assets/logo.685dda16.jpg"
alt=""
/>
<span>Pear Admin Flask</span>
</div>
<div class="top-desc">
以 超 乎 想 象 的 速 度 构 建 内 部 工 具
<br />
<br />
(注册账号)
</div>
<div style="margin-top: 30px">
<div class="layui-form-item">
<div class="layui-input-wrap">
<div class="layui-input-prefix">
<i class="layui-icon layui-icon-username"></i>
</div>
<input
lay-verify="required"
placeholder="账户"
autocomplete="off"
name="username"
value=""
class="layui-input"
/>
</div>
</div>
<div class="layui-form-item">
<div class="layui-input-wrap">
<div class="layui-input-prefix">
<i class="layui-icon layui-icon-password"></i>
</div>
<input
type="password"
name="password"
value=""
lay-verify="required|confirmPassword"
placeholder="密码"
autocomplete="off"
class="layui-input"
lay-affix="eye"
/>
</div>
</div>
<div class="tab-log-verification">
<div class="verification-text">
<div class="layui-input-wrap">
<div class="layui-input-prefix">
<i class="layui-icon layui-icon-auz"></i>
</div>
<input
lay-verify="required"
placeholder="验证码"
autocomplete="off"
class="layui-input"
/>
</div>
</div>
<img
src="/static/admin/images/captcha.gif"
alt=""
class="verification-img"
/>
</div>
<div class="layui-form-item">
<div class="remember-passsword">
<div class="remember-cehcked">
<input
type="checkbox"
name="login-in"
lay-skin="primary"
title="注册成功后自动登录"
checked
/>
</div>
</div>
</div>
<div class="login-btn">
<button
type="button"
lay-submit
lay-filter="login-in"
class="layui-btn login"
>
登 录
</button>
</div>
<div class="other-login">
<div class="other-login-methods">其他方式</div>
<a class="greenText" href="/view/login.html">登录</a>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- 资 源 引 入 -->
<script src="/static/component/layui/layui.js"></script>
<script src="/static/component/pear/pear.js"></script>
<script>
layui.use(["form", "button", "popup", "jquery"], function () {
var form = layui.form;
var button = layui.button;
var popup = layui.popup;
var $ = layui.jquery;
// 登 录 提 交
form.on("submit(login-in)", function (data) {
/// 验证
/// 动画
let btn = button.load({ elem: ".login" });
/// 登录
$.ajax({
url: "/api/v1/login",
type: "POST",
data: JSON.stringify(data.field),
contentType: "application/json",
success: function (res) {
btn.stop(function () {
popup.success("登录成功", function () {
location.href = "/";
});
});
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
btn.stop(function () {
popup.failure(XMLHttpRequest.responseJSON.message);
});
},
});
return false;
});
});
</script>
</body>
</html>