From 8806e7ebe32a08df93708373726eefdeff97c2a6 Mon Sep 17 00:00:00 2001 From: xy <271556543@qq.com> Date: Tue, 6 Jun 2023 17:11:24 +0800 Subject: [PATCH] init --- App.vue | 24 +++ common/config.js | 8 +- common/http.api.js | 28 +-- common/http.interceptor.js | 67 ++++--- component/popover/index.vue | 18 +- lib/moment.min.js | 1 + main.js | 4 + pages.json | 2 +- pages/index/index.vue | 78 ++++++++- pages/me/index.vue | 71 ++++++-- pages/raffle/raffle.vue | 338 ++++++++++++++++++++++++++++++++++-- static/share.png | Bin 0 -> 4688 bytes store/index.js | 5 +- 13 files changed, 549 insertions(+), 95 deletions(-) create mode 100644 lib/moment.min.js create mode 100644 static/share.png diff --git a/App.vue b/App.vue index cd98466..391986c 100644 --- a/App.vue +++ b/App.vue @@ -2,6 +2,30 @@ export default { onLaunch: function() { console.log('App Launch') + let link = window.location.href; + if (/code=/.test(link) || link.indexOf("code") > -1) { + let temp = decodeURIComponent((new RegExp('[?|&]' + 'code' + '=' + '([^&;]+?)(&|#|;|$)').exec(link) || + [, ''])[1].replace(/\+/g, '%20')) || null + let lifeData = uni.getStorageSync('lifeData') + if (!lifeData.vuex_token || !lifeData.vuex_userId) { + this.$u.api.login({ + code: temp + }).then(res => { + uni.setStorageSync('lifeData', { + vuex_token: res.token, + vuex_userId: res.user_id + }) + this.$u.vuex('vuex_token', res.token) + this.$u.vuex('vuex_userId', res.user_id) + }) + } + } else { + this.$u.api.getAppId().then(res => { + let redirect = encodeURIComponent(link.replace(/#\//, "")) + window.location.href = + `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${res.appid}&redirect_uri=${redirect}&response_type=code&scope=snsapi_base#wechat_redirect` + }) + } }, onShow: function() { console.log('App Show') diff --git a/common/config.js b/common/config.js index 9a977cf..8b8ae54 100644 --- a/common/config.js +++ b/common/config.js @@ -1,17 +1,17 @@ -const mode = 'devOnline'; //devLocal:本地测试、devOnline:线上测试、production:生产环境 +const mode = 'devLocal'; //devLocal:本地测试、devOnline:线上测试、production:生产环境 let ROOTPATH = ''; //域名 switch (mode) { case 'devLocal': - ROOTPATH = "http://192.168.2.5:61111" + ROOTPATH = "http://h5.ali251.langye.net" break; case 'devOnline': ROOTPATH = "https://xxxxx.cn" break; case 'production': - ROOTPATH = "https://xxxxx.cn" + ROOTPATH = "http://h5.ali251.langye.net" break; default: throw new Error('未配置环境'); console.log(`未配置环境`); } -export { ROOTPATH } \ No newline at end of file +export { ROOTPATH } diff --git a/common/http.api.js b/common/http.api.js index bc74f0b..cbf9f7e 100644 --- a/common/http.api.js +++ b/common/http.api.js @@ -1,23 +1,31 @@ //api集合 let apiApp = { - login: '/api/login', - getInfo: '/777/777/index', -} -let apiHome = { - hotSearchUrl: '/777/77/hot_search' + login: '/api/mobile/user/wechat-login', + getAppId: '/api/mobile/user/wechat-login-url', + sendSms: '/api/mobile/user/send-sms', + getPrize: '/api/mobile/draw/get-prize', + draw: '/api/mobile/draw/draw', + endTask: '/api/mobile/draw/end-task', + mobileCheck: '/api/mobile/draw/mobile-check', + bindMobile: '/api/mobile/user/bind-mobile' } // 此处第二个参数vm,就是我们在页面使用的this,你可以通过vm获取vuex等操作 const install = (Vue, vm) => { //api方法 - let getSearch = (params = {}) => vm.$u.get(apiHome.hotSearchUrl, params); - let getInfo = (params={}) => vm.$u.post(apiApp.getInfo, params); - + let login = (params = {}) => vm.$u.get(apiApp.login, params); + let getPrize = (params = {}) => vm.$u.get(apiApp.getPrize, params); + let getAppId = (params = {}) => vm.$u.get(apiApp.getAppId, params); + let draw = (params = {}) => vm.$u.get(apiApp.draw, params); + let endTask = (params = {}) => vm.$u.get(apiApp.endTask, params); + let mobileCheck = (params = {}) => vm.$u.get(apiApp.mobileCheck, params); + let sendSms = (params = {}) => vm.$u.get(apiApp.sendSms, params); + let bindMobile = (params = {}) => vm.$u.get(apiApp.bindMobile, params); // 将各个定义的接口名称,统一放进对象挂载到vm.$u.api(因为vm就是this,也即this.$u.api)下 - vm.$u.api = {getSearch, getInfo}; + vm.$u.api = { login, getPrize, draw, endTask, mobileCheck, getAppId, sendSms, bindMobile }; } export default { install -} \ No newline at end of file +} diff --git a/common/http.interceptor.js b/common/http.interceptor.js index 9217ae0..8fe32fb 100644 --- a/common/http.interceptor.js +++ b/common/http.interceptor.js @@ -11,7 +11,7 @@ const install = (Vue, vm) => { loadingMask: true, // 展示loading的时候,是否给一个透明的蒙层,防止触摸穿透 loadingText: '加载中', // 请求loading中的文字提示 loadingTime: 800, - originalData: false, // 是否在拦截器中返回服务端的原始数据 + originalData: true, // 是否在拦截器中返回服务端的原始数据 // 设置自定义头部content-type header: { 'content-type': 'application/json;charset=UTF-8' @@ -21,49 +21,44 @@ const install = (Vue, vm) => { // 请求拦截部分,如配置,每次请求前都会执行 Vue.prototype.$u.http.interceptor.request = (config) => { console.log('config-http', config) - // 引用token - // 方式一,存放在vuex的token,假设使用了uView封装的vuex方式 - // 见:https://uviewui.com/components/globalVariable.html - config.header.token = vm.vuex_token; + config.data.activity_tag = 'turntable_draw' - // 方式二,如果没有使用uView封装的vuex方法,那么需要使用$store.state获取 - // config.header.token = vm.$store.state.token; - - // 方式三,如果token放在了globalData,通过getApp().globalData获取 - // config.header.token = getApp().globalData.username; - - // 方式四,如果token放在了Storage本地存储中,拦截是每次请求都执行的 - // 所以哪怕您重新登录修改了Storage,下一次的请求将会是最新值 - // const token = uni.getStorageSync('token'); - // config.header.token = token; + let lifeData = uni.getStorageSync('lifeData') + let vuex_token = lifeData.vuex_token; + if (vuex_token || vm.vuex_token) { + config.header['Authorization'] = `Bearer ${vuex_token || vm.vuex_token}`; + } - // 可以对某个url进行特别处理,此url参数为this.$u.get(url)中的url值 - if (config.url == '/test/jam') config.header.noToken = true; - // 最后需要将config进行return return config; - // 如果return一个false值,则会取消本次请求 - // if(config.url == '/user/rest') return false; // 取消某次请求 } // 响应拦截,如配置,每次请求结束都会执行本方法 Vue.prototype.$u.http.interceptor.response = (res) => { - console.log('res-http',res) - if (res.code == 200) { - // res为服务端返回值,可能有code,result等字段 - // 这里对res.result进行返回,将会在this.$u.post(url).then(res => {})的then回调中的res的到 - // 如果配置了originalData为true,请留意这里的返回值 - return res.result; - } else if (res.code == 201) { - // 假设201为token失效,这里跳转登录 - // vm.$u.toast('验证失败,请重新登录'); - // setTimeout(() => { - // // 此为uView的方法,详见路由相关文档 - // vm.$u.route('/pages/user/login') - // }, 1500) - return false; + console.log('res-http', res) + if (res.statusCode === 200) { + if (res.data.hasOwnProperty("errcode")) { + uni.showToast({ + icon: "none", + title: res?.data?.errmsg + }) + if (res.data?.errcode === 40001) { + + setTimeout(() => { + let origin = window.location.origin; + let pathname = window.location.pathname; + window.location.href = origin + pathname; + }, 1500) + } + return false; + } else { + return res.data; + } } else { - // 如果返回false,则会调用Promise的reject回调, - // 并将进入this.$u.post(url).then().catch(res=>{})的catch回调中,res为服务端的返回值 + uni.showToast({ + icon: "fail", + title: res.statusCode + }) + return false; } } diff --git a/component/popover/index.vue b/component/popover/index.vue index 5209d95..007bcaf 100644 --- a/component/popover/index.vue +++ b/component/popover/index.vue @@ -28,6 +28,10 @@ + + + + @@ -69,8 +73,6 @@ export default { diff --git a/static/share.png b/static/share.png new file mode 100644 index 0000000000000000000000000000000000000000..034b062e98771c42e5cfc8ded200ac0d2b485ba0 GIT binary patch literal 4688 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