当前位置:   article > 正文

Java项目:OA人事管理系统(java+SpringBoot+JSP+layui+html+mysql)_springboot oa打卡

springboot oa打卡

源码获取:俺的博客首页 "资源" 里下载!

项目介绍:

员工管理、部门管理、职位管理、薪资管理、考勤管理、请假管理、奖惩管理、日志管理、文件下载、文件上传、图表展示

环境需要

1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。
2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA;
3.tomcat环境:Tomcat 7.x,8.x,9.x版本均可
4.硬件环境:windows 7/8/10 1G内存以上;或者 Mac OS; 
5.数据库:MySql 5.7版本;
6.是否Maven项目:是;

技术栈

JSP +SpringBoot + MyBatis + html+ css + JavaScript + JQuery + Ajax + layui+ maven等等

使用说明

1. 使用Navicat或者其它工具,在mysql中创建对应名称的数据库,并导入项目的sql文件;
2. 使用IDEA/Eclipse/MyEclipse导入项目,Eclipse/MyEclipse导入时,若为maven项目请选择maven;
若为maven项目,导入成功后请执行maven clean;maven install命令,然后运行;
3. 将项目中springmvc-servlet.xml配置文件中的数据库配置改为自己的配置;
4. 运行项目

 

 

 

 

 

 

