wxLogin.vue 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344
  1. <template>
  2. <view class="content">
  3. <view class="back-img"><image src="http://shicai.liuniu946.com/static/img/img22.png" model="scoll-img"></image></view>
  4. <view class="back-name"><image src="http://shicai.liuniu946.com/static/img/img24.png" model="scoll-img"></image></view>
  5. <!-- <view class="name">美天选菜</view>
  6. <view class="tip">台州买菜用美天</view> -->
  7. <button class="weixin" open-type="getUserInfo" @getuserinfo="userInfoData">微信用户一键登录</button>
  8. <!-- <view class="login" @click="Tologin">手机号码登录</view> -->
  9. <view class="info">
  10. 登录代表你已同意
  11. <view class="text">
  12. <view class="text" @click="agreement">美天选菜用户协议,</view>
  13. <view class="text" @click="privacy">美天选菜隐私协议</view>
  14. </view>
  15. </view>
  16. <view class="Mask" v-show="MaskShow">
  17. <view class="Mask-box">
  18. <view class="title">申请获取您的手机号</view>
  19. <view class="text">为了方便您的取货和我们的送货,并获取更多优惠活动,需要您的手机授权</view>
  20. <button class="weixin" open-type="getPhoneNumber" @getphonenumber="PhoneNumber">获取手机号授权</button>
  21. </view>
  22. </view>
  23. </view>
  24. </template>
  25. <script>
  26. import { mapMutations, mapState } from 'vuex';
  27. // #ifdef MP-WEIXIN
  28. import { loginWinxinMp } from '@/utils/wxMinProgram';
  29. import { wechatMpAuth } from '@/api/wx';
  30. // #endif
  31. // #ifdef H5
  32. import { loginWinxin } from '@/utils/wxAuthorized';
  33. // #endif
  34. import { getUserInfo, bangding } from '@/api/login.js';
  35. export default {
  36. data() {
  37. return {
  38. userInfo: {}, //授权用户信息
  39. code: '', //授权code
  40. selected: false,
  41. disabled: false,
  42. MaskShow: false,
  43. address: '',
  44. cache_key: '',
  45. iv: '',
  46. encryptedData: ''
  47. };
  48. },
  49. onShow(option) {
  50. this.loadData();
  51. },
  52. methods: {
  53. ...mapMutations('user',['login', 'setUserInfo']),
  54. // 获取微信登录信息
  55. loadData() {
  56. // #ifdef H5
  57. loginWinxin();
  58. // #endif
  59. // #ifdef MP-WEIXIN
  60. let obj = this;
  61. wx.login({
  62. success(e) {
  63. obj.code = e.code;
  64. },
  65. fill: function(e) {}
  66. });
  67. // #endif
  68. },
  69. // 用户确认授权
  70. userInfoData(e) {
  71. let user = e.detail;
  72. user.code = this.code;
  73. this.loadMp(user);
  74. this.disabled = true;
  75. },
  76. // #ifdef MP-WEIXIN
  77. // 登录
  78. loadMp(option) {
  79. let obj = this;
  80. // 获取登录授权页数据
  81. // 获取推广人id
  82. let spread_spid = uni.getStorageSync('spread') || '';
  83. let spread_code = uni.getStorageSync('spread_code') || '';
  84. // uni.showModal({
  85. // title: 'spread_spid',
  86. // content: spread_spid,
  87. // });
  88. wechatMpAuth({
  89. code: option.code,
  90. iv: option.iv,
  91. encryptedData: option.encryptedData,
  92. spread_spid: spread_spid,
  93. spread_code: spread_code
  94. }).then(({ data }) => {
  95. obj.wchatAuth(data);
  96. });
  97. },
  98. // #endif
  99. wchatAuth(data) {
  100. let obj = this;
  101. // 保存token
  102. uni.setStorageSync('token', data.token);
  103. obj.cache_key = data.cache_key;
  104. uni.setStorageSync('cache_key', data.cache_key);
  105. // 获取用户基础信息
  106. getUserInfo({}).then(e => {
  107. obj.login();
  108. // 保存返回用户数据
  109. obj.setUserInfo(e.data);
  110. // obj.address = uni.getStorageSync('addressData') || '';
  111. if (e.data.phone == null) {
  112. obj.MaskShow = true;
  113. } else {
  114. obj.ToIndex();
  115. }
  116. });
  117. },
  118. // 绑定手机号
  119. PhoneNumber(e) {
  120. let obj = this;
  121. obj.MaskShow = false;
  122. (obj.iv = e.detail.iv), (obj.encryptedData = e.detail.encryptedData);
  123. uni.setStorageSync('code', obj.code);
  124. bangding({
  125. flag: 1,
  126. cache_key: obj.cache_key,
  127. code: obj.code,
  128. iv: obj.iv,
  129. encryptedData: obj.encryptedData
  130. }).then(function(e) {
  131. if (e.data.is_bind == 1) {
  132. console.log('bangding1')
  133. bangding({
  134. flag: 1,
  135. cache_key: obj.cache_key,
  136. code: obj.code,
  137. iv: obj.iv,
  138. encryptedData: obj.encryptedData,
  139. step: 1
  140. })
  141. .then(function(e) {
  142. // 获取用户基础信息
  143. obj.GetUser();
  144. obj.$api.msg(e.msg);
  145. obj.$nextTick(function() {
  146. obj.ToIndex();
  147. });
  148. })
  149. .catch(e => {
  150. console.log(e);
  151. });
  152. } else {
  153. console.log('bangding2')
  154. obj.$api.msg(e.msg);
  155. // 获取用户基础信息
  156. obj.GetUser();
  157. obj.$api.msg(e.msg);
  158. obj.$nextTick(function() {
  159. obj.ToIndex();
  160. });
  161. }
  162. });
  163. },
  164. GetUser() {
  165. // 获取用户基础信息
  166. getUserInfo({})
  167. .then(({ data }) => {
  168. this.setUserInfo(data);
  169. console.log(data,11)
  170. console.log(uni.getStorageSync('userInfo'),55)
  171. })
  172. .catch(e => {
  173. console.log(e);
  174. });
  175. },
  176. ToIndex() {
  177. let obj = this;
  178. // if (obj.address == '') {
  179. // uni.navigateTo({
  180. // url: '/pages/index/index'
  181. // });
  182. // } else {
  183. console.log(11111111)
  184. let ur = uni.getStorageSync('present') || '/pages/index/index';
  185. // 用于处理缓存bug
  186. if (ur == 'pages/product/product') {
  187. console.log(2222222)
  188. ur = '/pages/index/index';
  189. }
  190. uni.switchTab({
  191. url: ur,
  192. fail(e) {
  193. uni.navigateTo({
  194. url: ur,
  195. fail(e) {
  196. uni.navigateTo({
  197. url: '/pages/index/index'
  198. });
  199. }
  200. });
  201. }
  202. });
  203. // let userInfo = uni.getStorageSync('userInfo');
  204. // if ( userInfo.is_promoter == 1 ) {
  205. // uni.navigateTo({
  206. // url: '/pages/groupBooking/index',
  207. // fail(e) {
  208. // uni.navigateTo({
  209. // url: '/pages/index/index'
  210. // })
  211. // }
  212. // })
  213. // } else {
  214. // uni.switchTab({
  215. // url: ur,
  216. // fail(e) {
  217. // uni.navigateTo({
  218. // url: ur,
  219. // fail(e) {
  220. // uni.navigateTo({
  221. // url: '/pages/index/index'
  222. // });
  223. // }
  224. // });
  225. // }
  226. // });
  227. // }
  228. // }
  229. },
  230. //手机号登录
  231. Tologin() {
  232. uni.navigateTo({
  233. url: '/pages/public/login'
  234. });
  235. },
  236. // 菜佬用户协议
  237. agreement() {
  238. uni.navigateTo({
  239. url: '/pages/public/agreement'
  240. });
  241. },
  242. //隐私协议
  243. privacy() {
  244. uni.navigateTo({
  245. url: '/pages/public/privacy'
  246. });
  247. }
  248. }
  249. };
  250. </script>
  251. <style lang="scss">
  252. page {
  253. background: #ffffff;
  254. height: 100%;
  255. .content {
  256. height: 100%;
  257. text-align: center;
  258. .Mask {
  259. position: fixed;
  260. top: 0;
  261. width: 100%;
  262. height: 100%;
  263. background-color: rgba(51, 51, 51, 0.7);
  264. .Mask-box {
  265. margin: auto;
  266. margin-top: 320rpx;
  267. padding: 50rpx 50rpx;
  268. width: 80%;
  269. height: 450rpx;
  270. top: 500rpx;
  271. left: 10%;
  272. background-color: #ffffff;
  273. border-radius: 15rpx;
  274. .title {
  275. font-size: 35rpx;
  276. font-weight: 700;
  277. }
  278. .text {
  279. font-size: 30rpx;
  280. color: #848484;
  281. padding-top: 50rpx;
  282. }
  283. }
  284. }
  285. }
  286. }
  287. .back-img {
  288. width: 100%;
  289. height: 501rpx;
  290. image {
  291. width: 100%;
  292. height: 100%;
  293. }
  294. }
  295. .back-name {
  296. margin: 0rpx auto;
  297. margin-top: 50rpx;
  298. width: 239rpx;
  299. height: 98rpx;
  300. image {
  301. width: 100%;
  302. height: 100%;
  303. }
  304. }
  305. .name {
  306. color: #48ac34;
  307. font-size: 55rpx;
  308. font-weight: bold;
  309. letter-spacing: 15rpx;
  310. margin-top: 35rpx;
  311. }
  312. .tip {
  313. color: #48ac34;
  314. font-weight: bold;
  315. font-size: 28rpx;
  316. letter-spacing: 30rpx;
  317. }
  318. .weixin {
  319. background: linear-gradient(90deg, rgba(36, 214, 78, 1), rgba(45, 187, 89, 1));
  320. width: 65%;
  321. margin: 70rpx auto;
  322. color: #ffffff;
  323. border-radius: 50rpx;
  324. border: none;
  325. }
  326. .login {
  327. font-size: 26rpx;
  328. font-weight: 500;
  329. text-decoration: underline;
  330. }
  331. .info {
  332. position: fixed;
  333. bottom: 60rpx;
  334. margin: 0rpx auto;
  335. width: 100%;
  336. font-size: 26rpx;
  337. .text {
  338. color: #2cbf57;
  339. display: inline-block;
  340. }
  341. }
  342. </style>