京东投票项目


前言

首先要进行项目分析,理清楚做的步骤,做到条理清晰


一、文件结构

在这里插入图片描述

二、前端页面

1.首页

<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
    <meta name="viewport"
        content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <title>首页</title>

    <link rel="stylesheet" href="css/index.min.css">

    <script>
        ~function anonymous(window) {
            let computedREM = function computedREM() {
                let winW = document.documentElement.clientWidth,
                    desW = 640;
                if (winW >= desW) {
                    document.documentElement.style.fontSize = '100px';
                    return;
                }
                document.documentElement.style.fontSize = winW / desW * 100 + 'px';
            };
            computedREM();
            window.addEventListener('resize', computedREM);
        }(window);
    </script>
</head>

<body>
    <main class="mainBox">
        <header class="headerBox">
            <img src="" alt="" class="title">
            <a href="join.html" class="sign">我要参赛</a>
            <div class="search">
                <input type="search" placeholder="输入用户名查找">
                <a href="javascript:;" class="searchBtn">搜索</a>
            </div>
        </header>

        <section class="userList">
            <ul>
                <!--<li>
                <a href="detail.html?userId=0">
                    <img src="img/man.png" alt="" class="picture">
                    <p class="title">
                        <span>canfoo</span>
                        |
                        <span>编号 #001</span>
                    </p>
                    <p class="slogan">同一个世界同一个梦想同一个世界同一个梦想</p>
                </a>
                <div class="vote">
                    <span class="voteNum">7</span>
                    <a href="javascript:;" class="voteBtn">投他一票</a>
                </div>
            </li>-->
            </ul>
            <div class="tip">暂时没有匹配的数据</div>
        </section>
    </main>


    <script src="js/zepto.min.js"></script>
    <script src="js/axios.min.js"></script>
    <script src="js/axios_default.js"></script>
    <script src="js/component/nav.js"></script>
    <script src="js/index.js"></script>
</body>

</html>

2.登录页面

<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
    <meta name="viewport"
        content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <title>登录</title>

    <link rel="stylesheet" href="css/register.min.css">

    <script>
        ~function anonymous(window) {
            let computedREM = function computedREM() {
                let winW = document.documentElement.clientWidth,
                    desW = 640;
                if (winW >= desW) {
                    document.documentElement.style.fontSize = '100px';
                    return;
                }
                document.documentElement.style.fontSize = winW / desW * 100 + 'px';
            };
            computedREM();
            window.addEventListener('resize', computedREM);
        }(window);
    </script>
</head>

<body>
    <main class="mainBox">
        <header class="headerBox">
            <img src="" alt="">
        </header>
        <section class="registerBox">
            <div class="item">
                <h3>用户名:</h3>
                <input type="text" id="userName" placeholder="请填写您的真实姓名或者手机号码">
                <span></span>
            </div>
            <div class="item">
                <h3>密码:</h3>
                <input type="password" id="userPass" placeholder="由6~12位数字和字母组成">
                <span></span>
            </div>
            <a href="javascript:;" class="submit" id="submit">确认登录</a>
        </section>
    </main>


    <script src="js/zepto.min.js"></script>
    <script src="js/axios.min.js"></script>
    <script src="js/axios_default.js"></script>
    <script src="js/md5.min.js"></script>
    <script src="js/component/utils.js"></script>
    <script src="js/component/nav.js"></script>
    <script src="js/login.js"></script>
</body>

</html>

3.注册页面

<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
    <meta name="viewport"
        content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <title>注册</title>

    <link rel="stylesheet" href="css/register.min.css">

    <script>
        ~function anonymous(window) {
            let computedREM = function computedREM() {
                let winW = document.documentElement.clientWidth,
                    desW = 640;
                if (winW >= desW) {
                    document.documentElement.style.fontSize = '100px';
                    return;
                }
                document.documentElement.style.fontSize = winW / desW * 100 + 'px';
            };
            computedREM();
            window.addEventListener('resize', computedREM);
        }(window);
    </script>
</head>

<body>
    <main class="mainBox">
        <!--nav-->
        <nav class="navBox">
            <a href="index.html">首页</a>
            <a href="javascript:;">登录</a>
            <a href="javascript:;">注册</a>
            <a href="detail.html"></a>
            <a href="javascript:;">退出</a>
        </nav>

        <header class="headerBox">
            <img src="" alt="">
        </header>

        <section class="registerBox">
            <div class="item">
                <h3>用户名:</h3>
                <input type="text" id="userName" placeholder="请填写您的真实姓名">
                <span id="spanName"></span>
            </div>
            <div class="item">
                <h3>手机号码:</h3>
                <input type="tel" id="userPhone" placeholder="请填写您常用的手机号">
                <span id="spanPhone"></span>
            </div>
            <div class="item">
                <h3>密码:</h3>
                <input type="password" id="userPass" placeholder="由6~12位数字和字母组成">
                <span id="spanPass"></span>
            </div>
            <div class="item">
                <h3>确认密码:</h3>
                <input type="password" id="userPassConfirm" placeholder="">
                <span id="spanPassConfirm"></span>
            </div>
            <div class="item">
                <h3>自我描述:</h3>
                <textarea id="userBio" placeholder="限制在10~100字之间"></textarea>
                <span id="spanBio"></span>
            </div>
            <div class="item">
                <h3>性别:</h3>
                <input type="radio" id="man" name="sex" checked>
                <label for="man"></label>

                <input type="radio" id="woman" name="sex">
                <label for="woman"></label>
            </div>
            <a href="javascript:;" class="submit" id="submit">提交注册信息</a>
        </section>
    </main>