用户管理控制层:

  1. @Controller
  2. @RequestMapping("/user")
  3. public class UserController extends BaseController{
  4. private String prefix = "system/user/";
  5. @Autowired
  6. IUserService iUserService;
  7. @Autowired
  8. IRoleService iRoleService;
  9. @Autowired
  10. IDeptService iDeptService;
  11. @Autowired
  12. IPositionService iPositionService;
  13. @Autowired
  14. private SysPasswordService passwordService;
  15. /**
  16. *
  17. * @描述 跳转到用户页面
  18. *
  19. * @date 2018/9/16 10:54
  20. */
  21. @RequestMapping("/tolist")
  22. @RequiresPermissions("user:list")
  23. public String toUserList()
  24. {
  25. return prefix + "user";
  26. }
  27. /**
  28. * @描述 用户数据
  29. * @date 2018/9/15 12:30
  30. */
  31. @RequestMapping("/tableList")
  32. @ResponseBody
  33. public TableDataInfo list(User user)
  34. {
  35. startPage();
  36. List<User> users = iUserService.selectByUser(user);
  37. return getDataTable(users);
  38. }
  39. /**
  40. * 编辑用户 system/user/edit/20180914-1
  41. */
  42. @RequiresPermissions("user:update")
  43. @RequestMapping("/edit/{userId}")
  44. public String edit(@PathVariable("userId") String userId, Model model)
  45. {
  46. // 个人信息
  47. User user = iUserService.selectByPrimaryKey(userId);
  48. Map<String, Object> role_post_dept = getRole_Post_Dept();
  49. model.addAttribute("depts", role_post_dept.get("dept"));
  50. model.addAttribute("roles", role_post_dept.get("role"));
  51. model.addAttribute("positions", role_post_dept.get("position"));
  52. model.addAttribute("user", user);
  53. return prefix + "edit";
  54. }
  55. /**
  56. *
  57. * @描述 保存用户
  58. *
  59. * @date 2018/9/15 18:53
  60. */
  61. @PostMapping("/editSave")
  62. @RequiresPermissions("user:update")
  63. @Operlog(modal = "用户管理", descr = "修改用户信息")
  64. @ResponseBody
  65. public AjaxResult save(User user)
  66. {
  67. if (StringUtils.isNotNull(user.getUid()) && User.isBoss(user.getUid()))
  68. {
  69. return error("不允许修改管理员用户");
  70. }
  71. if(user.getPwd()!=null){
  72. user.setSalt(ShiroUtils.randomSalt());
  73. SimpleHash md5 = new SimpleHash("MD5", user.getPwd(), user.getSalt(), 1024);
  74. user.setPwd(md5.toHex());
  75. }
  76. return result(iUserService.updateByPrimaryKeySelective(user));
  77. }
  78. /**
  79. * @描述 添加用户页面
  80. * @date 2018/9/15 18:46
  81. */
  82. @RequestMapping("/toAdd")
  83. @RequiresPermissions("user:add")
  84. public String toaddUser(Model model)
  85. {
  86. Map<String, Object> role_post_dept = getRole_Post_Dept();
  87. model.addAttribute("depts", role_post_dept.get("dept"));
  88. model.addAttribute("roles", role_post_dept.get("role"));
  89. model.addAttribute("positions", role_post_dept.get("position"));
  90. return prefix + "add";
  91. }
  92. /**
  93. *
  94. * @描述 添加用户
  95. *
  96. * @date 2018/9/15 20:40
  97. */
  98. @RequestMapping("/addSave")
  99. @RequiresPermissions("user:add")
  100. @Operlog(modal = "用户管理", descr = "添加用户")
  101. @ResponseBody
  102. public AjaxResult addUser(User user)
  103. {
  104. user.setSalt(ShiroUtils.randomSalt());
  105. SimpleHash md5 = new SimpleHash("MD5", user.getPwd(), user.getSalt(), 1024);
  106. user.setPwd(md5.toHex());
  107. user.setAvatar(CsEnum.avatar.USER_AVATAR.getValue());
  108. user.setCreateTime(new Date());
  109. return result(iUserService.insertSelective(user));
  110. }
  111. /**
  112. *
  113. * @描述 批量删除
  114. *
  115. * @date 2018/9/16 9:31
  116. */
  117. @RequestMapping("/del")
  118. @RequiresPermissions("user:del")
  119. @Operlog(modal = "用户模块", descr = "删除用户")
  120. @ResponseBody
  121. public AjaxResult delByUserIds(String[] ids)
  122. {
  123. try
  124. {
  125. int i = iUserService.deleteByPrimaryKeys(ids);
  126. }
  127. catch (Exception e)
  128. {
  129. return error(e.getMessage());
  130. }
  131. return success();
  132. }
  133. /**
  134. *
  135. * @描述 编辑密码修改页面
  136. *
  137. * @date 2018/9/16 10:25
  138. */
  139. @RequestMapping("/resetPwd/{userId}")
  140. @RequiresPermissions("user:update")
  141. public String editPwd(@PathVariable("userId") String id, Model model)
  142. {
  143. model.addAttribute("uid", id);
  144. return prefix + "resetPwd";
  145. }
  146. /**
  147. *
  148. * @描述 密码修改
  149. *
  150. * @date 2018/9/16 10:42
  151. */
  152. @RequestMapping("/resetPwd")
  153. @RequiresPermissions("user:update")
  154. @Operlog(modal = "用户模块", descr = "修改密码")
  155. @ResponseBody
  156. public AjaxResult resetPwd(User user)
  157. {
  158. return result(iUserService.resrtPwd(user));
  159. }
  160. /**
  161. * 校验手机号码
  162. */
  163. @PostMapping("/checkPhoneUnique")
  164. @ResponseBody
  165. public String checkPhoneUnique(User user)
  166. {
  167. String uniqueFlag = "0";
  168. if (user != null)
  169. {
  170. uniqueFlag = iUserService.checkPhoneUnique(user);
  171. }
  172. return uniqueFlag;
  173. }
  174. /**
  175. * 校验email邮箱
  176. */
  177. @PostMapping("/checkEmailUnique")
  178. @ResponseBody
  179. public String checkEmailUnique(User user)
  180. {
  181. String uniqueFlag = "0";
  182. if (user != null)
  183. {
  184. uniqueFlag = iUserService.checkEmailUnique(user);
  185. }
  186. return uniqueFlag;
  187. }
  188. /**
  189. *
  190. * @描述: 校验登录名唯一性
  191. *
  192. * @params:
  193. * @return:
  194. * @date: 2018/10/2 17:06
  195. */
  196. @PostMapping("/checkLoginNameUnique")
  197. @ResponseBody
  198. public String checkLoginNameUnique(User user)
  199. {
  200. String uniqueFlag = "0";
  201. if (user != null)
  202. {
  203. uniqueFlag = iUserService.checkLoginNameUnique(user);
  204. }
  205. return uniqueFlag;
  206. }
  207. public Map<String, Object> getRole_Post_Dept()
  208. {
  209. Map<String, Object> map = new HashMap<>();
  210. // 角色
  211. List<Role> roles = iRoleService.selectRoleList(new Role());
  212. // 部门信息
  213. List<Dept> depts = iDeptService.selectDeptList(new Dept());
  214. // 岗位
  215. List<Position> positions = iPositionService.selectPositionList(new Position());
  216. map.put("role", roles);
  217. map.put("dept", depts);
  218. map.put("position", positions);
  219. return map;
  220. }
  221. /**
  222. * 用户个人信息查看页面
  223. */
  224. @RequestMapping("/myMsg")
  225. public String ToMyMsg(Model model, HttpServletRequest request)
  226. {
  227. User user = iUserService.selectByPrimaryKey(getUserId());
  228. model.addAttribute("user", user);
  229. model.addAttribute("loginIp", HttpHeaderUtil.getIpAddr(request));
  230. return prefix + "profile/msg";
  231. }
  232. /**
  233. * 密码修改页面
  234. */
  235. @RequestMapping("/resetMyPwd")
  236. public String toResetPwd(Model model)
  237. {
  238. User user = iUserService.selectByPrimaryKey(getUserId());
  239. model.addAttribute("user", user);
  240. return prefix + "profile/resetPwd";
  241. }
  242. /**
  243. * 密码修改保存
  244. */
  245. @RequestMapping("/updateMyPwdSave")
  246. @ResponseBody
  247. @RequiresPermissions("user:update")
  248. @Operlog(modal = "个人信息", descr = "修改密码")
  249. public AjaxResult updateMyPwdSave(String password)
  250. {
  251. User user = new User();
  252. user.setSalt(ShiroUtils.randomSalt());
  253. SimpleHash md5 = new SimpleHash("MD5", password, user.getSalt(), 1024);
  254. user.setPwd(md5.toHex());
  255. user.setUid(getUserId());
  256. int i = iUserService.updateByPrimaryKeySelective(user);
  257. if (i > 0)
  258. {
  259. //更新shiro中的信息
  260. ShiroUtils.reloadUser(iUserService.selectByPrimaryKey(getUserId()));
  261. return success();
  262. }
  263. return error();
  264. }
  265. /**
  266. * 编辑用户头像修改
  267. */
  268. @RequestMapping("/updateAvatar")
  269. public String toupdateAvatar(Model model)
  270. {
  271. model.addAttribute("user", getUser());
  272. return prefix + "profile/avatar";
  273. }
  274. /**
  275. * 修改保存用户头像
  276. */
  277. @RequestMapping("/updateAvatarSave")
  278. @RequiresPermissions("user:update")
  279. @Operlog(modal = "个人信息", descr = "修改头像")
  280. @ResponseBody
  281. public AjaxResult toupdateAvatar(MultipartFile file)
  282. {
  283. try
  284. {
  285. String imgPath = UploadFile.uploadUserImg(file);
  286. if (StringUtils.isEmpty(imgPath))
  287. {
  288. return error("图片上传失败,稍后再试!");
  289. }
  290. User user = new User();
  291. user.setUid(getUserId());
  292. user.setAvatar(imgPath);
  293. int i = iUserService.updateByPrimaryKeySelective(user);
  294. if (i > 0)
  295. {
  296. ShiroUtils.reloadUser(iUserService.selectByPrimaryKey(getUserId()));
  297. }
  298. return result(i);
  299. }
  300. catch (IOException e)
  301. {
  302. return error();
  303. }
  304. catch (FileSizeException e)
  305. {
  306. //文件过大
  307. return error(e.getMsg());
  308. }
  309. catch (FileNameLengthException e)
  310. {
  311. //文件名字超长
  312. return error(e.getMsg());
  313. }
  314. }
  315. /**
  316. * 校验密码和原来密码是否相同
  317. */
  318. @RequestMapping("/checkPassword")
  319. @ResponseBody
  320. public boolean checkPassword(String password)
  321. {
  322. //加密后与数据库密码比较
  323. User user = getUser();
  324. SimpleHash md5 = new SimpleHash("MD5", password, user.getSalt(), 1024);
  325. String oldPassword = md5.toHex();
  326. String pwd = getPwd();
  327. if (pwd.equals(oldPassword))
  328. {
  329. return true;
  330. }
  331. return false;
  332. }
  333. }

