Java项目:校园物资管理系统(java+Springboot+JavaScript+layui+Mysql)

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

项目介绍

本项目有物资管理员与教师两种角色;

普通员工具有以下功能:申领物资;撤销申请;查看待领任务。
(1)申领物资:提交物资领取申请。
(2)撤销申请:对于物资管理员还未审核的申请,可以撤销;已审核的申请则不能撤销。
(3)查看待领任务:查看已通过审核的申请和物资管理员发起的领取任务。

物资管理员拥有以下功能:物资信息管理;物资入库;物资发放;查看物资库存;审批申请。
(1)物资信息管理:添加物资类别;添加、修改、删除物资信息;按名称或类别或编号查询物资信息。
(2)物资入库:增加物资的库存量;可以按入库时间来查看入库信息。
(3)物资发放:向指定人发放一定数量的物资,并在其领取后进行登记。
(4)查看物资库存:查看所有物资的库存量。
(5)审批申请:查看和审批物资领取申请,同意则员工可以领取物资,不同意则驳回该申请,不允许领取物资。

环境需要

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 8.0/5.7版本;
6.是否Maven项目:是;

技术栈

springboot+mysql+layui+CSS+JavaScript

使用说明

1. 使用Navicat或者其它工具,在mysql中创建对应名称的数据库,并导入项目的sql文件;
2. 使用IDEA/Eclipse/MyEclipse导入项目,导入成功后请执行maven clean;maven install命令,然后运行;
3. 将项目中application.properties配置文件中的数据库配置改为自己的配置;
4. 运行项目,在浏览器中输入http://localhost:8080 访问

 

 

 

 

登录管理控制层:

@Controller
@RequestMapping("/")
public class IndexController {
    @Resource
    private IndexService indexService;

    @Resource
    private MenuService menuService;

    @RequestMapping(value = "/")
    public String index() {
        return "/login";
    }

    @RequestMapping(value = "/login.html")
    public String toLogin() {
        return "/login";
    }

    @RequestMapping(value = "/home.html")
    public String home() {
        return "/home";
    }

    @RequestMapping(value = "/welcome.html")
    public String welcome() {
        return "/welcome";
    }

    /**
     * 登录
     *
     * @param request
     * @param session
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/login.action")
    public String login(@RequestBody Map<String, String> request, HttpSession session) {
        Map<String, Object> map = new HashMap<>();
        String uid = request.get("uid");
        String password = request.get("password");
        System.out.println("uid:" + uid + "--pwd:" + password);
        User user = indexService.findUser(uid, password);
        if (user != null) {
            session.setAttribute("uid", uid);
            session.setAttribute("uname", user.getUname());
            session.setAttribute("utype", user.getUtype());
            map.put("msg","登录成功");
            map.put("success", true);
        } else {
            map.put("success", false);
            map.put("msg", "账号或密码错误!");
        }
        return JSON.toJSONString(map);
    }

    /**
     * 加载菜单列表
     *
     * @param session
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/api/loadMenuList")
    public String loadMenuList(HttpSession session) {
        Integer utype = (Integer) session.getAttribute("utype");
        String initJson = menuService.loadMenuList(utype);
        return initJson;
    }

    /**
     * 退出登录
     *
     * @param session
     * @return 返回到登录界面
     */
    @RequestMapping(value = "/logout.action")
    public String logout(HttpSession session) {
        // 清空session中的属性
        session.removeAttribute("uid");
        session.removeAttribute("uname");
        session.removeAttribute("utype");
        //让session无效
        session.invalidate();
        return "redirect:/login.html";
    }
}

物资管理控制层:

@Controller
@RequestMapping("/mh")
public class MHController {
    @Resource
    private KindService kindService;

    @Resource
    private MaterialService materialService;

    @Resource
    private PutinService putinService;

    @Resource
    private StoreService storeService;

    @Resource
    private RequisitionService requisitionService;

    @Resource
    private IndexService indexService;

    @RequestMapping(value = "/info.html")
    public String materialInfo() {
        return "/mh/material-info.html";
    }

