商家如何自己零成本免费制作点餐小程序项目完整源码

news2024/11/23 18:30:27

现在点餐小程序成为餐饮店的标配,顾客只要扫码,即可进入小程序点餐。顾客付款后,后厨自动打印出订单并开始制作。整个过程非常方便流畅,甚至还可以免去收银(或服务)人员。那么,这种餐饮小程序要如何搭建呢?找小程序开发商还是商家自己搭建呢?

外卖行业近几年发展迅猛,微信平台也成为其中的一个主力军,小程序的横空出世,让不少微信外卖平台加入其中,纷纷开发了自己的餐厅点餐小程序

餐厅点餐小程序功能非常方便,对于用户来讲,操作如下:
1.打开自己的微信账号,选择【小程序】
2.点击【小程序】进入,进入餐厅点餐小程序系统
3.选择这家餐厅之后,进入微信授权界面,选择允许
4.进入店内之后,选择外卖字样,可以看到这家店的详细地址和详细联系电话以及营业时间,还有商家的环境
5.选择外卖的界面之后,在左边有一个列表是大分类:如热销、优惠、套餐、主食、配菜、饮料等等
6.点击选择规格之后进入选项中口味的选择:选择好之后【加入购物车】
7.选择【加入购物车】,如何没有其他需要点餐的就可以直接点击【选好了】,还需要选择其他外卖的话都一致加入购物车
8.最后在想【选好了】点击进入【订单提交】,添加好收货地址之后、收货人、联系电话进去付款即可。可选择填写备注,比如口味、偏好等
微信小程序餐厅点餐界面截图,所有数据都是通过后台设置上传。

菜单界面代码逻辑

<view class="section">
    <!-- 左侧类型 -->
    <scroll-view scroll-y="true" class="left">
        <view wx:for="{{types}}" wx:key="typeId" data-type-id="{{item.typeId}}" bindtap="tapType" class="{{item.typeId == currType ? 'active' : ''}}" style="font-size:33rpx">
            {{item.name}}
        </view>
    </scroll-view>

    <!-- 右侧数据 -->
    <scroll-view scroll-y="true" class="right">
        <view class="typeTree">
           
                <view  class="brand" wx:for="{{typeTree}}" wx:for-item="data">
                    <navigator url="{{data.pic}}"  wx:key="typeId" class="item">
                        <image src="{{data.pic}}"></image>
                        <text>{{data.name}}</text>
                    </navigator>
                    
                </view>
         
        </view>
    </scroll-view>
</view>
// import ApiList from  '../../config/api';
// import request from '../../utils/request.js';

Page({
    data: {
        // types: null,
        typeTree: {},       // 数据缓存
          currType: 0 ,
            // 当前类型
     "types": [
            {
                "name":"热销产品",
               "typeId":"0",
            },   
            {
          
                "name":"人气产品",
               "typeId":"1",
            },
            {
                "name":"店家推荐",
               "typeId":"2",
            }, 
        ],
     "typeTree": [
        ],


    },
    onLoad (){
        var me = this;
        request({
            url: ApiList.goodsType,
            success: function (res) {
                me.setData({
                    types: res.data.data
                });
            }
        });
  this.getTypeTree(this.data.currType);
    },
 tapType(e){
   const currType = e.currentTarget.dataset.typeId;
        this.setData({
            currType: currType
        });
        this.getTypeTree(currType);
    },
    // 加载二级类目数据
    getTypeTree (currType) {
        const me = this, _data = me.data;
        if(!_data.typeTree[currType]){
            request({
                url: ApiList.goodsTypeTree,
                data: {typeId: +currType},
                success: function (res) {
                    _data.typeTree[currType] = res.data.data;
                    me.setData({
                        typeTree: _data.typeTree
                    });
                }
            });
        }
    }
})

