[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-1186":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":16,"stars7d":17,"stars30d":18,"stars90d":16,"forks30d":16,"starsTrendScore":17,"compositeScore":19,"rankGlobal":10,"rankLanguage":10,"license":20,"archived":21,"fork":21,"defaultBranch":22,"hasWiki":23,"hasPages":21,"topics":24,"createdAt":10,"pushedAt":10,"updatedAt":32,"readmeContent":33,"aiSummary":34,"trendingCount":16,"starSnapshotCount":16,"syncStatus":35,"lastSyncTime":36,"discoverSource":37},1186,"vue2-elm","bailicangdu\u002Fvue2-elm","bailicangdu","Large single page application with 45 pages built on vue2 + vuex. 基于 vue2 + vuex 构建一个具有 45 个页面的大型单页面应用","https:\u002F\u002Fcangdu.org\u002Felm\u002F",null,"Vue",41064,12279,1467,119,0,3,6,45,"GNU General Public License v2.0",false,"master",true,[25,26,27,28,29,30,31],"es2015","flex","sass","vue","vue-router","vuex","webpack","2026-06-12 02:00:24","# 前言\n\n[README in English](README-en.md)\n\n初学vue时曾在网上搜索vue的实战项目源码，无奈大部分都是简单的demo，对于深究vue没有太大的帮助，剩下的一些大部分都是像音乐播放器之类的展示型项目，交互没有预期那么复杂。但我们实际在工作中，经常会遇到有购物车的项目，这类项目因为涉及到money，所以对逻辑严谨度要求高，页面之间交互复杂，又会伴随着登录、注册、用户信息等等，常常会让我们很头疼。既然还没人用vue写过这样的项目，那不如我来写，开源出来对能看到的人也会有帮助。\n\n这种功能性的项目很实用但是往往也很枯燥，没有音乐播放器那么看起来绚丽，思来想去发现饿了么是一个不错的素材，一来它足够复杂，开放的外卖平台比一般的公司独有商店更加复杂。二来 见到那么多美食，大家也不会感觉到厌烦。\n\n为啥是饿了么，而不是美团？原因很简单，饿了么的色调和布局是最漂亮的，看起来最舒服。\n\n此项目大大小小共 45 个页面，涉及注册、登录、商品展示、购物车、下单等等，是一个完整的流程。一般公司即便是官网的单页面项目都没这么复杂，如果这个项目能驾驭的了，相信大部分公司的其他单页面应用也就不在话下，即便更复杂，也不会比这个高到哪里去。\n\n因为利用业余时间来做，年前就开始写，又跨个年，周期有点长，项目从零布局到完成共用了2个多月的时间。\n\n另外，这个项目和慕课网视频的那个饿了么没有任何关系，慕课网的项目只有一个页面，我在看完vue的官方文档后直接写了这个项目，没有参照任何人的代码，请大家不要混为一谈。\n\n__注1：此项目纯属个人瞎搞，正常下单请选择饿了么官方客户端。__\n\n__注2：项目预览地址和接口需要使用https访问哦！__\n\n\n## 技术栈\n\nvue2 + vuex + vue-router + webpack + ES6\u002F7 + fetch + sass + flex + svg\n\n\n## 项目运行\n\n#### 注意：由于涉及大量的 ES6\u002F7 等新属性，node 需要 6.0 以上版本\n\n```\ngit clone https:\u002F\u002Fgithub.com\u002Fbailicangdu\u002Fvue2-elm.git  \n\ncd vue2-elm\n\nnpm install 或 yarn(推荐)\n\nnpm run dev\n\n```\n## 关于接口数据\n\n此项目的所有接口数据都来源于配套的后台系统，[后台项目传送地址](https:\u002F\u002Fgithub.com\u002Fbailicangdu\u002Fnode-elm)。\n\n如果想体验前后台同时开发，可以下载后台系统。\n\n此时启动本项目的命令为：npm run local 而不是 npm run dev。\n\n同时我们也提供了基于`element-ui`搭建的[后台管理页面](https:\u002F\u002Fgithub.com\u002Fbailicangdu\u002Fvue2-manage)\n\n如果只做前端开发，请忽略上面这几句话哟～\n\n\n# 说明\n\n>  如果对您有帮助，您可以点右上角 \"Star\" 支持一下 谢谢！ ^_^\n\n>  或者您可以 \"follow\" 一下，我会不断开源更多的有趣的项目\n\n>  开发环境 macOS 10.12.3  Chrome 56  nodejs 6.10.0\n\n>  特别感谢[@bailichen](https:\u002F\u002Fgithub.com\u002Fbailichen), [@iceRao](https:\u002F\u002Fgithub.com\u002Fraoenhui)，在百忙之中抽出时间和我一起完成了这个项目，辛苦了🌹\n\n>  如有问题请直接在 Issues 中提，或者您发现问题并有非常好的解决方案，欢迎 PR 👍\n\n>  [项目交流群](https:\u002F\u002Fgitter.im\u002Fvue2-elm\u002FLobby?utm_source=share-link&utm_medium=link&utm_campaign=share-link)\n\n>  推荐一个 react + redux 开源项目，对react感兴趣的朋友赶紧去看看。[地址在这里](https:\u002F\u002Fgithub.com\u002Fbailicangdu\u002Freact-pxq)\n\n>  另外一个 vue2 + vuex 的入门项目，比当前的项目简单很多，非常适合入门练习。[地址在这里](https:\u002F\u002Fgithub.com\u002Fbailicangdu\u002Fvue2-happyfri)\n\n\n# 效果演示\n\n[查看demo请戳这里](https:\u002F\u002Fcangdu.org\u002Felm\u002F#\u002Fmsite)（请用chrome手机模式预览）\n\n### 移动端扫描下方二维码\n\n\u003Cimg src=\"https:\u002F\u002Fgithub.com\u002Fbailicangdu\u002Fvue2-elm\u002Fblob\u002Fmaster\u002Fscreenshots\u002Fewm.png\" width=\"200\" height=\"200\"\u002F>\n\n\n\n# 目标功能\n- [x] 定位功能 -- 完成\n- [x] 选择城市 -- 完成\n- [x] 搜索地址 -- 完成\n- [x] 展示所选地址附近商家列表 -- 完成\n- [x] 搜索美食，餐馆 -- 完成\n- [x] 根据距离、销量、评分、特色菜、配送方式等进行排序和筛选 -- 完成\n- [x] 餐馆食品列表页 -- 完成\n- [x] 购物车功能 -- 完成\n- [x] 店铺评价页面 -- 完成\n- [x] 单个食品详情页面 -- 完成\n- [x] 商家详情页 -- 完成\n- [x] 登录、注册 -- 完成\n- [x] 修改密码 -- 完成\n- [x] 个人中心 -- 完成\n- [x] 发送短信、语音验证 -- 完成\n- [x] 下单功能 -- 完成 ✨✨🎉🎉\n- [x] 订单列表 -- 完成\n- [x] 订单详情 -- 完成\n- [x] 下载App -- 完成\n- [x] 添加、删除、修改收货地址 -- 完成\n- [x] 帐户信息 -- 完成\n- [x] 服务中心 -- 完成\n- [x] 红包 -- 完成\n- [x] 上传头像 -- 完成\n- [ ] 付款 -- 臣妾做不到啊~~\n\n\n\n# 总结\n\n1、一般涉及到money的网页逻辑都比较复杂，尤其像饿了么这样一个开放的平台，商家和食品种类繁多，页面与页面之间交互复杂，在写到 购物车 和 下单 功能时众多的数据和逻辑一度让人很头疼，又没有设计和接口api文档，只能一步步摸索。\n\n2、vue因其轻量级的框架在中小型项目中表现亮眼，在大型单页面应用中因为vuex的存在，表现依然出色，在处理复杂交互逻辑的时候，vuex的存在是不可或缺的。所以说利用 vue + vuex 完全可以去做大型的单页面项目。\n\n3、项目写到现在，从 登录注册到、首页、搜索、商家列表、购物车、下单、订单列表、个人中心 一个流程走完之后、不但对vue的理解更深一层，而且对以后掌控大型项目的时候也有非常多的帮助，做一个实际的项目才能对自己有很大的提升。\n\n4、曾一度怀疑，花几个月的时间做这样一个项目到底有没有意义，本来只是想做一个小项目练练手，没想到后来越写越多，不过坚持下来后我相信一切都是值得的。\n\n5、项目已经完成，共45个页面。\n\n\n# 最终目标\n\n1、用node.js构建一个模拟外卖平台的后台系统。[地址在这里](https:\u002F\u002Fgithub.com\u002Fbailicangdu\u002Fnode-elm)\n\n2、写出跨 Android 和 IOS 的原生APP版本。[地址在这里](https:\u002F\u002Fgithub.com\u002Fbailicangdu\u002Fnative-xdm)\n\n3、如果时间来的及，会出一卖家版本。\n\n所以我的目的是构建一个横跨前后端，移动IOS、Android的完整生态圈。\n\n。。。敬请期待\n\n\n\n\n# 部分截图\n\n\n### 商铺列表页\n\n\u003Cimg src=\"https:\u002F\u002Fgithub.com\u002Fbailicangdu\u002Fvue2-elm\u002Fblob\u002Fmaster\u002Fscreenshots\u002Fmsite.png\" width=\"365\" height=\"619\"\u002F> \u003Cimg src=\"https:\u002F\u002Fgithub.com\u002Fbailicangdu\u002Fvue2-elm\u002Fblob\u002Fmaster\u002Fscreenshots\u002Fmsite.gif\" width=\"365\" height=\"619\"\u002F>\n\n\n### 商铺筛选页\n\n\u003Cimg src=\"https:\u002F\u002Fgithub.com\u002Fbailicangdu\u002Fvue2-elm\u002Fblob\u002Fmaster\u002Fscreenshots\u002Ffood.png\" width=\"365\" height=\"619\"\u002F> \u003Cimg src=\"https:\u002F\u002Fgithub.com\u002Fbailicangdu\u002Fvue2-elm\u002Fblob\u002Fmaster\u002Fscreenshots\u002Ffood.gif\" width=\"365\" height=\"619\"\u002F>\n\n\n\n### 餐馆食品列表与购物车\n\n\u003Cimg src=\"https:\u002F\u002Fgithub.com\u002Fbailicangdu\u002Fvue2-elm\u002Fblob\u002Fmaster\u002Fscreenshots\u002Fshop_cart.png\" width=\"365\" height=\"619\"\u002F> \u003Cimg src=\"https:\u002F\u002Fgithub.com\u002Fbailicangdu\u002Fvue2-elm\u002Fblob\u002Fmaster\u002Fscreenshots\u002Fshop_cart.gif\" width=\"365\" height=\"619\"\u002F>\n\n### 确认订单页\n\n\u003Cimg src=\"https:\u002F\u002Fgithub.com\u002Fbailicangdu\u002Fvue2-elm\u002Fblob\u002Fmaster\u002Fscreenshots\u002Fconfirm1.png\" width=\"365\" height=\"619\"\u002F> \u003Cimg src=\"https:\u002F\u002Fgithub.com\u002Fbailicangdu\u002Fvue2-elm\u002Fblob\u002Fmaster\u002Fscreenshots\u002FconfirmOrder.gif\" width=\"365\" height=\"619\"\u002F>\n\n\n### 搜索页\n\n\u003Cimg src=\"https:\u002F\u002Fgithub.com\u002Fbailicangdu\u002Fvue2-elm\u002Fblob\u002Fmaster\u002Fscreenshots\u002Fsearch.png\" width=\"365\" height=\"619\"\u002F> \u003Cimg src=\"https:\u002F\u002Fgithub.com\u002Fbailicangdu\u002Fvue2-elm\u002Fblob\u002Fmaster\u002Fscreenshots\u002Fsearch.gif\" width=\"365\" height=\"619\"\u002F>\n\n\n### 登录页\n\n\u003Cimg src=\"https:\u002F\u002Fgithub.com\u002Fbailicangdu\u002Fvue2-elm\u002Fblob\u002Fmaster\u002Fscreenshots\u002Flogin1.png\" width=\"365\" height=\"619\"\u002F> \u003Cimg src=\"https:\u002F\u002Fgithub.com\u002Fbailicangdu\u002Fvue2-elm\u002Fblob\u002Fmaster\u002Fscreenshots\u002Flogin.gif\" width=\"365\" height=\"619\"\u002F>\n\n\n### 个人中心\n\n\u003Cimg src=\"https:\u002F\u002Fgithub.com\u002Fbailicangdu\u002Fvue2-elm\u002Fblob\u002Fmaster\u002Fscreenshots\u002Fprofile.png\" width=\"365\" height=\"619\"\u002F> \u003Cimg src=\"https:\u002F\u002Fgithub.com\u002Fbailicangdu\u002Fvue2-elm\u002Fblob\u002Fmaster\u002Fscreenshots\u002Fprofile.gif\" width=\"365\" height=\"619\"\u002F>\n\n\n\n\n\n\n# 项目布局\n\n```\n.\n├── build                                       \u002F\u002F webpack配置文件\n├── config                                      \u002F\u002F 项目打包路径\n├── elm                                         \u002F\u002F 上线项目文件，放在服务器即可正常访问\n├── screenshots                                 \u002F\u002F 项目截图\n├── src                                         \u002F\u002F 源码目录\n│   ├── components                              \u002F\u002F 组件\n│   │   ├── common                              \u002F\u002F 公共组件\n│   │   │   ├── alertTip.vue                    \u002F\u002F 弹出框组件\n│   │   │   ├── buyCart.vue                     \u002F\u002F 购物车组件\n│   │   │   ├── computeTime.vue                 \u002F\u002F 倒计时组件\n│   │   │   ├── loading.vue                     \u002F\u002F 页面初始化加载数据的动画组件\n│   │   │   ├── mixin.js                        \u002F\u002F 组件混合(包括：指令-下拉加载更多，处理图片地址)\n│   │   │   ├── ratingStar.vue                  \u002F\u002F 评论的五颗星组件\n│   │   │   └── shoplist.vue                    \u002F\u002F msite和shop页面的餐馆列表公共组件\n│   │   ├── footer\n│   │   │   └── footGuide.vue                   \u002F\u002F 底部公共组件\n│   │   └── header\n│   │       └── head.vue                        \u002F\u002F 头部公共组件\n│   ├── config                                  \u002F\u002F 基本配置\n│   │   ├── env.js                              \u002F\u002F 环境切换配置\n│   │   ├── fetch.js                            \u002F\u002F 获取数据\n│   │   ├── mUtils.js                           \u002F\u002F 常用的js方法\n│   │   └── rem.js                              \u002F\u002F px转换rem\n│   ├── images                                  \u002F\u002F 公共图片\n│   ├── page\n│   │   ├── balance\n│   │   │   ├── balance.vue                     \u002F\u002F 余额页\n│   │   │   └── children\n│   │   │       └── detail.vue                  \u002F\u002F 余额说明\n│   │   ├── benefit\n│   │   │   ├── benefit.vue                     \u002F\u002F 红包页\n│   │   │   └── children\n│   │   │       ├── commend.vue                 \u002F\u002F 推荐有奖\n│   │   │       ├── coupon.vue                  \u002F\u002F 代金券说明\n│   │   │       ├── exchange.vue                \u002F\u002F 兑换红包\n│   │   │       ├── hbDescription.vue           \u002F\u002F 红包说明\n│   │   │       └── hbHistory.vue               \u002F\u002F 历史红包\n│   │   ├── city\n│   │   │   └── city.vue                        \u002F\u002F 当前城市页\n│   │   ├── confirmOrder\n│   │   │   ├── children\n│   │   │   │   ├── children\n│   │   │   │   │   ├── addAddress.vue          \u002F\u002F 添加地址页\n│   │   │   │   │   └── children\n│   │   │   │   │       └── searchAddress.vue   \u002F\u002F 搜索地址页\n│   │   │   │   ├── chooseAddress.vue           \u002F\u002F 选择地址页\n│   │   │   │   ├── invoice.vue                 \u002F\u002F 选择发票页\n│   │   │   │   ├── payment.vue                 \u002F\u002F 付款页\n│   │   │   │   ├── remark.vue                  \u002F\u002F 订单备注页\n│   │   │   │   └── userValidation.vue          \u002F\u002F 用户验证页\n│   │   │   └── confirmOrder.vue                \u002F\u002F 确认订单页\n│   │   ├── download\n│   │   │   └── download.vue                    \u002F\u002F 下载App\n│   │   ├── find\n│   │   │   └── find.vue                        \u002F\u002F 发现页\n│   │   ├── food\n│   │   │   └── food.vue                        \u002F\u002F 食品筛选排序页\n│   │   ├── forget\n│   │   │   └── forget.vue                      \u002F\u002F 忘记密码，修改密码页\n│   │   ├── home\n│   │   │   └── home.vue                        \u002F\u002F 首页\n│   │   ├── login\n│   │   │   └── login.vue                       \u002F\u002F 登录注册页\n│   │   ├── msite\n│   │   │   └── msite.vue                       \u002F\u002F 商铺列表页\n│   │   ├── order\n│   │   │   ├── children\n│   │   │   │   └── orderDetail.vue             \u002F\u002F 订单详情页\n│   │   │   └── order.vue                       \u002F\u002F 订单列表页\n│   │   ├── points\n│   │   │   ├── children\n│   │   │   │   └── detail.vue                  \u002F\u002F 积分说明\n│   │   │   └── points.vue                      \u002F\u002F 积分页\n│   │   ├── profile\n│   │   │   ├── children\n│   │   │   │   ├── children\n│   │   │   │   │   ├── address.vue             \u002F\u002F 地址\n│   │   │   │   │   └── children\n│   │   │   │   │       ├── add.vue             \u002F\u002F 新增地址\n│   │   │   │   │       └── children\n│   │   │   │   │           └── addDetail.vue   \u002F\u002F 搜索地址\n│   │   │   │   ├── info.vue                    \u002F\u002F 帐户信息\n│   │   │   │   └── setusername.vue             \u002F\u002F 重置用户名\n│   │   │   └── profile.vue                     \u002F\u002F 个人中心\n│   │   ├── search\n│   │   │   └── search.vue                      \u002F\u002F 搜索页\n│   │   ├── service\n│   │   │   ├── children\n│   │   │   │   └── questionDetail.vue          \u002F\u002F 问题详情\n│   │   │   └── service.vue                     \u002F\u002F 服务中心\n│   │   ├── shop\n│   │   │   ├── children\n│   │   │   │   ├── children\n│   │   │   │   │   └── shopSafe.vue            \u002F\u002F 商铺认证信息页\n│   │   │   │   ├── foodDetail.vue              \u002F\u002F 商铺信息页\n│   │   │   │   └── shopDetail.vue              \u002F\u002F 单个商铺信息页\n│   │   │   └── shop.vue                        \u002F\u002F 商铺筛选页\n│   │   └── vipcard\n│   │       ├── children\n│   │       │   ├── invoiceRecord.vue           \u002F\u002F 购买记录\n│   │       │   ├── useCart.vue                 \u002F\u002F 使用卡号购买\n│   │       │   └── vipDescription.vue          \u002F\u002F 会员说明\n│   │       └── vipcard.vue                     \u002F\u002F 会员卡办理页\n│   ├── plugins                                 \u002F\u002F 引用的插件\n│   ├── router\n│   │   └── router.js                           \u002F\u002F 路由配置\n│   ├── service                                 \u002F\u002F 数据交互统一调配\n│   │   ├── getData.js                          \u002F\u002F 获取数据的统一调配文件，对接口进行统一管理\n│   │   └── tempdata                            \u002F\u002F 开发阶段的临时数据\n│   ├── store                                   \u002F\u002F vuex的状态管理\n│   │   ├── action.js                           \u002F\u002F 配置actions\n│   │   ├── getters.js                          \u002F\u002F 配置getters\n│   │   ├── index.js                            \u002F\u002F 引用vuex，创建store\n│   │   ├── modules                             \u002F\u002F store模块\n│   │   ├── mutation-types.js                   \u002F\u002F 定义常量muations名\n│   │   └── mutations.js                        \u002F\u002F 配置mutations\n│   └── style\n│       ├── common.scss                         \u002F\u002F 公共样式文件\n│       ├── mixin.scss                          \u002F\u002F 样式配置文件\n│       └── swiper.min.css\n│   ├── App.vue                                 \u002F\u002F 页面入口文件\n│   ├── main.js                                 \u002F\u002F 程序入口文件，加载各种公共组件\n├── favicon.ico                                 \u002F\u002F 图标\n├── index.html                                  \u002F\u002F 入口html文件\n.\n\n56 directories, 203 files\n```\n\n# License\n\n[GPL](https:\u002F\u002Fgithub.com\u002Fbailicangdu\u002Fvue2-elm\u002Fblob\u002Fmaster\u002FCOPYING)\n","bailicangdu\u002Fvue2-elm 是一个基于 Vue 2 和 Vuex 构建的大型单页面应用，包含 45 个页面，模拟了饿了么外卖平台的主要功能。该项目的核心功能包括用户注册登录、商品展示、购物车管理、下单支付等，覆盖了一个完整的电商流程。技术上采用 Vue 2 + Vuex + Vue Router 搭配 Webpack 构建工具，利用 ES6\u002F7、Sass 和 Flex 布局实现现代化前端开发。项目非常适合用于学习 Vue.js 在复杂交互场景下的应用，特别是对于希望深入了解如何使用 Vue 生态系统处理实际业务逻辑的开发者来说，是一个非常有价值的参考案例。",2,"2026-06-11 02:42:12","top_all"]