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

【后台管理系统】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. 栏目管理界面

在这里插入图片描述

新增栏目

在这里插入图片描述

新增栏目成功

在这里插入图片描述

删除栏目

在这里插入图片描述

3. 文章管理界面

在这里插入图片描述

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

在这里插入图片描述

发布文章成功

在这里插入图片描述

删除文章

在这里插入图片描述

删除文章成功

在这里插入图片描述

批量管理文章

在这里插入图片描述

4. 用户管理界面

在这里插入图片描述

5. 角色管理界面

在这里插入图片描述

6. 权限管理界面

在这里插入图片描述

总结:这是一个小demo

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

发布了142 篇原创文章 · 获赞 112 · 访问量 2万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 终极编程指南 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览