部门管理控制层:

  1. @Controller
  2. @RequestMapping("/dept")
  3. public class DeptController extends BaseController{
  4. private String prefix = "system/dept/";
  5. @Autowired
  6. IDeptService iDeptService;
  7. @Autowired
  8. IUserService iUserService;
  9. /**
  10. *
  11. * @描述 页面跳转到部门
  12. *
  13. * @date 2018/9/16 10:59
  14. */
  15. @RequestMapping("/tolist")
  16. @RequiresPermissions("dept:list")
  17. public String tolist()
  18. {
  19. return prefix + "dept";
  20. }
  21. /**
  22. *
  23. * @描述 ajax请求的所有部门
  24. *
  25. * @date 2018/9/16 10:48
  26. */
  27. @RequestMapping("/ajaxlist")
  28. @ResponseBody
  29. public List<Dept> list(Dept dept)
  30. {
  31. List<Dept> depts = iDeptService.selectDeptList(dept);
  32. return depts;
  33. }
  34. /**
  35. *
  36. * @描述 部门列表页
  37. *
  38. * @date 2018/9/16 10:52
  39. */
  40. @RequestMapping("/tableList")
  41. @ResponseBody
  42. public TableDataInfo listPag(Dept dept)
  43. {
  44. //开启分页
  45. startPage();
  46. List<Dept> depts = iDeptService.selectDeptList(dept);
  47. return getDataTable(depts);
  48. }
  49. /**
  50. *
  51. * @描述 新增页面
  52. *
  53. * @date 2018/9/16 11:37
  54. */
  55. @RequiresPermissions("dept:add")
  56. @RequestMapping("/toAdd")
  57. public String toAdd(Model model)
  58. {
  59. List<User> users = iUserService.selectByUser(new User());
  60. model.addAttribute("users", users);
  61. return prefix + "add";
  62. }
  63. /**
  64. *
  65. * @描述: 查询所有部门下的所有用户 用户归类 树状数据
  66. *
  67. * @date: 2018/9/27 11:25
  68. */
  69. @RequestMapping("/getDeptAndUserTreeData")
  70. @ResponseBody
  71. public List<Object> DeptAndUserTreeData()
  72. {
  73. List<Dept> depts = iDeptService.selectDeptAndUser();
  74. List<User> users=new ArrayList<>();
  75. LinkedList<Object> deptList = new LinkedList<>();
  76. for (Dept dept : depts)
  77. {
  78. Map<String, Object> deptMap = new HashMap();
  79. deptMap.put("name", dept.getDeptName());
  80. deptMap.put("id", null);
  81. users = dept.getUsers();
  82. LinkedList<Object> userlist = new LinkedList<>();
  83. for (User user : users)
  84. {
  85. Map<String, Object> userMap = new HashMap();
  86. userMap.put("name",user.getName());
  87. userMap.put("id",user.getUid());
  88. userMap.put("icon","/img/timg.jpg");
  89. userlist.add(userMap);
  90. }
  91. deptMap.put("children",userlist);
  92. deptList.add(deptMap);
  93. }
  94. return deptList;
  95. }
  96. /**
  97. *
  98. * @描述 批量删除
  99. *
  100. * @date 2018/9/16 11:53
  101. */
  102. @RequestMapping("/del")
  103. @RequiresPermissions("dept:del")
  104. @ResponseBody
  105. @Operlog(modal = "部门管理",descr = "删除部门")
  106. public AjaxResult del(String[] ids)
  107. {
  108. try
  109. {
  110. iDeptService.deleteByPrimaryKeys(ids);
  111. }
  112. catch (Exception e)
  113. {
  114. return error(e.getMessage());
  115. }
  116. return success();
  117. }
  118. /**
  119. *
  120. * @描述 执行保存操作
  121. *
  122. * @date 2018/9/16 11:54
  123. */
  124. @RequestMapping("/addSave")
  125. @Operlog(modal = "部门管理",descr = "添加部门")
  126. @RequiresPermissions("dept:add")
  127. @ResponseBody
  128. public AjaxResult addDept(Dept dept)
  129. {
  130. dept.setCreateTime(new Date());
  131. return result(iDeptService.insertSelective(dept));
  132. }
  133. /**
  134. *
  135. * @描述 编辑修改页面
  136. *
  137. * @date 2018/9/16 14:06
  138. */
  139. @RequestMapping("/edit/{id}")
  140. @RequiresPermissions("dept:update")
  141. public String edit(@PathVariable("id") String id, Model model)
  142. {
  143. Dept dept = iDeptService.selectByPrimaryKey(id);
  144. List<User> users = iUserService.selectByUser(new User());
  145. model.addAttribute("users", users);
  146. model.addAttribute("Dept", dept);
  147. return prefix + "edit";
  148. }
  149. /**
  150. *
  151. * @描述 修改保存
  152. *
  153. * @date 2018/9/16 16:12
  154. */
  155. @RequestMapping("/editSave")
  156. @RequiresPermissions("dept:update")
  157. @Operlog(modal = "部门管理",descr = "修改信息")
  158. @ResponseBody
  159. public AjaxResult save(Dept dept)
  160. {
  161. int i = 0;
  162. try
  163. {
  164. i = iDeptService.updateByPrimaryKeySelective(dept);
  165. }
  166. catch (Exception e)
  167. {
  168. return error(e.getMessage());
  169. }
  170. return result(i);
  171. }
  172. /**
  173. * 校验部门名称
  174. */
  175. @PostMapping("/checkDeptNameUnique")
  176. @ResponseBody
  177. public String checkDeptNameUnique(Dept dept)
  178. {
  179. String uniqueFlag = "0";
  180. if (dept != null)
  181. {
  182. uniqueFlag = iDeptService.checkDeptNameUnique(dept);
  183. }
  184. return uniqueFlag;
  185. }
  186. }

