基于javaweb+mysql的ssm新闻管理系统(java+ssm+js+jsp+mysql)

基于javaweb+mysql的ssm新闻管理系统(java+ssm+js+jsp+mysql)

私信源码获取及调试交流

运行环境

Java≥8、MySQL≥5.7、Tomcat≥8

开发工具

eclipse/idea/myeclipse/sts等均可配置运行

适用

课程设计,大作业,毕业设计,项目练习,学习演示等

功能说明

基于javaweb的SSM新闻管理系统(java+ssm+js+jsp+mysql)

项目介绍

管理员角色包含以下功能: 管理员登录,新闻管理,类别管理,用户管理,管理员管理,广告管理等功能。 用户角色包含以下功能: 新闻主页,新闻分类查看,查看新闻细节,用户登录,评论新闻等功能。

环境需要

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版本;

技术栈

  1. 后端:Spring+SpringMVC+Mybatis 2. 前端:HTML+CSS+JavaScript+jsp

使用说明

  1. 使用Navicat或者其它工具,在mysql中创建对应名称的数据库,并导入项目的sql文件; 2. 使用IDEA/Eclipse/MyEclipse导入项目,Eclipse/MyEclipse导入时,若为maven项目请选择maven;若为maven项目,导入成功后请执行maven clean;maven install命令,然后运行; 3. 将项目中application.yml配置文件中的数据库配置改为自己的配置; 4. 运行项目,输入localhost:8080/ 登录
	}
	
	public static void main(String[] args) {
		System.out.println(FileUploadUtils.randomFileName());
	}

}

/**
 * 
 *实现对赞助的管理
 */
@Controller
@RequestMapping("support")
public class SupportHandler{
	
	 @Autowired
	 SupportService supportService;

	     //跳转到添加用户界面
	   
	    @RequestMapping("toAddSupport")
	    public String toAddUser(){
	        return "houtai/allSupport.jsp";
	    }

