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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