    /**
     * 获取全部种类
     *
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/info/getOptions.action")
    public String getSelectOptions() {
        Map<String, Object> map = new HashMap<>();
        List<Kind> list = kindService.findAllKind();
        if (list != null) {
            map.put("success", true);
            map.put("data", list);
        } else {
            map.put("success", false);
            Kind kind = new Kind("005", "其它");
            map.put("data", kind);
        }
        System.out.println(map);
        return JSON.toJSONString(map);
    }

    /**
     * 上传物资图片
     *
     * @param file
     * @param request
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/info/uploadImage")
    public String uploadImage(MultipartFile file, HttpServletRequest request) {
        HashMap<String, Object> map = new HashMap<>();
        HashMap<String, Object> data = new HashMap<>();
        try {
            if (file != null) {
                String originalFilename = file.getOriginalFilename();
                Date date = new Date();
                String fileName = date.getTime() + "-" + originalFilename;
                // 类路径
                String classPath = "F:/IDEA/workspace/MMS/mms/target/classes/static";
                // 父路径
                String src = "/upload/";
                File directory = new File(classPath, src);
                if (!directory.exists()) {
                    directory.mkdir();
                }
                // 文件名
                String imagePath = directory.getPath() + "\\" + fileName;
                file.transferTo(new File(imagePath));
                data.put("src", src + fileName);
                map.put("code", 0);
                map.put("msg", "上传成功!");
                map.put("data", data);
                return JSON.toJSONString(map);
            } else {
                map.put("code", -1);
                map.put("msg", "请选择图片!");
                return JSON.toJSONString(map);
            }
        } catch (Exception e) {
            e.printStackTrace();
            map.put("code", -1);
            map.put("msg", "上传失败,请稍后重试!");
            return JSON.toJSONString(map);
        }
    }

    /**
     * 添加物资信息
     *
     * @param mi
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/info/add")
    public String addMaterialInfo(Material mi) {
        HashMap<String, Object> map = new HashMap<>();
        System.out.println(mi);
        boolean result = materialService.addMaterialInfo(mi);
        if (result) {
            map.put("success", true);
            map.put("msg", "添加成功!");
        } else {
            map.put("success", false);
            map.put("msg", "添加失败,请稍后再试!");
        }
        return JSON.toJSONString(map);
    }

    /**
     * 查看物资信息列表
     *
     * @param mv
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/info/list")
    public DataGridViewResult materialInfoList(MaterialVo mv) {
        // 设置分页信息
        PageHelper.startPage(mv.getPage(), mv.getLimit());
        // 查询
        List<Material> list = materialService.findMaterialInfoListByPage(mv);
        // 创建分页对象
        PageInfo<Material> pageInfo = new PageInfo<Material>(list);
        // 按接口要求返回数据
        DataGridViewResult data = new DataGridViewResult(pageInfo.getTotal(), pageInfo.getList());
        return data;
    }

    /**
     * 修改物资信息
     *
     * @param mi
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/info/update")
    public String updateMaterialInfo(Material mi) {
        HashMap<String, Object> map = new HashMap<>();
        boolean result = materialService.updateMaterialInfo(mi);
        if (result) {
            map.put("success", true);
            map.put("msg", "更改成功!");
        } else {
            map.put("success", false);
            map.put("msg", "更改失败!");
        }
        return JSON.toJSONString(map);
    }


    /**
     * 删除物资信息
     *
     * @param request
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/info/delete")
    public String deleteMaterialInfo(HttpServletRequest request) {
        HashMap<String, Object> map = new HashMap<>();
        String params = request.getParameter("params");
        try {
            if (!params.equals("") && params != "") {
                // 获取mid数组
                JSONArray jsonArray = JSONArray.parseArray(params);
                List<String> list = new ArrayList<>();
                for (int i = 0; i < jsonArray.size(); i++) {
                    JSONObject obj = jsonArray.getJSONObject(i);
                    String mid = (String) obj.get("mid");
                    System.out.println(mid);
                    list.add(mid);
                }
                boolean result = materialService.deleteMaterialInfo(list);
                if (result) {
                    map.put("success", true);
                    map.put("msg", "删除成功!");
                } else {
                    map.put("success", false);
                    map.put("msg", "删除失败!");
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
            map.put("success", false);
            map.put("msg", "删除失败!");
        }
        return JSON.toJSONString(map);
    }


    /**
     * 添加物资类别
     *
     * @param kd
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/kind/add")
    public String addKind(Kind kd) {
        HashMap<String, Object> map = new HashMap<>();
        System.out.println(kd);
        boolean result = kindService.addKind(kd);
        if (result) {
            map.put("success", true);
            map.put("msg", "添加成功!");
        } else {
            map.put("success", false);
            map.put("msg", "添加失败,请稍后再试!");
        }
        return JSON.toJSONString(map);
    }


    @RequestMapping(value = "/putin.html")
    public String putinRecords(){
        return "/mh/putin.html";
    }


    /**
     * 获取全部的物资名称
     *
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/putin/getMname.action")
    public String getMnameOptions() {
        Map<String, Object> map = new HashMap<>();
        List<Material> list = materialService.findAllMname();
        if (list != null) {
            map.put("success", true);
            map.put("data", list);
        } else {
            map.put("success", false);
        }
        return JSON.toJSONString(map);
    }

    /**
     * 物资入库
     * @param pi
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/putin/add")
    public String addPutinInfo(Putin pi,HttpServletRequest request) {
        HashMap<String, Object> map = new HashMap<>();
        // 获取经办人信息
        String uname = (String)request.getSession().getAttribute("uname");
        pi.setPagent(uname);

        // 获取当前日期
        Date date = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        pi.setPdate(sdf.format(date));

        // 生成时间戳,保证主键的唯一性
        String pno = String.valueOf(date.getTime());
        pi.setPno(pno);

        System.out.println(pi);
        boolean result = putinService.addPutin(pi);
        if (result) {
            map.put("success", true);
            map.put("msg", "入库成功!");
        } else {
            map.put("success", false);
            map.put("msg", "入库失败,请稍后再试!");
        }
        return JSON.toJSONString(map);
    }

    /**
     * 查询物资入库信息
     * @param pv
     * @return
     */
    @RequestMapping(value = "/putin/list")
    @ResponseBody
    public DataGridViewResult findPutinList(PutinVo pv){
        // 设置分页信息
        PageHelper.startPage(pv.getPage(), pv.getLimit());
        // 查询
        List<Putin> list = putinService.findPutinList(pv);
        // 创建分页对象
        PageInfo<Putin> pageInfo = new PageInfo<Putin>(list);
        // 按接口要求返回数据
        DataGridViewResult data = new DataGridViewResult(pageInfo.getTotal(), pageInfo.getList());
        return data;
    }