角色管理控制层:

  1. @Controller
  2. @RequestMapping("/role")
  3. public class RoleController extends BaseController{
  4. private String prefix = "system/role/";
  5. @Autowired
  6. IUserService iUserService;
  7. @Autowired
  8. IRoleService iRoleService;
  9. @Autowired
  10. IPermissionService iPermissionService;
  11. /**
  12. *
  13. * @描述 页面跳转
  14. *
  15. * @date 2018/9/16 10:59
  16. */
  17. @RequestMapping("/tolist")
  18. @RequiresPermissions("role:list")
  19. public String tolist()
  20. {
  21. return prefix + "role";
  22. }
  23. /**
  24. *
  25. * @描述 ajax请求所有
  26. *
  27. * @date 2018/9/16 10:48
  28. */
  29. @RequestMapping("/ajaxlist")
  30. @ResponseBody
  31. public List<Role> list(Role role)
  32. {
  33. List<Role> roles = iRoleService.selectRoleList(role);
  34. return roles;
  35. }
  36. /**
  37. *
  38. * @描述 列表
  39. *
  40. * @date 2018/9/16 10:52
  41. */
  42. @RequestMapping("/tableList")
  43. @ResponseBody
  44. public TableDataInfo listPag(Role role)
  45. {
  46. //开启分页
  47. startPage();
  48. List<Role> roles = iRoleService.selectRoleList(role);
  49. return getDataTable(roles);
  50. }
  51. /**
  52. *
  53. * @描述 新增页面
  54. *
  55. * @date 2018/9/16 11:37
  56. */
  57. @RequestMapping("/toAdd")
  58. @RequiresPermissions("role:add")
  59. public String toAdd(Model model)
  60. {
  61. return prefix + "add";
  62. }
  63. /**
  64. *
  65. * @描述 批量删除
  66. *
  67. * @date 2018/9/16 11:53
  68. */
  69. @RequestMapping("/del")
  70. @RequiresPermissions("role:del")
  71. @Operlog(modal = "角色管理",descr = "删除角色")
  72. @ResponseBody
  73. public AjaxResult del(Integer[] ids)
  74. {
  75. try
  76. {
  77. iRoleService.deleteByPrimaryKeys(ids);
  78. }
  79. catch (Exception e)
  80. {
  81. return error(e.getMessage());
  82. }
  83. return success();
  84. }
  85. /**
  86. *
  87. * @描述 添加保存
  88. *
  89. * @date 2018/9/16 11:54
  90. */
  91. @RequestMapping("/addSave")
  92. @RequiresPermissions("role:update")
  93. @Operlog(modal = "角色管理",descr = "添加角色")
  94. @ResponseBody
  95. public AjaxResult addRole(Role role, Integer[] ids)
  96. {
  97. role.setCreateTime(new Date());
  98. int insert = 0;
  99. try
  100. {
  101. if (StringUtils.isEmpty(ids))
  102. {
  103. ids = new Integer[0];
  104. }
  105. insert = iRoleService.insert(role, ids);
  106. }
  107. catch (Exception e)
  108. {
  109. return error(e.getMessage());
  110. }
  111. //清空缓存
  112. ShiroUtils.clearCachedAuthorizationInfo();
  113. return result(insert);
  114. }
  115. /**
  116. *
  117. * @描述: 根据ID 获取u他的所有权限 做回显
  118. *
  119. * @params: roleId 角色Id
  120. * @return:
  121. * @date: 2018/9/27 14:04
  122. */
  123. @RequestMapping("/selectById/{roleId}")
  124. @ResponseBody
  125. public Role selectById(@PathVariable("roleId") Integer roleId)
  126. {
  127. Role role = iRoleService.selectByPrimaryKey(roleId);
  128. return role;
  129. }
  130. /**
  131. *
  132. * @描述 编辑修改页面
  133. *
  134. * @date 2018/9/16 14:06
  135. */
  136. @RequestMapping("/edit/{id}")
  137. @RequiresPermissions("role:update")
  138. public String edit(@PathVariable("id") Integer id, Model model)
  139. {
  140. Role role = iRoleService.selectByPrimaryKey(id);
  141. model.addAttribute("Role", role);
  142. return prefix + "edit";
  143. }
  144. /**
  145. *
  146. * @描述 编辑修改权限页面
  147. *
  148. * @date 2018/9/16 14:06
  149. */
  150. @RequestMapping("/editPower/{id}")
  151. @RequiresPermissions("role:update")
  152. public String editPower(@PathVariable("id") Integer id, Model model)
  153. {
  154. Role role = iRoleService.selectByPrimaryKey(id);
  155. model.addAttribute("Role", role);
  156. return prefix + "editPower";
  157. }
  158. /**
  159. *
  160. * @描述 修改角色信息保存
  161. *
  162. * @date 2018/9/16 16:12
  163. */
  164. @RequestMapping("/editSave")
  165. @RequiresPermissions("role:update")
  166. @Operlog(modal = "角色管理",descr = "修改角色信息")
  167. @ResponseBody
  168. public AjaxResult save(Role role)
  169. {
  170. int i = 0;
  171. try
  172. {
  173. i = iRoleService.updateByPrimaryKeySelective(role);
  174. }
  175. catch (Exception e)
  176. {
  177. return error(e.getMessage());
  178. }
  179. return result(i);
  180. }
  181. /**
  182. *
  183. * @描述 修改角色权限信息保存
  184. *
  185. * @date 2018/9/16 16:12
  186. */
  187. @RequestMapping("/editPowerSave")
  188. @RequiresPermissions("role:update")
  189. @Operlog(modal = "角色管理",descr = "修改角色权限")
  190. @ResponseBody
  191. public AjaxResult editPowerSave(Role role, Integer[] ids)
  192. {
  193. int i = 0;
  194. try
  195. {
  196. if (StringUtils.isEmpty(ids))
  197. {
  198. ids = new Integer[0];
  199. }
  200. i = iRoleService.updateByPrimaryKeyPowerSelective(role, ids);
  201. }
  202. catch (Exception e)
  203. {
  204. return error(e.getMessage());
  205. }
  206. //清空缓存
  207. ShiroUtils.clearCachedAuthorizationInfo();
  208. //如果用户正在修改的角色id 是当前用户的角色id 则刷新 subject的User信息
  209. if (role.getRoleId().equals(getRoleId()))
  210. {
  211. ShiroUtils.reloadUser(iUserService.selectByPrimaryKey(getUserId()));
  212. }
  213. return result(i);
  214. }
  215. /**
  216. * 校验名称唯一
  217. */
  218. @PostMapping("/checkRoleNameUnique")
  219. @ResponseBody
  220. public String checkDeptNameUnique(Role role)
  221. {
  222. String uniqueFlag = "0";
  223. if (role != null)
  224. {
  225. uniqueFlag = iRoleService.checkRoleNameUnique(role);
  226. }
  227. return uniqueFlag;
  228. }
  229. }

 源码获取:俺的博客首页 "资源" 里下载!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/155651
推荐阅读
相关标签
  

闽ICP备14008679号