管理后台逻辑代码

    //***************************
    // 产品分类
    //***************************
    public function index(){

        $flavor = M('user')->where('id='.intval($_REQUEST['uid']))->field('flavor')->find();
        $list = M('pro_cat')->where('del=0')->field('id,name')->select();
        $type = $_REQUEST['type'];

        if($type == 'tuijian' && ($flavor['flavor'] == '' || !isset($flavor['flavor']))){
            echo json_encode(array('status'=>0,'err'=>'请先去选择自己喜欢的口味吧'));
            exit();
        }

        $plist = array();
        foreach ($list as $k => $val) {
           $pro = M('product')->where('del=0 AND cid='.intval($val['id']))->field('id,name,price_yh,photo_x,salenum,renqi,flavor')->select();
               foreach ($pro as $key => $v) {
                   if($type != 'tuijian' || $this->is_same_flavor($flavor['flavor'],$v)) {
                       $pro[$key]['photo_x'] = __DATAURL__ . $v['photo_x'];
                       $pro[$key]['cartnum'] = 0;
                       $pro[$key]['cartid'] = 0;
                       $pro[$key]['flavor'] = $this->get_flavor($v['flavor']);

                       if (intval($_REQUEST['uid'])) {
                           $cartinfo = M('shopping_char')->where('uid=' . intval($_REQUEST['uid']) . ' AND pid=' . intval($v['id']))->find();
                           $pro[$key]['cartnum'] = intval($cartinfo['num']);
                           $pro[$key]['cartid'] = intval($cartinfo['id']);
                       }
                   }else{
                       unset($pro[$key]);
                   }
               }
               if(sizeof($pro) > 0){
                   $list[$k]['list'] = $pro;
                   array_push($plist,$list[$k]);
               }

        }

        if(sizeof($plist) <= 0 ){
            echo json_encode(array('status'=>0,'err'=>'没有适合您口味的菜可推荐!'));
            exit();
        }

        $cartnum = 0;
        $cartmoney = 0;
        $cartlist = array();

        if (intval($_REQUEST['uid'])) {
            $cartlist = M('shopping_char')->where('uid='.intval($_REQUEST['uid']))->select();
            if ($cartlist) {
                foreach ($cartlist as $k => $v) {
                    $cartlist[$k]['name'] = M('product')->where('id='.intval($v['pid']))->getField('name');
                    $cartlist[$k]['photo'] = __DATAURL__.M('product')->where('id='.intval($v['pid']))->getField('photo_x');
                    $cartmoney += floatval($v['price']*$v['num']);
                    $cartnum += intval($v['num']);
                }
            }
        }
        $fee = M('program')->where('1=1')->getField('yunfei');
        //json加密输出
        echo json_encode(array('status'=>1,'list'=>$plist,'cartlist'=>$cartlist,'cartnum'=>$cartnum,'cartmoney'=>sprintf("%.2f",$cartmoney),'fee'=>floatval($fee)));
        exit();
    }


作者:云诺说
来源:简书

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1543507.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

类和对象三部曲(one)

都说C语言是面向过程&#xff0c;分析出求解问题的步骤&#xff0c;通过函数调用来逐步解决问题。 拿洗衣服来举例&#xff0c;C关注的是一个过程&#xff1a; 那么C是什么呢&#xff1f; 面向对象的编程语言。 面向对象对象指什么&#xff1f; 象棋里的对象么&#xff1f;…

JavaScript学习第二天

1.学习JavaScript高级语法目的 降低后续对于前端框架学习难度 1.局部变量与全局变量 1.局部变量: 在函数体内部通过var声明的变量 1.局部变量特点: 局部变量只能在当前函数体内使用&#xff0c;不能 在函数体外使用 2.全局变量 在script标签下直接…

AI之Suno:Suno V3的简介、安装和使用方法、案例应用之详细攻略

AI之Suno&#xff1a;Suno V3的简介、安装和使用方法、案例应用之详细攻略 目录 Suno AI的简介 1、特点与改进&#xff1a; Suno AI的安装和使用方法 1、第一步&#xff0c;让国产大模型—ChatGLM4帮我写一个提示词 2、第二步&#xff0c;将提示词交给Suno v3&#xff0c;…

LDL^H分解求逆矩阵与MATLAB仿真(Right-Looking)

通过分解将对称正定厄米特矩阵分解成下三角矩阵L和对角矩阵D来求其逆矩阵 目录 前言 一、LDL^H基本算法 二、LDL^H Right-Looking算法 三、D矩阵求逆 四、L矩阵求逆 五、A矩阵求逆 六、计算量分析 七、MATLAB仿真 八、参考资料 总结 前言 在线性代数中&#xff0c;LDL…

如何在Ubuntu系统使用Docker搭建MongoDB结合内网穿透实现公网连接

文章目录 前言1. 安装Docker2. 使用Docker拉取MongoDB镜像3. 创建并启动MongoDB容器4. 本地连接测试5. 公网远程访问本地MongoDB容器5.1 内网穿透工具安装5.2 创建远程连接公网地址5.3 使用固定TCP地址远程访问 前言 本文主要介绍如何在Linux Ubuntu系统使用Docker快速部署Mon…

企业如何选择一个开源「好」项目?

开源 三句半​​​​​​​ 需求明确是关键 风险考量要周全 开源虽好不白捡 别忘合规&#xff01; 显然&#xff0c;开源已成为一股不可阻挡的洪流&#xff0c;企业拥抱开源&#xff0c;积极参与开源项目不仅是响应技术潮流的必然选择&#xff0c;更是实现自身技术创新、市场拓…

GETSHELL方法总结上

渗透的总步骤 1.信息收集找到弱漏洞 2.漏洞挖掘 漏洞验证 3.有一定权限 getshell 4.提权后---渗透 5.内网渗透】 前后台拿shell方法汇总 接下来我们实操一波dedecms也就是织梦cms 如果你们的靶场是空白的 可能是php版本 我们修改为5.2 可能是源码问题 我们不要急着上传…

【vue核心技术实战精讲】1.6 - 1.8 VUE 指令 (中)

