【管理系统课程设计】美少女手把手教你后台管理

【后台管理系统】URL设计与建模分析+项目源码+运行界面

栏目管理、文章列表、用户管理、角色管理、权限管理模块(文章最后附有源码)

在这里插入图片描述

一、这是一个什么系统?

1.1 学习后台管理系统的原因

  • 随着时代的变迁,现如今各大云服务平台横空出世,市面上有许多如学生信息系统、图书阅读系统、停车场管理系统等的管理系统,而本人家里就有人在用烟草销售系统,直接在网上完成挑选、购买与提交收货点,方便又快捷。
  • 试想,若没有烟草销售系统,本人家人想要购买烟草,还要独自前往烟草商铺,再货比三家,岂不是费时费力。这些系统的出现,为各个行业处理着繁琐的任务,提高了办事效率,减轻了人工劳力。近年来随着计算机的迅速发展,面向大众的系统五花八门,而每个良好的系统背后,一定存在着一个相当完备的后台管理系统,以便内容审核与维持网站的正常运营,对于促进各行各业的发展,加快社会进步有着显著意义。
  • 而针对计算机软件相关专业的学生,这又是一项很有必要的学习内容。
  • 综上,后台管理系统的开发也是时代的一个必经阶段。此系统是一个为博文、新闻、小说等文章阅读平台提供的后台管理系统,可以对文章阅读系统的栏目、文章、用户、角色及权限进行管理。用户可以对文章进行增加、删除、编辑等操作。更方便后台管理员对文章内容的审核与操作,为网站的管理提供了更为方便快捷的管理方式,提高办公效率,达到更加合理化、便捷化。

1.2 文章后台管理系统的优点

  • 为减轻人工劳动力、提高办公效率。
  • 方便用户与管理员对后台进行管理,加快内容审核,提升文章质量。
  • 最终会放在云服务器上,只需记住域名,方便访问。

二、此系统开发所需要的设备条件

2.1 硬件环境:

“一般计算机硬件条件均可。”

  • 处理器:1.8 GHz 或更高
    内存:1GB 内存(32 位)或 2GB 内存(64 位)
    硬盘空间:25 GB(32 位)或 50GB(64 位)
    显卡:带有 WDDM 1.0 或更高版本的驱动程序的 DirectX 9 图形设备

2.2 软件环境:

  • 客户端操作系统:Windows 2000/XP/Vista/Win7/Win10
  • 建模软件:StarURL
    “在所使用过的建模软件中,建模还是建议用PowerDesigner,数据模型之间可以相互转换、还可以自动生成sql语句,功能强大。此处不是做课程设计,先试用StarURL,界面比较美观。”
  • 数据库管理系统:MySQL

2.3 所需技术:

  • Java、Mysql
  • 前端Vue框架的使用
  • 后端Springboot框架的使用
  • 前后端分离

三、此系统的功能需求是什么?

  • 栏目管理模块:显示数据库中栏目信息,可对栏目进行增加、通过id删除、批量删除与编辑栏目操作。
  • 文章列表模块:显示数据库中所有文章信息,包括文章的主外键,可发布文章、对文章内容进批量删除或通过id删除及编辑文章操作。
  • 用户管理模块:显示数据库中所有用户信息,可以对用户信息进行增删改查操作。
  • 角色管理模块:可以以不同的身份登录系统,并对角色进行管理。
  • 权限管理模块:管理员拥有最大权限,可对普通用户设置权限。

四、如何对所需数据建模?

4.1 概念数据模型

  • 概念数据模型,包含权限、角色、用户、文章、栏目、评论和两个桥表,其中1对1或1对多等关系在模型中体现,如下图所示。
    在这里插入图片描述

4.2 数据库建表语句

通过如下sql语句,创建权限、角色、用户、文章、栏目、评论和两个桥表。

/*
 Navicat Premium Data Transfer

 Source Server Type    : MySQL
 Source Server Version : 50728
 Source Schema         : cms

 Date: 22/11/2019 12:46:56
*/

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for base_privilege
-- ----------------------------
DROP TABLE IF EXISTS `base_privilege`;
CREATE TABLE `base_privilege` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `description` varchar(255) DEFAULT NULL,
  `route` varchar(255) DEFAULT NULL,
  `type` varchar(255) DEFAULT NULL,
  `icon` varchar(255) DEFAULT NULL,
  `parent_id` bigint(20) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `fk_privilege_privilege` (`parent_id`),
  CONSTRAINT `fk_privilege_privilege` FOREIGN KEY (`parent_id`) REFERENCES `base_privilege` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=37 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of base_privilege
