1
0
mirror of https://gitee.com/bookshelfplus/bookshelfplus synced 2025-09-16 23:22:20 +08:00
Code Issues Projects Releases Wiki Activity GitHub Gitee

后台管理前端结构调整;管理员后台添加第三方账号绑定

This commit is contained in:
2022-04-05 14:54:36 +08:00
parent 936a18404c
commit 364566d6c1
27 changed files with 515 additions and 527 deletions

View File

@@ -0,0 +1,4 @@
<div>
<h2>第三方账号管理</h2>
<%- include("../component/third-party-manage.html"); %>
</div>

View 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": `${"&nbsp;".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>

View 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>

View File

@@ -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>

View File

@@ -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>