router

router.post('/user/addAddress', initMiddleware, userauthMiddleware, controller.default.address.addAddress);

model

module.exports = app => {
    const mongoose = app.mongoose;
    const Schema = mongoose.Schema;

    const d = new Date();

    const AddressSchema = new Schema({
        uid: { type: Schema.Types.ObjectId },
        name: { type: String },
        phone: { type: Number },
        address: { type: String },
        zipcode: { type: String },
        default_address: { type: Number, default: 1 },
        add_time: {
            type: Number,
            default: d.getTime(),
        },
    });

    return mongoose.model('Address', AddressSchema, 'address');
};

controller

增加地址

app/controller/default/address.js
    async addAddress() {
        const uid = this.ctx.service.cookies.get('userinfo')._id;
        const name = this.ctx.request.body.name;
        const phone = this.ctx.request.body.phone;
        const address = this.ctx.request.body.address;
        const zipcode = this.ctx.request.body.zipcode;
        const addressCount = await this.ctx.model.Address.find({ uid }).count();
        if (addressCount > 20) {
            this.ctx.body = {
                success: false,
                result: '增加收货地址失败 收货地址数量超过限制',
            };
        } else {
            await this.ctx.model.Address.updateMany({ uid }, { default_address: 0 });
            const addressModel = new this.ctx.model.Address({ uid, name, phone, address, zipcode });
            await addressModel.save();
            const addressList = await this.ctx.model.Address.find({ uid }).sort({ default_address: -1 });
            this.ctx.body = {
                success: true,
                result: addressList,
            };
        }
    }

显示地址

app/controller/default/buy.js
    async checkout() {


            // 获取购物车选中的商品

            const orderList = [];
            let allPrice = 0;
            const cartList = this.service.cookies.get('cartList');


            if (cartList && cartList.length > 0) {

                for (let i = 0; i < cartList.length; i++) {

                    if (cartList[i].checked) {
                        orderList.push(cartList[i]);

                        allPrice += cartList[i].price * cartList[i].num;
                    }

                }

                // 获取当前用户的所有收货地址

                const uid = this.ctx.service.cookies.get('userinfo')._id;
                const addressList = await this.ctx.model.Address.find({ uid }).sort({ default_address: -1 });


                await this.ctx.render('default/checkout.html', {
                    orderList,
                    allPrice,
                    addressList,
                });

            } else {
                // 恶意操作
                this.ctx.redirect('/cart');
            }


        }

view

app/view/default/checkout.html
                <div id="addressList">


                    <%for(var i=0;i<addressList.length;i++){%>

                        <div class="address-item J_addressItem  <%if(addressList[i].default_address){%>selected <%}%>" data-id="<%=addressList[i]._id%>" data-name="<%=addressList[i].name%>" data-phone="<%=addressList[i].phone%>" data-address="<%=addressList[i].address%>">

                            <dl>
                                <dt> <em class="uname"><%=addressList[i].name%></em> </dt>
                                <dd class="utel">
                                    <%=addressList[i].phone%>
                                </dd>
                                <dd class="uaddress">
                                    <%=addressList[i].address%>
                                </dd>
                            </dl>

                            <div class="actions" data-id="<%=addressList[i]._id%>">
                                <a href="javascript:void(0);" class="modify addressModify">修改</a>
                            </div>
                        </div>
                        <%}%>

                </div>
    <script>
        $(function() {



            $('#addAddressButton').click(function() {


                var name = $('#add_name').val();
                var phone = $('#add_phone').val();
                var address = $('#add_address').val();
                var zipcode = $('#add_zipcode').val();

                //判断格式是否正确  -自己完善
                if (name == '' || phone == "" || address == "") {

                    alert('格式不正确')
                    return false;
                }
                //csrf
                $.post('/user/addAddress', {
                    name: name,
                    phone: phone,
                    address: address,
                    zipcode: zipcode
                }, function(response) {


                    console.log(response);


                    var addressList = response.result;

                    var str = '';

                    if (response.success == true) {

                        for (var i = 0; i < addressList.length; i++) {

                            if (addressList[i].default_address) {

                                str += '<div class="address-item J_addressItem selected" data-id="' + addressList[i]._id + '" data-name="' + addressList[i].name + '" data-phone="' + addressList[i].phone + '" data-address="' + addressList[i].address + '" > ';
                                str += '<dl>';
                                str += '<dt> <em class="uname">' + addressList[i].name + '</em> </dt>';
                                str += '<dd class="utel">' + addressList[i].phone + '</dd>';
                                str += '<dd class="uaddress">' + addressList[i].address + '</dd>';
                                str += '</dl>';

                                str += '<div class="actions">';
                                str += '<a href="javascript:void(0);" data-id="' + addressList[i]._id + '" class="modify addressModify">修改</a>';
                                str += '</div>';
                                str += '</div>';

                            } else {

                                str += '<div class="address-item J_addressItem" data-id="' + addressList[i]._id + '" data-name="' + addressList[i].name + '" data-phone="' + addressList[i].phone + '" data-address="' + addressList[i].address + '" > ';
                                str += '<dl>';
                                str += '<dt> <em class="uname">' + addressList[i].name + '</em> </dt>';
                                str += '<dd class="utel">' + addressList[i].phone + '</dd>';
                                str += '<dd class="uaddress">' + addressList[i].address + '</dd>';
                                str += '</dl>';

                                str += '<div class="actions">';
                                str += '<a href="javascript:void(0);" data-id="' + addressList[i]._id + '" class="modify addressModify">修改</a>';
                                str += '</div>';
                                str += '</div>';

                            }

                        }

                        //增加

                        $("#addressList").html(str);


                    } else {
                        alert('增加失败');
                    }





                    $('#addAddress').modal('hide');

                })

            })

        })
    </script>

效果

clipboard.png

clipboard.png


渣渣辉
1.3k 声望147 粉丝

引用和评论

0 条评论