-- ----------------------------
BEGIN;
INSERT INTO `base_privilege` VALUES (1, '栏目管理', '', '/category/*', 'menu', '', NULL);
INSERT INTO `base_privilege` VALUES (2, '文章管理', '', '/article/*', 'menu', '', NULL);
INSERT INTO `base_privilege` VALUES (3, '栏目添加', NULL, '/category/saveOrUpdate', 'method', NULL, 1);
INSERT INTO `base_privilege` VALUES (4, '栏目列表', NULL, '/category/findAll', 'method', NULL, 1);
INSERT INTO `base_privilege` VALUES (5, '用户管理', NULL, '/user/*', 'menu', NULL, NULL);
INSERT INTO `base_privilege` VALUES (6, '用户添加或修改', '', '/baseUser/saveOrUpdate', 'menu', '', 5);
INSERT INTO `base_privilege` VALUES (7, '文章查询', '', '/article/findAll', 'method', '', 2);
INSERT INTO `base_privilege` VALUES (8, '通过id删除', NULL, '/category/deleteById', 'method', NULL, 1);
INSERT INTO `base_privilege` VALUES (9, '批量删除', NULL, '/category/batchDelete', 'method', NULL, 1);
INSERT INTO `base_privilege` VALUES (10, '级联查询文章', NULL, '/article/cascadeFindAll', 'method', NULL, 2);
INSERT INTO `base_privilege` VALUES (11, '通过id查询文章', NULL, '/article/findById', 'method', NULL, 2);
INSERT INTO `base_privilege` VALUES (12, '保存或更新', NULL, '/article/saveOrUpdate', 'method', NULL, 2);
INSERT INTO `base_privilege` VALUES (13, '通过token查询用户信息', NULL, '/user/info', 'method', NULL, 5);
INSERT INTO `base_privilege` VALUES (14, '查询用户级联角色', NULL, '/baseUser/cascadeRoleFindAll', 'method', NULL, 5);
INSERT INTO `base_privilege` VALUES (15, '通过id删除', NULL, '/baseUser/deleteById', 'method', NULL, 5);
INSERT INTO `base_privilege` VALUES (16, '查询所有', NULL, '/baseUser/findAll', 'method', NULL, 5);
INSERT INTO `base_privilege` VALUES (17, '设置角色', NULL, '/baseUser/setRoles', 'method', NULL, 5);
INSERT INTO `base_privilege` VALUES (18, '权限管理', NULL, '/privilege/*', 'menu', NULL, NULL);
INSERT INTO `base_privilege` VALUES (19, '查询所有', NULL, '/privilege/findAll', 'method', NULL, 18);
INSERT INTO `base_privilege` VALUES (20, '通过parentID查询权限', NULL, '/privilege/findByParentId', 'method', NULL, 18);
INSERT INTO `base_privilege` VALUES (21, '查询权限树', NULL, '/privilege/findPrivilegeTree', 'method', NULL, 18);
INSERT INTO `base_privilege` VALUES (22, '保存或更新', NULL, '/privilege/saveOrUpdate', 'method', NULL, 18);
INSERT INTO `base_privilege` VALUES (23, '角色管理', NULL, '/role/*', 'menu', NULL, NULL);
INSERT INTO `base_privilege` VALUES (24, '授权', NULL, '/role/authorization', 'method', NULL, 23);
INSERT INTO `base_privilege` VALUES (25, '级联权限查询', NULL, '/role/cascadePrivilegeFindAll', 'method', NULL, 23);
INSERT INTO `base_privilege` VALUES (26, '通过id删除', NULL, '/role/deleteById', 'method', NULL, 23);
INSERT INTO `base_privilege` VALUES (27, '查询所有', NULL, '/role/findAll', 'method', NULL, 23);
INSERT INTO `base_privilege` VALUES (28, '保存或更新', NULL, '/role/saveOrUpdate', 'method', NULL, 23);
INSERT INTO `base_privilege` VALUES (29, '文章导出', NULL, '/article/download', 'method', NULL, 2);
INSERT INTO `base_privilege` VALUES (35, '附件管理', NULL, '/file/*', 'menu', NULL, NULL);
INSERT INTO `base_privilege` VALUES (36, '附件上传', NULL, '/file/upload', 'method', NULL, 35);
COMMIT;