    @RequestMapping(value = "/store.html")
    public String storeInfo(){
        return "/mh/store.html";
    }

    /**
     * 查询物资的库存信息
     * @param sv
     * @return
     */
    @RequestMapping(value = "/store/list")
    @ResponseBody
    public DataGridViewResult findStoreList(StoreVo sv){
        // 设置分页信息
        PageHelper.startPage(sv.getPage(), sv.getLimit());
        // 查询
        List<Store> list = storeService.findStoreList(sv);
        // 创建分页对象
        PageInfo<Store> pageInfo = new PageInfo<Store>(list);
        // 按接口要求返回数据
        DataGridViewResult data = new DataGridViewResult(pageInfo.getTotal(), pageInfo.getList());
        return data;
    }

    @RequestMapping(value = "/approve.html")
    public String approve(){
        return "/mh/approve.html";
    }


    /**
     * 查询待审核的领用申请
     * @param rv
     * @return
     */
    @RequestMapping(value = "/approve/list")
    @ResponseBody
    public DataGridViewResult approveList(RequisitionVo rv){
        rv.setRstatus("申请中");
        // 设置分页信息
        PageHelper.startPage(rv.getPage(), rv.getLimit());
        // 查询
        List<Requisition> list = requisitionService.findApproveList(rv);
        // 创建分页对象
        PageInfo<Requisition> pageInfo = new PageInfo<>(list);
        // 按接口要求返回数据
        DataGridViewResult data = new DataGridViewResult(pageInfo.getTotal(), pageInfo.getList());
        return data;
    }

    /**
     * 审批申请
     * @param rt
     * @param request
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/approve/approve.action")
    public String doApprove(Requisition rt,HttpServletRequest request){
        // 审核人
        String uname = (String)request.getSession().getAttribute("uname");
        rt.setRverifier(uname);

        System.out.println(rt);
        HashMap<String, Object> map = new HashMap<>();
        boolean result = requisitionService.updateRstatus(rt);
        if (result) {
            map.put("success", true);
            map.put("msg", "审核成功!");
        } else {
            map.put("success", false);
            map.put("msg", "审核失败,请稍后再试!");
        }
        return JSON.toJSONString(map);
    }

    /**
     * 物资发放页面
     * @return
     */
    @RequestMapping(value = "/distribute.html")
    public String distribute(){
        return "/mh/distribute.html";
    }

    /**
     * 查询所有的领用记录
     * @param rv
     * @return
     */
    @RequestMapping(value = "/distribute/list")
    @ResponseBody
    public DataGridViewResult distributeList(RequisitionVo rv){
        // 设置分页信息
        PageHelper.startPage(rv.getPage(), rv.getLimit());
        // 查询
        List<Requisition> list = requisitionService.findAll(rv);
        // 创建分页对象
        PageInfo<Requisition> pageInfo = new PageInfo<>(list);
        // 按接口要求返回数据
        DataGridViewResult data = new DataGridViewResult(pageInfo.getTotal(), pageInfo.getList());
        return data;
    }

