mirror of
https://gitee.com/bookshelfplus/bookshelfplus
synced 2025-09-16 23:22:20 +08:00
后台管理前端结构调整;管理员后台添加第三方账号绑定
This commit is contained in:
@@ -0,0 +1,4 @@
|
||||
<div>
|
||||
<h2>第三方账号管理</h2>
|
||||
<%- include("../component/third-party-manage.html"); %>
|
||||
</div>
|
263
bookshelfplus-frontend/views/dashboard/admin/BookManage.html
Normal file
263
bookshelfplus-frontend/views/dashboard/admin/BookManage.html
Normal file
@@ -0,0 +1,263 @@
|
||||
<!-- 生成分类结构 -->
|
||||
<script src="/assets/javascripts/generateCategoryHierarchy.js"></script>
|
||||
<script>
|
||||
async function getControlsProfile() {
|
||||
// 获取分类列表
|
||||
var categoryOptions = [];
|
||||
|
||||
var responseData = await getRequest("/category/list");
|
||||
var axiosData = responseData.data;
|
||||
var status = axiosData.status;
|
||||
var data = axiosData.data;
|
||||
if (status === "success") {
|
||||
// console.log(data)
|
||||
hierarchyData = generateCategoryHierarchy(data);
|
||||
console.log(hierarchyData);
|
||||
function render(category) {
|
||||
categoryOptions.push({
|
||||
"tag": "option",
|
||||
"attr": { "value": category.id },
|
||||
"innerHTML": `${" ".repeat((category.level - 1) * 8)}${category.name}`,
|
||||
})
|
||||
for (let i = 0; i < category.children.length; i++)
|
||||
render(category.children[i]);
|
||||
}
|
||||
render({ children: hierarchyData });
|
||||
categoryOptions.shift(); // 删除数组中的第一个元素
|
||||
} else {
|
||||
alert(`出错啦!${data.errMsg} (错误码: ${data.errCode}) `);
|
||||
}
|
||||
|
||||
console.log(categoryOptions);
|
||||
return [
|
||||
{
|
||||
// 必填
|
||||
"tag": "input",
|
||||
"attr": {
|
||||
// 可选
|
||||
"id": "",
|
||||
"name": "", // 用于 POST 提交
|
||||
"class": "",
|
||||
"style": "",
|
||||
"placeholder": "电子书的名称",
|
||||
},
|
||||
"label": {
|
||||
"value": "书本名称",
|
||||
},
|
||||
"required": true, // 是否必填
|
||||
|
||||
// 可选
|
||||
innerHTML: "",
|
||||
|
||||
"validate": function (value) {
|
||||
var result = true, msg = "";
|
||||
if (validateUtils.isEmpty(value)) {
|
||||
result = false;
|
||||
msg = "不能为空";
|
||||
}
|
||||
return { result: result, msg: msg };
|
||||
}
|
||||
},
|
||||
{
|
||||
// 必填
|
||||
"tag": "input",
|
||||
"attr": {
|
||||
// 可选
|
||||
"id": "",
|
||||
"name": "", // 用于 POST 提交
|
||||
"class": "",
|
||||
"style": "",
|
||||
"placeholder": "电子书的作者",
|
||||
},
|
||||
"label": {
|
||||
"value": "作者姓名",
|
||||
},
|
||||
"required": true, // 是否必填
|
||||
|
||||
// 可选
|
||||
innerHTML: "",
|
||||
|
||||
"validate": function (value) {
|
||||
var result = true, msg = "";
|
||||
if (validateUtils.isEmpty(value)) {
|
||||
result = false;
|
||||
msg = "不能为空";
|
||||
}
|
||||
return { result: result, msg: msg };
|
||||
}
|
||||
},
|
||||
{
|
||||
// 必填
|
||||
"tag": "textarea",
|
||||
"attr": {
|
||||
// 可选
|
||||
"id": "",
|
||||
"name": "", // 用于 POST 提交
|
||||
"class": "",
|
||||
"style": "height:100px;",
|
||||
"placeholder": "电子书的简介",
|
||||
},
|
||||
"label": {
|
||||
"value": "书籍简介",
|
||||
},
|
||||
"required": false, // 是否必填
|
||||
|
||||
// 可选
|
||||
innerHTML: "",
|
||||
|
||||
"validate": function (value) {
|
||||
var result = true, msg = "";
|
||||
if (validateUtils.isEmpty(value)) {
|
||||
result = false;
|
||||
msg = "不能为空";
|
||||
}
|
||||
return { result: result, msg: msg };
|
||||
}
|
||||
},
|
||||
{
|
||||
// 必填
|
||||
"tag": "select",
|
||||
"attr": {
|
||||
// 可选
|
||||
"id": "",
|
||||
"name": "", // 用于 POST 提交
|
||||
"class": "",
|
||||
"style": "",
|
||||
"placeholder": "书籍语言",
|
||||
},
|
||||
"label": {
|
||||
"value": "语言",
|
||||
},
|
||||
"required": true, // 是否必填
|
||||
"children": [
|
||||
{
|
||||
"tag": "option",
|
||||
"attr": { "value": "Chinese" },
|
||||
"innerHTML": "中文",
|
||||
},
|
||||
{
|
||||
"tag": "option",
|
||||
"attr": { "value": "English" },
|
||||
"innerHTML": "英文",
|
||||
},
|
||||
{
|
||||
"tag": "option",
|
||||
"attr": { "value": "" },
|
||||
"innerHTML": "其他",
|
||||
},
|
||||
],
|
||||
|
||||
// 可选
|
||||
innerHTML: "",
|
||||
|
||||
"validate": function (value) {
|
||||
var result = true, msg = "";
|
||||
if (validateUtils.isEmpty(value)) {
|
||||
result = false;
|
||||
msg = "不能为空";
|
||||
}
|
||||
return { result: result, msg: msg };
|
||||
}
|
||||
},
|
||||
{
|
||||
// 必填
|
||||
"tag": "input",
|
||||
"attr": {
|
||||
// 可选
|
||||
"id": "",
|
||||
"name": "", // 用于 POST 提交
|
||||
"class": "",
|
||||
"style": "",
|
||||
"placeholder": "出版社",
|
||||
},
|
||||
"label": {
|
||||
"value": "出版社",
|
||||
},
|
||||
"required": true, // 是否必填
|
||||
|
||||
// 可选
|
||||
innerHTML: "",
|
||||
|
||||
"validate": function (value) {
|
||||
var result = true, msg = "";
|
||||
if (validateUtils.isEmpty(value)) {
|
||||
result = false;
|
||||
msg = "不能为空";
|
||||
}
|
||||
return { result: result, msg: msg };
|
||||
}
|
||||
},
|
||||
{
|
||||
// 必填
|
||||
"tag": "input",
|
||||
"attr": {
|
||||
// 可选
|
||||
"id": "",
|
||||
"name": "", // 用于 POST 提交
|
||||
"class": "",
|
||||
"style": "",
|
||||
"placeholder": "",
|
||||
},
|
||||
"label": {
|
||||
"value": "来源(版权)",
|
||||
},
|
||||
"required": false, // 是否必填
|
||||
|
||||
// 可选
|
||||
innerHTML: "",
|
||||
|
||||
"validate": function (value) {
|
||||
var result = true, msg = "";
|
||||
if (validateUtils.isEmpty(value)) {
|
||||
result = false;
|
||||
msg = "不能为空";
|
||||
}
|
||||
return { result: result, msg: msg };
|
||||
}
|
||||
},
|
||||
{
|
||||
// 必填
|
||||
"tag": "select",
|
||||
"attr": {
|
||||
// 可选
|
||||
"id": "",
|
||||
"name": "", // 用于 POST 提交
|
||||
"class": "",
|
||||
"style": "",
|
||||
},
|
||||
"label": {
|
||||
"value": "书籍分类",
|
||||
},
|
||||
"required": true, // 是否必填
|
||||
|
||||
// 可选
|
||||
"children": categoryOptions,
|
||||
// [
|
||||
// {
|
||||
// "tag": "option",
|
||||
// "attr": { "value": "1" },
|
||||
// "innerHTML": "选项1",
|
||||
// },
|
||||
// {
|
||||
// "tag": "option",
|
||||
// "attr": { "value": "2" },
|
||||
// "innerHTML": "选项2",
|
||||
// },
|
||||
// ],
|
||||
|
||||
"validate": function (value) {
|
||||
var result = true, msg = "";
|
||||
if (validateUtils.isEmpty(value)) {
|
||||
result = false;
|
||||
msg = "不能为空";
|
||||
}
|
||||
return { result: result, msg: msg };
|
||||
}
|
||||
},
|
||||
];
|
||||
}
|
||||
|
||||
function getSubmitButtonValue() {
|
||||
return "提交";
|
||||
}
|
||||
</script>
|
18
bookshelfplus-frontend/views/dashboard/admin/Debug.html
Normal file
18
bookshelfplus-frontend/views/dashboard/admin/Debug.html
Normal file
@@ -0,0 +1,18 @@
|
||||
<script>
|
||||
postRequest('/debug/status', { token: localStorage.token })
|
||||
.then(function (response) {
|
||||
var axiosData = response.data;
|
||||
var status = axiosData.status;
|
||||
var data = axiosData.data;
|
||||
|
||||
if (status === "success") {
|
||||
console.log(data);
|
||||
$(".main").html("请在 F12 查看");
|
||||
} else {
|
||||
alert(`出错啦!${data.errMsg} (错误码: ${data.errCode}) `);
|
||||
}
|
||||
}).catch(function (error) {
|
||||
console.log(error);
|
||||
alert("无法连接到服务器,请检查网络连接!");
|
||||
});
|
||||
</script>
|
@@ -1,48 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
|
||||
<head>
|
||||
<%- include("../component/header.html"); %>
|
||||
<%- include("../component/header-admin.html"); %>
|
||||
<style>
|
||||
#container {
|
||||
display: grid;
|
||||
grid-template-columns: 1fr;
|
||||
gap: 30px;
|
||||
place-items: center;
|
||||
margin-top: 40px;
|
||||
}
|
||||
.mainNav {
|
||||
vertical-align: middle;
|
||||
margin: 0 8px;
|
||||
|
||||
transition: 0.26s;
|
||||
}
|
||||
.mainNav:hover {
|
||||
color: #fff;
|
||||
background-color: black;
|
||||
padding: 5px 8px;
|
||||
border-radius: 4px;
|
||||
transform: scale(1.2);
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<%- include("../component/navbar.html"); %>
|
||||
<main class="main">
|
||||
<h1>
|
||||
<%= headText %>
|
||||
</h1>
|
||||
<div id="container">
|
||||
<% links.forEach(item=> { %>
|
||||
<nobr>
|
||||
<a class="mainNav" href="<%= item.url %>"><%= item.name %></a>
|
||||
</nobr>
|
||||
<% }); %>
|
||||
</div>
|
||||
</main>
|
||||
<%- include("../component/footer-admin.html"); %>
|
||||
</body>
|
||||
|
||||
</html>
|
@@ -1,87 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<%- include("../component/header.html"); %>
|
||||
<%- include("../component/header-admin.html"); %>
|
||||
<style>
|
||||
#container-controls {
|
||||
display: grid;
|
||||
grid-template-columns: auto 1fr;
|
||||
gap: 20px;
|
||||
place-items: center right;
|
||||
}
|
||||
#container-controls > .form-labels {
|
||||
font-size: 1.05em;
|
||||
font-family: cursive;
|
||||
}
|
||||
#container-controls > .form-elements {
|
||||
/* grid-column: 1; */
|
||||
height: 30px;
|
||||
width: 100%;
|
||||
font-size: 18px;
|
||||
}
|
||||
#container-submit {
|
||||
display: grid;
|
||||
grid-template-columns: 1fr 1fr;
|
||||
gap: 20px;
|
||||
padding: 0 30%;
|
||||
margin-top: 30px;
|
||||
}
|
||||
.btn {
|
||||
height: 30px;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<%- include("../component/navbar.html"); %>
|
||||
<main class="main">
|
||||
<h1><%= headSubTextArr[page] || page %></h1>
|
||||
<div id="container">
|
||||
<div id="container-controls">页面加载中,请稍候 ...</div>
|
||||
<div id="container-submit">
|
||||
<button class="btn" id="btn-submit">提交</button>
|
||||
<button class="btn" id="btn-clear">清空</button>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
<%- include("../component/footer-admin.html"); %>
|
||||
<!-- 验证组件用户输入值 -->
|
||||
<script src="/assets/javascripts/dashboard/getValidateUtils.js"></script>
|
||||
<!-- 渲染组件 & 提交表单方法 -->
|
||||
<script src="/assets/javascripts/dashboard/renderFormControls.js"></script>
|
||||
<!-- 引入对应页面渲染配置 -->
|
||||
<script src="/assets/javascripts/dashboard/<%=group%>/<%=page%>.js"></script>
|
||||
<% if (generateCategoryHierarchy == true) {%>
|
||||
<!-- 生成分类结构 -->
|
||||
<script src="/assets/javascripts/generateCategoryHierarchy.js"></script>
|
||||
<%}%>
|
||||
<!-- 进行渲染 -->
|
||||
<script>
|
||||
var group = '<%=group%>';
|
||||
var page = '<%=page%>';
|
||||
var title = '<%=title%>';
|
||||
|
||||
async function renderFormControlsFunc() {
|
||||
// 获取将要渲染的 Controls
|
||||
var controlsProfile = await getControlsProfile();
|
||||
|
||||
// 渲染控件
|
||||
var formControls = renderFormControls({ Controls: controlsProfile });
|
||||
console.log(formControls);
|
||||
|
||||
// 将控件填充到网页上
|
||||
var containerControls = document.getElementById('container-controls');
|
||||
containerControls.innerHTML = "";
|
||||
formControls.forEach(function(item){
|
||||
let Control
|
||||
containerControls.appendChild(item.label);
|
||||
containerControls.appendChild(item.control);
|
||||
});
|
||||
|
||||
// 更新提交按钮显示名称
|
||||
document.getElementById("btn-submit").innerHTML = getSubmitButtonValue() || "提交";
|
||||
}
|
||||
renderFormControlsFunc();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
Reference in New Issue
Block a user