-- ----------------------------
-- Table structure for base_role
-- ----------------------------
DROP TABLE IF EXISTS `base_role`;
CREATE TABLE `base_role` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of base_role
-- ----------------------------
BEGIN;
INSERT INTO `base_role` VALUES (1, 'editor');
INSERT INTO `base_role` VALUES (2, 'admin');
INSERT INTO `base_role` VALUES (3, 'teacher');
COMMIT;

-- ----------------------------
-- Table structure for base_role_privilege
-- ----------------------------
DROP TABLE IF EXISTS `base_role_privilege`;
CREATE TABLE `base_role_privilege` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `role_id` bigint(20) DEFAULT NULL,
  `privilege_id` bigint(20) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `fk_role_privilege_role` (`role_id`),
  KEY `fk_role_privilege_privilege` (`privilege_id`),
  CONSTRAINT `fk_role_privilege_privilege` FOREIGN KEY (`privilege_id`) REFERENCES `base_privilege` (`id`),
  CONSTRAINT `fk_role_privilege_role` FOREIGN KEY (`role_id`) REFERENCES `base_role` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=42 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of base_role_privilege
-- ----------------------------
BEGIN;
INSERT INTO `base_role_privilege` VALUES (4, 1, 3);
INSERT INTO `base_role_privilege` VALUES (5, 1, 4);
INSERT INTO `base_role_privilege` VALUES (8, 1, 7);
INSERT INTO `base_role_privilege` VALUES (9, 3, 7);
INSERT INTO `base_role_privilege` VALUES (10, 2, 3);
INSERT INTO `base_role_privilege` VALUES (11, 2, 4);
INSERT INTO `base_role_privilege` VALUES (12, 2, 8);
INSERT INTO `base_role_privilege` VALUES (13, 2, 9);
INSERT INTO `base_role_privilege` VALUES (14, 2, 7);
INSERT INTO `base_role_privilege` VALUES (15, 2, 10);
INSERT INTO `base_role_privilege` VALUES (16, 2, 11);
INSERT INTO `base_role_privilege` VALUES (17, 2, 12);
INSERT INTO `base_role_privilege` VALUES (18, 2, 6);
INSERT INTO `base_role_privilege` VALUES (19, 2, 13);
INSERT INTO `base_role_privilege` VALUES (20, 2, 14);
INSERT INTO `base_role_privilege` VALUES (21, 2, 15);
INSERT INTO `base_role_privilege` VALUES (22, 2, 16);
INSERT INTO `base_role_privilege` VALUES (23, 2, 17);
INSERT INTO `base_role_privilege` VALUES (24, 2, 19);
INSERT INTO `base_role_privilege` VALUES (25, 2, 20);
INSERT INTO `base_role_privilege` VALUES (26, 2, 21);
INSERT INTO `base_role_privilege` VALUES (27, 2, 22);
INSERT INTO `base_role_privilege` VALUES (28, 2, 24);
INSERT INTO `base_role_privilege` VALUES (29, 2, 25);
INSERT INTO `base_role_privilege` VALUES (30, 2, 26);
INSERT INTO `base_role_privilege` VALUES (31, 2, 27);
INSERT INTO `base_role_privilege` VALUES (32, 2, 28);
INSERT INTO `base_role_privilege` VALUES (33, 1, 8);
INSERT INTO `base_role_privilege` VALUES (34, 1, 9);
INSERT INTO `base_role_privilege` VALUES (35, 1, 10);
INSERT INTO `base_role_privilege` VALUES (36, 1, 11);
INSERT INTO `base_role_privilege` VALUES (37, 1, 12);
INSERT INTO `base_role_privilege` VALUES (38, 1, 13);
INSERT INTO `base_role_privilege` VALUES (39, 2, 29);
INSERT INTO `base_role_privilege` VALUES (40, 1, 29);
INSERT INTO `base_role_privilege` VALUES (41, 2, 36);
COMMIT;

-- ----------------------------
-- Table structure for base_user
-- ----------------------------
DROP TABLE IF EXISTS `base_user`;
CREATE TABLE `base_user` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `username` varchar(255) DEFAULT NULL,
  `password` varchar(255) DEFAULT NULL,
  `telephone` varchar(255) DEFAULT NULL,
  `realname` varchar(255) DEFAULT NULL,
  `gender` varchar(255) DEFAULT NULL,
  `birth` bigint(255) DEFAULT NULL,
  `register_time` bigint(20) DEFAULT NULL,
  `status` varchar(255) DEFAULT NULL,
  `user_face` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of base_user
