微信小程序餐厅点餐项目源码

我们经常在外面餐厅吃饭会发现现在还多餐厅桌子上都会有个小程序二维码,我们点餐的时候直接扫码就可以点餐支付。今天闲来没事花了一个早上的时间做了一个,可以实现扫码点餐,统计商品和计算价钱,支付功能(ps:接口没有和后端对接)。

最新百度也在搞小程序,淘宝也有小程序,包括国内各大厂商也在搞类小程序的轻应用,就是绑定在手机上的,直接点击就可以进去,不需要下载,国外也有PWA等等,

感觉小程序扫码直接使用,用完就走以后会是一个趋势。毕竟微信这么大的用户基数,,而且腾讯也一直在不断的更新微信小程序的功能,感觉会在这方面下大工夫,所以最近也在打算深入了解小程序开发,话扯多了。。。。直接上代码~!

码云项目地址: 点击这里进入

部分效果图如下:
这里写图片描述
这里写图片描述
这里写图片描述

代码如下:

首页代码:

<!--index.wxml-->
<view class="container">
  <view class="aside">
    <view class="{{tabIndex === index ? 'menu active' : 'menu'}}" wx:for="{{menus}}" wx:key="{{item.id}}" data-index="{{index}}" bindtap='tabMenu'>{{item.menu}}
    </view>
  </view>
  <view class="item-content">
    <view class="{{orderCount.num === 0 ? 'box' : 'box active'}}">
      <view class="item" wx:for="{{items}}" wx:key="{{item.id}}">
        <image src="image/item-m.jpg"></image>
        <text class="title">{{item.title}}</text>
        <text class="price">¥ {{item.price}} 元</text>
        <text class="{{item.active ? 'btn active' : 'btn'}}" bindtap='addOrder' data-id="{{item.id}}" data-index="{{index}}">添加</text>
      </view>
    </view>
  </view>
  <view class="{{bottomFlag ? 'bottom-bar' : 'bottom-bar hidden'}}">
    <view class="count">
        共 <text class="num">{{orderCount.num}} 件</text>     
        合计 <text class="num">{{orderCount.money}} 元</text> 
    </view>
    <view class="btn">
        <text bindtap='card'>购物车</text>
    </view>
  </view>
</view>

//index.js
//获取应用实例
const app = getApp()