	     // 添加赞助并重定向  
	    @RequestMapping("addSupport") 
	    public String addManager(HttpServletRequest req){
	    	String  name=req.getParameter("SupportName");
	    	String money=req.getParameter("addMoney");
	    	String text=req.getParameter("addText");
	    	Support support=new Support();
	    	support.setSname(name);
	    	support.setSmoney(money);
	@RequestMapping("tpchshihua")
	public String tpchushihua(HttpServletRequest req){
		String url="";
		List<News_type> list1=getnt.getnewstype();
		req.getSession().setAttribute("ntp", list1);
		List<News_type> list2=getnt.getnewstype();
		req.getSession().setAttribute("ntp2", list2);
		String flag=req.getParameter("flag");
		if(flag==null){
			url="redirect:fenglieguanli.jsp";
		}else {
		url="redirect:houtai/fenglieguanli.jsp";}
		return url;
	}
	@RequestMapping("gaitp")
	public String gaitp(HttpServletRequest req) throws UnsupportedEncodingException{
		String url="";
		req.setCharacterEncoding("utf-8");
		int ntid=Integer.parseInt(req.getParameter("id"));
		String ntname=req.getParameter("tpname");
		ntname=new String(ntname);
		News_type t=new News_type();
		t.setNtid(ntid);
		t.setNtname(ntname);
		int i=getnt.gaitp(t);
		url="tpchshihua?flag=1";
		return url;
	}
	@RequestMapping("delnt")
	public String delnt(HttpServletRequest req){
		String url="";
		int i;
		int ntid=Integer.parseInt(req.getParameter("ntid"));
		List<News> list = getnews.findnewntid(ntid);
		if(list.size()==0){
			i=getnt.delnt(ntid);}
		else{
			i=0;
		}
		if(i==0){
			req.getSession().setAttribute("shibai", 1);
		}
		url="tpchshihua?flag=2";
		return url;
	}
	@RequestMapping("insertnt")
	public String insertnt(HttpServletRequest req) throws UnsupportedEncodingException{
		String url="";
		String ntname= req.getParameter("tpname");
		ntname=new String(ntname);
		News_type r=new News_type();
		r.setNtname(ntname);
		int i= getnt.insertnt(r);
		url="tpchshihua?flag=1";

	@RequestMapping("Managerlogin")
	// 管理员登录
	public String Managerlogin(HttpServletRequest req,
			HttpServletResponse response) throws IOException {
		req.setCharacterEncoding("utf-8");
		String url = "";
		String name = req.getParameter("username");
		String pwd = req.getParameter("password");
		Manager m = new Manager();
		m.setMname(name);
		m.setPwd(pwd);
		loginManager = managerService.findManager(m);

		if (loginManager == null) {
			/* req.getSession().setAttribute("mesg", "用户名或密码错误!"); */
			url = "redirect:houtai/admin_login.jsp?mesg=Name or Password Error!";
		} else {
			req.getSession().setAttribute("loginManager", loginManager);
			url = "redirect:houtai/index.jsp";
		}
		return url;
	}

	@RequestMapping("loginout")
	// 注销
	public String loginout(HttpServletRequest req, HttpServletResponse response)
			throws IOException {
		req.getSession().invalidate();
		return "redirect:index.jsp";
	}

	@RequestMapping("toHoutai")
	// 转到后台
	public String toHoutai(HttpServletRequest req) throws IOException {
		req.getSession().invalidate();
		return "redirect:houtai/admin_login.jsp";
	}

	@RequestMapping("modify")
	public String modify(HttpServletRequest request,
	        return "houtai/support.jsp";
	    }

	     // 查询单个赞助
	    @RequestMapping("getSupport")  
	    public String getUser(int mid,Model model){
	        model.addAttribute("user", supportService.findSupportById(mid));
	        return "editSupport";
	    }
	
	    
	    @RequestMapping("delSupport") 
	    public String deleteUser(HttpServletRequest req) {
	     Integer mid=Integer.parseInt(req.getParameter("id"));
	     supportService.deleteSupport(mid);
	        return "redirect:SupportInfo";
	    }

	     // 分页查询赞助信息
	    @RequestMapping("SupportInfo")
	    public String getUsers(@RequestParam(value="pn",defaultValue="1")Integer pn,Model model){
	        //从第一条开始 每页查询五条数据
	        PageHelper.startPage(pn, 5);
	        List<Support> support = supportService.findAll();
	        //将用户信息放入PageInfo对象里
	        PageInfo page = new PageInfo( support,5);
	        model.addAttribute("pageInfo", page);
//	        return "houtai/support.jsp";
	        return "houtai/support.jsp";
	    }
	    
	    //返回后台首页
	    @RequestMapping("index")
	    public String index(){
	        return "redirect:houtai/index.jsp";
	    }
}

	          manager.setMname(name);
	          manager.setPwd(pwd);
	          managerService.updateUser(manager);
	          //managerService.deleteManager(Integer.parseInt(id));
	          
	         return "redirect:ManagerInfo";  
	    }

	 
	     // 查询所有管理员
	  
	    @RequestMapping("getAllManager")  
	    public String getAllUser(Model model){
	        List<Manager> manager = managerService.findAll();
	        model.addAttribute("managerList",manager);
	        return "houtai/allManager.jsp";
	    }

	   
	     // 查询单个管理员
	   
	    @RequestMapping("getManager")  
	    public String getUser(int mid,Model model){
	        model.addAttribute("user", managerService.findUserById(mid));  
	        return "editUser";
	    }
	
	    
	    @RequestMapping("delManager") 
	    public String deleteUser(HttpServletRequest req) {
	     Integer mid=Integer.parseInt(req.getParameter("id"));
	     managerService.deleteManager(mid);
	        return "redirect:ManagerInfo";
	    }

	    
	     ///分页查询管理员信息
	 
