基于javaweb+mysql的springboot学生会管理系统(java+springboot+thymeleaf+html+layui+bootstrap+maven+mysql)

基于javaweb+mysql的springboot学生会管理系统(java+springboot+thymeleaf+html+layui+bootstrap+maven+mysql)

运行环境

Java≥8、MySQL≥5.7

开发工具

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

适用

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

功能说明

基于javaweb+mysql的SpringBoot学生会管理系统(java+springboot+thymeleaf+html+layui+bootstrap+maven+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.是否Maven项目: 是;查看源码目录中是否包含pom.xml;若包含,则为maven项目,否则为非maven项目

6.数据库:MySql 5.7版本;

技术栈

  1. 后端:SpringBoot

  2. 前端:Thymeleaf+html+layui+jQuery+bootstrap

使用说明

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

@RestController
@RequestMapping("/goods")
public class GoodsController {

    @Autowired
    private GoodsService goodsService;

    @Autowired
    private GoodsService1 AllgoodsService;

    /**
     * 查询物资
     * @param
     * @return
     */
    @RequestMapping("loadAllGoods")
    public Dataobj loadAllGoods(GoodsVo goodsVo){

        IPage<goods> page = new Page<>(goodsVo.getPage(),goodsVo.getLimit());
        QueryWrapper<goods> q = new QueryWrapper<>();
        q.like(StringUtils.isNotBlank(goodsVo.getGname()),"gname",goodsVo.getGname());
        q.like(StringUtils.isNotBlank(goodsVo.getRetunname()),"retunname",goodsVo.getRetunname());
        q.like(StringUtils.isNotBlank(goodsVo.getOperatorname()),"operatorname",goodsVo.getOperatorname());
        q.like(StringUtils.isNotBlank(goodsVo.getBorrowname()),"borrowname",goodsVo.getBorrowname());
        q.orderByAsc("id");
        goodsService.page(page,q);
        List list =goodsService.list(q);
        long num=list.size();
        if(list.isEmpty()){
            return new Dataobj(null,num);
        }else {
            //返回DataGridView
            return new Dataobj(page.getRecords(), page.getTotal());
        }
    }
            Integer gid=goodsVo.getGid();
            Allgoods allgoods=AllgoodsService.getById(gid);
            Integer goodssum1=allgoods.getGoodsnum();
            Integer brrownum1=allgoods.getBorrownum();
            Integer num=goodsVo.getCountnum();
            Integer num1=goodsVo.getGoodsnum();
            if(goodsVo.getStatus()==1){
                allgoods.setGoodsnum(goodssum1+num1);
                allgoods.setBorrownum(brrownum1-num1);
                AllgoodsService.updateById(allgoods);
                goodsService.updateById(goodsVo);
                return Resultreturn.UPDATE_SUCCESS;
            }
            else {
                if (allgoods.getGoodsnum() > 0 && num < allgoods.getGoodsnum()) {
                    if (num>0) {
                        brrownum1 = num + brrownum1;
                        allgoods.setBorrownum(brrownum1);
                        allgoods.setGoodsnum(goodssum1 - num);
                        AllgoodsService.updateById(allgoods);
                        goodsService.updateById(goodsVo);
                    } else if (0 == num) {
                        goodsService.updateById(goodsVo);
                    } else {
                        brrownum1 = brrownum1 +num;
                        allgoods.setBorrownum(brrownum1);
                        allgoods.setGoodsnum(goodssum1-num);
                        AllgoodsService.updateById(allgoods);
                        goodsService.updateById(goodsVo);
                    }
                    return Resultreturn.UPDATE_SUCCESS;
                } else {
                    return Resultreturn.UPDATE_ERRORs;
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
            return Resultreturn.UPDATE_ERROR;
        }

    }

    /**
     * 批量删除
     * @param goodsVo 选中
     * @param id
     * @return
     */
    @RequestMapping("deleteUser/{id}")
    public resultreturn deleteUser(@PathVariable("id") Integer id){
        try {
            userService.removeById(id);
            return resultreturn.DELETE_SUCCESS;
        } catch (Exception e) {
            e.printStackTrace();
            return resultreturn.DELETE_ERROR;
        }
    }

    /**
     * 根据用户id查询角色并选中已拥有的角色
     * @param id 用户id
     * @return
     */
    @RequestMapping("initRoleByUserId")
    public Dataobj initRoleByUserId(Integer id){
        //1.查询所有可用的角色
        QueryWrapper<role> q = new QueryWrapper<>();
        q.eq("available", changliang.AVAILABLE_TRUE);
        List<Map<String, Object>> listMaps = roleService.listMaps(q);
        //2.查询当前用户拥有的角色id集合
        List<Integer> currentUserRoleIds = roleService.queryUserRoleIdsByUid(id);
        for (Map<String, Object> map : listMaps) {
            Boolean LAY_CHECKED=false;
            Integer roleId = (Integer) map.get("id");
            for (Integer rid : currentUserRoleIds) {
                if (rid.equals(roleId)){
                    LAY_CHECKED=true;
                    break;
                }
            }
            map.put("LAY_CHECKED",LAY_CHECKED);
        }
        return new Dataobj(listMaps,Long.valueOf(listMaps.size()));
    }

    /**
     * 保存用户和角色的关系
     * @param uid 用户的ID
     * @param ids 用户拥有的角色的ID的数组
     * @return
     */
    @RequestMapping("saveUserRole")
    public resultreturn saveUserRole(Integer uid, Integer[] ids){
        variables.put("请假时间", new Date());
        variables.put("请假流程", 1);
        //开启流程
        ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(processKey,variables);
        //将得到的实例流程id值赋给之前设置的变量
        processInstanceId = processInstance.getId();

    }

    /**
     * 申请提交请假单
     */
    @RequestMapping("Billeave")
    public resultreturn Billeave(Integer id,HttpSession session){
        try {

            User user= (User) session.getAttribute("user");
            //部署流程
            if(user.getRemark().equals("部长")){
                deploymentProcess1(user.getName(),id);
            }else {
                deploymentProcess(user.getName());
            }
            leaver leaver=new leaver();
            leaver.setId(id);
            leaver.setStatus(2);
            leaverService.updatebyAll(leaver);
            return resultreturn.Apply_SUCCESS;
        } catch (Exception e) {
            e.printStackTrace();
            return resultreturn.Apply_ERROR;
        }
    }

}

    public Dataobj loadAllProviderForSelect(){
        QueryWrapper<file> q = new QueryWrapper();
        List<file> list = filesService.list(q);
        return new Dataobj(list);
    }

    /**
     * 添加文件
     * @param
     * @return
     */
    @RequestMapping("addfiles")
    public Resultreturn addfile(FileVo fileVo){
        try {

            filesService.save(fileVo);
            return Resultreturn.ADD_SUCCESS;
        } catch (Exception e) {
            e.printStackTrace();
            return Resultreturn.ADD_ERROR;
        }
    }

    /**
     * 修改文件
     * @param fileVo
     * @return
     */
    @RequestMapping("updatefiles")
    public Resultreturn updatefiles(FileVo fileVo){
        try {
            filesService.updateById(fileVo);
            return Resultreturn.UPDATE_SUCCESS;

        } catch (Exception e) {
            e.printStackTrace();
            return Resultreturn.UPDATE_ERROR;
        }
    }

    /**
     * 批量删除文件
     * @param fileVo 选中的文件
     * @return
     */
    @RequestMapping("batchDeletefiles")
    public Resultreturn batchDeletefiles(FileVo fileVo){
        try {
            Collection<Serializable> idList = new ArrayList<Serializable>();
            for (Integer id : fileVo.getIds()) {
                idList.add(id);
            }
        }else {
            //返回DataGridView
            return new Dataobj(page.getRecords(), page.getTotal());
        }
    }

    /**
     * 新建活动
     */
    @RequestMapping("addactivitys")
    public Resultreturn addGoods1(huodonv huodonv){
        try {

            activitysService.save(huodonv);
            return Resultreturn.ADD_SUCCESS;
        } catch (Exception e) {
            e.printStackTrace();
            return Resultreturn.ADD_ERROR;
        }
    }

    /**
     * 修改活动
     * @param huodonv
     * @return
     */
    @RequestMapping("updateactivitys")
    public Resultreturn updateGoods1(huodonv huodonv){
        try {
            activitysService.updateById(huodonv);
            return Resultreturn.UPDATE_SUCCESS;

        } catch (Exception e) {
            e.printStackTrace();
            return Resultreturn.UPDATE_ERROR;
        }
    }

    //删除活动
    @RequestMapping("deleteactivitys")
    public Resultreturn deleteGoods1(Integer id){
        try {

            activitysService.removeById(id);
            return Resultreturn.DELETE_SUCCESS;
        } catch (Exception e) {
     * @return
     */
    @RequestMapping("addDept")
    public resultreturn addDept(bumenv deptVo){
        try {
            deptService.save(deptVo);
            return resultreturn.ADD_SUCCESS;
        } catch (Exception e) {
            e.printStackTrace();
            return resultreturn.ADD_ERROR;
        }
    }

    /**
     * 更新部门
     * @param deptVo
     * @return
     */
    @RequestMapping("updateDept")
    public resultreturn updateDept(bumenv deptVo){
        try {
            deptService.updateById(deptVo);
            return resultreturn.UPDATE_SUCCESS;
        } catch (Exception e) {
            e.printStackTrace();
            return resultreturn.UPDATE_ERROR;
        }
    }

   /**
     * 删除部门
     * @param deptVo
     * @return
     */
    @RequestMapping("deleteDept")
    public resultreturn deleteDept(bumenv deptVo){
        try {
            deptService.removeById(deptVo.getDid());
            return resultreturn.DELETE_SUCCESS;
        } catch (Exception e) {
            e.printStackTrace();
            return resultreturn.DELETE_ERROR;
        }
        }
    }

    /**
     * 新建计划
     * @param
     * @return
     */
    @RequestMapping("addplans")
    public Resultreturn addGoods1(PlansVo plansVo){
        try {

            plansService.save(plansVo);
            return Resultreturn.ADD_SUCCESS;
        } catch (Exception e) {
            e.printStackTrace();
            return Resultreturn.ADD_ERROR;
        }
    }

    /**
     * 修改计划
     */
    @RequestMapping("updateplans")
    public Resultreturn updateGoods1(PlansVo plansVo){
        try {
            plansService.updateById(plansVo);
            return Resultreturn.UPDATE_SUCCESS;

        } catch (Exception e) {
            e.printStackTrace();
            return Resultreturn.UPDATE_ERROR;
        }
    }

    //删除计划
    @RequestMapping("deleteplans")
    public Resultreturn deleteGoods1(Integer pid){
        try {

            plansService.removeById(pid);
            return Resultreturn.DELETE_SUCCESS;
     * @return
     */
    @RequestMapping("deleteNotice")
    public resultreturn deleteNotice(gongaov noticeVo){
        try {
            noticeService.removeById(noticeVo);
            return resultreturn.DELETE_SUCCESS;
        } catch (Exception e) {
            e.printStackTrace();
            return resultreturn.DELETE_ERROR;
        }
    }

    /**
     * 批量删除公告
     * @param noticeVo
     * @return
     */
    @RequestMapping("batchDeleteNotice")
    public resultreturn batchDeleteNotice(gongaov noticeVo){
        try {
            Collection<Serializable> idList = new ArrayList<>();
            for (Integer id : noticeVo.getIds()) {
                idList.add(id);
            }
            noticeService.removeByIds(idList);
            return resultreturn.DELETE_SUCCESS;
        } catch (Exception e) {
            e.printStackTrace();
            return resultreturn.DELETE_ERROR;
        }
    }

}


@RestController
@RequestMapping("/role")
public class JiaoseController {

    @Autowired
    private IjiaoseService roleService;

    @Autowired
    private IquanxianService permissionService;

    /**
     * 查询所有角色
     * @param jiaosev
     * @return
     */
    @RequestMapping("loadAllRole")
    public Dataobj loadAllRole(jiaosev jiaosev){
        IPage<role> page = new Page<role>(jiaosev.getPage(), jiaosev.getLimit());
        QueryWrapper<role> queryWrapper = new QueryWrapper<role>();
        queryWrapper.like(StringUtils.isNotBlank(jiaosev.getName()),"name", jiaosev.getName());
        queryWrapper.like(StringUtils.isNotBlank(jiaosev.getRemark()),"remark", jiaosev.getRemark());
        queryWrapper.eq(jiaosev.getAvailable()!=null,"available", jiaosev.getAvailable());
        queryWrapper.orderByAsc("id");
        roleService.page(page,queryWrapper);
        List list =roleService.list(queryWrapper);
        long num=list.size();
        if(list.isEmpty()){
            return new Dataobj(null,num);
    public Resultreturn batchDeletefiles(GoodsVo1 goodsVo1){
        try {
            Collection<Serializable> idList = new ArrayList<Serializable>();
            for (Integer id : goodsVo1.getIds()) {
                idList.add(id);
            }
            AllgoodsService.removeByIds(idList);
            return Resultreturn.DELETE_SUCCESS;
        } catch (Exception e) {
            e.printStackTrace();
            return Resultreturn.DELETE_ERROR;
        }
    }

}

@RestController
//           return "";
//       }
//
//    }
//    @RequestMapping("writeMessage")
//    public void writeMessage(String message,HttpSession session){
//        User user= (User) session.getAttribute("user");
//        Client client = null;
//        for (String s:map.keySet()){
//            if (s==user.getName()){
//                client=map.get(s);
//            }
//        }
//        client.sendmsg(message);
//    }
//

    //修改密码
    @RequestMapping("/changePassword")
    public resultreturn udateppassword(String oldPassword, String newPwdOne, String newPwdTwo, HttpSession session) {

        User user = (User) session.getAttribute("user");
        //2.将oldPassword加盐并散列两次在和数据库中的密码进行对比
        Integer userId = user.getId();
        User user1 = userService.getById(userId);
        //2.1获得该用户的盐
        String salt = user1.getPwdsalt();
        //2.2通过用户输入的原密码,从数据库中查出的盐,散列次数生成新的旧密码
        String oldPassword2 = new Md5Hash(oldPassword,salt,2).toString();
        oldPassword2 = oldPassword;

        if (oldPassword2.equals(user.getPassword())) {
            if (newPwdOne.equals(newPwdTwo)) {

                //3.生成新的密码
                String newPassword = new Md5Hash(newPwdOne,salt,2).toString();
                newPassword=newPwdOne;
                user.setPassword(newPassword);
                userService.updatepwd(user);
                return resultreturn.UPDATE_SUCCESS;
        q5.eq("logintype","外联部").eq("remark","部长");
        User user6=userService.getOne(q5);

        QueryWrapper<User> q6=new QueryWrapper<>();
        q6.eq("logintype","学习部").eq("remark","部长");
        User user7=userService.getOne(q6);

        QueryWrapper<User> q7=new QueryWrapper<>();
        q7.eq("logintype","学生会").eq("remark","主席");
        User user8=userService.getOne(q7);
        //将流程负责人信息加入map,以便传入流程中
        Map<String, Object> variables = new HashMap<String, Object>();
        variables.put("SumbName",name);
        variables.put("shenghuo",user.getName());
        variables.put("mishu", user1.getName());
        variables.put("shijian", user2.getName());
        variables.put("zuzhi", user3.getName());
        variables.put("cehua", user4.getName());
        variables.put("xuanchuan", user5.getName());
        variables.put("wailain", user6.getName());
        variables.put("xuexi", user7.getName());
        variables.put("zhuxi", user8.getName());
        //开启流程
        ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(processKey,variables);

    }

    public void deploymentProcess1(String name,Integer id) throws Exception{
        Deployment deployment =this.processEngine.getRepositoryService()
                .createDeployment()
                .name("请假流程.....")
                .addClasspathResource("diagrams/LeaveProcess1.bpmn")
                .addClasspathResource("diagrams/LeaveProcess1.png")
                .deploy();
        progressid=deployment.getId();
        //获取runtimeservice对象
        RuntimeService runtimeService = this.processEngine.getRuntimeService();
        //根据流程key值,获取流程
        String processKey ="buzhang";
        //将信息加入map,以便传入流程中
        QueryWrapper<User> q7=new QueryWrapper<>();
        q7.eq("logintype","学生会").eq("remark","主席");
        User user8=userService.getOne(q7);
                String ganpi = (String) taskService.getVariable(task1.getId(), "干事批注");
                String pi = (String) taskService.getVariable(task1.getId(), "部长批注");
                Integer procressId = (Integer) taskService.getVariable(task1.getId(), "请假流程");

                tak.setLeaver(Lname);
                tak.setReason(reason);
                tak.setLeaverId(leaverId);
                tak.setRemart(remark);
                tak.setTime(date);
                tak.setStyle(style);
                tak.setGanpi(ganpi);
                tak.setPi(pi);
                tak.setProcressId(procressId);
                list1.add(tak);
            }
        }
        return list1;
    }

    public List<task> findPersonalTask(String username){
        QueryWrapper<leaver> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("leaver",username).eq("status",2);
        leaver leaver=leaverService.getOne(queryWrapper);

        TaskService taskService=this.processEngine.getTaskService();

        List<org.activiti.engine.task.Task> list =this.processEngine.getTaskService()
                .createTaskQuery()
                .taskAssignee(username)//个人任务的查询
                .list();
        List<task> list1=new ArrayList<task>();

        if(list!=null && list.size()>0){
            for (org.activiti.engine.task.Task task1:list) {
                task tak=new task();
                Integer procressId = (Integer) taskService.getVariable(task1.getId(), "请假流程");
                tak.setProcressId(procressId);
                tak.setId(Integer.parseInt(task1.getId()));
                tak.setName(task1.getName());
                tak.setAssignee(task1.getAssignee());
                tak.setProcessInstanceId(task1.getProcessInstanceId());
                tak.setCreateTime(task1.getCreateTime());
                tak.setLeaver(leaver.getLeaver());
                tak.setReason(leaver.getLeavereson());
                tak.setLeaverId(leaver.getId());
                tak.setRemart(leaver.getRemark());
                tak.setTime(new Date());
                tak.setStyle(leaver.getStyle());

                    QueryWrapper<leaver> qu = new QueryWrapper<>();
                    //查询请假人和请假状态为被驳回的请假单
                    qu.eq("leaver", task.getLeaver()).eq("status", 3);
                    List<leaver> lea= leaverService.list(qu);
                 if(lea.isEmpty()){//如果为空表示当前任务为初次办理
                            //循环遍历查询出来的请假状态为审核中的请假单
                        for (com.ywj.system.model.leaver item:leaver) {

                            //设置流程变量以便传入流程中
                            variables.put("请假人", item.getLeaver());
                            variables.put("请假id", item.getId());
                            variables.put("请假类型", item.getStyle());
                            variables.put("请假原因", item.getLeavereson());
                            variables.put("备注", item.getRemark());
                            variables.put("请假时间", new Date());
                            variables.put("请假流程", 0);
                            records.setLeaverid(item.getId());
                        }
                    }else {//否则表示当前任务为二次办理
                        //遍历请假状态为被驳回的请假单
                        for (com.ywj.system.model.leaver leaver1:lea) {
                            //设置流程变量以便传入流程中
                            variables.put("请假人", leaver1.getLeaver());
                            variables.put("请假id", leaver1.getId());
                            variables.put("请假类型", leaver1.getStyle());
                            variables.put("请假原因", leaver1.getLeavereson());
                            variables.put("备注", leaver1.getRemark());
                            records.setLeaverid(leaver1.getId());
                        }
                    }
                    //设置流程变量
                    variables.put("请假时间", new Date());
                    variables.put("干事批注", task.getGanpi());
                    //审核记录
                    records.setId(task.getId());
                    records.setName(task.getName());
                    records.setPizhu(task.getGanpi());
                    records.setRecordtime(new Date());
                    records.setStatu(1);
                    variables.put("dapartment", user.getLogintype().toString());
                    //添加审核记录
                    recordsService.save(records);
                    //执行完成任务
                    this.processEngine.getTaskService().complete(task.getId().toString(), variables);

    /**
     * 退出然后跳转到登陆页面
     *
     * @return
     */
    @RequestMapping("toSignOut")
    public String toSignOut() {
        //销毁session
        try{
            ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
            HttpServletRequest request = requestAttributes.getRequest();
            HttpSession session = request.getSession();
            if (session != null) {
                User loginUser = (User) session.getAttribute("sysUserInfo");
                ServletContext application = session.getServletContext();
                @SuppressWarnings("unchecked")
                Map<String, Object> loginMap = (Map<String, Object>) application.getAttribute("loginMap");
                loginMap.remove(loginUser.getId());
                application.setAttribute("loginMap", loginMap);
				session.removeAttribute("user");
                session.invalidate();//清除session信息
            }
        }catch(Exception e){
            e.printStackTrace();
        }
        return "system/index/login";
    }

    /**
     * 跳转到首页
     *
     * @return
     */
    @RequestMapping("index")
    public String index() {

        return "system/index/index";
    }

    }

    /**
     * 跳转到代办
     *
     * @return
     */
    @RequestMapping("toMyVerifyManager")
    public String toRecordManager() {
        return "system/myverify/MyVerifyManager";
    }

    /**
     * 跳转到审核记录
     *
     * @return
     */
    @RequestMapping("toRecordsManager")
    public String toRecordsManager() {
        return "system/myverify/RecordsManager";
    }

    /**
     * 跳转到请假单管理
     *
     * @return
     */
    @RequestMapping("toLeavesManagers")
    public String toLeavesManagers() {
        return "system/myverify/LeaveManagers";
    }

    /**
     * 跳转到日志管理
     *
     * @return
     */
    @RequestMapping("toLoginManagers")
     * 根据id查询一个用户
     * @param id  领导的id
     * @return
     */
    @RequestMapping("loadUserById")
    public Dataobj loadUserById(Integer id){
        return new Dataobj(userService.getById(id));
    }

    /**
     * 修改用户
     * @param userv
     * @return
     */
    @RequestMapping("updateUser")
    public resultreturn updateUser(userv userv){
        try {
            userService.updateById(userv);
            return resultreturn.UPDATE_SUCCESS;
        } catch (Exception e) {
            e.printStackTrace();
            return resultreturn.UPDATE_ERROR;
        }
    }

    /**
     * 删除用户
     * @param id
     * @return
     */
    @RequestMapping("deleteUser/{id}")
    public resultreturn deleteUser(@PathVariable("id") Integer id){
        try {
            userService.removeById(id);
            return resultreturn.DELETE_SUCCESS;
        } catch (Exception e) {
            e.printStackTrace();
            return resultreturn.DELETE_ERROR;
        }
    }

    /**
     * 根据用户id查询角色并选中已拥有的角色
     * @param id 用户id

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值