├── App.vue ├── README.md ├── common ├── getlocation.js ├── previewimg.js ├── qqmap-wx-jssdk.js └── qqmap-wx-jssdk.min.js ├── components ├── confirm │ └── confirm.vue ├── loading.vue ├── nodata.vue ├── uni-fab │ └── uni-fab.vue └── uni-load-more │ └── uni-load-more.vue ├── main.js ├── manifest.json ├── pages.json ├── pages ├── index │ ├── components │ │ ├── headertab.vue │ │ ├── imglist.vue │ │ ├── scroll.vue │ │ └── searchSwiper.vue │ └── index.vue ├── my │ └── my.vue ├── store │ └── store.js └── strategy │ ├── components │ ├── header.vue │ ├── imglist.vue │ └── item.vue │ ├── publish │ ├── components │ │ ├── img.vue │ │ ├── item.vue │ │ └── video.vue │ └── publish.vue │ ├── selectcity │ └── selectcity.vue │ └── strategy.vue ├── static ├── imgs │ ├── address.png │ ├── chat.png │ ├── chats.png │ ├── clear.png │ ├── delete.png │ ├── error.png │ ├── girl.png │ ├── loading.gif │ ├── loading1.gif │ ├── map.svg │ ├── mv.jpg │ ├── search.png │ ├── search.svg │ ├── searchs.png │ ├── sta1.jpg │ ├── sta2.png │ ├── sta3.jpg │ ├── uploadimg.png │ ├── uploadvideo.png │ ├── 扫一扫.png │ └── 短信.png ├── js │ └── request.js ├── logo.png └── tab │ ├── index.png │ ├── indexs.png │ ├── my.png │ ├── mys.png │ ├── stra.png │ └── stras.png ├── uni.scss └── unpackage └── dist └── dev ├── .sourcemap └── mp-weixin │ ├── common │ ├── main.js.map │ ├── runtime.js.map │ └── vendor.js.map │ ├── components │ ├── confirm │ │ └── confirm.js.map │ ├── loading.js.map │ ├── nodata.js.map │ ├── uni-fab │ │ └── uni-fab.js.map │ ├── uni-load-more │ │ └── uni-load-more.js.map │ └── uni-tag │ │ └── uni-tag.js.map │ └── pages │ ├── index │ ├── components │ │ ├── headertab.js.map │ │ ├── imglist.js.map │ │ ├── scroll.js.map │ │ └── searchSwiper.js.map │ └── index.js.map │ ├── my │ └── my.js.map │ └── strategy │ ├── components │ ├── header.js.map │ ├── imglist.js.map │ └── item.js.map │ ├── publish │ ├── components │ │ ├── img.js.map │ │ ├── item.js.map │ │ ├── item │ │ │ └── item.js.map │ │ └── video.js.map │ └── publish.js.map │ ├── selectcity │ └── selectcity.js.map │ └── strategy.js.map └── mp-weixin ├── app.js ├── app.json ├── app.wxss ├── common ├── main.js ├── main.wxss ├── runtime.js └── vendor.js ├── components ├── confirm │ ├── confirm.js │ ├── confirm.json │ ├── confirm.wxml │ └── confirm.wxss ├── loading.js ├── loading.json ├── loading.wxml ├── loading.wxss ├── nodata.js ├── nodata.json ├── nodata.wxml ├── nodata.wxss ├── uni-fab │ ├── uni-fab.js │ ├── uni-fab.json │ ├── uni-fab.wxml │ └── uni-fab.wxss └── uni-load-more │ ├── uni-load-more.js │ ├── uni-load-more.json │ ├── uni-load-more.wxml │ └── uni-load-more.wxss ├── pages ├── index │ ├── components │ │ ├── headertab.js │ │ ├── headertab.json │ │ ├── headertab.wxml │ │ ├── headertab.wxss │ │ ├── imglist.js │ │ ├── imglist.json │ │ ├── imglist.wxml │ │ ├── imglist.wxss │ │ ├── scroll.js │ │ ├── scroll.json │ │ ├── scroll.wxml │ │ ├── scroll.wxss │ │ ├── searchSwiper.js │ │ ├── searchSwiper.json │ │ ├── searchSwiper.wxml │ │ └── searchSwiper.wxss │ ├── index.js │ ├── index.json │ ├── index.wxml │ └── index.wxss ├── my │ ├── my.js │ ├── my.json │ ├── my.wxml │ └── my.wxss └── strategy │ ├── components │ ├── header.js │ ├── header.json │ ├── header.wxml │ ├── header.wxss │ ├── imglist.js │ ├── imglist.json │ ├── imglist.wxml │ ├── imglist.wxss │ ├── item.js │ ├── item.json │ ├── item.wxml │ └── item.wxss │ ├── publish │ ├── components │ │ ├── img.js │ │ ├── img.json │ │ ├── img.wxml │ │ ├── img.wxss │ │ ├── item.js │ │ ├── item.json │ │ ├── item.wxml │ │ ├── item.wxss │ │ ├── video.js │ │ ├── video.json │ │ ├── video.wxml │ │ └── video.wxss │ ├── publish.js │ ├── publish.json │ ├── publish.wxml │ └── publish.wxss │ ├── selectcity │ ├── selectcity.js │ ├── selectcity.json │ ├── selectcity.wxml │ └── selectcity.wxss │ ├── strategy.js │ ├── strategy.json │ ├── strategy.wxml │ └── strategy.wxss ├── project.config.json ├── sitemap.json ├── sitemap20.json ├── sitemap28.json ├── sitemap49.json ├── sitemap50.json ├── sitemap85.json └── static ├── imgs ├── address.png ├── chat.png ├── chats.png ├── clear.png ├── delete.png ├── error.png ├── girl.png ├── loading.gif ├── loading1.gif ├── map.svg ├── mv.jpg ├── search.png ├── search.svg ├── searchs.png ├── sta1.jpg ├── sta2.png ├── sta3.jpg ├── uploadimg.png ├── uploadvideo.png ├── 扫一扫.png └── 短信.png ├── js └── request.js ├── logo.png └── tab ├── index.png ├── indexs.png ├── my.png ├── mys.png ├── stra.png └── stras.png /App.vue: -------------------------------------------------------------------------------- 1 | 14 | 15 | 18 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # weixinshops 2 | 基于uniapp+node+mongodb开发的微信旅游小程序 3 | -------------------------------------------------------------------------------- /common/getlocation.js: -------------------------------------------------------------------------------- 1 | var QQMapWX = require('../common/qqmap-wx-jssdk.js'); 2 | var qqmapsdk; 3 | const address=()=>{ 4 | return new Promise((resolve,reject)=>{ 5 | qqmapsdk = new QQMapWX({ 6 | key: 'CWUBZ-627RK-ZDIJR-APUZX-IGZQS-PNFWB' 7 | }); 8 | qqmapsdk.reverseGeocoder({ 9 | success:(res)=>{ 10 | resolve(res) 11 | }, 12 | fail:(err)=>{ 13 | reject(err) 14 | } 15 | }) 16 | }) 17 | } 18 | export{ 19 | address 20 | } -------------------------------------------------------------------------------- /common/previewimg.js: -------------------------------------------------------------------------------- 1 | var previewImg = function(index,imglist) { 2 | return new Promise((resolve, reject) => { 3 | uni.previewImage({ 4 | urls: imglist, 5 | current: index, 6 | longPressActions: { 7 | itemList: ['发送给朋友', '保存图片', '收藏'] 8 | } 9 | }).then(res => { 10 | resolve(res) 11 | }).catch(err => { 12 | reject(err) 13 | }) 14 | }) 15 | } 16 | export { 17 | previewImg 18 | } 19 | -------------------------------------------------------------------------------- /components/confirm/confirm.vue: -------------------------------------------------------------------------------- 1 | 12 | 77 | 141 | -------------------------------------------------------------------------------- /components/loading.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 13 | 14 | 40 | -------------------------------------------------------------------------------- /components/nodata.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 10 | 11 | 29 | -------------------------------------------------------------------------------- /main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import App from './App' 3 | import {myRequest} from './static/js/request.js' 4 | Vue.config.productionTip = false 5 | Vue.prototype.myRequest=myRequest 6 | App.mpType = 'app' 7 | //引入vuex 8 | import store from './pages/store/store.js' 9 | Vue.prototype.$store=store 10 | //引入confirm组件 11 | import confirm from './components/confirm/confirm.vue' 12 | Vue.component('u-confirm',confirm) 13 | //引入tab切换的loading 14 | import loader from './components/loading.vue' 15 | Vue.component('load-list',loader) 16 | //引入没有数据提示 17 | import nodata from './components/nodata.vue' 18 | Vue.component('no-data',nodata) 19 | const app = new Vue({ 20 | ...App, 21 | store 22 | }) 23 | app.$mount() 24 | -------------------------------------------------------------------------------- /manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name" : "buddy-visit", 3 | "appid" : "__UNI__BB0137A", 4 | "description" : "", 5 | "versionName" : "1.0.0", 6 | "versionCode" : "100", 7 | "transformPx" : false, 8 | /* 5+App特有相关 */ 9 | "app-plus" : { 10 | "usingComponents" : true, 11 | "nvueCompiler" : "uni-app", 12 | "compilerVersion" : 3, 13 | "splashscreen" : { 14 | "alwaysShowBeforeRender" : true, 15 | "waiting" : true, 16 | "autoclose" : true, 17 | "delay" : 0 18 | }, 19 | /* 模块配置 */ 20 | "modules" : {}, 21 | /* 应用发布信息 */ 22 | "distribute" : { 23 | /* android打包配置 */ 24 | "android" : { 25 | "permissions" : [ 26 | "", 27 | "", 28 | "", 29 | "", 30 | "", 31 | "", 32 | "", 33 | "", 34 | "", 35 | "", 36 | "", 37 | "", 38 | "", 39 | "", 40 | "", 41 | "", 42 | "", 43 | "", 44 | "", 45 | "", 46 | "", 47 | "" 48 | ] 49 | }, 50 | /* ios打包配置 */ 51 | "ios" : {}, 52 | /* SDK配置 */ 53 | "sdkConfigs" : {} 54 | } 55 | }, 56 | /* 快应用特有相关 */ 57 | "quickapp" : {}, 58 | /* 小程序特有相关 */ 59 | "mp-weixin" : { 60 | "appid" : "wx8e0e2a88e974b63c", 61 | "setting" : { 62 | "urlCheck" : false, 63 | "es6" : true, 64 | "postcss" : true, 65 | "minified" : true 66 | }, 67 | "usingComponents" : true 68 | }, 69 | "mp-alipay" : { 70 | "usingComponents" : true 71 | }, 72 | "mp-baidu" : { 73 | "usingComponents" : true 74 | }, 75 | "mp-toutiao" : { 76 | "usingComponents" : true 77 | } 78 | } 79 | -------------------------------------------------------------------------------- /pages.json: -------------------------------------------------------------------------------- 1 | { 2 | "pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages 3 | { 4 | "path" : "pages/strategy/strategy", 5 | "style" : { 6 | "navigationBarTitleText":"攻略" 7 | } 8 | }, 9 | { 10 | "path" : "pages/strategy/publish/publish", 11 | "style" : { 12 | "navigationBarTitleText":"发表旅行游记" 13 | } 14 | }, 15 | { 16 | "path": "pages/index/index", 17 | "style": { 18 | "navigationBarTitleText": "生如夏花", 19 | "navigationBarTextStyle": "black" 20 | } 21 | } 22 | ,{ 23 | "path" : "pages/my/my", 24 | "style" : { 25 | "navigationBarTitleText":"个人中心" 26 | } 27 | } 28 | ,{ 29 | "path" : "pages/strategy/selectcity/selectcity", 30 | "style" : { 31 | "navigationBarTitleText":"选择城市" 32 | } 33 | } 34 | ], 35 | "globalStyle": { 36 | "navigationBarTextStyle": "white", 37 | "navigationBarTitleText": "buddy旅游", 38 | "navigationBarBackgroundColor": "#ffd330", 39 | "backgroundColor": "#ffd330" 40 | }, 41 | "tabBar":{ 42 | "list":[ 43 | { 44 | "iconPath":"static/tab/indexs.png", 45 | "selectedIconPath":"static/tab/index.png", 46 | "pagePath":"pages/index/index", 47 | "text":"首页" 48 | },{ 49 | "iconPath":"static/tab/stras.png", 50 | "selectedIconPath":"static/tab/stra.png", 51 | "pagePath":"pages/strategy/strategy", 52 | "text":"攻略" 53 | },{ 54 | "iconPath":"static/tab/my.png", 55 | "selectedIconPath":"static/tab/mys.png", 56 | "pagePath":"pages/my/my", 57 | "text":"我的" 58 | } 59 | ], 60 | "color":"#333333", 61 | "selectedColor":"#76E15", 62 | "borderStyle":"black", 63 | "backgroundColor":"#FFFFFF" 64 | }, 65 | "permission":{ 66 | "scope.userLocation":{ 67 | "desc":"你的位置信息将用于小程序位置接口的效果展示" 68 | } 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /pages/index/components/headertab.vue: -------------------------------------------------------------------------------- 1 | 17 | 18 | 40 | 41 | -------------------------------------------------------------------------------- /pages/index/components/imglist.vue: -------------------------------------------------------------------------------- 1 | 22 | 23 | 43 | 44 | 118 | -------------------------------------------------------------------------------- /pages/index/components/scroll.vue: -------------------------------------------------------------------------------- 1 | 19 | 20 | 63 | 64 | 96 | -------------------------------------------------------------------------------- /pages/index/components/searchSwiper.vue: -------------------------------------------------------------------------------- 1 | 20 | 21 | 41 | 42 | 95 | -------------------------------------------------------------------------------- /pages/index/index.vue: -------------------------------------------------------------------------------- 1 | 19 | 20 | 142 | 143 | 178 | -------------------------------------------------------------------------------- /pages/my/my.vue: -------------------------------------------------------------------------------- 1 | 11 | 12 | 30 | 31 | 59 | -------------------------------------------------------------------------------- /pages/store/store.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import Vuex from 'vuex' 3 | Vue.use(Vuex) 4 | //首页tab传输存储的值 5 | const list={ 6 | listing:[] 7 | } 8 | const tabload={ 9 | load:'' 10 | } 11 | const selectcity={ 12 | city:'' 13 | } 14 | const pulishcity={ 15 | city:'' 16 | } 17 | const state={ 18 | list, 19 | tabload, 20 | selectcity, 21 | pulishcity 22 | } 23 | export default new Vuex.Store({ 24 | state, 25 | //可以执行异步操作 26 | actions:{ 27 | imgactions(imgactions,imgdata){ 28 | imgactions.commit('imgmuta',imgdata) 29 | } 30 | }, 31 | //同步操作 32 | mutations:{ 33 | imgmuta(state,imgdata){ 34 | state.list={ 35 | listing:imgdata 36 | } 37 | }, 38 | tabloading(state,tabloading){ 39 | state.tabload={ 40 | load:tabloading 41 | } 42 | }, 43 | //城市选择界面 44 | citymuta(state,citydata){ 45 | state.selectcity={ 46 | city:citydata 47 | } 48 | }, 49 | //攻略页面 50 | pulishmuta(state,citydata){ 51 | state.pulishcity={ 52 | city:citydata 53 | } 54 | } 55 | } 56 | }) -------------------------------------------------------------------------------- /pages/strategy/components/header.vue: -------------------------------------------------------------------------------- 1 | 15 | 16 | 37 | 38 | 88 | -------------------------------------------------------------------------------- /pages/strategy/components/imglist.vue: -------------------------------------------------------------------------------- 1 | 18 | 19 | 39 | 40 | 119 | -------------------------------------------------------------------------------- /pages/strategy/components/item.vue: -------------------------------------------------------------------------------- 1 | 11 | 12 | 42 | 43 | 76 | -------------------------------------------------------------------------------- /pages/strategy/publish/components/img.vue: -------------------------------------------------------------------------------- 1 | 14 | 15 | 78 | 79 | 126 | -------------------------------------------------------------------------------- /pages/strategy/publish/components/item.vue: -------------------------------------------------------------------------------- 1 | 11 | 12 | 39 | 40 | 73 | -------------------------------------------------------------------------------- /pages/strategy/publish/components/video.vue: -------------------------------------------------------------------------------- 1 | 17 | 18 | 53 | 54 | 98 | -------------------------------------------------------------------------------- /pages/strategy/publish/publish.vue: -------------------------------------------------------------------------------- 1 |