</body>

</html>

4.个人信息页面

<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
    <meta name="viewport"
        content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <title>个人信息</title>

    <link rel="stylesheet" href="css/detail.min.css">

    <script>
        ~function anonymous(window) {
            let computedREM = function computedREM() {
                let winW = document.documentElement.clientWidth,
                    desW = 640;
                if (winW >= desW) {
                    document.documentElement.style.fontSize = '100px';
                    return;
                }
                document.documentElement.style.fontSize = winW / desW * 100 + 'px';
            };
            computedREM();
            window.addEventListener('resize', computedREM);
        }(window);
    </script>
</head>

<body>
    <main class="mainBox">
        <!--nav-->
        <nav class="navBox">
            <a href="index.html">首页</a>
            <a href="javascript:;">登录</a>
            <a href="javascript:;">注册</a>
            <a href="detail.html"></a>
            <a href="javascript:;">退出</a>
        </nav>

        <header class="headerBox">
            <div class="userInfo">
                <img src="" alt="" class="picture">
                <p class="info">
                    <span>canfoo</span>
                    |
                    <span>编号 #000</span>
                </p>
                <p class="bio">...</p>
                <div class="vote">7</div>
            </div>
            <div class="slogan">同一个世界同一个梦想,同一个世界同一个梦想同一个世界同一个梦想</div>
            <a href="javascript:;" class="voteBtn">投他一票</a>
        </header>

        <section class="voteList" id="voteMy">
            <div class="title clearfix">
                <div class="left">
                    <span></span>
                    <span></span>
                </div>
                <div class="center">投递我的人员</div>
                <div class="right">
                    <span></span>
                    <span></span>
                </div>
            </div>
            <ul class="list">
                <li>
                    <a href="detail.html?userId=0">
                        <img src="" alt="" class="picture">
                        <p class="title">canfoo</p>
                        <p class="bio">...</p>
                    </a>
                    <div class="vote">
                        <span class="voteNum">7</span>
                        <a href="javascript:;" class="voteBtn">投他一票</a>
                    </div>
                </li>
            </ul>
        </section>

        <section class="voteList" id="myVote">
            <div class="title clearfix">
                <div class="left">
                    <span></span>
                    <span></span>
                </div>
                <div class="center">我投递的人员</div>
                <div class="right">
                    <span></span>
                    <span></span>
                </div>
            </div>
            <ul class="list">
                <li>
                    <a href="detail.html?userId=0">
                        <img src="" alt="" class="picture">
                        <p class="title">canfoo</p>
                        <p class="bio">...</p>
                    </a>
                    <div class="vote">
                        <span class="voteNum">7</span>
                        <a href="javascript:;" class="voteBtn">投他一票</a>
                    </div>
                </li>
            </ul>
        </section>
    </main>
</body>

</html>

5.参赛页面

<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
    <meta name="viewport"
        content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <title>参加比赛</title>

    <link rel="stylesheet" href="css/register.min.css">

    <script>
        ~function anonymous(window) {
            let computedREM = function computedREM() {
                let winW = document.documentElement.clientWidth,
                    desW = 640;
                if (winW >= desW) {
                    document.documentElement.style.fontSize = '100px';
                    return;
                }
                document.documentElement.style.fontSize = winW / desW * 100 + 'px';
            };
            computedREM();
            window.addEventListener('resize', computedREM);
        }(window);
    </script>
</head>

<body>
    <main class="mainBox">
        <!--nav-->
        <nav class="navBox">
            <a href="index.html">首页</a>
            <a href="javascript:;">登录</a>
            <a href="javascript:;">注册</a>
            <a href="detail.html"></a>
            <a href="javascript:;">退出</a>
        </nav>

        <header class="headerBox">
            <img src="" alt="">
        </header>

        <section class="registerBox">
            <div class="item">
                <h3>参赛标语:</h3>
                <textarea placeholder="限制字数在10~100字以内 [一但输入就不能更改了哦]" style="line-height: .4rem; height: 3rem;"
                    id="slogan"></textarea>
                <span id="spanSlogan"></span>
            </div>
            <a href="javascript:;" class="submit" id="submit">确认参赛</a>
        </section>
    </main>

</body>

</html>

二、后端

1.index.js