    /**
     * 领用登记
     * @param rt
     * @param request
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/distribute/received.action")
    public String received(Requisition rt,HttpServletRequest request){
        // 发放人
        String uname = (String)request.getSession().getAttribute("uname");
        rt.setRagent(uname);

        // 领用日期
        Date date = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        rt.setRtaketime(sdf.format(date));

        HashMap<String, Object> map = new HashMap<>();
        boolean result = requisitionService.received(rt);
        if (result) {
            map.put("success", true);
            map.put("msg", "登记成功!");
        } else {
            map.put("success", false);
            map.put("msg", "登记失败,库存不足或系统错误,请稍后重试!");
        }
        return JSON.toJSONString(map);
    }

    /**
     * 获取普通员工
     * @return
     */
    @RequestMapping(value = "/distribute/getUname.action")
    @ResponseBody
    public String getUname(){
        Map<String, Object> map = new HashMap<>();
        Integer utype = 0;
        List<User> list = indexService.getUname(utype);
        if (list != null) {
            map.put("success", true);
            map.put("data", list);
        } else {
            map.put("success", false);
        }
        return JSON.toJSONString(map);
    }

    /**
     * 发布领取任务
     * @param rt
     * @param request
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/distribute/give")
    public String give(Requisition rt,HttpServletRequest request){
        // 审核人
        String uname = (String)request.getSession().getAttribute("uname");
        rt.setRverifier(uname);

        // 任务发布日期(即申请日期)
        Date date = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        rt.setRapplytime(sdf.format(date));

        // 申请类型
        rt.setRtype("直接发放");

        // 时间戳,作为主键
        String rid = String.valueOf(date.getTime());
        rt.setRid(rid);

        // 申请进度
        rt.setRstatus("待领取");

        System.out.println(rt);

        HashMap<String, Object> map = new HashMap<>();
        boolean result = requisitionService.give(rt);
        if (result) {
            map.put("success", true);
            map.put("msg", "发布任务成功!");
        } else {
            map.put("success", false);
            map.put("msg", "发布任务失败,请稍后重试!");
        }
        return JSON.toJSONString(map);
    }
}

申领信息管理控制层: 

@Controller
@RequestMapping("/staff")
public class StaffController {

    @Resource
    private RequisitionService requisitionService;

    @RequestMapping(value = "/apply.html")
    public String apply() {
        return "/staff/apply.html";
    }

    /**
     * 查看申领信息,只能查看自己的
     * @param rv
     * @param request
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/apply/list")
    public DataGridViewResult applyList(RequisitionVo rv,HttpServletRequest request) {
        String uname = (String)request.getSession().getAttribute("uname");
        rv.setRtaker(uname);
        // 设置分页信息
        PageHelper.startPage(rv.getPage(), rv.getLimit());
        // 查询
        List<Requisition> list = requisitionService.findRequisitionList(rv);
        // 创建分页对象
        PageInfo<Requisition> pageInfo = new PageInfo<>(list);
        // 按接口要求返回数据
        DataGridViewResult data = new DataGridViewResult(pageInfo.getTotal(), pageInfo.getList());
        return data;
    }

    /**
     * 提交申请
     *
     * @param rt
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/apply/add")
    public String addPutinInfo(Requisition rt, HttpServletRequest request) {
        HashMap<String, Object> map = new HashMap<>();
        // 获取领用人
        String uname = (String) request.getSession().getAttribute("uname");
        rt.setRtaker(uname);

        // 生成时间戳,保证主键的唯一性
        Date date = new Date();
        String rid = String.valueOf(date.getTime());
        rt.setRid(rid);

        rt.setRstatus("申请中");
        rt.setRtype("申请发放");

        System.out.println(rt);
        boolean result = requisitionService.add(rt);
        if (result) {
            map.put("success", true);
            map.put("msg", "提交申请成功!");
        } else {
            map.put("success", false);
            map.put("msg", "提交申请失败,请稍后再试!");
        }
        return JSON.toJSONString(map);
    }

    /**
     * 撤销申请
     * @param rid
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/apply/revoke")
    public String revoke(@RequestParam("rid") String rid) {
        HashMap<String, Object> map = new HashMap<>();
        boolean result = requisitionService.revoke(rid);
        if (result) {
            map.put("success", true);
            map.put("msg", "撤销成功!");
        } else {
            map.put("success", false);
            map.put("msg", "撤销失败,请稍后重试!");
        }
        return JSON.toJSONString(map);
    }

    @RequestMapping(value = "/todo.html")
    public String todo(){
        return "/staff/todo.html";
    }

    /**
     * 待领取列表
     * @param rv
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/todo/list")
    public DataGridViewResult todoList(RequisitionVo rv,HttpServletRequest request){
        String uname = (String)request.getSession().getAttribute("uname");
        rv.setRtaker(uname);
        rv.setRstatus("待领取");
        // 设置分页信息
        PageHelper.startPage(rv.getPage(), rv.getLimit());
        // 查询
        List<Requisition> list = requisitionService.findRequisitionList(rv);
        // 创建分页对象
        PageInfo<Requisition> pageInfo = new PageInfo<Requisition>(list);
        // 按接口要求返回数据
        DataGridViewResult data = new DataGridViewResult(pageInfo.getTotal(), pageInfo.getList());
        return data;
    }
}

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

功能简介: 后台地址login.asp,用户admin,密码admin888,程序请使用新建网站或根目录下运行。 系统设置:powered by 25175.net 校区名称、校区名称 点负责人 物资管理员 (修改 删除 添加 分页) 机房名称、机房编号 所属校区 机房管理员 (修改 删除 添加 分页) 部门名称、部门名称 所属校区 负责人 (修改 删除 添加 分页) 办公室名称、办公室名称 所属校区 物资责任人 (修改 删除 添加 分页) 物资名称、建立分类,(添加,删除) 仓库设置、仓库名称 所属校区 仓库负责人 物资登记:系统仅对计算机及周边设备进行设计,产品属性:编号、配置清单、报修、借用、报损(整机报损,部件报损)、报废、登记时间、最后更新时间、最后操作用户名称、当前状态,如:正常、报修中、报损中等 信息搜索: 物资管理:能够全局管理物资。如:查看,修改,删除。 用户管理:添加、删除、编辑用户。可分为超级管理员,校区管理员,机房管理员、财务管理员。 超级管理员:具备所有管理权限 财务管理员:只具有查看所有信息权限 校区管理员:可以查看本构区物资信息,可以向超级管理员在线申请报修、借用、报损、报废。 机房管理员:可以查看所管辖机房物资信息,可以向校区管理员在线申请报修、借用、报损、报废。 其它功能:数据库备份,方便的表格打印功能,用户登陆系统日志功能,程序适用于各学校信息中心管理计算机相关设备
1、 解压后,拷贝到www服务器上, 2、 使用姓名为“田俊”的普通员工登录,密码都是123456,看看效果。 有3个功能: (1) 申领物品:申请领取物品 (2) 查询统计报表:可对姓名、物品、时间设置条件进行统计查询 (3) 修改自己密码:修改自己密码 3、 使用姓名为“总务”的审批领导登录,密码也是123456,看看效果。 有5个功能: (1) 申领物品:申请领取物品 (2) 向库中添加物品:向软件数据库中添加物品,可以单个添加,也可以批量添加。 (3) 查询统计报表:可对姓名、物品、时间设置条件进行统计查询 (4) 修改自己密码:修改自己密码 (5) 审批申领的物品:直接点选下面多选的框,如果不给通过,请注明原因,如果要修改申请数量,可以直接修改。选完后点击“确认选择”按钮 4、 使用姓名为“仓管”的物品发放员登录,密码也是123456,看看效果。 有5个功能: (1) 申领物品:申请领取物品 (2) 向库中添加物品:向软件数据库中添加物品,可以单个添加,也可以批量添加。 (3) 查询统计报表:可对姓名、物品、时间设置条件进行统计查询 (4) 修改自己密码:修改自己密码 (5) 发放经过审批通过的物品:直接点选下面多选的框,如果不给发放,请注明原因。选完后点击“确认选择”按钮 5、 使用姓名为“管理员”的系统管理员登录,密码也是123456,看看效果。 有7个功能: (1) 申领物品:申请领取物品 (2) 统计报表:可对姓名、物品、时间设置条件进行统计查询 (3) 修改密码:修改自己密码 (4) 添加员工:添加员工 (5) 初始化系统:当正式使用该系统时,可以选择此功能,清空所有测试的数据。 (6) 向库中添加物品:向软件数据库中添加物品,可以单个添加,也可以批量添加。 (7) 发放经过审批通过的物品:直接点选下面多选的框,如果不给发放,请注明原因。选完后点击“确认选择”按钮 6、 申领物品时,需要填写的申请信息,打“*”的为必填信息 7、 可以按姓名、物品、起止时间查询统计,也可以同时满足几个条件。注意时间格式。 8、 添加的已有的物品,也可添加新物品 9、 如果需要帮助,可QQ:717135211,电话:13814853616
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

qq1334611189

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

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

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

打赏作者

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

抵扣说明:

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

余额充值