From ca44e7447a188211f35413b299e7aa6a8db7ba0f Mon Sep 17 00:00:00 2001 From: 406803045 <406803045@qq.com> Date: Thu, 6 Jun 2019 09:17:06 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BE=AE=E4=BF=A1=E5=85=AC=E4=BC=97=E5=8F=B7?= =?UTF-8?q?=EF=BC=8C=E6=8E=88=E6=9D=83=EF=BC=8C=E5=88=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .babelrc | 12 + .env.staging | 1 + babel.config.js | 3 +- build/index.js | 2 +- package.json | 5 +- public/index.1.html | 27 ++ public/index.html | 9 - src/api/coupon.js | 15 ++ src/api/user.js | 20 +- src/assets/css/index.scss | 25 +- src/assets/images/arrow-left.png | Bin 0 -> 838 bytes .../images/coupon/s-coupon-detail-down@2x.png | Bin 0 -> 389 bytes .../images/coupon/s-coupon-detail-up@2x.png | Bin 0 -> 378 bytes .../images/coupon/s-coupon-empty@2x.png | Bin 0 -> 2414 bytes src/components/ListEmpty.vue | 35 +++ src/components/QrCodePopup.vue | 134 +++++++++ src/components/VerificationCode.vue | 9 +- src/config/env.staging.js | 2 +- src/filters/filter.js | 56 +++- src/filters/index.js | 4 +- src/main.js | 5 +- src/permission.js | 46 ++-- src/router/index.js | 2 +- src/store/modules/user.js | 6 + src/utils/directives.js | 33 +++ src/utils/request.js | 6 +- src/views/account/coupon.vue | 254 ++++++++++++------ src/views/account/index.vue | 55 ++-- vue.config.js | 56 ++-- 29 files changed, 627 insertions(+), 195 deletions(-) create mode 100644 .babelrc create mode 100644 public/index.1.html create mode 100644 src/api/coupon.js create mode 100644 src/assets/images/arrow-left.png create mode 100644 src/assets/images/coupon/s-coupon-detail-down@2x.png create mode 100644 src/assets/images/coupon/s-coupon-detail-up@2x.png create mode 100644 src/assets/images/coupon/s-coupon-empty@2x.png create mode 100644 src/components/ListEmpty.vue create mode 100644 src/components/QrCodePopup.vue create mode 100644 src/utils/directives.js diff --git a/.babelrc b/.babelrc new file mode 100644 index 0000000..dc2f4b5 --- /dev/null +++ b/.babelrc @@ -0,0 +1,12 @@ +{ + "presets": [ + [ "@babel/preset-env", { + "targets": { + "browsers": [ "last 1 version", "ie >= 11" ] + } + }] + ], + "plugins": [ + "@babel/plugin-transform-runtime" + ] +} \ No newline at end of file diff --git a/.env.staging b/.env.staging index 7f76b07..1d8a5fc 100644 --- a/.env.staging +++ b/.env.staging @@ -4,6 +4,7 @@ VUE_APP_ENV = 'staging' #base url BASE_URL = https://www.top1buyer.com/ #appid + VUE_APP_WECHAT_APPID='wx6bb2125514b4c1ff' # base api VUE_APP_BASE_API = '/stage-api' diff --git a/babel.config.js b/babel.config.js index 3fcb398..9a68476 100644 --- a/babel.config.js +++ b/babel.config.js @@ -1,5 +1,6 @@ +process.env.VUE_CLI_BABEL_TRANSPILE_MODULES = true module.exports = { - presets: ['@vue/app'], + presets: [['@vue/app', { useBuiltIns: 'entry' }]], plugins: [ [ 'import', diff --git a/build/index.js b/build/index.js index d1d939e..33aca52 100644 --- a/build/index.js +++ b/build/index.js @@ -3,7 +3,7 @@ const chalk = require('chalk') // const config = require('../vue.config.js') const rawArgv = process.argv.slice(2) const args = rawArgv.join(' ') - +// npm run preview -- --report if (process.env.npm_config_preview || rawArgv.includes('--preview')) { const report = rawArgv.includes('--report') diff --git a/package.json b/package.json index 4dcc7cf..0cbb0aa 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ "scripts": { "dev": "vue-cli-service serve", "build:prod": "vue-cli-service build", - "build:stage": "vue-cli-service build --mode staging", + "build:sit": "vue-cli-service build --mode staging", "preview": "node build/index.js --preview", "lint": "eslint --ext .js,.vue src", "test:unit": "jest --clearCache && vue-cli-service test:unit", @@ -15,8 +15,10 @@ "svgo": "svgo -f src/icons/svg --config=src/icons/svgo.yml" }, "dependencies": { + "@babel/polyfill": "^7.4.4", "@chenfengyuan/vue-qrcode": "^1.0.0", "axios": "0.18.0", + "core-js": "^2.6.9", "crypto-js": "^3.1.9-1", "good-storage": "^1.1.0", "js-cookie": "^2.2.0", @@ -52,6 +54,7 @@ "script-loader": "0.7.2", "serve-static": "^1.13.2", "svgo": "1.2.2", + "vconsole": "^2.5.2", "vue-template-compiler": "2.6.10" }, "engines": { diff --git a/public/index.1.html b/public/index.1.html new file mode 100644 index 0000000..8f3b79a --- /dev/null +++ b/public/index.1.html @@ -0,0 +1,27 @@ + + + + + + + + <% for (var i in + htmlWebpackPlugin.options.cdn&&htmlWebpackPlugin.options.cdn.css) { %> + + + <% } %> + <%= webpackConfig.name %> + + + +
+ + <% for (var i in + htmlWebpackPlugin.options.cdn&&htmlWebpackPlugin.options.cdn.js) { %> + + <% } %> + + + diff --git a/public/index.html b/public/index.html index 8f3b79a..3384720 100644 --- a/public/index.html +++ b/public/index.html @@ -5,11 +5,6 @@ - <% for (var i in - htmlWebpackPlugin.options.cdn&&htmlWebpackPlugin.options.cdn.css) { %> - - - <% } %> <%= webpackConfig.name %> @@ -18,10 +13,6 @@
- <% for (var i in - htmlWebpackPlugin.options.cdn&&htmlWebpackPlugin.options.cdn.js) { %> - - <% } %> diff --git a/src/api/coupon.js b/src/api/coupon.js new file mode 100644 index 0000000..8d813ae --- /dev/null +++ b/src/api/coupon.js @@ -0,0 +1,15 @@ +import qs from 'qs' +import request from '@/utils/request' +import { api } from '@/config' +// 签名 +import _bale from '@/utils/package' +// api + +// 查询我的优惠券 +export function getCouponList(params) { + return request({ + url: '/coupon/selectMyCoupon', + method: 'post', + data: qs.stringify(_bale('selectMyCoupon', params)) + }) +} diff --git a/src/api/user.js b/src/api/user.js index 3ff02f3..2a2ee88 100644 --- a/src/api/user.js +++ b/src/api/user.js @@ -4,12 +4,10 @@ import { api } from '@/config' // 签名 import _bale from '@/utils/package' // api -const { common_api } = api - // 登录 export function login(params) { return request({ - url: common_api + '/wechat/login.do', + url: '/wechat/login.do', method: 'post', data: qs.stringify(_bale('login', params)) }) @@ -17,16 +15,10 @@ export function login(params) { /** * 登录接口请求token与userinfo * @param params - * 入参 code:"021gj0OV1om5PU0k9VNV1VMQNV1gj0OK" - * 返回 { - * accessToken:'xxx', - * refreshToken:'xxx', - * userInfo:{} - * } */ export function loginByCode(params) { return request({ - url: common_api + '/wechat/auth2', + url: '/wechat/auth2', method: 'post', data: qs.stringify(_bale('auth2', params)) }) @@ -37,7 +29,7 @@ export function loginByCode(params) { */ export function getUserInfo(params) { return request({ - url: common_api + '/user/get_user', + url: '/user/get_user', method: 'post', data: qs.stringify(_bale('get_user', params)) }) @@ -49,7 +41,7 @@ export function getUserInfo(params) { */ export function getAccountInfo(params) { return request({ - url: common_api + '/wechat/selectVipUserInfo', + url: '/wechat/selectVipUserInfo', method: 'post', data: qs.stringify(_bale('selectVipUserInfo', params)) }) @@ -61,7 +53,7 @@ export function getAccountInfo(params) { */ export function sendCode(params) { return request({ - url: common_api + '/wechat/send_phone_code', + url: '/wechat/send_phone_code', method: 'post', data: qs.stringify(_bale('send_phone_code', params)) }) @@ -73,7 +65,7 @@ export function sendCode(params) { */ export function bindPhoneNumber(params) { return request({ - url: common_api + '/wechat/addPhoneNumber', + url: '/wechat/addPhoneNumber', method: 'post', data: qs.stringify(_bale('addPhoneNumber', params)) }) diff --git a/src/assets/css/index.scss b/src/assets/css/index.scss index ae8510b..de54bc7 100644 --- a/src/assets/css/index.scss +++ b/src/assets/css/index.scss @@ -118,7 +118,7 @@ div:focus { .app-container { } .van-hairline--top-bottom::after { - border-width: 0!important; + border-width: 0 !important; } .van-cell { line-height: 30px !important; @@ -143,3 +143,26 @@ div:focus { max-width: 10rem; min-width: 10rem; } +.my-header { + position: relative; + width: 100%; + background: #fff; + border-bottom:1px solid #E9E9E9; + .back-icon { + position: absolute; + width: 44px; + height: 44px; + box-sizing: border-box; + background: url('../../assets/images/arrow-left.png') no-repeat center + center; + background-size: 70% 70%; + } + .header-title { + font-size: 17px; + font-weight: 600; + height: 44px; + line-height: 44px; + text-align: center; + + } +} diff --git a/src/assets/images/arrow-left.png b/src/assets/images/arrow-left.png new file mode 100644 index 0000000000000000000000000000000000000000..70d2031c91bde13f5b43bd135eb4d81ef75220a2 GIT binary patch literal 838 zcmeAS@N?(olHy`uVBq!ia0vp^DIm*A)kmqaTg; z^(g&d>XP5_g_9*vys7_*n?T9)(>n?muHaYTXwr-Ec9e4RNV~Mtd}VO(|C@f{XWxE) z9UXhs_GIgijb0B9t&-{zR7lfja$qp@KCni{ibY^E%b8OPor&X4n8K3hU8VH0cS*gb z@hqQ9N$ob%za*Y`zj(=Vwa8^tE=rx?_I&St{?FPa*EKz7_*@b?v3a3!9?#9%Nnau^ z$xqe^K9#|`gu6%S7L$j$glqEXvvTep5(z_;NE>`(VoX*(CZ~|VVz9~a07p_vlaFDY$F9>0-`6bcDLx_N_LJ|=^Pf)*l(?AO zK4oh#6?tEp9%y@C#de8tl9S+s*^^E!-@1JM`$?zTTXjMiCv$lG+^iGX_~Ch*o1=pv z3!|!_>SAZVryFWi52Q3*&}>ui)|hiEJSnyO#HCN6+m6@N?_)~UpRm)9aj6l9hBm`8 z{+pYfBlh_?zL;X1(Dy>X>ZnMIUnFC3N_)&T%|G?;C;0IK6>EmyDl08~9<=!i6Jx65 z5;YDDV~wqj4l@^6G&C4F6*4j|{iK(jIr-w>ukC)an@ap1J~P(ln^JAxa@+Xr+z)L( zce@nEY&uqUcj1oaGjI2;d-^uffBhjbhh0vYtV^V)OmpBm^(E}_Q@IcN<~b5M?OWJ_ znq=Y6P`FMzRW1(Yfx#UaI(>DIkU>FgijR?lbCz`*gZ@RKKa<7!Y(zJZ$d`X$;XVI zd?r@13Kv->A7`EaN)vPFaUCa zG>|-h{ydNb0*LtO)29zyp1KC8i?1ZeFZe$L@2OW(GjFJzYm0CUk$I|-50v@i>Ealo zaenXRy?l(00_-0=bNp&d)GaNwoSHpc7T#O2<@N=kvs0z!x+!ISWT{~K$YQm&La92f zEHB)z{pGjm_3!f1o*(en{h?LDW2SM-^+TOYPe{m8b%jg#Fdap4T@ zgsby@CKTT*;P6}9d0Ov$$80_R&i4=Q_N-kNpfJzLFk(U4RZ*Kqaw)HbpQL)qca$2} z_N0e8o4c$zFVcUQfiwA!XxcQjzQlv;k65%C|7nysZczU~(x5LfZ#f%~ZSKGLmHC~( ziwUhI?7tsM{R#WEwDo29pG3t!3y#0uylwj0tRGL-J(G}^->Y9_9{1#Qe%+-1ABER^ Wa;=M&&h-I?1B0ilpUXO@geCxGsk2M~ literal 0 HcmV?d00001 diff --git a/src/assets/images/coupon/s-coupon-detail-up@2x.png b/src/assets/images/coupon/s-coupon-detail-up@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..7ac7e28bfdfd04e60e30555fef4f39f5c23dd84b GIT binary patch literal 378 zcmeAS@N?(olHy`uVBq!ia0vp^Iv~u#3?$#IayJ4}>H$6>uI>ds7cN{ld-m)ZFaR-=K49VKEyQpQQrl_PLGCJS`gDd`>?im}4Sd@CXI8 zaIbe1vt!*Z@TezQU@_lepTyQzZL>rfM8(=Hd>aHG`8comAk&c~#@_L1a==50j->BG z9iJ8lJhT-!YIW{%8felG3J|!1u zFYHo0<$qWF850&yJ{zLWw~vR7;bVhjmwzqa4`2u|c)I$ztaD0e F0sy|Qk@Wxo literal 0 HcmV?d00001 diff --git a/src/assets/images/coupon/s-coupon-empty@2x.png b/src/assets/images/coupon/s-coupon-empty@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..fe74de1e09ba0d535126f6095ae85bb8f4b04cd1 GIT binary patch literal 2414 zcma);`6CmI1ICve8CGsXIT~YfLNH*$$g6=UXqY2 z$1F$G8X?z^xfW@6q5yPFj)yzkb(dw-CSq9B|u zUsaG61Q<(C1hiQO2S>{fn=5jb{hl57eq`ZE1(O8n{{c#mn63l!!<5F3J_=f$IhOQ1 z`FTliC(c7%_77g}c7TFBd|yp(f7^Zr$?a`)=d-vki3wYO~k;Mo%MS;lEowMTUqK2v6;MOu^ zoP@uyk0NsjW{@;w!k|*m-U1b&Ts(U6aI>6_zihc3evogWSt<_#+#Y}iTgMfRyVgmD z&MX7^B}%~SYse|(-0fpajI8O0u>~sR%WgkDNw_>Pl^fY1NeJo?lvBqYyNn&%xEh6` zCyy!Q>uPCW;;{JBG*#*T4b$4&e+MDKZkNI`B8DI@`l$YiS;Ays2L(wd7DkdcV3Ims z8<|h6`6~i$Zb2G?K7T(yKueR?bVSnVc`?_>>KYza`fvY^uWm4O8ipb8;7wM#=v!i* z6RkWs@0Y((qHXXU6C<8YCLiQo4yCfC47FU;V_d{trCQZM1vAcvGm40jxp^OE zF=PHTb?s8;%VOVNN>i6po}7S0_h&*bM)Db0`b`?}jOG~AsFww54~uB3Mzl|^yjQl3 zotLYUP!uoWKl}~Hfmw!XP5H_}Z5ZLqCf#BwW1(;(9F(9>8?9oOmFaO;M&mr^aK#vM z`W!6f+%6V>EMSXwND{s-Te24{uAEZ~TN1l$KFYulSg@79xoJB8 z{NAvA1cyiIWl_ma^$*p+sDxv0ZhP9Vv&E3T-v z=jg+j?%|rhKSsXE7okU;RM5XtNc2Pg*lI!0s~&ZnG^<5$Ruh=-KBezx$#|3QheF8r z>6*MWQh&D)mLuLXOZXiT0wIGs47AvHB6>zn1$$a^lpYr`5k9nMGpEybwhj{(p{$S2 z>{jN@ZNo|DFvl%9KQ~!3!yVMN<8ngu^ZGfJ$E}`fT(`p^L{PZa5Q(T%rRJC4f#8)| zIp?;;2$O8xQXXZRmDGMk#C{b$g`84rH;6J7xq$V33gpIVZleqXkEOlS9z0kVTb5qd zjznR?Cr90rWT15c#2nhZ_8J+jUPEeGkKGvs-Vc9=4BtG0dqeDz+WsVBzh)5@{lP7E z--$FmhZpzkNF;p~mX!2#yjfMIiV>WQV?IYs#U{OJS8ES>Jt!vmM^NiTq91o+8)Rm8 zA@pao7*{+@1gb|`4;K`)PlHHE%JKh{Jn9%UeD8b?^F~68h6LoADmTnJLq+5CV36+( zMUc_$84{mIw);XItAJHXe4!$Q$j=}WRTDh^McO5b$O2AzmdBnNtkecDd$4 z;Mn5VQcccisaTtCFWnRCTf-%&1 zvc`m^D3`Ki+-zr|ex{Sb zyIPujFmT8kt%G?+%&-od8z~OS|D0vzXw}?>##j$bsPUwZQA*u0+LgFD z?UBpVcu~7yghsQ^vB2Ecj!G$HdBJD)uNpgbf&#F3{4*zvQwMVviwAntk|7}$S_WV7 zAzkyeRrVa}-G8OY5fwI|=P&D%F{?@z72mPo_Xl6=oqjlyEen&2sV|vT|CHN|euZCf z5m(QxDF3FCrqlI8ALf7$B>TnU!qi>dzt?-kTYuq{ZCB#f)W|_yGDrtyvAdXon0uj| zQmTheTdPa8ExT7l^rLq4RdZl|gTe`iNb!uT;e=sW(m z=NrC*N~bk8E%ZU~=Elx`2{1bGMRWbNcAa}EYc=n$Imx~X)~RFkqvF_RSBDw(3YM^h zgyKmR-amtdn!^k&6>hk_;Hu<*L(FrW1%?xv8`65-0vLpvJvSjlaFWO3-&LxTOT|x*G+wn2L7Zg5s2rC0m6o zy`GILlOCG2EA)hee>rEWpnJ6;2~pchDzEl + + + diff --git a/src/components/QrCodePopup.vue b/src/components/QrCodePopup.vue new file mode 100644 index 0000000..69d09ee --- /dev/null +++ b/src/components/QrCodePopup.vue @@ -0,0 +1,134 @@ + + + + + diff --git a/src/components/VerificationCode.vue b/src/components/VerificationCode.vue index 389a147..36ac959 100644 --- a/src/components/VerificationCode.vue +++ b/src/components/VerificationCode.vue @@ -7,12 +7,12 @@
绑定手机号
+86
- +
验证码
- +
{{ codeCountdown ? `${codeCountdown}后重新发送` : '发送验证码' }}
@@ -66,7 +66,10 @@ export default { // 绑定手机 bindPhoneNumber(this.verifyCodeForm).then(res => { // 绑定成功后关闭弹窗 - this.visible = false + Toast({ + message: '绑定成功' + }) + this.$emit('close') }).catch(() => { }) }, diff --git a/src/config/env.staging.js b/src/config/env.staging.js index cf6750d..ae1a853 100644 --- a/src/config/env.staging.js +++ b/src/config/env.staging.js @@ -3,7 +3,7 @@ module.exports = { baseUrl: 'https://test.top1buyer.com', api: { base_api: 'https://test.top1buyer.com/wx', - common_api: 'https://xxx.xxx.com/common' + common_api: 'https://test.top1buyer.com/wx' }, // package appid,appSecret APPID: 'Pc690487e95992c395633866b', diff --git a/src/filters/filter.js b/src/filters/filter.js index 59a867d..508fda6 100644 --- a/src/filters/filter.js +++ b/src/filters/filter.js @@ -1,5 +1,42 @@ +/** + *格式化时间 + *yyyy-MM-dd hh:mm:ss + */ +export function formatDate(time, fmt) { + if (time === undefined || '') { + return + } + const date = new Date(time) + if (/(y+)/.test(fmt)) { + fmt = fmt.replace( + RegExp.$1, + (date.getFullYear() + '').substr(4 - RegExp.$1.length) + ) + } + const o = { + 'M+': date.getMonth() + 1, + 'd+': date.getDate(), + 'h+': date.getHours(), + 'm+': date.getMinutes(), + 's+': date.getSeconds() + } + for (const k in o) { + if (new RegExp(`(${k})`).test(fmt)) { + const str = o[k] + '' + fmt = fmt.replace( + RegExp.$1, + RegExp.$1.length === 1 ? str : padLeftZero(str) + ) + } + } + return fmt +} + +function padLeftZero(str) { + return ('00' + str).substr(str.length) +} // 转为unicode 编码 -exports.encodeUnicode = str => { +export function encodeUnicode(str) { var res = [] for (var i = 0; i < str.length; i++) { res[i] = ('00' + str.charCodeAt(i).toString(16)).slice(-4) @@ -8,7 +45,7 @@ exports.encodeUnicode = str => { } // 解码 -exports.decodeUnicode = str => { +export function decodeUnicode(str) { if (str === undefined || '') { return } @@ -18,17 +55,26 @@ exports.decodeUnicode = str => { /* * 格式化金钱 */ -exports.formatMoney = value => { +export function formatMoney(value) { return Number(value).toFixed(2) } -exports.formatCentMoney = value => { +export function formatCentMoney(value) { if (value === undefined || '') { return } return Number(value / 100).toFixed(2) } // 昵称解码 -exports.formatName = nickname => { +export function formatName(nickname) { if (!nickname) return '' return decodeURIComponent(nickname) } +// 折扣转换 +export function formatPercent(percent_off) { + if (!percent_off) return '' + if (percent_off == 1) { + return '原价' + } + // 解决精度丢失问题 + return Math.round(percent_off * 100) / 10 +} diff --git a/src/filters/index.js b/src/filters/index.js index 786d979..534ccbf 100644 --- a/src/filters/index.js +++ b/src/filters/index.js @@ -1,10 +1,12 @@ import Vue from 'vue' -import filter from './filter' +import * as filter from './filter' Object.keys(filter).forEach(k => Vue.filter(k, filter[k])) +Vue.prototype.$formatDate = Vue.filter('formatDate') Vue.prototype.$encodeUnicode = Vue.filter('encodeUnicode') Vue.prototype.$decodeUnicode = Vue.filter('decodeUnicode') Vue.prototype.$formatMoney = Vue.filter('formatMoney') Vue.prototype.$formatCentMoney = Vue.filter('formatCentMoney') Vue.prototype.$formatName = Vue.filter('formatName') +Vue.prototype.$formatPercent = Vue.filter('formatPercent') diff --git a/src/main.js b/src/main.js index 8fbd841..60926f5 100644 --- a/src/main.js +++ b/src/main.js @@ -1,5 +1,5 @@ import Vue from 'vue' - +import '@babel/polyfill' import 'normalize.css/normalize.css' // A modern alternative to CSS resets import '@/assets/css/index.scss' // global css // 移动端适配 @@ -8,11 +8,14 @@ import App from './App' import store from './store' import router from './router' import '@/filters' // filters +import '@/utils/directives' // directives import '@/permission' // permission control import wechatAuth from './plugins/wechatAuth' // 微信登录插件 Vue.use(wechatAuth, { appid: process.env.VUE_APP_WECHAT_APPID }) +import VCconsole from 'vconsole' +Vue.use(VCconsole) Vue.config.productionTip = false new Vue({ diff --git a/src/permission.js b/src/permission.js index 5b772be..aa61f92 100644 --- a/src/permission.js +++ b/src/permission.js @@ -5,9 +5,14 @@ import wechatAuth from './plugins/wechatAuth' // 微信登录插件 const qs = require('qs') router.beforeEach((to, from, next) => { // next() - console.log(store.getters.loginStatus) + // store.dispatch('user/fedLogOut').then(() => { + // // location.reload() + // }) + // store.dispatch('user/setLoginStatus', 0) + // alert(store.getters.loginStatus) + // return false + // alert(store.getters.loginStatus) const loginStatus = Number(store.getters.loginStatus) - // console.log(loginStatus === 1) document.title = getPageTitle(to.meta.title) if (loginStatus === 0) { // 微信未授权登录跳转到授权登录页面 @@ -22,7 +27,9 @@ router.beforeEach((to, from, next) => { } else { loginUrl = url } + // alert(loginUrl) wechatAuth.redirect_uri = loginUrl + // 无论拒绝还是授权都设置成1 store.dispatch('user/setLoginStatus', 1) window.location.href = wechatAuth.authUrl } else if (loginStatus === 1) { @@ -31,27 +38,32 @@ router.beforeEach((to, from, next) => { wechatAuth.returnFromWechat(to.fullPath) } catch (err) { store.dispatch('user/setLoginStatus', 0) - next() + location.reload() + // next() } + // 同意授权 to.fullPath 携带code参数,拒绝授权没有code参数 + // alert(to.fullPath) // 重新赋值,不然获取不到code const code = wechatAuth.code - store - .dispatch('user/loginWechatAuth', code) - .then(res => { - console.log(res) - if (res.status === 200) { + // alert(code) + if (code) { + store + .dispatch('user/loginWechatAuth', code) + .then(res => { store.dispatch('user/setLoginStatus', 2) - } else { + next() + }) + .catch(() => { store.dispatch('user/setLoginStatus', 0) - } - next() - }) - .catch(() => { - store.dispatch('user/setLoginStatus', 0) - next() - }) + location.reload() + }) + } else { + store.dispatch('user/setLoginStatus', 0) + location.reload() + } } else { - // + // alert(to.fullPath) + next() } }) diff --git a/src/router/index.js b/src/router/index.js index 6f81e86..b301ade 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -38,7 +38,7 @@ export const constantRoutes = [ const createRouter = () => new Router({ mode: 'history', // require service support - base: '/', + base: '/antpublic', scrollBehavior: () => ({ y: 0 }), routes: constantRoutes }) diff --git a/src/store/modules/user.js b/src/store/modules/user.js index 11b56c7..1dc1ba5 100644 --- a/src/store/modules/user.js +++ b/src/store/modules/user.js @@ -71,6 +71,12 @@ const actions = { // 保存用户个人信息 setUserInfo({ commit, state }, query) { commit('SET_USERINFO', saveUserInfo(query)) + }, + // 登出 + fedLogOut({ commit, state }, query) { + removeToken() + removeUserInfo() + commit('SET_LOGIN_STATUS', saveLoginStatus(0)) } } diff --git a/src/utils/directives.js b/src/utils/directives.js new file mode 100644 index 0000000..fae168e --- /dev/null +++ b/src/utils/directives.js @@ -0,0 +1,33 @@ +import Vue from 'vue' + +Vue.directive('focus', { + inserted: function(el) { + // 获取焦点 + el.focus() + } +}) + +Vue.directive('numberOnly', { + inserted: function(el) { + // 获取焦点 + el.handler = function() { + el.value = el.value.replace(/[^\d]/g, '') + } + el.addEventListener('input', el.handler) + } +}) +Vue.directive('resetPage', { + inserted: function(el) { + // 监听键盘收起事件 + document.body.addEventListener('focusout', () => { + if (/(iPhone|iPad|iPod|iOS)/i.test(navigator.userAgent)) { + // 软键盘收起的事件处理 + setTimeout(() => { + const scrollHeight = + document.documentElement.scrollTop || document.body.scrollTop || 0 + window.scrollTo(0, Math.max(scrollHeight - 1, 0)) + }, 100) + } + }) + } +}) diff --git a/src/utils/request.js b/src/utils/request.js index 82cf737..5fd7209 100644 --- a/src/utils/request.js +++ b/src/utils/request.js @@ -35,10 +35,14 @@ service.interceptors.response.use( response => { Toast.clear() const res = response.data + if (res.status && res.status !== 200) { + Toast({ + message: res.info + }) // 登录超时,重新登录 if (res.status === 401) { - store.dispatch('FedLogOut').then(() => { + store.dispatch('user/fedLogOut').then(() => { location.reload() }) } diff --git a/src/views/account/coupon.vue b/src/views/account/coupon.vue index 671c8d8..970f4f1 100644 --- a/src/views/account/coupon.vue +++ b/src/views/account/coupon.vue @@ -1,129 +1,211 @@ diff --git a/src/views/account/index.vue b/src/views/account/index.vue index eb11d2d..7a047af 100644 --- a/src/views/account/index.vue +++ b/src/views/account/index.vue @@ -9,8 +9,8 @@
{{ vipInfo.nickName|formatName }}
代购编号:{{ vipInfo.userCode }}
-
- +
+
- - - - - + + + +