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 0000000..034b062
Binary files /dev/null and b/static/share.png differ
diff --git a/store/index.js b/store/index.js
index 57ea10c..f480e97 100644
--- a/store/index.js
+++ b/store/index.js
@@ -12,7 +12,7 @@ try{
}
// 需要永久存储,且下次APP启动需要取出的,在state中的变量名
-let saveStateKeys = ['vuex_user', 'vuex_token'];
+let saveStateKeys = ['vuex_user', 'vuex_token','vuex_userId'];
// 保存变量到本地存储中
const saveLifeData = function(key, value){
@@ -34,8 +34,9 @@ const store = new Vuex.Store({
// 加上vuex_前缀,是防止变量名冲突,也让人一目了然
vuex_user: lifeData.vuex_user ? lifeData.vuex_user : {},
vuex_token: lifeData.vuex_token ? lifeData.vuex_token : '',
+ vuex_userId: lifeData.vuex_userId ? lifeData.vuex_userId : '',
// 如果vuex_version无需保存到本地永久存储,无需lifeData.vuex_version方式
- vuex_version: '1.0.1',
+ vuex_version: '1.0.0',
},
mutations: {
$uStore(state, payload) {