wxLogin.vue 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422
  1. <template>
  2. <view class="content">
  3. <!-- #ifndef H5 -->
  4. <view class="logo-img-box">
  5. <image class="logo-img" src="../../static/img/logo.png" mode=" aspectFit"></image>
  6. <!-- <button class="userInfo" type="warn" @click="userInfoData()" :class="{'nocaction': isclick}">
  7. <text class="iconfont iconweixin"></text>
  8. <text>
  9. 微信授权登录
  10. </text>
  11. </button> -->
  12. <view class="two" @click="checkboxChange">
  13. <radio style="transform:scale(0.7)" color="#f65067" :checked="istype" />
  14. 我已阅读并同意
  15. <text @click.stop="mzss">《隐私政策》</text>
  16. </view>
  17. <button class="userInfo" :class="{'nocaction': isclick}" open-type="getPhoneNumber"
  18. @getphonenumber="decryptPhoneNumber" v-if="istype">
  19. <text class="iconfont iconweixin"></text>
  20. <text>
  21. 微信用户一键登录
  22. </text>
  23. </button>
  24. <button class="userInfo" :class="{'nocaction': true}" v-if="!istype">
  25. <text class="iconfont iconweixin"></text>
  26. <text>
  27. 微信用户一键登录
  28. </text>
  29. </button>
  30. </view>
  31. <!-- #endif -->
  32. <uni-popup ref="popup" type="center">
  33. <scroll-view scroll-y="true" class="mzsm-wrap">
  34. <view class="" style="font-size: 28rpx;text-align: center;padding: 20rpx 0;">
  35. 隐私政策
  36. </view>
  37. <view style="white-space: pre-line;">
  38. 本指引是想亮商城小程序开发者“台州六牛传媒策划有限公司”(以下简称“开发者”)为处理你的个人信息而制定。
  39. 开发者处理的信息
  40. · 为了便于小程序内展示用户信息,且方便线下处理客诉问题作为一个参考值,开发者将在获取你的明示同意后,收集你的微信昵称、头像。
  41. · 为了便于给用户推荐匹配度更高的商品,开发者将在获取你的明示同意后,收集你的位置信息。
  42. · 为了用户下单需求,方便处理物流、售后等问题,开发者将在获取你的明示同意后,收集你的手机号。
  43. · 为了部分场景下用户对于素材信息主动保存,开发者将在获取你的明示同意后,使用你的相册(仅写入)权限。
  44. · 开发者收集你选中的照片或视频信息,用于用户发表评论时可做出更具象的描述。
  45. · 开发者收集你的地址,用于用户下单需求,方便处理物流、售后等问题。
  46. · 开发者收集你的身份证号码,用于用户下单需求,根据商家的到店使用需求。
  47. 第三方插件信息/SDK信息
  48. 为实现特定功能,开发者可能会接入由第三方提供的插件/SDK。第三方插件/SDK的个人信息处理规则,请以其公示的官方说明为准。探店台州严选小程序接入的第三方插件信息/SDK信息如下:<br />
  49. 插件名称:小程序直播组件
  50. 插件提供方名称: 深圳市腾讯计算机系统有限公司
  51. 插件名称:微信支付券
  52. 插件提供方名称: 财付通支付科技有限公司
  53. 第三方服务商信息
  54. 想亮商城小程序由浙江六牛科技有限公司代为开发,开发者保证,浙江六牛科技有限公司将在本指引规定范围内处理你的个人信息。
  55. 你的权益
  56. 关于你的个人信息,你可以通过以下方式与开发者联系,行使查阅、复制、更正、删除等法定权利。
  57. - 邮箱: 1334991396@qq.com
  58. 开发者对信息的存储
  59. 开发者承诺,除法律法规另有规定外,开发者对你的信息的保存期限应当为实现处理目的所必要的最短时间。
  60. 信息的使用规则
  61. 开发者将会在本指引所明示的用途内使用收集的信息
  62. 如开发者使用你的信息超出本指引目的或合理范围,开发者必须在变更使用目的或范围前,再次以公告方式告知并征得你的明示同意。
  63. 信息对外提供
  64. 开发者承诺,不会主动共享或转让你的信息至任何第三方,如存在确需共享或转让时,开发者应当直接征得或确认第三方征得你的单独同意。
  65. 开发者承诺,不会对外公开披露你的信息,如必须公开披露时,开发者应当向你告知公开披露的目的、披露信息的类型及可能涉及的信息,并征得你的单独同意。
  66. 若你认为开发者未遵守上述约定,或有其他的投诉建议、或未成年人个人信息保护相关问题,可通过以下方式与开发者联系;或者向微信进行投诉。
  67. - 邮箱: 1334991396@qq.com
  68. 更新日期:2022年6月24日
  69. 生效日期:2022年6月24日
  70. </view>
  71. </scroll-view>
  72. </uni-popup>
  73. </view>
  74. </template>
  75. <script>
  76. import {
  77. getUserInfo,
  78. bangding
  79. } from '@/api/login.js';
  80. // #ifdef H5
  81. import {
  82. loginWinxin
  83. } from '@/utils/wxAuthorized';
  84. // #endif
  85. // #ifdef MP-WEIXIN
  86. import {
  87. loginWinxinMp
  88. } from '@/utils/wxMinProgram';
  89. import {
  90. wechatMpAuth
  91. } from '@/api/wx';
  92. // #endif
  93. import {
  94. mapMutations,
  95. mapState
  96. } from 'vuex';
  97. export default {
  98. data() {
  99. return {
  100. userInfo: {}, //授权用户信息
  101. code: '', //授权code
  102. isclick: false, //是否点击了
  103. isShow:false,
  104. istype: false
  105. };
  106. },
  107. onLoad(option) {
  108. // #ifdef H5
  109. this.loadData();
  110. // #endif
  111. },
  112. computed: {
  113. // ...mapState(['baseURL','urlFile'])
  114. },
  115. methods: {
  116. // ...mapMutations(['login', 'setUserInfo']),
  117. checkboxChange() {
  118. this.istype = !this.istype;
  119. console.log(this.istype);
  120. },
  121. mzss() {
  122. this.$refs.popup.open();
  123. },
  124. mzssClose() {
  125. this.$refs.popup.close();
  126. },
  127. decryptPhoneNumber(e) {
  128. console.log(e)
  129. let obj = this
  130. if(obj.isclick) {
  131. return
  132. }
  133. let spread_spid = uni.getStorageSync('spread') || '';
  134. // #ifdef MP
  135. let spread_code = uni.getStorageSync('spread_code') || '';
  136. // #endif
  137. obj.isclick = true
  138. if (e.detail.errMsg == 'getPhoneNumber:fail user deny') { //用户点击拒绝
  139. // uni.showToast({
  140. // title: '请绑定手机号',
  141. // duration: 5000,
  142. // icon: 'none',
  143. // });
  144. obj.isclick = false
  145. } else {
  146. wx.login({
  147. success(res) {
  148. console.log(e, 'loginWinxinMp');
  149. obj.code = res.code;
  150. console.log(res.code,'res.code')
  151. console.log( e.detail,' e.detail+++++')
  152. wechatMpAuth({
  153. code: obj.code,
  154. iv: e.detail.iv,
  155. encryptedData: e.detail.encryptedData,
  156. spread_spid: spread_spid,
  157. // #ifdef MP
  158. spread_code: spread_code,
  159. // #endif
  160. }).then(({
  161. data
  162. }) => {
  163. obj.isclick = false
  164. obj.wchatAuth(data);
  165. console.log(data, 'wechatMpAuth++++++++++++++++++++++++++')
  166. }).catch(err => {
  167. // obj.loding = false;
  168. // uni.hideLoading();
  169. });
  170. },
  171. fill: function(e) {
  172. console.log(e)
  173. }
  174. })
  175. }
  176. },
  177. ...mapMutations('user', ['login', 'setUserInfo']),
  178. loadData() {
  179. let obj = this;
  180. // #ifdef H5
  181. loginWinxin();
  182. // #endif
  183. // #ifdef MP-WEIXIN
  184. loginWinxinMp().then(() => {
  185. wx.login({
  186. success(e) {
  187. console.log(e, 'loginWinxinMp');
  188. obj.code = e.code;
  189. },
  190. fill: function(e) {
  191. console.log(e)
  192. }
  193. })
  194. });
  195. // #endif
  196. },
  197. // 用户确认授权
  198. userInfoData() {
  199. let that = this
  200. wx.getUserProfile({
  201. desc: '用于完善会员资料', // 声明获取用户个人信息后的用途,后续会展示在弹窗中,请谨慎填写
  202. success: res => {
  203. console.log(res, 'that.userInfo+++++++++++++++++++')
  204. that.userInfo = res;
  205. uni.showLoading({
  206. title: '授权中',
  207. mask: true
  208. });
  209. that.loadMp();
  210. },
  211. fail: err => {
  212. that.isclick = false
  213. uni.showToast({
  214. title: '您拒绝了请求,不能正常使用小程序',
  215. icon: 'error',
  216. duration: 2000
  217. });
  218. return;
  219. }
  220. });
  221. // this.userInfo = e;
  222. // console.log(e,'用户确认授权')
  223. // this.loadMp()
  224. },
  225. // #ifdef MP-WEIXIN
  226. loadMp() {
  227. let obj = this;
  228. // 获取登录授权页数据
  229. let user = obj.userInfo;
  230. console.log(user)
  231. // 获取推广人id
  232. let spread_spid = uni.getStorageSync('spread') || '';
  233. // #ifdef MP
  234. let spread_code = uni.getStorageSync('spread_code') || '';
  235. // #endif
  236. wechatMpAuth({
  237. code: obj.code,
  238. iv: user.iv,
  239. encryptedData: user.encryptedData,
  240. spread_spid: spread_spid,
  241. // #ifdef MP
  242. spread_code: spread_code,
  243. // #endif
  244. }).then(({
  245. data
  246. }) => {
  247. obj.wchatAuth(data);
  248. console.log(data, 'wechatMpAuth++++++++++++++++++++++++++')
  249. }).catch(err => {
  250. // obj.loding = false;
  251. // uni.hideLoading();
  252. });
  253. },
  254. // #endif
  255. wchatAuth(data) {
  256. let obj = this;
  257. // 保存token
  258. uni.setStorageSync('token', data.token);
  259. console.log(data.token, 'token++++++++++++++')
  260. // 获取用户基础信息
  261. getUserInfo({}).then(e => {
  262. console.log('userInfo+++++++++++', e)
  263. obj.login();
  264. uni.hideLoading();
  265. // 保存返回用户数据
  266. obj.setUserInfo(e.data);
  267. let ur = uni.getStorageSync('present') || '/pages/index/index';
  268. // 用于处理缓存bug
  269. if (ur == 'pages/product/product' || ur == '/pages/public/wxLogin') {
  270. ur = '/pages/index/index'
  271. }
  272. uni.switchTab({
  273. url: ur,
  274. fail(e) {
  275. uni.navigateTo({
  276. url: ur,
  277. fail(e) {
  278. uni.navigateTo({
  279. url: '/pages/index/index',
  280. });
  281. }
  282. });
  283. }
  284. });
  285. });
  286. },
  287. // 绑定手机号
  288. PhoneNumber(e) {
  289. let obj = this;
  290. obj.MaskShow = false;
  291. (obj.iv = e.detail.iv), (obj.encryptedData = e.detail.encryptedData);
  292. uni.setStorageSync('code', obj.code);
  293. bangding({
  294. flag: 1,
  295. cache_key: obj.cache_key,
  296. code: obj.code,
  297. iv: obj.iv,
  298. encryptedData: obj.encryptedData
  299. }).then(function(e) {
  300. if (e.data.is_bind == 1) {
  301. console.log('bangding1');
  302. bangding({
  303. flag: 1,
  304. cache_key: obj.cache_key,
  305. code: obj.code,
  306. iv: obj.iv,
  307. encryptedData: obj.encryptedData,
  308. step: 1
  309. })
  310. .then(function(e) {
  311. // 获取用户基础信息
  312. obj.GetUser();
  313. obj.$api.msg(e.msg);
  314. obj.$nextTick(function() {
  315. obj.ToIndex();
  316. });
  317. })
  318. .catch(e => {
  319. console.log(e);
  320. });
  321. } else {
  322. console.log('bangding2');
  323. obj.$api.msg(e.msg);
  324. // 获取用户基础信息
  325. obj.GetUser();
  326. obj.$api.msg(e.msg);
  327. obj.$nextTick(function() {
  328. obj.ToIndex();
  329. });
  330. }
  331. });
  332. },
  333. }
  334. };
  335. </script>
  336. <style lang="scss">
  337. page,
  338. .content {
  339. height: 100%;
  340. background-color: #fff;
  341. }
  342. .bg-img,
  343. .logo-img-box {
  344. position: absolute;
  345. top: 0;
  346. left: 0;
  347. width: 100%;
  348. height: 100%;
  349. }
  350. .logo-img {
  351. margin-top: 20vh;
  352. margin-left: 176rpx;
  353. width: 385rpx;
  354. height: 394rpx;
  355. }
  356. .userInfo {
  357. margin: 0 100rpx;
  358. margin-top: 50rpx;
  359. color: #FFFFFF;
  360. border-radius: 99rpx;
  361. background-color: $base-color;
  362. }
  363. .nocaction {
  364. background: #999 !important;
  365. }
  366. .two {
  367. margin: 20rpx 0;
  368. width: 750rpx;
  369. font-size: 28rpx;
  370. text-align: center;
  371. font-family: PingFang SC;
  372. font-weight: 500;
  373. color: #999999;
  374. text {
  375. color: #f65067;
  376. }
  377. }
  378. .mzsm-wrap {
  379. width: 500rpx;
  380. height: 600rpx;
  381. background-color: #fff;
  382. border-radius: 20rpx;
  383. padding: 20rpx;
  384. text-align: justify;
  385. font-size: 26rpx;
  386. }
  387. </style>