parent
0350786d00
commit
bc378ee9ec
|
@ -24,6 +24,7 @@ public class DatabaseInitConfig implements ApplicationRunner {
|
||||||
ResourceDatabasePopulator populator = new ResourceDatabasePopulator();
|
ResourceDatabasePopulator populator = new ResourceDatabasePopulator();
|
||||||
populator.addScript(new ClassPathResource("db/schema.sql"));
|
populator.addScript(new ClassPathResource("db/schema.sql"));
|
||||||
populator.addScript(new ClassPathResource("db/data.sql"));
|
populator.addScript(new ClassPathResource("db/data.sql"));
|
||||||
|
// populator.addScript(new ClassPathResource("db/daaixianzun.sql"));
|
||||||
populator.setContinueOnError(true);
|
populator.setContinueOnError(true);
|
||||||
populator.execute(dataSource);
|
populator.execute(dataSource);
|
||||||
log.info("数据库初始化完成");
|
log.info("数据库初始化完成");
|
||||||
|
|
|
@ -20,6 +20,9 @@ public class SecurityConstants {
|
||||||
"/api/user/getEmailCode", // 获取邮箱验证码
|
"/api/user/getEmailCode", // 获取邮箱验证码
|
||||||
"/api/user/getPhoneCode", // 获取手机验证码
|
"/api/user/getPhoneCode", // 获取手机验证码
|
||||||
"/chat.html",
|
"/chat.html",
|
||||||
|
|
||||||
|
"/daxz.html/**",
|
||||||
|
|
||||||
"/polling-chat.html",
|
"/polling-chat.html",
|
||||||
|
|
||||||
"/ws/chat/**",
|
"/ws/chat/**",
|
||||||
|
|
|
@ -9,14 +9,15 @@ import lombok.extern.slf4j.Slf4j;
|
||||||
import okhttp3.OkHttpClient;
|
import okhttp3.OkHttpClient;
|
||||||
import okhttp3.Request;
|
import okhttp3.Request;
|
||||||
import okhttp3.Response;
|
import okhttp3.Response;
|
||||||
import org.springframework.web.bind.annotation.PostMapping;
|
import org.springframework.http.ResponseEntity;
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.*;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.regex.Matcher;
|
import java.util.regex.Matcher;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
@ -128,7 +129,7 @@ public class CommonController {
|
||||||
// 输出该卷的每一节标题和正文内容
|
// 输出该卷的每一节标题和正文内容
|
||||||
for (int j = 0; j < sections.size(); j++) {
|
for (int j = 0; j < sections.size(); j++) {
|
||||||
|
|
||||||
System.out.print(volumes.get(i));
|
// System.out.print(volumes.get(i));
|
||||||
String section = sections.get(j);
|
String section = sections.get(j);
|
||||||
String sectionContent = sectionContents.get(j);
|
String sectionContent = sectionContents.get(j);
|
||||||
|
|
||||||
|
@ -153,7 +154,7 @@ public class CommonController {
|
||||||
bookContent.setSection(section);
|
bookContent.setSection(section);
|
||||||
bookContent.setSectionContent(sectionContent);
|
bookContent.setSectionContent(sectionContent);
|
||||||
|
|
||||||
|
System.out.println("bookContent = " + bookContent);
|
||||||
|
|
||||||
bookContents.add(bookContent);
|
bookContents.add(bookContent);
|
||||||
|
|
||||||
|
@ -166,10 +167,32 @@ public class CommonController {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@GetMapping("/getBookComment")
|
||||||
|
public Result<String> getBookComment(Long id) {
|
||||||
|
BookContent bookContent = bookContentService.getById(id);
|
||||||
|
return Result.success(bookContent.getSectionContent());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@GetMapping("/getBookCommentByPath")
|
||||||
|
public ResponseEntity<Map<String, Object>> getBookCommentByPath(@RequestParam("id") Long id) {
|
||||||
|
// 从数据库中获取评论内容
|
||||||
|
String comments = bookContentService.getById(id).getSectionContent();
|
||||||
|
|
||||||
|
BookContent byId = bookContentService.getById(id);
|
||||||
|
|
||||||
|
// 构造返回数据
|
||||||
|
Map<String, Object> response = new HashMap<>();
|
||||||
|
response.put("data", byId);
|
||||||
|
|
||||||
|
return ResponseEntity.ok(response);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
File diff suppressed because one or more lines are too long
|
@ -59,4 +59,18 @@ CREATE TABLE `video` (
|
||||||
PRIMARY KEY (`id`),
|
PRIMARY KEY (`id`),
|
||||||
KEY `idx_user_id` (`user_id`),
|
KEY `idx_user_id` (`user_id`),
|
||||||
KEY `idx_created_time` (`created_time`)
|
KEY `idx_created_time` (`created_time`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='视频表';
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='视频表';
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS `book_content` (
|
||||||
|
`id` bigint NOT NULL AUTO_INCREMENT,
|
||||||
|
`book_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
|
||||||
|
`volume` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
|
||||||
|
`section` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
|
||||||
|
`section_content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL,
|
||||||
|
PRIMARY KEY (`id`) USING BTREE
|
||||||
|
) ENGINE = InnoDB AUTO_INCREMENT = 2342 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
|
||||||
|
|
||||||
|
SET FOREIGN_KEY_CHECKS = 1;
|
|
@ -0,0 +1,171 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>大爱仙尊 - Book Comments</title>
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
font-family: Arial, sans-serif;
|
||||||
|
background-color: #f4f4f9;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
height: 100vh;
|
||||||
|
text-align: left;
|
||||||
|
padding-left: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.container {
|
||||||
|
background-color: white;
|
||||||
|
border-radius: 8px;
|
||||||
|
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
|
||||||
|
padding: 20px;
|
||||||
|
max-width: 800px;
|
||||||
|
width: 100%;
|
||||||
|
height: 90%;
|
||||||
|
overflow-y: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
color: #333;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#comments {
|
||||||
|
margin: 20px 0;
|
||||||
|
padding: 15px;
|
||||||
|
background-color: #f9f9f9;
|
||||||
|
border-radius: 8px;
|
||||||
|
min-height: 200px;
|
||||||
|
font-size: 16px;
|
||||||
|
color: #555;
|
||||||
|
white-space: pre-wrap;
|
||||||
|
line-height: 1.8;
|
||||||
|
max-height: 420px;
|
||||||
|
overflow-y: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
#comments p {
|
||||||
|
text-indent: 2em;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.button-container {
|
||||||
|
margin-top: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
button {
|
||||||
|
background-color: #007bff;
|
||||||
|
color: white;
|
||||||
|
border: none;
|
||||||
|
border-radius: 5px;
|
||||||
|
padding: 10px 20px;
|
||||||
|
font-size: 16px;
|
||||||
|
cursor: pointer;
|
||||||
|
margin: 0 10px;
|
||||||
|
transition: background-color 0.3s;
|
||||||
|
}
|
||||||
|
|
||||||
|
button:hover {
|
||||||
|
background-color: #0056b3;
|
||||||
|
}
|
||||||
|
|
||||||
|
button:disabled {
|
||||||
|
background-color: #ddd;
|
||||||
|
cursor: not-allowed;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<div class="container">
|
||||||
|
<h4 id="pageTitle">Loading...</h4>
|
||||||
|
<div id="comments">Loading comments...</div>
|
||||||
|
|
||||||
|
<div class="button-container">
|
||||||
|
<button id="prevButton" onclick="navigateComment('prev')">上一节</button>
|
||||||
|
<button id="nextButton" onclick="navigateComment('next')">下一节</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
let bookId = 1; // Default book ID
|
||||||
|
const commentsPerPage = 1; // Number of comments per page
|
||||||
|
let currentPage = 1; // Current page number
|
||||||
|
|
||||||
|
// Get bookId from URL parameters
|
||||||
|
const urlParams = new URLSearchParams(window.location.search);
|
||||||
|
bookId = urlParams.get('id') || 1; // Get id from query string or default to 1
|
||||||
|
|
||||||
|
async function getComment() {
|
||||||
|
try {
|
||||||
|
const response = await fetch(`/common/getBookCommentByPath?id=${bookId}`);
|
||||||
|
const data = await response.json();
|
||||||
|
if (data && data.data) {
|
||||||
|
console.log(data.data)
|
||||||
|
|
||||||
|
// 拼接卷和节作为标题
|
||||||
|
const volumeTitle = data.data.volume || 'Unknown Volume';
|
||||||
|
const sectionTitle = data.data.section || 'Unknown Section';
|
||||||
|
const fullTitle = `${volumeTitle} - ${sectionTitle}`;
|
||||||
|
|
||||||
|
// 设置页面标题
|
||||||
|
document.title = fullTitle; // 设置浏览器标签页标题
|
||||||
|
document.getElementById("pageTitle").innerHTML = fullTitle;
|
||||||
|
|
||||||
|
data.data.volume + data.data.section
|
||||||
|
|
||||||
|
document.getElementById("comments").innerHTML = formatContent(data.data.sectionContent);
|
||||||
|
checkButtonState();
|
||||||
|
setTimeout(scrollToTop, 0); // Use setTimeout to ensure it's executed after DOM update
|
||||||
|
} else {
|
||||||
|
document.getElementById("comments").innerHTML = "No comments found.";
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.log("Error fetching data:", error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Format content to add indent and paragraph spacing
|
||||||
|
function formatContent(content) {
|
||||||
|
const paragraphs = content.split('\n').map(paragraph => `<p>${paragraph}</p>`).join('');
|
||||||
|
return paragraphs;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Navigation function to go to previous or next comment
|
||||||
|
function navigateComment(direction) {
|
||||||
|
if (direction === 'prev') {
|
||||||
|
currentPage = Math.max(1, currentPage - 1); // Ensure page number doesn't go below 1
|
||||||
|
} else if (direction === 'next') {
|
||||||
|
currentPage = currentPage + 1; // Increment for next page
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update URL and reload comment
|
||||||
|
bookId = currentPage;
|
||||||
|
getComment();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check button state based on the current page
|
||||||
|
function checkButtonState() {
|
||||||
|
document.getElementById("prevButton").disabled = currentPage === 1;
|
||||||
|
document.getElementById("nextButton").disabled = currentPage === 100000; // Assuming 10 pages, adjust as needed
|
||||||
|
}
|
||||||
|
|
||||||
|
// Scroll the page to the top
|
||||||
|
function scrollToTop() {
|
||||||
|
console.log("Scrolling to top..."); // Debug log
|
||||||
|
window.scrollTo(0, 0); // Scroll to the top of the page
|
||||||
|
}
|
||||||
|
|
||||||
|
// Load comments when the page is ready
|
||||||
|
getComment();
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
Loading…
Reference in New Issue