	    @RequestMapping("ManagerInfo")
	    public String getUsers(@RequestParam(value="pn",defaultValue="1")Integer pn,Model model){
	        //从第一条开始 每页查询五条数据
	        PageHelper.startPage(pn, 5);
	        List<Manager> manager = managerService.findAll();
	        //将用户信息放入PageInfo对象里
	        PageInfo page = new PageInfo( manager,5);
	        model.addAttribute("pageInfo", page);
	        return "houtai/allManager.jsp";
	       /* return "houtai/test.jsp";*/
/**
 * 
 */

@Controller
public class kaishi {
	@Autowired
	getNewtype getnt;
	@Autowired
	getNews getnews;
	@Autowired
	getReview getr;
	@Autowired
	getSupport getsupport;
	
	@Autowired
	SourceService sourceService;
	
	@RequestMapping("chushihuanewstype")
	public String chushihuanewstype(HttpServletRequest req){
		String url="";
		List<Source> findAllImg = sourceService.findAllImg();
		if(findAllImg!=null)
		req.getSession().setAttribute("slist", findAllImg);
		req.getSession().setAttribute("size1", findAllImg.size());
		if(req.getSession().getAttribute("loginUser")==null){
			req.getSession().setAttribute("userid", 0);}else{
				User u=(User)req.getSession().getAttribute("loginUser");
				req.getSession().setAttribute("userid",u.getUid());
			}
		List<News_type> list=getnt.getnewstype();
		req.getSession().setAttribute("newstypelist", list);
		List<News> list1=getnews.findnewByhot(0);
		List<News> list2=getnews.findnewByhot(0);
	    }

	     
	    
	     // 修改赞助信息
	    @RequestMapping("editSupport")  
	    public String editUser(HttpServletRequest req){
	          String name=req.getParameter("editSupportname");
	          String money=req.getParameter("editMoney");
	          String id=req.getParameter("editSupportId");
	          String text=req.getParameter("editText");
	          System.out.println("==="+name);
	          System.out.println("==="+money);
	          System.out.println("==="+id);
	          System.out.println("==="+text);
	         Support support = supportService.findSupportById(Integer.parseInt(id));
	       
	         support.setSname(name);
	         support.setSmoney(money);
	         support.setText(text);
	          supportService.updateSupport(support);
	          //managerService.deleteManager(Integer.parseInt(id));
	          
	         return "redirect:SupportInfo";  
	    }

	
	    // 查询所有赞助
	 
	    @RequestMapping("getAllSupport")  
	    public String getAllUser(Model model){
	        List<Support> manager = supportService.findAll();
	        model.addAttribute("managerList",manager);
	        return "houtai/support.jsp";
	    }

	     // 查询单个赞助
	    @RequestMapping("getSupport")  
	    public String getUser(int mid,Model model){
	        model.addAttribute("user", supportService.findSupportById(mid));
	        return "editSupport";
	    }
	

*//**
 * 
 *//*
@Controller
public class kaishi {
	@Autowired
	getNewtype getnt;
	@Autowired
	getNews getnews;
	@RequestMapping("chushihuanewstype")
	public String chushihuanewstype(HttpServletRequest req){
		String url="";
		List<News_type> list=getnt.getnewstype();
		req.getSession().setAttribute("newstypelist", list);
		List<News> list1=getnews.findnewByhot(0);
		List<News> list2=getnews.findnewByhot(0);
		for(int i=0;i<list2.size();i++){
			if(list2.get(i).getNtext().length()>200){
			list2.get(i).setNtext((String) list2.get(i).getNtext().subSequence(0,200));
			}
		}
		req.getSession().setAttribute("newshotlist", list1);
		req.getSession().setAttribute("newshotlist1", list2);
		list1=getnews.findnewByhotType(0, 1);
		req.getSession().setAttribute("newszhenzhihotlist", list1);
		list1=getnews.findnewByhotType(0, 2);
		req.getSession().setAttribute("newsjunshihotlist", list1);
		list1=getnews.findnewByhotType(0, 3);
		req.getSession().setAttribute("newstiyuhotlist", list1);
		list1=getnews.findnewByhotType(0, 4);
		req.getSession().setAttribute("newsyulehotlist", list1);
		url="redirect:index.jsp";
		return url;
	}
	
	
	
}
*/

		OutputStream out = response.getOutputStream();
		
		ImageIO.write(image, /*"GIF"*/ "jpg" /* format desired */ , out /* target */ );  

		out.flush();
		out.close();
	}

}

@Controller
public class uploadfiles {
	@Autowired
	SourceService sourceService;
	
	
	@RequestMapping("uploadfiles")
	public String test1(HttpServletRequest request) throws Exception{
		MultipartHttpServletRequest mrequest = (MultipartHttpServletRequest) request;
		List<MultipartFile> files = mrequest.getFiles("duofile");//通过获取页面中文件域的name属性,得到对应的文件对象 ,装载成一个List集合
		//调用自己写的文件上传工具类 FileUploadUtils 的upLoadFile方法实现多文件上传到服务器的某个路径下
//		upLoadFile   param1  request对象 ,为了获取服务url路径的某些信息
//					param2   上传的多个文件对象
//			 		param3  上传的路径
		Map<String, UploadFile> upLoadFile = FileUploadUtils.upLoadFile(request,files , "newsimg");
		System.out.println(upLoadFile);
		for(Map.Entry<String, UploadFile> imgs :upLoadFile.entrySet()){
			System.out.println(imgs.getKey());
			System.out.println(imgs.getValue().getFileSize());
			System.out.println(imgs.getValue().getFileType());
			System.out.println(imgs.getValue().getNewFileName());
			System.out.println(imgs.getValue().getNewFilePath());
			System.out.println(imgs.getValue().getNewFileUrl());
			String url=imgs.getValue().getNewFileUrl();
			Source source=new Source();
			source.setSrc(url.replace("newsimg","ssm_news_system/newsimg"));

@Controller
public class uploadfiles {
	@Autowired
	SourceService sourceService;
	
	
	@RequestMapping("uploadfiles")
	public String test1(HttpServletRequest request) throws Exception{
		MultipartHttpServletRequest mrequest = (MultipartHttpServletRequest) request;
		List<MultipartFile> files = mrequest.getFiles("duofile");//通过获取页面中文件域的name属性,得到对应的文件对象 ,装载成一个List集合
		//调用自己写的文件上传工具类 FileUploadUtils 的upLoadFile方法实现多文件上传到服务器的某个路径下
//		upLoadFile   param1  request对象 ,为了获取服务url路径的某些信息
//					param2   上传的多个文件对象
//			 		param3  上传的路径
		Map<String, UploadFile> upLoadFile = FileUploadUtils.upLoadFile(request,files , "newsimg");
		System.out.println(upLoadFile);
		for(Map.Entry<String, UploadFile> imgs :upLoadFile.entrySet()){
			System.out.println(imgs.getKey());
			System.out.println(imgs.getValue().getFileSize());
			System.out.println(imgs.getValue().getFileType());
			System.out.println(imgs.getValue().getNewFileName());
			System.out.println(imgs.getValue().getNewFilePath());
			System.out.println(imgs.getValue().getNewFileUrl());
			String url=imgs.getValue().getNewFileUrl();
			Source source=new Source();
			source.setSrc(url.replace("newsimg","ssm_news_system/newsimg"));
			source.setType(1);
			source.setNid(Integer.parseInt(request.getParameter("nid")));
			int i=sourceService.insert(source);
			System.out.println("============"+i);
			//request.setAttribute("url", url);
			request.getSession().setAttribute("url", url);
			System.out.println(imgs.getValue().getOriginalFileName());
			
			
		}
		return "redirect:houtai/file.jsp";
	}
}

		String pwd = req.getParameter("password");
		Manager m = new Manager();
		m.setMname(name);
		m.setPwd(pwd);
		loginManager = managerService.findManager(m);

		if (loginManager == null) {
			/* req.getSession().setAttribute("mesg", "用户名或密码错误!"); */
			url = "redirect:houtai/admin_login.jsp?mesg=Name or Password Error!";
		} else {
			req.getSession().setAttribute("loginManager", loginManager);
			url = "redirect:houtai/index.jsp";
		}
		return url;
	}

	@RequestMapping("loginout")
	// 注销
	public String loginout(HttpServletRequest req, HttpServletResponse response)
			throws IOException {
		req.getSession().invalidate();
		return "redirect:index.jsp";
	}

	@RequestMapping("toHoutai")
	// 转到后台
	public String toHoutai(HttpServletRequest req) throws IOException {
		req.getSession().invalidate();
		return "redirect:houtai/admin_login.jsp";
	}

	@RequestMapping("modify")
	public String modify(HttpServletRequest request,
			HttpServletResponse response) throws IOException {

		PrintWriter out = response.getWriter();
		HttpSession session = request.getSession();
		User luser = (User) session.getAttribute("loginUser");
		Integer uid = luser.getUid();
		if (uid != null) {
			User userById = userService.findUserById(uid);
			String name = request.getParameter("username");
			String pwd = request.getParameter("password");
			String newPwd = request.getParameter("confirm_password");
			String phone = request.getParameter("phone_number");
			phone = phone.substring(0, 10);
	

	// 返回后台首页
	@RequestMapping("home")
	public String index() {
		/*return "redirect:index.jsp";*/
		return "chushihuanewstype";
	}
	
}

public class FileUploadUtils {
	// 这个文件上传类主要是配合SpringMVC框架的

	// 这里主要是把文件上传到本地Tomcat服务器的webapp下面 ,并返回web的文件访问地址

	/**
	 * 文件上传
	 * 
	 * @param request
	 *            HTTP请求
	 * @param files
	 *            上传的文件
	 * @param folder
	 *            要建立的文件夹的名字
	 * @return
	 */
	public static Map<String, UploadFile> upLoadFile(
			HttpServletRequest request, List<MultipartFile> files, String folder) {
		Map<String, UploadFile> map = new HashMap<String, UploadFile>();
		if (files != null && files.size() > 0) {
			// 1.获取绝对路径
			// request.getSession().getServletContext().getRealPath("/")==>
			// E:\apache-tomcate-7.0\webapps\项目名
			// getParentFile() ==>E:\apache-tomcate-7.0\webapps
			File root = new File(request.getSession().getServletContext()
					.getRealPath("/"))/*.getParentFile()*/;
		String type=request.getParameter("search-sort");
		List<News> list ;
		if(type.equals("0")){
			 list = getnews.listBysearchTitle_noPage(title);
		}
		else{
			try {
				int temp = Integer.parseInt(type);
				list = getnews.findByTypeandTitle(temp, title);
			} catch (Exception e) {
				title = "的";
				 list = getnews.listBysearchTitle_noPage(title);
			}
			
		}
		
		request.getSession().setAttribute("searchList", list);
	
		return "houtai/design1.jsp";
	}
	
	@RequestMapping("moredel")
	public String moredel(HttpServletRequest req){
		String url="redirect:xinwenguanli";
		List<News> list=getnews.selectNews();
		for(int i=1;i<=list.size();i++){
			int box=0;
			if(req.getParameter("id"+i)!=null){
		box=Integer.parseInt(req.getParameter("id"+i));}
		if(box==1){
			int nid=Integer.parseInt(req.getParameter("nid"+i));
			List<regai> r=getr.findreviewBynid(nid);
			if(r.size()!=0)
			for(int j=0;j<r.size();j++){
				getr.delreview(r.get(j).getRid());
			}
			int z=getnews.delnews(nid);
			}
		}
		url="redirect:xinwenguanli";
		return url;
	}
}


		PrintWriter out = response.getWriter();
		HttpSession session = request.getSession();
		User luser = (User) session.getAttribute("loginUser");
		Integer uid = luser.getUid();
		if (uid != null) {
			User userById = userService.findUserById(uid);
			String name = request.getParameter("username");
			String pwd = request.getParameter("password");
			String newPwd = request.getParameter("confirm_password");
			String phone = request.getParameter("phone_number");
			phone = phone.substring(0, 10);
			System.out.println("-------" + phone + "-----------");
			Integer tel = 0;
			tel = (Integer) Integer.parseInt(phone);
			String email = request.getParameter("email");
			userService.update(name, pwd, tel, email, uid);

			session.setAttribute("modifyUser", userById);

		} else {
			User nuser = (User) session.getAttribute("userByName");
			Integer uid2 = nuser.getUid();
			User userById2 = userService.findUserById(uid2);
			String name = request.getParameter("username");
			String pwd = request.getParameter("password");
			String newPwd = request.getParameter("confirm_password");
			String phone = request.getParameter("phone_number");
			phone = phone.substring(0, 11);
			int tel = 0;
			if (phone != null & phone.equals("")) {
				tel = Integer.parseInt(phone);
			}
			String email = request.getParameter("email");
			userService.update(name, pwd, tel, email, uid2);
			session.setAttribute("modifyUser", userById2);
		}
		return "redirect:login.jsp";
	}

			} catch (IllegalStateException e) {
				e.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		return map;
	}

	/**
	 * 随机分配文件名
	 * 
	 * @return 29e6c3676c23466c8735bcc4d157ee08
	 */
	private static String randomFileName() {
		String name = UUID.randomUUID().toString();
		name = name.replaceAll("-", "");
		return name;
	}

	/**
	 * 产生日期的文件夹
	 * 
	 * @return \2017\02\25\
	 */
	private static String dateFileDirectory() {
		Calendar calendar = Calendar.getInstance();
		int year = calendar.get(Calendar.YEAR);
		int month = calendar.get(Calendar.MONTH);
		int day = calendar.get(Calendar.DATE);
		return File.separator + year + File.separator + (month+1) + File.separator
				+ day + File.separator;
	}
	
	public static void main(String[] args) {
		System.out.println(FileUploadUtils.randomFileName());
	}

}

		BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
		Graphics2D g = image.createGraphics();
		g.setColor(Color.WHITE);
		g.fillRect(0, 0, width, height);

		g.setColor(Color.blue);
		g.drawRect(0, 0, width, height);
		Random random = new Random();
		int segment = width/count;  
		for(int i=0;i<count;i++){
			int red =random.nextInt(255)+1;
			int blue = random.nextInt(255)+1;
			int green = random.nextInt(255)+1;

			Color color = new Color(red,blue,green);
			g.setColor(color);
			int size = random.nextInt(7)+30;
			Font font = new Font("Default",Font.ITALIC,size);
			g.setFont(font);
			int index = random.nextInt(codes.length());
			String s = codes.charAt(index)+"";
			codeValues += s;
			g.drawString(s, i*segment, height-4);
		}
		request.getSession().setAttribute("codeValues", codeValues);
		// System.out.println(codeValues);
		for(int i=0;i<5;i++){
			int x=random.nextInt(width)+1;
			int y=random.nextInt(height)+1;
			g.drawRect(x, y, 1, 1);
		}
		g.dispose();
		OutputStream out = response.getOutputStream();
		
		ImageIO.write(image, /*"GIF"*/ "jpg" /* format desired */ , out /* target */ );  

		out.flush();
		out.close();
	}

}

		Map<String, UploadFile> upLoadFile = FileUploadUtils.upLoadFile(request,files , "newsimg");
		System.out.println(upLoadFile);
		for(Map.Entry<String, UploadFile> imgs :upLoadFile.entrySet()){
			System.out.println(imgs.getKey());
			System.out.println(imgs.getValue().getFileSize());
			System.out.println(imgs.getValue().getFileType());
			System.out.println(imgs.getValue().getNewFileName());
			System.out.println(imgs.getValue().getNewFilePath());
			System.out.println(imgs.getValue().getNewFileUrl());
			String url=imgs.getValue().getNewFileUrl();
			Source source=new Source();
			source.setSrc(url.replace("newsimg","ssm_news_system/newsimg"));
			source.setType(1);
			source.setNid(Integer.parseInt(request.getParameter("nid")));
			int i=sourceService.insert(source);
			System.out.println("============"+i);
			//request.setAttribute("url", url);
			request.getSession().setAttribute("url", url);
			System.out.println(imgs.getValue().getOriginalFileName());
			
			
		}
		return "redirect:houtai/file.jsp";
	}
}

@Controller
/**
 * 

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

  • 12
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

java毕业

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值