Page({
  data: {
    tabIndex: 0,
    // 统计商品数量和价格
    orderCount: {
      num: 0,
      money: 0
    },
    bottomFlag: false,
    // 提交的订单
    orders: true,
    menus: [{
      id: 1,
      menu: '菜单一'
    }, {
      id: 1,
      menu: '菜单一'
    }, {
      id: 1,
      menu: '菜单一'
    }, {
      id: 1,
      menu: '菜单二'
    }, {
      id: 1,
      menu: '菜单三'
    }, {
      id: 1,
      menu: '菜单四'
    }, {
      id: 1,
      menu: '菜单五'
    }, {
      id: 1,
      menu: '菜单五'
    }, {
      id: 1,
      menu: '菜单五'
    }, {
      id: 1,
      menu: '菜单五'
    }, {
      id: 1,
      menu: '菜单五'
    }, {
      id: 1,
      menu: '菜单五'
    }, {
      id: 1,
      menu: '菜单五'
    }, {
      id: 1,
      menu: '菜单五'
    }, {
      id: 1,
      menu: '菜单五'
    }, {
      id: 1,
      menu: '菜单五'
    }],
    // 商品列表
    items: [{
      id: 1,
      title: '湖南辣椒小炒肉1',
      price: 12,
      active: false,
      num: 1
    }, {
      id: 2,
      title: '湖南辣椒小炒肉2',
      price: 13,
      active: false,
      num: 1
    }, {
      id: 3,
      title: '湖南辣椒小炒肉3',
      price: 14,
      active: false,
      num: 1
    }, {
      id: 4,
      title: '湖南辣椒小炒肉4',
      price: 15,
      active: false,
      num: 1
    }, {
      id: 5,
      title: '湖南辣椒小炒肉5',
      price: 16,
      active: false,
      num: 1
    }, {
      id: 6,
      title: '湖南辣椒小炒肉5',
      price: 17,
      active: false,
      num: 1
    }, {
      id: 7,
      title: '湖南辣椒小炒肉5',
      price: 18,
      active: false,
      num: 1
    }]
  },
  // 下拉刷新
  onPullDownRefresh: function () {
    setTimeout(()=>{
      wx.showToast({
        title: '成功加载数据',
        icon: 'success',
        duration: 500
      });
      wx.stopPullDownRefresh()
    }, 500);
  },
  tabMenu: function(event) {
    let index = event.target.dataset.index;
    this.setData({
      tabIndex: index
    });
  },
  // 点击去购物车结账
  card: function() {
    let that = this;
    // 判断是否有选中商品
    if (that.data.orderCount.num !== 0) {
      // 跳转到购物车订单也
      wx.redirectTo({
        url: '../order/order'
      });
    } else {
      wx.showToast({
        title: '您未选中任何商品',
        icon: 'none',
        duration: 2000
      })
    }
  },
  addOrder: function(event) {
    let that = this;
    let id = event.target.dataset.id;
    let index = event.target.dataset.index;
    let param = this.data.items[index];
    let subOrders = []; // 购物单列表存储数据
    param.active ? param.active = false : param.active = true;
    // 改变添加按钮的状态
    this.data.items.splice(index, 1, param);
    that.setData({
      items: this.data.items
    });
    // 将已经确定的菜单添加到购物单列表
    this.data.items.forEach(item => {
      if (item.active) {
        subOrders.push(item);
      }
    });
    // 判断底部提交菜单显示隐藏
    if (subOrders.length == 0) {
      that.setData({
        bottomFlag: false
      });
    } else {
      that.setData({
        bottomFlag: true
      });
    }
    let money = 0;
    let num = subOrders.length;
    subOrders.forEach(item => {
      money += item.price; // 总价格求和
    });
    let orderCount = {
      num,
      money
    }
    // 设置显示对应的总数和全部价钱
    this.setData({
      orderCount
    });
    // 将选中的商品存储在本地
    wx.setStorage({
      key: "orders",
      data: subOrders
    });
  },
  onLoad: function() {

  }
})

购物车结账代码:

<!--index.wxml-->
<view class="container">
  <view class="item-content">
    <view class="box">
      <view class="item" wx:for="{{items}}" wx:key="{{item.id}}">
        <image src="image/item-m.jpg"></image>
        <text class="title">{{item.title}}</text>
        <text class="price">¥ {{item.price}} 元</text>
        <view class="opera">
          <text class="btn" bindtap="add" data-id="{{item.id}}" data-index="{{index}}">+</text>
          <text class="num">{{item.num}}</text>
          <text class="btn" bindtap="del" data-id="{{item.id}}" data-index="{{index}}">-</text>
        </view>
      </view>
    </view>
  </view>
  <view class="bottom-bar">
    <view class="count">
        共 <text class="num">{{orderCount.num}} 件</text>     
        合计 <text class="num">{{orderCount.money}} 元</text> 
    </view>
    <view class="btn">
        <text bindtap='pay'>结账</text>
    </view>
  </view>
</view>

//index.js
//获取应用实例
const app = getApp()