let matchRender = (function ($) {
    let $userList = $('.userList'), $wrapper = $userList.find('ul'), $tip = $userList.find('.tip'),
        $headerBox = $('.headerBox'), $searchBtn = $headerBox.find('.searchBtn')

    let limit = 10,// 每页展示的数量
        page = 1,// 当前是第几页
        pageNum = 1,//总页数
        total = 1,// 总条数
        search = '',// 搜索的内容
        isRun = false// 是否正在加载最新数据

    // 获取数据
    let queryData = function queryData() {
        return axios.get('/getMatchList', {
            params: {
                limit, page, search
            }
        }).then(result => {
            pageNum = parseFloat(result['pageNum'])
            total = parseFloat(result['total'])
            return result
        }).then(bindHTML)
    }

    // 数据绑定
    let bindHTML = function bindHTML(result) {
        let { code, list = [] } = result
        if (parseFloat(code) !== 0) {
            // 获取数据失败,获取的数据不是我们想要的,非状态码的失败
            if (parseFloat(code) !== 0) {
                $wrapper.css('display', 'none')
                $tip.css('display', 'block')
                return
            }
            // 成功绑定数据
            $wrapper.css('display', 'block')
            $tip.css('display', 'none')

            let $frg = $(document.createDocumentFragment())

            lis.forEach((item, index) => {
                let { id, name, picture, sex, matchId, slogan, voteNum, isVote } = item
                $frg.append(
                    `<li>
                <a href="detail.html?userId=${id}">
                    <img src="${picture}" alt="${name}" class="picture">
                    <p class="title">
                        <span>${name}</span>
                        |
                        <span>编号 #${matchId}</span>
                    </p>
                    <p class="slogan">${slogan}</p>
                </a>
                <div class="vote">
                    <span class="voteNum">${voteNum}</span>
                    ${parseFloat(isVote) === 0 ? `<a href="javascript:;" class="voteBtn">投他一票</a>` : ``}
                </div>
            </li>`)
            });
            $wrapper.append($frg)
            $frg = null
            // 最新数据加载完成
            isRun = false
        }
    }

    return {
        init: function init() {
            // 展示第一页的内容
            queryData()

            // 下拉加载更多数据
            $(window).on('scroll', () => {
                let { clientHeight, scrollTop, scrollHeight } = document.documentElement
                if ((clientHeight + scrollTop + 200) >= scrollHeight) {
                    // 即将到达页面底部,加载更多数据
                    if (isRun) return
                    if (page >= pageNum) return
                    isRun = true
                    page++
                    queryData()
                }
            })

            // 点击搜索
            $searchBtn.tap(() => {
                isRun = true

                search = $searchBtn.prev('input').val().trim()
                page = 1
                $wrapper.html('')
                queryData()
            })
        }
    }
})(Zepto)

matchRender.init()

2.login.js

let loginRender = (function ($) {
    let $userName = $('#userName'),
        $userPass = $('#userPass'),
        $submit = $('#submit');


    let fromURL = utils.queryURLParams()['fromURL'];
    fromURL ? fromURL = decodeURIComponent(fromURL) : fromURL = 'index.html';

    let submitFn = function submitFn() {
        //=>可以验证输入的格式是否符合要求,如果不符合要求,没必要发送请求
        axios.post('/login', {
            name: $userName.val().trim(),
            //=>HEX_MD5把一个字符串进行MD5加密处理
            password: hex_md5($userPass.val().trim())
        }).then(result => {
            let code = parseFloat(result.code);
            if (code === 0) {
                //=>登录成功
                // window.location.href = fromURL;
                return;
            }
            alert('请检查用户名密码,登录失败了!');
        });
    };

    return {
        init: function init() {
            $submit.tap(submitFn);
        }
    }
})(Zepto);
loginRender.init();

总结

有些文件太大,希望可以自己写
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue京东商城项目实战是一个基于Vue.js开发的实际项目,旨在帮助开发者学习和实践Vue.js框架的使用。该项目的目标是搭建一个类似于京东商城的电商网站,涵盖了商品展示、购物车、订单管理等功能模块。 在这个项目中,你可以学习到如何使用Vue.js的核心概念,包括组件化、路由、状态管理等。同时,你还可以了解到常见的电商网站开发流程和技术选型。 具体来说,你可以按照以下步骤进行Vue京东商城项目实战: 1. 设计项目架构:确定项目的目录结构和模块划分,选择合适的UI框架(如Element UI)。 2. 构建商品展示页面:通过API获取商品数据,使用Vue组件展示商品列表,支持商品搜索和筛选功能。 3. 实现购物车功能:使用Vuex管理购物车数据,实现添加、删除和更新购物车商品的功能,并计算购物车总价。 4. 完善用户登录与注册:设计用户登录和注册页面,使用Vue Router实现页面跳转和权限控制。 5. 实现订单管理:创建订单页面,支持用户下单、查看订单详情等功能。 6. 集成支付功能:使用第三方支付平台的SDK,实现用户支付功能。 7. 优化和部署:对项目进行性能优化,如代码分割、懒加载等,并将项目部署到服务器上。 通过完成这个项目,你可以对Vue.js的开发流程和技巧有更深入的了解,并且掌握基于Vue.js开发实际项目的能力。希望对你有帮助!如果有更多问题,请继续提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值