文章目录 前言 本节内容1、v-on使用v-on好处效果 2、事件修饰符2.1、按键码 (<font color red>已废弃&#xff0c;不用研究)示例效果 3、v-for 列表渲染示例效果 前言 上节,我们学习了 Vue指令之v-text 、 v-html、v-if 、v-show、v-bind 点击进入上一节 本节内容 Vue…

【Linux基础】ubuntu虚拟机配置及原理

一、虚拟机 虚拟机&#xff08;Virtual Machine&#xff0c;VM&#xff09;是一种软件实现的计算机系统&#xff0c;它在物理计算机上模拟了一个完整的计算机硬件环境&#xff0c;包括处理器、内存、存储设备和网络接口等。通过虚拟机&#xff0c;用户可以在单个物理计算机上同…

二叉搜索树(二叉排序树,二叉查找树)(附图详解+代码实现+应用分析)

最近学习了有关搜索二叉树的相关知识&#xff0c;在此特意将该知识进行总结分享&#xff0c;希望对大家有所帮助。 文章目录 一.二叉搜索树1.1二叉搜索树的概念1.2二叉搜索树的操作&#xff08;含思路分析代码实现&#xff09;1.2.1二叉搜索树的查找&#xff08;递归实现看最后…

RocketMQ学习笔记:零拷贝

这是本人学习的总结&#xff0c;主要学习资料如下 马士兵教育rocketMq官方文档 目录 1、零拷贝技术1.1、什么是零拷贝1.2、mmap()1.3、Java中的零拷贝 1、零拷贝技术 1.1、什么是零拷贝 使用传统的IO&#xff0c;从硬盘读取数据然后发送到网络需要经过四个步骤。 通过DMA复…

外包干了5年,技术退步明显.......

先说一下自己的情况&#xff0c;大专生&#xff0c;18年通过校招进入杭州某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落! 而我已经在一个企业干了四年的功能测…

基于Scapy国内城市空气质量数据采集系统设计与实现

代码和完整的报告在文章最后 城市空气质量数据采集系统设计与实现 &#x1f3d9;️ 研究背景 &#x1f32c;️ 城市化与环境挑战&#xff1a;随着城市化进程的加快&#xff0c;环境污染问题&#xff0c;尤其是空气质量问题&#xff0c;已成为公众关注的焦点。数据监测的重要性…

canvas跟随鼠标移动画带透明度的线(画涂鸦)

提示&#xff1a;canvas画线 文章目录 前言一、带透明度的线二、试错&#xff0c;只有lineTo的时候画&#xff0c;只有最后地方是透明度的三、试错&#xff0c;只存上一次的点&#xff0c;线会出现断裂的情况总结 前言 一、带透明度的线 test.html <!DOCTYPE html> &l…

【日常linux操作命令】

文章目录 1、查看服务器信息1.1、查看内存1.2、查看磁盘1.3、查看CPU信息 2、清理内存缓存2.1、清理PageCache&#xff1a;2.2、清理Dentries和Inodes&#xff1a;2.3、同时清理PageCache、Dentries和Inodes&#xff1a;2.4、清理日志文件2.5、清理临时文件 3、查找文件3.1、查…

在Ubuntu 22.04上源码安装python3.7及setuptools及pip

背景 随着时代发展&#xff0c;ubuntu的版本也在飞速迭代&#xff0c;现在ubuntu中默认带的python3已经到python3.11了&#xff0c;并且python2也已经在新的版本中被废弃了。 但是还有一些场景下会用到python3.7&#xff0c;这里给一些说明&#xff0c;方便大家使用。 操作 …

K3 计划订单投放时,将“关联物料”传递到采购和生产订单的“组部件”字段

参考K/3 WISE 中MRP计算投放过程中 销售订单自定义字段怎么携带到任务单这篇文章&#xff0c;进行优化。 在表ICMrpDestBills下增加触发器&#xff0c;代码如下 CREATE TRIGGER [dbo].[ICMrpDestBills_update]ON [dbo].[ICMrpDestBills]AFTER INSERT,UPDATE AS BEGINSET NO…

【SpringCloud】探索Eureka注册中心

&#x1f3e1;浩泽学编程&#xff1a;个人主页 &#x1f525; 推荐专栏&#xff1a;《深入浅出SpringBoot》《java对AI的调用开发》 《RabbitMQ》《Spring》《SpringMVC》《项目实战》 &#x1f6f8;学无止境&#xff0c;不骄不躁&#xff0c;知行合一 文章目录 …

AISD智能安全配电装置--智能监测、远程监控

安科瑞薛瑶瑶18701709087 AISD100单相、AISD300三相智能安全配电装置是安科瑞专为低压配电侧开发的一款智能安全配电产品。主要针对低压配电系统人身触电、线路老化、短路、漏电等原因引起电气安全问题而设计。 产品主要应用于学校、加油站、医院、银行、疗养院、康复中心、敬…

Douyin视频详情数据API接口(视频详情,评论)

抖音官方并没有直接提供公开的视频详情数据采集API接口给普通用户或第三方开发者。抖音的数据采集通常受到严格的限制&#xff0c;以保护用户隐私和平台安全。 请求示例&#xff0c;API接口接入Anzexi58 如果您需要获取抖音视频详情数据&#xff0c;包括评论、点赞等&#xff…