Page({
  data: {
    // 统计商品数量和价格
    orderCount: {
      num: 0,
      money: 0
    },
    bottomFlag: false,
    // 提交的订单
    orders: true,
    items: []
  },
  // 点击对应菜单添加按钮
  del: function (event) {
    let that = this;
    let id = event.target.dataset.id;
    let index = event.target.dataset.index;
    let param = this.data.items[index];
    if(param.num > 0){
      param.num--; // 每点一次减少1
    } else {
      param.num = 0; // 最低为0
    }
    // 改变添加按钮的状态
    this.data.items.splice(index, 1, param);
    that.setData({
      items: this.data.items
    });
    let money = 0;
    let num = 0;
    // 将已经确定总价格和数量求和
    this.data.items.forEach(item => {
      money += item.price * item.num;
      num += item.num;
    });
    let orderCount = {
      num,
      money
    }
    // 设置显示对应的总数和全部价钱
    this.setData({
      orderCount
    });
  },
  // 点击对应菜单添加按钮
  add: function(event) {
    let that = this;
    let id = event.target.dataset.id;
    let index = event.target.dataset.index;
    let param = this.data.items[index];
    let subOrders = []; // 购物单列表存储数据
    param.num++; // 每点一次增加1
    // 改变添加按钮的状态
    console.log(param);
    this.data.items.splice(index, 1, param);
    that.setData({
      items: this.data.items
    });
    let money = 0;
    let num = 0;
    // 将已经确定总价格和数量求和
    this.data.items.forEach(item => {
      money += item.price*item.num;
      num += item.num; 
    });
    let orderCount = {
      num,
      money
    }
    // 设置显示对应的总数和全部价钱
    this.setData({
      orderCount
    });
  },
  // 点击结账按钮
  pay: function() {
    let that = this;
    let str = '选中' + that.data.orderCount.num + '件商品,共' + that.data.orderCount.money + '元,是否要支付?'
    wx.showModal({
      title: '提示',
      content: str,
      success: function (res) {
        // 至少选中一个商品才能支付
        if (that.data.orderCount.num !== 0){
          if (res.confirm) {
            // 打开扫码功能
            wx.scanCode({
              onlyFromCamera: true,
              success: (res) => {
                wx.redirectTo({
                  url: '../pay/pay'
                });
              }
            });
          } else if (res.cancel) {
            console.log('用户点击取消')
          }
        } else {
          wx.showToast({
            title: '您未选中任何商品',
            icon: 'none',
            duration: 2000
          })
        }
      }
    })
  },
  onLoad: function() {
    let that = this;
    // 取出订单传过来的数据
    wx.getStorage({
      key: 'orders',
      success: function (res) {
        that.setData({
          items: res.data
        });
        // 价格统计汇总
        let money = 0;
        let num = res.data.length;
        res.data.forEach(item => {
          money += (item.price*item.num); // 总价格求和
        });
        let orderCount = {
          num,
          money
        }
        // 设置显示对应的总数和全部价钱
        that.setData({
          orderCount
        });
      }
    })
  }
})

支付成功代码:

<view class="contaner">
  <view class="info">
    <icon type="success" size="80" color="green"/>
    <text>支付成功!</text>
  </view>
  <view class="info img">
    <image src="image/code.png" />
  </view>
