Merge branch 'main' of http://frp5.mmszxc.xin:55469/HarrisonLiu/LM
This commit is contained in:
@@ -1,8 +1,9 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<classpath>
|
||||
<classpathentry kind="src" path="src"/>
|
||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/javajdk">
|
||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11">
|
||||
<attributes>
|
||||
<attribute name="module" value="true"/>
|
||||
<attribute name="owner.project.facets" value="java"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
@@ -18,9 +19,6 @@
|
||||
<classpathentry kind="lib" path="WebContent/WEB-INF/lib/slf4j-api-1.7.36-javadoc.jar"/>
|
||||
<classpathentry kind="lib" path="WebContent/WEB-INF/lib/logback-classic-1.2.11-javadoc.jar"/>
|
||||
<classpathentry kind="lib" path="WebContent/WEB-INF/lib/logback-core-1.2.11-javadoc.jar"/>
|
||||
<classpathentry kind="lib" path="WebContent/WEB-INF/lib/jackson-core-3.1.0-rc1-javadoc.jar"/>
|
||||
<classpathentry kind="lib" path="WebContent/WEB-INF/lib/jackson-databind-3.1.0-javadoc.jar"/>
|
||||
<classpathentry kind="lib" path="WebContent/WEB-INF/lib/jackson-annotations-2.15.1-javadoc.jar"/>
|
||||
<classpathentry kind="lib" path="WebContent/WEB-INF/lib/jackson-core-2.15.2.jar"/>
|
||||
<classpathentry kind="lib" path="WebContent/WEB-INF/lib/jackson-annotations-2.15.2.jar"/>
|
||||
<classpathentry kind="lib" path="WebContent/WEB-INF/lib/jackson-databind-2.15.2.jar"/>
|
||||
|
||||
8
.idea/compiler.xml
generated
Normal file
8
.idea/compiler.xml
generated
Normal file
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="CompilerConfiguration">
|
||||
<annotationProcessing>
|
||||
<profile default="true" name="Default" enabled="true" />
|
||||
</annotationProcessing>
|
||||
</component>
|
||||
</project>
|
||||
10
.idea/webContexts.xml
generated
Normal file
10
.idea/webContexts.xml
generated
Normal file
@@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="WebContextManager">
|
||||
<option name="state">
|
||||
<map>
|
||||
<entry key="file://$PROJECT_DIR$/WebContent/view/Reader.jsp" value="file://$PROJECT_DIR$/WebContent/view" />
|
||||
</map>
|
||||
</option>
|
||||
</component>
|
||||
</project>
|
||||
@@ -1,7 +1,10 @@
|
||||
eclipse.preferences.version=1
|
||||
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
|
||||
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
|
||||
org.eclipse.jdt.core.compiler.compliance=1.8
|
||||
org.eclipse.jdt.core.compiler.codegen.targetPlatform=11
|
||||
org.eclipse.jdt.core.compiler.compliance=11
|
||||
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
|
||||
org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
|
||||
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
|
||||
org.eclipse.jdt.core.compiler.source=1.8
|
||||
org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
|
||||
org.eclipse.jdt.core.compiler.release=enabled
|
||||
org.eclipse.jdt.core.compiler.source=11
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
<wb-resource deploy-path="/" source-path="/WebContent" tag="defaultRootSource"/>
|
||||
<wb-resource deploy-path="/WEB-INF/classes" source-path="/src"/>
|
||||
<property name="context-root" value="LM"/>
|
||||
<property name="java-output-path" value="/LM/build/classes"/>
|
||||
<!-- 必须是「项目根下的 build/classes」,不能写成 /LM/build/classes,否则类文件不会进 WEB-INF/classes,Tomcat 会 ClassNotFound -->
|
||||
<property name="java-output-path" value="/build/classes"/>
|
||||
</wb-module>
|
||||
</project-modules>
|
||||
|
||||
@@ -18,9 +18,201 @@ SET NAMES utf8mb4;
|
||||
SET FOREIGN_KEY_CHECKS = 0;
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for library_management_activity
|
||||
-- 删除旧表(如果存在)
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `library_management_activity_registration`;
|
||||
DROP TABLE IF EXISTS `library_management_assistance_log`;
|
||||
DROP TABLE IF EXISTS `library_management_borrow_record`;
|
||||
DROP TABLE IF EXISTS `library_management_book_copy`;
|
||||
DROP TABLE IF EXISTS `library_management_activity`;
|
||||
DROP TABLE IF EXISTS `library_management_book`;
|
||||
DROP TABLE IF EXISTS `library_management_employee`;
|
||||
DROP TABLE IF EXISTS `library_management_reader`;
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for library_management_reader(读者信息表)
|
||||
-- ----------------------------
|
||||
CREATE TABLE `library_management_reader` (
|
||||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
||||
`card_number` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '读者证号',
|
||||
`name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '读者姓名',
|
||||
`age` int NULL DEFAULT NULL COMMENT '年龄',
|
||||
`reader_type` tinyint NOT NULL DEFAULT 3 COMMENT '读者类型:1-老年,2-成人,3-儿童',
|
||||
`contact` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '联系方式',
|
||||
`reg_date` date NULL DEFAULT NULL COMMENT '注册日期',
|
||||
`create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '创建者',
|
||||
`create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
|
||||
`update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '更新者',
|
||||
`update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
|
||||
PRIMARY KEY (`id`) USING BTREE,
|
||||
UNIQUE INDEX `uk_card_number`(`card_number` ASC) USING BTREE
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '读者信息表' ROW_FORMAT = Dynamic;
|
||||
|
||||
-- ----------------------------
|
||||
-- Records of library_management_reader(测试数据:不同类型的读者)
|
||||
-- ----------------------------
|
||||
INSERT INTO `library_management_reader` VALUES
|
||||
(1, 'R2024001', '张小明', 8, 3, '13800000001', '2024-01-15', 'E001', '2024-01-15 10:00:00', NULL, NULL),
|
||||
(2, 'R2024002', '李华', 65, 1, '13800000002', '2024-02-10', 'E001', '2024-02-10 09:30:00', NULL, NULL),
|
||||
(3, 'R2024003', '王芳', 35, 2, '13800000003', '2024-03-05', 'E002', '2024-03-05 14:20:00', NULL, NULL),
|
||||
(4, 'R2024004', '陈思思', 12, 3, '13800000004', '2024-04-01', 'E002', '2024-04-01 11:00:00', NULL, NULL),
|
||||
(5, 'R2024005', '刘建国', 72, 1, '13800000005', '2024-04-20', 'E002', '2024-04-20 16:45:00', NULL, NULL),
|
||||
(6, 'R2024006', '赵敏', 28, 2, '13800000006', '2024-05-10', 'E001', '2024-05-10 08:00:00', NULL, NULL),
|
||||
(7, 'R2024007', '孙小燕', 6, 3, '13800000007', '2024-06-01', 'E003', '2024-06-01 10:30:00', NULL, NULL),
|
||||
(8, 'R2024008', '周大伟', 45, 2, '13800000008', '2024-06-15', 'E003', '2024-06-15 13:00:00', NULL, NULL);
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for library_management_employee(员工信息表)
|
||||
-- ----------------------------
|
||||
CREATE TABLE `library_management_employee` (
|
||||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
||||
`employee_code` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '员工工号',
|
||||
`name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '员工姓名',
|
||||
`position` tinyint NOT NULL DEFAULT 1 COMMENT '职位:1-馆员,2-工作人员,3-经理',
|
||||
`contact` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '联系方式',
|
||||
`hire_date` date NULL DEFAULT NULL COMMENT '入职日期',
|
||||
`create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '创建者',
|
||||
`create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
|
||||
`update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '更新者',
|
||||
`update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
|
||||
PRIMARY KEY (`id`) USING BTREE,
|
||||
UNIQUE INDEX `uk_employee_code`(`employee_code` ASC) USING BTREE
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '员工信息表' ROW_FORMAT = Dynamic;
|
||||
|
||||
-- ----------------------------
|
||||
-- Records of library_management_employee(测试数据:三种角色的员工)
|
||||
-- ----------------------------
|
||||
INSERT INTO `library_management_employee` VALUES
|
||||
(1, 'E001', '张经理', 3, '13900000001', '2020-01-01', NULL, '2020-01-01 08:00:00', NULL, NULL),
|
||||
(2, 'E002', '李工作人员', 2, '13900000002', '2021-03-15', 'E001', '2021-03-15 09:00:00', NULL, NULL),
|
||||
(3, 'E003', '王馆员', 1, '13900000003', '2022-06-01', 'E001', '2022-06-01 10:00:00', NULL, NULL),
|
||||
(4, 'E004', '刘工作人员', 2, '13900000004', '2023-01-10', 'E001', '2023-01-10 08:30:00', NULL, NULL),
|
||||
(5, 'E005', '陈馆员', 1, '13900000005', '2023-09-01', 'E001', '2023-09-01 09:00:00', NULL, NULL);
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for library_management_book(图书基本信息表)
|
||||
-- ----------------------------
|
||||
CREATE TABLE `library_management_book` (
|
||||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
||||
`isbn` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '国际标准书号',
|
||||
`title` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '书名',
|
||||
`author` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '作者',
|
||||
`publisher` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '出版社',
|
||||
`publish_year` int NULL DEFAULT NULL COMMENT '出版年份',
|
||||
`total_stock` int NOT NULL DEFAULT 0 COMMENT '总副本数',
|
||||
`description` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL COMMENT '图书简介',
|
||||
`target_audience` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '通用' COMMENT '面向群体:通用/儿童/成人/老年',
|
||||
`create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '创建者',
|
||||
`create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
|
||||
`update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '更新者',
|
||||
`update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
|
||||
PRIMARY KEY (`id`) USING BTREE,
|
||||
UNIQUE INDEX `uk_isbn`(`isbn` ASC) USING BTREE
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '图书基本信息表' ROW_FORMAT = Dynamic;
|
||||
|
||||
-- ----------------------------
|
||||
-- Records of library_management_book(测试数据:多种类型图书)
|
||||
-- ----------------------------
|
||||
INSERT INTO `library_management_book` VALUES
|
||||
(1, '978-7-111-00001-1', 'Java核心技术卷I', 'Cay S. Horstmann', '机械工业出版社', 2020, 3, 'Java语言经典教材,涵盖Java基础语法和核心库', '通用', 'E003', '2024-01-10 10:00:00', NULL, NULL),
|
||||
(2, '978-7-111-00002-8', 'Python编程:从入门到实践', 'Eric Matthes', '人民邮电出版社', 2019, 5, 'Python入门经典书籍,配有大量实践项目', '通用', 'E003', '2024-01-12 11:00:00', NULL, NULL),
|
||||
(3, '978-7-111-00003-5', '小王子', '安托万·德·圣-埃克苏佩里', '商务印书馆', 2018, 4, '儿童文学经典,讲述小王子的星际旅行', '儿童', 'E003', '2024-01-15 09:00:00', NULL, NULL),
|
||||
(4, '978-7-111-00004-2', '格林童话全集', '格林兄弟', '译林出版社', 2021, 3, '经典童话故事集,适合儿童阅读', '儿童', 'E003', '2024-01-18 14:00:00', NULL, NULL),
|
||||
(5, '978-7-111-00005-9', '活着', '余华', '作家出版社', 2012, 2, '余华代表作,讲述普通人的命运', '成人', 'E003', '2024-02-01 10:00:00', NULL, NULL),
|
||||
(6, '978-7-111-00006-6', '老年健康养生指南', '张明', '卫生出版社', 2023, 2, '老年人健康养生实用手册', '老年', 'E002', '2024-02-05 15:00:00', NULL, NULL),
|
||||
(7, '978-7-111-00007-3', '数据结构与算法分析', 'Mark Allen Weiss', '电子工业出版社', 2020, 3, '经典算法教材,深入分析各种数据结构', '通用', 'E003', '2024-02-10 09:00:00', NULL, NULL),
|
||||
(8, '978-7-111-00008-0', '安徒生童话选', '汉斯·克里斯蒂安·安徒生', '少年儿童出版社', 2022, 3, '安徒生经典童话故事,适合亲子阅读', '儿童', 'E002', '2024-02-15 11:00:00', NULL, NULL),
|
||||
(9, '978-7-111-00009-7', '红楼梦', '曹雪芹', '人民文学出版社', 2019, 2, '中国古典四大名著之一', '成人', 'E003', '2024-03-01 10:00:00', NULL, NULL),
|
||||
(10, '978-7-111-00010-3', '书法与养生', '李明', '文化艺术出版社', 2023, 2, '书法练习对老年人健康的好处', '老年', 'E002', '2024-03-10 14:00:00', NULL, NULL);
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for library_management_book_copy(图书副本表)
|
||||
-- ----------------------------
|
||||
CREATE TABLE `library_management_book_copy` (
|
||||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
||||
`book_id` bigint NOT NULL COMMENT '所属图书ID',
|
||||
`barcode` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '条形码',
|
||||
`location` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '存放位置',
|
||||
`status` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '可借' COMMENT '状态:可借/借出/损坏',
|
||||
`create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '创建者',
|
||||
`create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
|
||||
`update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '更新者',
|
||||
`update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
|
||||
PRIMARY KEY (`id`) USING BTREE,
|
||||
UNIQUE INDEX `uk_barcode`(`barcode` ASC) USING BTREE,
|
||||
INDEX `idx_book_id`(`book_id` ASC) USING BTREE
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '图书副本表(每本实体书)' ROW_FORMAT = Dynamic;
|
||||
|
||||
-- ----------------------------
|
||||
-- Records of library_management_book_copy(每本书的副本数据)
|
||||
-- ----------------------------
|
||||
INSERT INTO `library_management_book_copy` VALUES
|
||||
(1, 1, '978-7-111-00001-1-001', 'A区-1-01', '可借', 'E003', '2024-01-10 10:00:00', NULL, NULL),
|
||||
(2, 1, '978-7-111-00001-1-002', 'A区-1-02', '可借', 'E003', '2024-01-10 10:00:00', NULL, NULL),
|
||||
(3, 1, '978-7-111-00001-1-003', 'A区-1-03', '可借', 'E003', '2024-01-10 10:00:00', NULL, NULL),
|
||||
(4, 2, '978-7-111-00002-8-001', 'A区-2-01', '可借', 'E003', '2024-01-12 11:00:00', NULL, NULL),
|
||||
(5, 2, '978-7-111-00002-8-002', 'A区-2-02', '可借', 'E003', '2024-01-12 11:00:00', NULL, NULL),
|
||||
(6, 2, '978-7-111-00002-8-003', 'A区-2-03', '可借', 'E003', '2024-01-12 11:00:00', NULL, NULL),
|
||||
(7, 2, '978-7-111-00002-8-004', 'A区-2-04', '可借', 'E003', '2024-01-12 11:00:00', NULL, NULL),
|
||||
(8, 2, '978-7-111-00002-8-005', 'A区-2-05', '可借', 'E003', '2024-01-12 11:00:00', NULL, NULL),
|
||||
(9, 3, '978-7-111-00003-5-001', 'B区-1-01', '可借', 'E003', '2024-01-15 09:00:00', NULL, NULL),
|
||||
(10, 3, '978-7-111-00003-5-002', 'B区-1-02', '可借', 'E003', '2024-01-15 09:00:00', NULL, NULL),
|
||||
(11, 3, '978-7-111-00003-5-003', 'B区-1-03', '可借', 'E003', '2024-01-15 09:00:00', NULL, NULL),
|
||||
(12, 3, '978-7-111-00003-5-004', 'B区-1-04', '可借', 'E003', '2024-01-15 09:00:00', NULL, NULL),
|
||||
(13, 4, '978-7-111-00004-2-001', 'B区-2-01', '可借', 'E003', '2024-01-18 14:00:00', NULL, NULL),
|
||||
(14, 4, '978-7-111-00004-2-002', 'B区-2-02', '可借', 'E003', '2024-01-18 14:00:00', NULL, NULL),
|
||||
(15, 4, '978-7-111-00004-2-003', 'B区-2-03', '可借', 'E003', '2024-01-18 14:00:00', NULL, NULL),
|
||||
(16, 5, '978-7-111-00005-9-001', 'C区-1-01', '可借', 'E003', '2024-02-01 10:00:00', NULL, NULL),
|
||||
(17, 5, '978-7-111-00005-9-002', 'C区-1-02', '可借', 'E003', '2024-02-01 10:00:00', NULL, NULL),
|
||||
(18, 6, '978-7-111-00006-6-001', 'D区-1-01', '可借', 'E002', '2024-02-05 15:00:00', NULL, NULL),
|
||||
(19, 6, '978-7-111-00006-6-002', 'D区-1-02', '可借', 'E002', '2024-02-05 15:00:00', NULL, NULL),
|
||||
(20, 7, '978-7-111-00007-3-001', 'A区-3-01', '可借', 'E003', '2024-02-10 09:00:00', NULL, NULL),
|
||||
(21, 7, '978-7-111-00007-3-002', 'A区-3-02', '可借', 'E003', '2024-02-10 09:00:00', NULL, NULL),
|
||||
(22, 7, '978-7-111-00007-3-003', 'A区-3-03', '可借', 'E003', '2024-02-10 09:00:00', NULL, NULL),
|
||||
(23, 8, '978-7-111-00008-0-001', 'B区-3-01', '可借', 'E002', '2024-02-15 11:00:00', NULL, NULL),
|
||||
(24, 8, '978-7-111-00008-0-002', 'B区-3-02', '可借', 'E002', '2024-02-15 11:00:00', NULL, NULL),
|
||||
(25, 8, '978-7-111-00008-0-003', 'B区-3-03', '可借', 'E002', '2024-02-15 11:00:00', NULL, NULL),
|
||||
(26, 9, '978-7-111-00009-7-001', 'C区-2-01', '可借', 'E003', '2024-03-01 10:00:00', NULL, NULL),
|
||||
(27, 9, '978-7-111-00009-7-002', 'C区-2-02', '可借', 'E003', '2024-03-01 10:00:00', NULL, NULL),
|
||||
(28, 10, '978-7-111-00010-3-001', 'D区-2-01', '可借', 'E002', '2024-03-10 14:00:00', NULL, NULL),
|
||||
(29, 10, '978-7-111-00010-3-002', 'D区-2-02', '可借', 'E002', '2024-03-10 14:00:00', NULL, NULL);
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for library_management_borrow_record(借阅记录表)
|
||||
-- ----------------------------
|
||||
CREATE TABLE `library_management_borrow_record` (
|
||||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
||||
`reader_id` bigint NOT NULL COMMENT '读者ID',
|
||||
`copy_id` bigint NOT NULL COMMENT '副本ID',
|
||||
`borrow_date` date NOT NULL COMMENT '借出日期',
|
||||
`due_date` date NOT NULL COMMENT '应还日期',
|
||||
`return_date` date NULL DEFAULT NULL COMMENT '实际归还日期',
|
||||
`renew_count` int NOT NULL DEFAULT 0 COMMENT '续借次数',
|
||||
`operator_id` bigint NULL DEFAULT NULL COMMENT '办理员工ID(读者自助借书时为空)',
|
||||
`create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '创建者',
|
||||
`create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
|
||||
`update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '更新者',
|
||||
`update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
|
||||
PRIMARY KEY (`id`) USING BTREE,
|
||||
INDEX `idx_reader_id`(`reader_id` ASC) USING BTREE,
|
||||
INDEX `idx_copy_id`(`copy_id` ASC) USING BTREE,
|
||||
INDEX `idx_operator_id`(`operator_id` ASC) USING BTREE
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '借阅记录表' ROW_FORMAT = Dynamic;
|
||||
|
||||
-- ----------------------------
|
||||
-- Records of library_management_borrow_record(测试数据:部分借阅记录)
|
||||
-- ----------------------------
|
||||
INSERT INTO `library_management_borrow_record` VALUES
|
||||
(1, 3, 1, '2024-02-10', '2024-03-11', '2024-03-05', 0, 2, 'E002', '2024-02-10 10:00:00', NULL, NULL),
|
||||
(2, 6, 5, '2024-02-20', '2024-03-21', '2024-03-18', 0, 2, 'E002', '2024-02-20 14:00:00', NULL, NULL),
|
||||
(3, 8, 20, '2024-03-01', '2024-03-31', NULL, 0, 3, 'E003', '2024-03-01 09:00:00', NULL, NULL),
|
||||
(4, 3, 9, '2024-03-05', '2024-04-04', NULL, 0, 2, 'E002', '2024-03-05 11:00:00', NULL, NULL),
|
||||
(5, 6, 16, '2024-03-10', '2024-04-09', NULL, 0, 3, 'E003', '2024-03-10 10:00:00', NULL, NULL),
|
||||
(6, 8, 4, '2024-03-15', '2024-04-14', NULL, 0, 2, 'E002', '2024-03-15 15:00:00', NULL, NULL);
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for library_management_activity(活动信息表)
|
||||
-- ----------------------------
|
||||
CREATE TABLE `library_management_activity` (
|
||||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
||||
`name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '活动名称',
|
||||
@@ -28,8 +220,8 @@ CREATE TABLE `library_management_activity` (
|
||||
`start_time` datetime NOT NULL COMMENT '开始时间',
|
||||
`end_time` datetime NOT NULL COMMENT '结束时间',
|
||||
`location` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '活动地点',
|
||||
`target_reader_type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '面向群体,如“老年,儿童”',
|
||||
`manager_id` bigint NOT NULL COMMENT '负责人ID',
|
||||
`target_reader_type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '面向群体,如"老年,儿童"',
|
||||
`manager_id` bigint NULL DEFAULT NULL COMMENT '负责人ID(读者端创建活动时为空)',
|
||||
`max_participants` int NOT NULL DEFAULT 0 COMMENT '最大参与人数',
|
||||
`create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '创建者',
|
||||
`create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
|
||||
@@ -40,13 +232,18 @@ CREATE TABLE `library_management_activity` (
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '活动信息表' ROW_FORMAT = Dynamic;
|
||||
|
||||
-- ----------------------------
|
||||
-- Records of library_management_activity
|
||||
-- Records of library_management_activity(测试数据:面向不同群体的活动)
|
||||
-- ----------------------------
|
||||
INSERT INTO `library_management_activity` VALUES
|
||||
(1, '儿童绘本故事会', '邀请专业讲师为小朋友讲述经典绘本故事,培养阅读兴趣', '2026-04-05 10:00:00', '2026-04-05 11:30:00', '二楼儿童阅览室', '儿童', 1, 30, 'E001', '2026-03-20 09:00:00', NULL, NULL),
|
||||
(2, '老年健康讲座', '邀请医学专家讲解老年健康养生知识', '2026-04-12 14:00:00', '2026-04-12 16:00:00', '三楼报告厅', '老年', 1, 50, 'E001', '2026-03-21 10:00:00', NULL, NULL),
|
||||
(3, '成人读书分享会', '本月主题:《活着》读书分享与讨论', '2026-04-20 19:00:00', '2026-04-20 21:00:00', '一楼多功能厅', '成人', 1, 40, 'E001', '2026-03-22 08:00:00', NULL, NULL),
|
||||
(4, '青少年编程体验课', 'Python入门体验,让青少年感受编程乐趣', '2026-04-08 14:00:00', '2026-04-08 16:00:00', '电子阅览室', '儿童,成人', 1, 20, 'E001', '2026-03-23 09:00:00', NULL, NULL),
|
||||
(5, '书法交流活动', '老年人书法爱好者交流活动', '2026-04-15 09:00:00', '2026-04-15 12:00:00', '五楼书法室', '老年', 1, 25, 'E001', '2026-03-23 14:00:00', NULL, NULL);
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for library_management_activity_registration
|
||||
-- Table structure for library_management_activity_registration(活动报名表)
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `library_management_activity_registration`;
|
||||
CREATE TABLE `library_management_activity_registration` (
|
||||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
||||
`activity_id` bigint NOT NULL COMMENT '活动ID',
|
||||
@@ -64,11 +261,22 @@ CREATE TABLE `library_management_activity_registration` (
|
||||
-- ----------------------------
|
||||
-- Records of library_management_activity_registration
|
||||
-- ----------------------------
|
||||
INSERT INTO `library_management_activity_registration` VALUES
|
||||
(1, 1, 1, '2026-03-20 10:00:00', 0, NULL, '2026-03-20 10:00:00', NULL, NULL),
|
||||
(2, 1, 4, '2026-03-20 11:00:00', 0, NULL, '2026-03-20 11:00:00', NULL, NULL),
|
||||
(3, 1, 7, '2026-03-21 09:00:00', 0, NULL, '2026-03-21 09:00:00', NULL, NULL),
|
||||
(4, 2, 2, '2026-03-21 10:00:00', 0, NULL, '2026-03-21 10:00:00', NULL, NULL),
|
||||
(5, 2, 5, '2026-03-21 14:00:00', 0, NULL, '2026-03-21 14:00:00', NULL, NULL),
|
||||
(6, 3, 3, '2026-03-22 08:00:00', 0, NULL, '2026-03-22 08:00:00', NULL, NULL),
|
||||
(7, 3, 6, '2026-03-22 09:00:00', 0, NULL, '2026-03-22 09:00:00', NULL, NULL),
|
||||
(8, 3, 8, '2026-03-22 15:00:00', 0, NULL, '2026-03-22 15:00:00', NULL, NULL),
|
||||
(9, 4, 1, '2026-03-23 09:00:00', 0, NULL, '2026-03-23 09:00:00', NULL, NULL),
|
||||
(10, 5, 2, '2026-03-23 14:00:00', 0, NULL, '2026-03-23 14:00:00', NULL, NULL),
|
||||
(11, 5, 5, '2026-03-23 16:00:00', 0, NULL, '2026-03-23 16:00:00', NULL, NULL);
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for library_management_assistance_log
|
||||
-- Table structure for library_management_assistance_log(读者咨询记录表)
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `library_management_assistance_log`;
|
||||
CREATE TABLE `library_management_assistance_log` (
|
||||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
||||
`reader_id` bigint NOT NULL COMMENT '读者ID',
|
||||
@@ -88,127 +296,10 @@ CREATE TABLE `library_management_assistance_log` (
|
||||
-- ----------------------------
|
||||
-- Records of library_management_assistance_log
|
||||
-- ----------------------------
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for library_management_book
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `library_management_book`;
|
||||
CREATE TABLE `library_management_book` (
|
||||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
||||
`isbn` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '国际标准书号',
|
||||
`title` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '书名',
|
||||
`author` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '作者',
|
||||
`publisher` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '出版社',
|
||||
`publish_year` int NULL DEFAULT NULL COMMENT '出版年份',
|
||||
`total_stock` int NOT NULL DEFAULT 0 COMMENT '总副本数',
|
||||
`description` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL COMMENT '图书简介',
|
||||
`create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '创建者',
|
||||
`create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
|
||||
`update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '更新者',
|
||||
`update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
|
||||
PRIMARY KEY (`id`) USING BTREE,
|
||||
UNIQUE INDEX `uk_isbn`(`isbn` ASC) USING BTREE
|
||||
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '图书基本信息表' ROW_FORMAT = Dynamic;
|
||||
|
||||
-- ----------------------------
|
||||
-- Records of library_management_book
|
||||
-- ----------------------------
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for library_management_book_copy
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `library_management_book_copy`;
|
||||
CREATE TABLE `library_management_book_copy` (
|
||||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
||||
`book_id` bigint NOT NULL COMMENT '所属图书ID',
|
||||
`barcode` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '条形码',
|
||||
`location` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '存放位置',
|
||||
`status` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '可借' COMMENT '状态:可借/借出/损坏',
|
||||
`create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '创建者',
|
||||
`create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
|
||||
`update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '更新者',
|
||||
`update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
|
||||
PRIMARY KEY (`id`) USING BTREE,
|
||||
UNIQUE INDEX `uk_barcode`(`barcode` ASC) USING BTREE,
|
||||
INDEX `idx_book_id`(`book_id` ASC) USING BTREE
|
||||
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '图书副本表(每本实体书)' ROW_FORMAT = Dynamic;
|
||||
|
||||
-- ----------------------------
|
||||
-- Records of library_management_book_copy
|
||||
-- ----------------------------
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for library_management_borrow_record
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `library_management_borrow_record`;
|
||||
CREATE TABLE `library_management_borrow_record` (
|
||||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
||||
`reader_id` bigint NOT NULL COMMENT '读者ID',
|
||||
`copy_id` bigint NOT NULL COMMENT '副本ID',
|
||||
`borrow_date` date NOT NULL COMMENT '借出日期',
|
||||
`due_date` date NOT NULL COMMENT '应还日期',
|
||||
`return_date` date NULL DEFAULT NULL COMMENT '实际归还日期',
|
||||
`renew_count` int NOT NULL DEFAULT 0 COMMENT '续借次数',
|
||||
`operator_id` bigint NOT NULL COMMENT '办理员工ID',
|
||||
`create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '创建者',
|
||||
`create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
|
||||
`update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '更新者',
|
||||
`update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
|
||||
PRIMARY KEY (`id`) USING BTREE,
|
||||
INDEX `idx_reader_id`(`reader_id` ASC) USING BTREE,
|
||||
INDEX `idx_copy_id`(`copy_id` ASC) USING BTREE,
|
||||
INDEX `idx_operator_id`(`operator_id` ASC) USING BTREE
|
||||
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '借阅记录表' ROW_FORMAT = Dynamic;
|
||||
|
||||
-- ----------------------------
|
||||
-- Records of library_management_borrow_record
|
||||
-- ----------------------------
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for library_management_employee
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `library_management_employee`;
|
||||
CREATE TABLE `library_management_employee` (
|
||||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
||||
`employee_code` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '员工工号',
|
||||
`name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '员工姓名',
|
||||
`position` tinyint NOT NULL DEFAULT 1 COMMENT '职位:1-馆员,2-工作人员,3-经理',
|
||||
`contact` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '联系方式',
|
||||
`hire_date` date NULL DEFAULT NULL COMMENT '入职日期',
|
||||
`create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '创建者',
|
||||
`create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
|
||||
`update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '更新者',
|
||||
`update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
|
||||
PRIMARY KEY (`id`) USING BTREE,
|
||||
UNIQUE INDEX `uk_employee_code`(`employee_code` ASC) USING BTREE
|
||||
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '员工信息表' ROW_FORMAT = Dynamic;
|
||||
|
||||
-- ----------------------------
|
||||
-- Records of library_management_employee
|
||||
-- ----------------------------
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for library_management_reader
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `library_management_reader`;
|
||||
CREATE TABLE `library_management_reader` (
|
||||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
||||
`card_number` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '读者证号',
|
||||
`name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '读者姓名',
|
||||
`age` int NULL DEFAULT NULL COMMENT '年龄',
|
||||
`reader_type` tinyint NOT NULL DEFAULT 3 COMMENT '读者类型:1-老年,2-成人,3-儿童',
|
||||
`contact` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '联系方式',
|
||||
`reg_date` date NULL DEFAULT NULL COMMENT '注册日期',
|
||||
`create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '创建者',
|
||||
`create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
|
||||
`update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '更新者',
|
||||
`update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
|
||||
PRIMARY KEY (`id`) USING BTREE,
|
||||
UNIQUE INDEX `uk_card_number`(`card_number` ASC) USING BTREE
|
||||
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '读者信息表' ROW_FORMAT = Dynamic;
|
||||
|
||||
-- ----------------------------
|
||||
-- Records of library_management_reader
|
||||
-- ----------------------------
|
||||
INSERT INTO `library_management_assistance_log` VALUES
|
||||
(1, 1, 2, '2024-02-10 10:00:00', '帮助小读者张小明注册办证', '家长陪同', NULL, '2024-02-10 10:00:00', NULL, NULL),
|
||||
(2, 2, 2, '2024-02-15 14:00:00', '老年读者李华咨询借阅规则', '已解答', NULL, '2024-02-15 14:00:00', NULL, NULL),
|
||||
(3, 4, 4, '2024-04-05 11:00:00', '帮助陈思思注册办证(儿童)', '家长陪同', NULL, '2024-04-05 11:00:00', NULL, NULL),
|
||||
(4, 7, 4, '2024-06-10 10:30:00', '帮助孙小燕注册办证(儿童)', '家长陪同', NULL, '2024-06-10 10:30:00', NULL, NULL);
|
||||
|
||||
SET FOREIGN_KEY_CHECKS = 1;
|
||||
|
||||
@@ -3,4 +3,12 @@
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
|
||||
version="4.0">
|
||||
|
||||
<welcome-file-list>
|
||||
<welcome-file>view/Login.jsp</welcome-file>
|
||||
</welcome-file-list>
|
||||
|
||||
<!-- 过滤器统一使用 @WebFilter 注解注册,不需要在 web.xml 中重复配置 -->
|
||||
<!-- 执行顺序由 @WebFilter 的 filter-name 字母顺序决定:A → E → EmployeePermission -->
|
||||
|
||||
</web-app>
|
||||
@@ -8,28 +8,166 @@
|
||||
<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
|
||||
<style>
|
||||
/* 样式保持不变,省略(实际使用时应保留原有样式) */
|
||||
* { margin:0; padding:0; box-sizing:border-box; }
|
||||
body { background:#eef2f6; font-family:'Inter',sans-serif; display:flex; align-items:center; justify-content:center; min-height:100vh; padding:1rem; }
|
||||
#app { width:100%; max-width:520px; }
|
||||
.card { background:white; border-radius:28px; box-shadow:0 25px 45px -12px rgba(0,0,0,0.15); padding:2.2rem 2rem; width:100%; }
|
||||
h2 { font-size:1.9rem; font-weight:600; color:#1a2b3c; margin-bottom:1.5rem; border-bottom:2px solid #f0f4f9; padding-bottom:1rem; }
|
||||
h3 { font-size:1.2rem; font-weight:500; color:#2c3e50; margin-bottom:1.2rem; }
|
||||
.field { margin-bottom:1.3rem; }
|
||||
label { display:block; font-size:0.8rem; font-weight:600; text-transform:uppercase; color:#4a5e74; margin-bottom:0.3rem; }
|
||||
input, select { width:100%; padding:0.8rem 1rem; font-size:1rem; border:1.5px solid #e2e9f2; border-radius:16px; background:#fff; transition:border 0.15s; outline:none; }
|
||||
input:focus, select:focus { border-color:#7c8ea0; background:#fafcff; }
|
||||
button { background:#2c3e50; color:white; border:none; padding:0.9rem 1.5rem; font-size:1rem; font-weight:500; border-radius:40px; cursor:pointer; transition:background 0.15s; width:100%; margin-top:0.3rem; }
|
||||
button:hover { background:#1d2c3a; }
|
||||
.secondary-btn { background:white; color:#2c3e50; border:1.5px solid #d0ddee; margin-top:1rem; }
|
||||
.secondary-btn:hover { background:#f2f6fc; border-color:#a0b8cf; }
|
||||
.nav-links { display:flex; justify-content:space-between; margin-top:1.5rem; gap:0.5rem; flex-wrap:wrap; }
|
||||
.nav-link { background:#f0f5fb; color:#2e405b; padding:0.6rem 1.2rem; border-radius:40px; font-size:0.9rem; font-weight:500; cursor:pointer; border:1px solid transparent; transition:background 0.15s; text-align:center; flex:1 1 auto; }
|
||||
.nav-link:hover { background:#dae2ed; color:#0e1e2f; }
|
||||
.active-view { margin-bottom:1rem; }
|
||||
.note { font-size:0.75rem; color:#8f9fb1; margin-top:0.5rem; text-align:center; }
|
||||
.compact-form { background:#f9fcff; border-radius:20px; padding:1.5rem 1.2rem; margin:0.5rem 0 1rem; }
|
||||
.nav-link.active-nav { background:#2c3e50; color:white; border-color:#2c3e50; }
|
||||
.nav-link.active-nav:hover { background:#1d2c3a; }
|
||||
* {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
body {
|
||||
background: #eef2f6;
|
||||
font-family: 'Inter', sans-serif;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
min-height: 100vh;
|
||||
padding: 1rem;
|
||||
}
|
||||
|
||||
#app {
|
||||
width: 100%;
|
||||
max-width: 520px;
|
||||
}
|
||||
|
||||
.card {
|
||||
background: white;
|
||||
border-radius: 28px;
|
||||
box-shadow: 0 25px 45px -12px rgba(0, 0, 0, 0.15);
|
||||
padding: 2.2rem 2rem;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: 1.9rem;
|
||||
font-weight: 600;
|
||||
color: #1a2b3c;
|
||||
margin-bottom: 1.5rem;
|
||||
border-bottom: 2px solid #f0f4f9;
|
||||
padding-bottom: 1rem;
|
||||
}
|
||||
|
||||
h3 {
|
||||
font-size: 1.2rem;
|
||||
font-weight: 500;
|
||||
color: #2c3e50;
|
||||
margin-bottom: 1.2rem;
|
||||
}
|
||||
|
||||
.field {
|
||||
margin-bottom: 1.3rem;
|
||||
}
|
||||
|
||||
label {
|
||||
display: block;
|
||||
font-size: 0.8rem;
|
||||
font-weight: 600;
|
||||
text-transform: uppercase;
|
||||
color: #4a5e74;
|
||||
margin-bottom: 0.3rem;
|
||||
}
|
||||
|
||||
input,
|
||||
select {
|
||||
width: 100%;
|
||||
padding: 0.8rem 1rem;
|
||||
font-size: 1rem;
|
||||
border: 1.5px solid #e2e9f2;
|
||||
border-radius: 16px;
|
||||
background: #fff;
|
||||
transition: border 0.15s;
|
||||
outline: none;
|
||||
}
|
||||
|
||||
input:focus,
|
||||
select:focus {
|
||||
border-color: #7c8ea0;
|
||||
background: #fafcff;
|
||||
}
|
||||
|
||||
button {
|
||||
background: #2c3e50;
|
||||
color: white;
|
||||
border: none;
|
||||
padding: 0.9rem 1.5rem;
|
||||
font-size: 1rem;
|
||||
font-weight: 500;
|
||||
border-radius: 40px;
|
||||
cursor: pointer;
|
||||
transition: background 0.15s;
|
||||
width: 100%;
|
||||
margin-top: 0.3rem;
|
||||
}
|
||||
|
||||
button:hover {
|
||||
background: #1d2c3a;
|
||||
}
|
||||
|
||||
.secondary-btn {
|
||||
background: white;
|
||||
color: #2c3e50;
|
||||
border: 1.5px solid #d0ddee;
|
||||
margin-top: 1rem;
|
||||
}
|
||||
|
||||
.secondary-btn:hover {
|
||||
background: #f2f6fc;
|
||||
border-color: #a0b8cf;
|
||||
}
|
||||
|
||||
.nav-links {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
margin-top: 1.5rem;
|
||||
gap: 0.5rem;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.nav-link {
|
||||
background: #f0f5fb;
|
||||
color: #2e405b;
|
||||
padding: 0.6rem 1.2rem;
|
||||
border-radius: 40px;
|
||||
font-size: 0.9rem;
|
||||
font-weight: 500;
|
||||
cursor: pointer;
|
||||
border: 1px solid transparent;
|
||||
transition: background 0.15s;
|
||||
text-align: center;
|
||||
flex: 1 1 auto;
|
||||
}
|
||||
|
||||
.nav-link:hover {
|
||||
background: #dae2ed;
|
||||
color: #0e1e2f;
|
||||
}
|
||||
|
||||
.active-view {
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
.note {
|
||||
font-size: 0.75rem;
|
||||
color: #8f9fb1;
|
||||
margin-top: 0.5rem;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.compact-form {
|
||||
background: #f9fcff;
|
||||
border-radius: 20px;
|
||||
padding: 1.5rem 1.2rem;
|
||||
margin: 0.5rem 0 1rem;
|
||||
}
|
||||
|
||||
.nav-link.active-nav {
|
||||
background: #2c3e50;
|
||||
color: white;
|
||||
border-color: #2c3e50;
|
||||
}
|
||||
|
||||
.nav-link.active-nav:hover {
|
||||
background: #1d2c3a;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
@@ -3,8 +3,9 @@
|
||||
<%@ page import="com.chinasofti.enums.ReaderType" %>
|
||||
<%
|
||||
Reader currentReader = (Reader) session.getAttribute("currentReader");
|
||||
// Login.jsp 在 /view/Login.jsp,需要返回上级目录
|
||||
if (currentReader == null) {
|
||||
response.sendRedirect(request.getContextPath() + "/Login.jsp");
|
||||
response.sendRedirect(request.getContextPath() + "/../Login.jsp");
|
||||
return;
|
||||
}
|
||||
// 准备传递给前端的数据
|
||||
@@ -29,51 +30,347 @@
|
||||
<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
|
||||
<style>
|
||||
/* 样式与原来相同,此处省略(请保留原样式) */
|
||||
* { margin:0; padding:0; box-sizing:border-box; }
|
||||
body { background:#eef2f6; font-family:'Inter',sans-serif; display:flex; align-items:center; justify-content:center; min-height:100vh; padding:1rem; }
|
||||
#app { width:100%; max-width:1400px; }
|
||||
.app-container { background:white; border-radius:32px; box-shadow:0 30px 50px -20px rgba(0,0,0,0.2); overflow:hidden; }
|
||||
.header { display:flex; align-items:center; justify-content:space-between; padding:1.2rem 2rem; background:#fff; border-bottom:1px solid #eaf0f6; }
|
||||
.user-info { display:flex; align-items:center; gap:1.5rem; flex-wrap:wrap; }
|
||||
.user-greeting { font-weight:600; font-size:1.2rem; color:#1a2b3c; background:#f0f6fe; padding:0.4rem 1.2rem; border-radius:40px; }
|
||||
.logout-btn { background:white; border:1.5px solid #dae2ed; color:#3b4e62; padding:0.4rem 1.4rem; border-radius:40px; font-weight:500; font-size:0.9rem; cursor:pointer; transition:all 0.15s; }
|
||||
.logout-btn:hover { background:#f1f7fd; border-color:#9bb1c9; }
|
||||
.child-note { background:#fdf6e6; color:#926d39; border-radius:40px; padding:0.3rem 1.2rem; font-size:0.8rem; font-weight:500; display:inline-block; }
|
||||
.nav-tabs { display:flex; gap:0.8rem; }
|
||||
.nav-tab { background:transparent; border:none; padding:0.6rem 1.8rem; font-size:1rem; font-weight:600; color:#5d7184; border-radius:40px; cursor:pointer; transition:0.15s; border:1.5px solid transparent; }
|
||||
.nav-tab.active { background:#2c3e50; color:white; }
|
||||
.nav-tab:not(.active):hover { background:#eef3f9; color:#2c3e50; }
|
||||
.main-content { padding:2rem; }
|
||||
.borrow-layout { display:flex; flex-direction:column; gap:2.5rem; }
|
||||
.section-card { background:#f9fcff; border-radius:24px; padding:1.6rem 1.8rem; border:1px solid #e6edf5; }
|
||||
.section-title { font-size:1.2rem; font-weight:600; color:#1e3b5c; margin-bottom:1.5rem; display:flex; align-items:center; gap:0.5rem; flex-wrap:wrap; }
|
||||
.search-row { display:flex; flex-wrap:wrap; gap:1rem; align-items:flex-end; margin-bottom:2rem; }
|
||||
.search-field { flex:1 1 160px; }
|
||||
.search-field label { display:block; font-size:0.75rem; font-weight:600; text-transform:uppercase; color:#5f748b; margin-bottom:0.3rem; }
|
||||
.search-field input { width:100%; padding:0.6rem 1rem; border:1.5px solid #d8e2ee; border-radius:30px; font-size:0.95rem; background:white; }
|
||||
.search-field input:focus { outline:none; border-color:#7e99b3; }
|
||||
.search-btn { background:#2c3e50; color:white; border:none; padding:0.6rem 2rem; border-radius:30px; font-weight:500; cursor:pointer; font-size:0.95rem; transition:background 0.15s; height:fit-content; align-self:center; }
|
||||
.search-btn:hover { background:#1a2b3c; }
|
||||
.table-wrapper { overflow-x:auto; border-radius:18px; background:white; box-shadow:0 4px 12px rgba(0,0,0,0.02); margin-top:1rem; }
|
||||
table { width:100%; border-collapse:collapse; font-size:0.9rem; min-width:1000px; }
|
||||
th { background:#eef4fa; color:#1d3b5c; font-weight:600; padding:1rem 0.8rem; text-align:left; white-space:nowrap; }
|
||||
td { padding:1rem 0.8rem; border-bottom:1px solid #eef3f8; color:#1f2f40; }
|
||||
.action-btn { background:#2c3e50; color:white; border:none; padding:0.4rem 1.2rem; border-radius:30px; font-size:0.8rem; font-weight:500; cursor:pointer; transition:background 0.15s; }
|
||||
.action-btn.return { background:#9b6b43; }
|
||||
.action-btn.return:hover { background:#7e4f2e; }
|
||||
.action-btn:hover { background:#1a2b3c; }
|
||||
.child-badge { background:#c9dff3; color:#144a70; padding:0.2rem 0.8rem; border-radius:30px; font-size:0.75rem; font-weight:600; display:inline-block; }
|
||||
.empty-row td { padding:2rem; text-align:center; color:#8c9db2; font-style:italic; }
|
||||
.activity-grid { display:grid; grid-template-columns:repeat(auto-fill, minmax(260px,1fr)); gap:1.8rem; margin-top:1.5rem; }
|
||||
.activity-card { background:white; border-radius:24px; padding:1.5rem; box-shadow:0 8px 18px rgba(0,0,0,0.03); border:1px solid #e6edf5; transition:transform 0.1s; display:flex; flex-direction:column; }
|
||||
.activity-card:hover { transform:translateY(-2px); box-shadow:0 12px 24px rgba(0,0,0,0.05); }
|
||||
.activity-name { font-size:1.2rem; font-weight:600; color:#1e3b5c; margin-bottom:0.5rem; }
|
||||
.activity-time { color:#6e8aa8; font-size:0.9rem; margin-bottom:0.5rem; display:flex; align-items:center; gap:0.3rem; }
|
||||
.activity-desc { color:#3a4e66; font-size:0.95rem; line-height:1.4; margin:0.8rem 0 1.2rem; flex:1; }
|
||||
.signup-btn { background:#2c3e50; color:white; border:none; padding:0.6rem 1rem; border-radius:40px; font-weight:500; font-size:0.9rem; cursor:pointer; transition:background 0.15s; align-self:flex-start; width:100%; }
|
||||
.signup-btn:hover { background:#1a2b3c; }
|
||||
.info-note { background:#eaf2fb; padding:0.5rem 1.2rem; border-radius:40px; color:#2c577c; font-size:0.85rem; display:inline-block; }
|
||||
.empty-placeholder { text-align:center; padding:2rem; background:white; border-radius:18px; color:#8f9fb1; }
|
||||
* {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
body {
|
||||
background: #eef2f6;
|
||||
font-family: 'Inter', sans-serif;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
min-height: 100vh;
|
||||
padding: 1rem;
|
||||
}
|
||||
|
||||
#app {
|
||||
width: 100%;
|
||||
max-width: 1400px;
|
||||
}
|
||||
|
||||
.app-container {
|
||||
background: white;
|
||||
border-radius: 32px;
|
||||
box-shadow: 0 30px 50px -20px rgba(0, 0, 0, 0.2);
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.header {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
padding: 1.2rem 2rem;
|
||||
background: #fff;
|
||||
border-bottom: 1px solid #eaf0f6;
|
||||
}
|
||||
|
||||
.user-info {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 1.5rem;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.user-greeting {
|
||||
font-weight: 600;
|
||||
font-size: 1.2rem;
|
||||
color: #1a2b3c;
|
||||
background: #f0f6fe;
|
||||
padding: 0.4rem 1.2rem;
|
||||
border-radius: 40px;
|
||||
}
|
||||
|
||||
.logout-btn {
|
||||
background: white;
|
||||
border: 1.5px solid #dae2ed;
|
||||
color: #3b4e62;
|
||||
padding: 0.4rem 1.4rem;
|
||||
border-radius: 40px;
|
||||
font-weight: 500;
|
||||
font-size: 0.9rem;
|
||||
cursor: pointer;
|
||||
transition: all 0.15s;
|
||||
}
|
||||
|
||||
.logout-btn:hover {
|
||||
background: #f1f7fd;
|
||||
border-color: #9bb1c9;
|
||||
}
|
||||
|
||||
.child-note {
|
||||
background: #fdf6e6;
|
||||
color: #926d39;
|
||||
border-radius: 40px;
|
||||
padding: 0.3rem 1.2rem;
|
||||
font-size: 0.8rem;
|
||||
font-weight: 500;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.nav-tabs {
|
||||
display: flex;
|
||||
gap: 0.8rem;
|
||||
}
|
||||
|
||||
.nav-tab {
|
||||
background: transparent;
|
||||
border: none;
|
||||
padding: 0.6rem 1.8rem;
|
||||
font-size: 1rem;
|
||||
font-weight: 600;
|
||||
color: #5d7184;
|
||||
border-radius: 40px;
|
||||
cursor: pointer;
|
||||
transition: 0.15s;
|
||||
border: 1.5px solid transparent;
|
||||
}
|
||||
|
||||
.nav-tab.active {
|
||||
background: #2c3e50;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.nav-tab:not(.active):hover {
|
||||
background: #eef3f9;
|
||||
color: #2c3e50;
|
||||
}
|
||||
|
||||
.main-content {
|
||||
padding: 2rem;
|
||||
}
|
||||
|
||||
.borrow-layout {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 2.5rem;
|
||||
}
|
||||
|
||||
.section-card {
|
||||
background: #f9fcff;
|
||||
border-radius: 24px;
|
||||
padding: 1.6rem 1.8rem;
|
||||
border: 1px solid #e6edf5;
|
||||
}
|
||||
|
||||
.section-title {
|
||||
font-size: 1.2rem;
|
||||
font-weight: 600;
|
||||
color: #1e3b5c;
|
||||
margin-bottom: 1.5rem;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 0.5rem;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.search-row {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 1rem;
|
||||
align-items: flex-end;
|
||||
margin-bottom: 2rem;
|
||||
}
|
||||
|
||||
.search-field {
|
||||
flex: 1 1 160px;
|
||||
}
|
||||
|
||||
.search-field label {
|
||||
display: block;
|
||||
font-size: 0.75rem;
|
||||
font-weight: 600;
|
||||
text-transform: uppercase;
|
||||
color: #5f748b;
|
||||
margin-bottom: 0.3rem;
|
||||
}
|
||||
|
||||
.search-field input {
|
||||
width: 100%;
|
||||
padding: 0.6rem 1rem;
|
||||
border: 1.5px solid #d8e2ee;
|
||||
border-radius: 30px;
|
||||
font-size: 0.95rem;
|
||||
background: white;
|
||||
}
|
||||
|
||||
.search-field input:focus {
|
||||
outline: none;
|
||||
border-color: #7e99b3;
|
||||
}
|
||||
|
||||
.search-btn {
|
||||
background: #2c3e50;
|
||||
color: white;
|
||||
border: none;
|
||||
padding: 0.6rem 2rem;
|
||||
border-radius: 30px;
|
||||
font-weight: 500;
|
||||
cursor: pointer;
|
||||
font-size: 0.95rem;
|
||||
transition: background 0.15s;
|
||||
height: fit-content;
|
||||
align-self: center;
|
||||
}
|
||||
|
||||
.search-btn:hover {
|
||||
background: #1a2b3c;
|
||||
}
|
||||
|
||||
.table-wrapper {
|
||||
overflow-x: auto;
|
||||
border-radius: 18px;
|
||||
background: white;
|
||||
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.02);
|
||||
margin-top: 1rem;
|
||||
}
|
||||
|
||||
table {
|
||||
width: 100%;
|
||||
border-collapse: collapse;
|
||||
font-size: 0.9rem;
|
||||
min-width: 1000px;
|
||||
}
|
||||
|
||||
th {
|
||||
background: #eef4fa;
|
||||
color: #1d3b5c;
|
||||
font-weight: 600;
|
||||
padding: 1rem 0.8rem;
|
||||
text-align: left;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
td {
|
||||
padding: 1rem 0.8rem;
|
||||
border-bottom: 1px solid #eef3f8;
|
||||
color: #1f2f40;
|
||||
}
|
||||
|
||||
.action-btn {
|
||||
background: #2c3e50;
|
||||
color: white;
|
||||
border: none;
|
||||
padding: 0.4rem 1.2rem;
|
||||
border-radius: 30px;
|
||||
font-size: 0.8rem;
|
||||
font-weight: 500;
|
||||
cursor: pointer;
|
||||
transition: background 0.15s;
|
||||
}
|
||||
|
||||
.action-btn.return {
|
||||
background: #9b6b43;
|
||||
}
|
||||
|
||||
.action-btn.return:hover {
|
||||
background: #7e4f2e;
|
||||
}
|
||||
|
||||
.action-btn:hover {
|
||||
background: #1a2b3c;
|
||||
}
|
||||
|
||||
.child-badge {
|
||||
background: #c9dff3;
|
||||
color: #144a70;
|
||||
padding: 0.2rem 0.8rem;
|
||||
border-radius: 30px;
|
||||
font-size: 0.75rem;
|
||||
font-weight: 600;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.empty-row td {
|
||||
padding: 2rem;
|
||||
text-align: center;
|
||||
color: #8c9db2;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
.activity-grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
|
||||
gap: 1.8rem;
|
||||
margin-top: 1.5rem;
|
||||
}
|
||||
|
||||
.activity-card {
|
||||
background: white;
|
||||
border-radius: 24px;
|
||||
padding: 1.5rem;
|
||||
box-shadow: 0 8px 18px rgba(0, 0, 0, 0.03);
|
||||
border: 1px solid #e6edf5;
|
||||
transition: transform 0.1s;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.activity-card:hover {
|
||||
transform: translateY(-2px);
|
||||
box-shadow: 0 12px 24px rgba(0, 0, 0, 0.05);
|
||||
}
|
||||
|
||||
.activity-name {
|
||||
font-size: 1.2rem;
|
||||
font-weight: 600;
|
||||
color: #1e3b5c;
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
|
||||
.activity-time {
|
||||
color: #6e8aa8;
|
||||
font-size: 0.9rem;
|
||||
margin-bottom: 0.5rem;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 0.3rem;
|
||||
}
|
||||
|
||||
.activity-desc {
|
||||
color: #3a4e66;
|
||||
font-size: 0.95rem;
|
||||
line-height: 1.4;
|
||||
margin: 0.8rem 0 1.2rem;
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.signup-btn {
|
||||
background: #2c3e50;
|
||||
color: white;
|
||||
border: none;
|
||||
padding: 0.6rem 1rem;
|
||||
border-radius: 40px;
|
||||
font-weight: 500;
|
||||
font-size: 0.9rem;
|
||||
cursor: pointer;
|
||||
transition: background 0.15s;
|
||||
align-self: flex-start;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.signup-btn:hover {
|
||||
background: #1a2b3c;
|
||||
}
|
||||
|
||||
.info-note {
|
||||
background: #eaf2fb;
|
||||
padding: 0.5rem 1.2rem;
|
||||
border-radius: 40px;
|
||||
color: #2c577c;
|
||||
font-size: 0.85rem;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.empty-placeholder {
|
||||
text-align: center;
|
||||
padding: 2rem;
|
||||
background: white;
|
||||
border-radius: 18px;
|
||||
color: #8f9fb1;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
@@ -158,7 +455,7 @@
|
||||
<div class="search-row" style="margin-bottom:1.5rem;">
|
||||
<div class="search-field" style="flex:2;">
|
||||
<label>读者证号</label>
|
||||
<input v-model="borrowerAccount" type="text" placeholder="例如 R2024001" />
|
||||
<input v-model="borrowerAccount" type="text" placeholder="例如 R2024001" readonly/>
|
||||
</div>
|
||||
<button class="search-btn" @click="searchBorrowed">查询借阅</button>
|
||||
</div>
|
||||
@@ -235,7 +532,8 @@
|
||||
});
|
||||
try {
|
||||
const response = await fetch('${pageContext.request.contextPath}/api/books/search?' + params, {
|
||||
method: 'GET'
|
||||
method: 'GET',
|
||||
credentials: 'include',
|
||||
});
|
||||
if (!response.ok) throw new Error('查询失败');
|
||||
books.value = await response.json();
|
||||
@@ -254,7 +552,8 @@
|
||||
const response = await fetch('${pageContext.request.contextPath}/api/borrow', {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
|
||||
body: params
|
||||
body: params,
|
||||
credentials: 'include' // 添加此行
|
||||
});
|
||||
const result = await response.json();
|
||||
if (result.success) {
|
||||
@@ -279,7 +578,8 @@
|
||||
}
|
||||
try {
|
||||
const response = await fetch('${pageContext.request.contextPath}/api/borrows?readerCard=' + encodeURIComponent(borrowerAccount.value), {
|
||||
method: 'GET'
|
||||
method: 'GET',
|
||||
credentials: 'include',
|
||||
});
|
||||
if (!response.ok) throw new Error('查询失败');
|
||||
borrowedList.value = await response.json();
|
||||
@@ -289,6 +589,7 @@
|
||||
};
|
||||
|
||||
const returnBook = async (item) => {
|
||||
console.log('>>> [归还] 点击归还按钮,borrowId=' + item.borrowId);
|
||||
const params = new URLSearchParams({
|
||||
borrowId: item.borrowId
|
||||
});
|
||||
@@ -296,17 +597,21 @@
|
||||
const response = await fetch('${pageContext.request.contextPath}/api/borrow', {
|
||||
method: 'PUT',
|
||||
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
|
||||
body: params
|
||||
body: params,
|
||||
credentials: 'include',
|
||||
});
|
||||
console.log('>>> [归还] HTTP状态码=' + response.status);
|
||||
const result = await response.json();
|
||||
console.log('>>> [归还] 后端返回=' + JSON.stringify(result));
|
||||
if (result.success) {
|
||||
alert('归还成功');
|
||||
await searchBorrowed();
|
||||
} else {
|
||||
alert('归还失败');
|
||||
alert('归还失败:' + (result.message || '未知原因,请查看控制台日志'));
|
||||
}
|
||||
} catch (e) {
|
||||
alert('网络错误');
|
||||
console.error('>>> [归还] 请求异常:' + e);
|
||||
alert('网络错误:' + e.message);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -330,7 +635,8 @@
|
||||
const response = await fetch('${pageContext.request.contextPath}/api/signup', {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
|
||||
body: params
|
||||
body: params,
|
||||
credentials: 'include' // 确保携带 session cookie
|
||||
});
|
||||
const result = await response.json();
|
||||
if (result.success) {
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
2
WebContent/view/jquery.min.js
vendored
Normal file
2
WebContent/view/jquery.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
build/classes/com/chinasofti/utils/PermissionUtil.class
Normal file
BIN
build/classes/com/chinasofti/utils/PermissionUtil.class
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user