-- ----------------------------
BEGIN;
INSERT INTO `base_user` VALUES (1, 'larry', '123321', '18812344321', '莱瑞', 'female', 1572883200000, NULL, '', 'http://134.175.154.93:8888/group1/M00/00/1F/rBAACV3ORSiAL_PJAAE66PqFd5A920.png');
INSERT INTO `base_user` VALUES (2, 'terry', '123321', '18867541234', '泰瑞', 'female', NULL, NULL, '', 'http://134.175.154.93:8888/group1/M00/00/1F/rBAACV3ORSiAL_PJAAE66PqFd5A920.png');
INSERT INTO `base_user` VALUES (3, 'jacky', '123321', '18812344325', '杰克', 'female', NULL, 1573892938430, '正常', 'http://134.175.154.93:8888/group1/M00/00/1F/rBAACV3ORSiAL_PJAAE66PqFd5A920.png');
INSERT INTO `base_user` VALUES (4, 'test01', '123321', '18812344321', '测试01', 'male', 1574784000000, 1573994760850, '正常', 'http://134.175.154.93:8888/group1/M00/00/1F/rBAACV3ORSiAL_PJAAE66PqFd5A920.png');
INSERT INTO `base_user` VALUES (5, 'admin', '111111', '18812344321', '超级管理员', 'male', NULL, 1574155005310, '正常', 'http://134.175.154.93:8888/group1/M00/00/20/rBAACV3SWCmADYOQAABJRZlrGTM789.jpg');
COMMIT;

-- ----------------------------
-- Table structure for base_user_role
-- ----------------------------
DROP TABLE IF EXISTS `base_user_role`;
CREATE TABLE `base_user_role` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `user_id` bigint(20) DEFAULT NULL,
  `role_id` bigint(20) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `fk_user_role_user` (`user_id`),
  KEY `fk_user_role_role` (`role_id`),
  CONSTRAINT `fk_user_role_role` FOREIGN KEY (`role_id`) REFERENCES `base_role` (`id`),
  CONSTRAINT `fk_user_role_user` FOREIGN KEY (`user_id`) REFERENCES `base_user` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of base_user_role
-- ----------------------------
BEGIN;
INSERT INTO `base_user_role` VALUES (7, 2, 1);
INSERT INTO `base_user_role` VALUES (8, 4, 1);
INSERT INTO `base_user_role` VALUES (9, 4, 2);
INSERT INTO `base_user_role` VALUES (11, 5, 2);
INSERT INTO `base_user_role` VALUES (12, 1, 1);
COMMIT;

-- ----------------------------
-- Table structure for cms_article
-- ----------------------------
DROP TABLE IF EXISTS `cms_article`;
CREATE TABLE `cms_article` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `title` varchar(255) DEFAULT NULL,
  `content` text,
  `source` text,
  `publish_time` bigint(20) DEFAULT NULL,
  `read_times` bigint(20) DEFAULT NULL,
  `status` varchar(255) DEFAULT NULL,
  `thump_up` bigint(255) DEFAULT NULL,
  `thump_down` bigint(255) DEFAULT NULL,
  `author_id` bigint(20) DEFAULT NULL,
  `category_id` bigint(20) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `fk_article_category` (`category_id`),
  KEY `fk_article_user` (`author_id`),
  CONSTRAINT `fk_article_category` FOREIGN KEY (`category_id`) REFERENCES `cms_category` (`id`),
  CONSTRAINT `fk_article_user` FOREIGN KEY (`author_id`) REFERENCES `base_user` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of cms_article
-- ----------------------------
BEGIN;
INSERT INTO `cms_article` VALUES (1, 'springboot的应用技术', 'test...sss', '', NULL, NULL, NULL, NULL, NULL, 1, 3);
INSERT INTO `cms_article` VALUES (2, 'springmvc的注解使用', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1, 3);
INSERT INTO `cms_article` VALUES (11, 'test03', 'this is test03', '<h1>this is test03</h1>', 1573611999314, 0, '未审核', 0, 0, 1, 3);
INSERT INTO `cms_article` VALUES (12, 'test04', 'hello world', NULL, 1573619939569, 0, '未审核', 0, 0, NULL, 3);
COMMIT;

-- ----------------------------
-- Table structure for cms_category
-- ----------------------------
DROP TABLE IF EXISTS `cms_category`;
CREATE TABLE `cms_category` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `description` varchar(255) DEFAULT NULL,
  `no` int(11) DEFAULT NULL,
  `parent_id` bigint(20) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `fk_category_category` (`parent_id`),
  CONSTRAINT `fk_category_category` FOREIGN KEY (`parent_id`) REFERENCES `cms_category` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of cms_category