</view>
// pages/pay/pay.js
Page({

  /**
   * 页面的初始数据
   */
  data: {
  
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    // 支付成功震动
    wx.vibrateLong({success: function(){
      console.log('zhendong');
    }});
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {
  
  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {
  
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {
  
  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {
  
  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {
  
  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {
  
  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {
  
  }
})
### 回答1: 小程序开发是一种基于微信平台的应用开发方式,可以通过微信的小程序平台进行开发和发布。小程序开发具有轻量、便捷、高效等特点,可以实现各种功能,例如点餐、购物、社交等。 在小程序开发中,点餐是一个常见的应用场景。通过小程序,用户可以在手机上直接选择食物、下单支付,实现线上点餐的便利和快捷。开发人员可以利用小程序提供的API和组件,实现点餐功能的设计与开发。具体开发流程包括需求分析、界面设计、业务逻辑编写、数据交互等,可以采用前端技术如HTML、CSS、JavaScript进行开发。 Git是一个分布式版本控制系统,用于管理和追踪代码的变化。在小程序开发中,Git可以帮助开发人员更好地组织和管理代码。通过Git,开发人员可以创建代码库、提交代码、分支管理、合并代码等操作,方便团队协作和版本控制。 在小程序开发中使用Git可以带来以下好处: 1. 版本控制:Git可以记录代码的版本历史,开发人员可以轻松回溯和管理代码,方便排查问题。 2. 分支管理:Git支持分支操作,每个开发人员可以在独立的分支上进行开发,减少冲突和代码混乱。 3. 团队协作:Git支持团队协作,多人可以同时修改代码,避免冲突和代码丢失。 4. 远程仓库:Git可以将代码推送到远程仓库,方便代码的备份和共享。 综上所述,小程序开发和Git在应用开发中起到了重要的作用,小程序开发可以实现各种功能,例如点餐等,而Git可以帮助开发人员更好地管理和追踪代码的变化。这两者的结合可以提升开发效率和团队协作能力。 ### 回答2: 小程序开发是指通过开发微信小程序平台来创建和发布小程序的过程。小程序开发可以通过微信开发者工具进行,开发者可以使用HTML、CSS、JavaScript等前端技术进行开发。小程序开发的目的是为了提供给用户一种无需下载安装即可使用的移动应用体验。 点餐是指在餐馆或外卖平台上,通过选取菜单中的菜品和数量,进行下单的过程。点餐方式多样化,除了传统的线下点餐外,现在也可以通过小程序进行点餐。用户可以通过小程序浏览菜单、选择菜品和数量,并进行下单支付等操作。小程序点餐具有方便、快捷、实时更新等优点,为用户提供了更好的用餐体验。 Git是一种分布式版本控制系统,它具有追踪文件变化、管理分支、多人协作等功能。在小程序开发和点餐过程中,Git可以用来管理代码版本,方便开发者进行团队合作和代码的追踪和管理。 在小程序开发中,使用Git可以帮助开发者进行代码的版本管理,保证项目的稳定和安全。通过Git可以轻松地创建、合并、切换分支,方便开发者进行不同功能的开发和测试,同时也可以保留历史版本,便于追溯和回退。 对于点餐来说,Git可以用来管理菜单、订单等数据的变化。当菜单进行调整或者订单有变动时,可以通过Git记录变更情况,并在需要的时候进行回滚操作,保证数据的准确性和一致性。 总而言之,小程序开发和点餐过程中,Git的使用可以提升开发效率和团队协作效果,保证项目的稳定和数据的安全。同时,Git也为开发者提供了操作历史版本的便利,方便追溯和管理。 ### 回答3: 小程序开发是一种手机应用程序的开发方式,它允许开发者在微信等平台上开发出轻量级、低成本的应用。相比于传统的APP开发,小程序开发具有更快的开发周期和更低的开发成本,也更容易推广和传播。 点餐小程序开发中一个常见的应用场景。通过小程序,用户可以在手机上浏览菜单、选择菜品、下单,并且实现在线支付等功能。相比于传统的线下点餐方式,小程序点餐具有更快捷、更便利的特点。同时,小程序还可以根据用户的个性化需求,提供推荐菜品、订单跟踪等个性化服务。 Git是一种分布式版本控制系统,它经常用于团队协作开发。在小程序开发中,Git可以起到优化开发流程、提高团队协作效率的作用。通过Git,开发者可以创建代码库,实现代码的版本管理、分支管理等功能。同时,Git还能够记录代码的修改历史,帮助开发者追踪问题和解决冲突。 在小程序开发中,使用Git可以帮助团队成员协同开发,减少代码冲突和重复工作的发生。通过分支管理,可以为不同的功能或任务创建独立的分支,开发者可以在自己的分支上独立开发,最后再合并到主分支上。通过提交代码和代码合并,开发者可以实时了解团队各成员的开发进度和代码质量。 总而言之,小程序开发点餐功能需要借助Git等工具来优化开发流程和提高团队协作效率,从而实现快速开发、高效推出的小程序点餐应用。
评论 32
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值