-- ----------------------------
BEGIN;
INSERT INTO `cms_category` VALUES (3, 'IT', '计算机编程', 1, NULL);
INSERT INTO `cms_category` VALUES (4, '娱乐', '八卦', 2, NULL);
INSERT INTO `cms_category` VALUES (5, '国际', '国际资讯', 3, NULL);
COMMIT;

-- ----------------------------
-- Table structure for cms_comment
-- ----------------------------
DROP TABLE IF EXISTS `cms_comment`;
CREATE TABLE `cms_comment` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `content` text,
  `comment_time` bigint(20) DEFAULT NULL,
  `status` varchar(255) DEFAULT NULL,
  `user_id` bigint(20) DEFAULT NULL,
  `article_id` bigint(20) DEFAULT NULL,
  `parent_id` bigint(20) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `fk_comment_user` (`user_id`),
  KEY `fk_comment_article` (`article_id`),
  KEY `fk_comment_comment` (`parent_id`),
  CONSTRAINT `fk_comment_article` FOREIGN KEY (`article_id`) REFERENCES `cms_article` (`id`),
  CONSTRAINT `fk_comment_comment` FOREIGN KEY (`parent_id`) REFERENCES `cms_comment` (`id`),
  CONSTRAINT `fk_comment_user` FOREIGN KEY (`user_id`) REFERENCES `base_user` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of cms_comment
-- ----------------------------
BEGIN;
INSERT INTO `cms_comment` VALUES (1, '作者厉害', NULL, NULL, NULL, 1, NULL);
INSERT INTO `cms_comment` VALUES (2, '作者牛皮', NULL, NULL, NULL, 1, NULL);
INSERT INTO `cms_comment` VALUES (3, 'springmvc到底怎么用?', NULL, NULL, NULL, 2, NULL);
COMMIT;

-- ----------------------------
-- Table structure for test
-- ----------------------------
DROP TABLE IF EXISTS `test`;
CREATE TABLE `test` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of test
-- ----------------------------
BEGIN;
INSERT INTO `test` VALUES (1, 'terry', 12);
INSERT INTO `test` VALUES (2, 'larry', 13);
INSERT INTO `test` VALUES (3, '李四', 123321);
COMMIT;

SET FOREIGN_KEY_CHECKS = 1;

五、用例图

  • 读者用例图,读者可以进行阅读、注册、登录等操作。登录状态下又可以进行评论与阅读操作。如下图所示。
    在这里插入图片描述
  • 超级管理员用例图,超级管理员拥有系统最大权限,可以进行栏目管理、文章管理、权限管理、角色管理、评论审核等操作。可对文章进行审核,权限管理下可对角色进行管理。如下图所示。
    在这里插入图片描述
  • 小编用例图,小编是作者身份,可以对自己的文章进行管理。如下图所示。
    在这里插入图片描述

六、各模块源码

2019.11.19 最近在学习Git,后续将代码上传到GitHub上。再放出地址。
2019.11.26 GitHub地址:
https://github.com/FlyWife/cms-ui (UI)
https://github.com/FlyWife/cms_Springboot (Springboot)

注意:再次提醒!!使用Git提交代码时,add完后千万要commit!! 本人踩过的坑,谨记!

七、运行界面

1. 登录界面

这个是vue-element-admin框架有的登录界面,我们只需要后台写一个登录接口即可,非常方便。
在这里插入图片描述

登录成功跳转首页

在这里插入图片描述

2. 栏目管理界面

在这里插入图片描述

新增栏目

在这里插入图片描述

新增栏目成功

在这里插入图片描述

扫描二维码关注公众号,回复: 8968593 查看本文章

删除栏目

在这里插入图片描述

3. 文章管理界面

在这里插入图片描述

发布文章跳转到文章编辑界面

在这里插入图片描述

发布文章成功

在这里插入图片描述

删除文章

在这里插入图片描述

删除文章成功

在这里插入图片描述

批量管理文章

在这里插入图片描述

4. 用户管理界面

在这里插入图片描述

5. 角色管理界面

在这里插入图片描述

6. 权限管理界面

在这里插入图片描述

总结:这是一个小demo

上周做的一个学习项目,这个项目是个完整的文章类后台管理系统。具有栏目管理、文章列表、用户管理、角色管理、权限管理模块。这个系统按理说也不是很难,但是主要是前后端分离,以前只写后台接口,现在需要联系前端页面一起,接收新知识的程度太浅,所以继续努力。将此系统完善一些,将来可以运用到毕业设计中。

发布了144 篇原创文章 · 获赞 117 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_41306364/article/details/103135904