index.vue 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310
  1. <template>
  2. <view>
  3. <u-navbar :is-back="false" title=" " :border-bottom="false">
  4. <view class="u-flex u-row-right" style="width: 100%;">
  5. <view class="camera u-flex u-row-center">
  6. <u-icon name="camera-fill" color="#000000" size="48"></u-icon>
  7. </view>
  8. </view>
  9. </u-navbar>
  10. <vue-qrcode v-if="qrcontent" :value='qrcontent' :options="{ width: 200 }"></vue-qrcode>
  11. <view class="u-flex user-box u-p-l-30 u-p-r-20 u-p-b-30">
  12. <view class="u-m-r-10" @click="login($store.state.vuex_hasLogin)">
  13. <u-avatar :src="userInfo.imgUrl||pic" size="140"></u-avatar>
  14. </view>
  15. <view class="u-flex-1" @click="login($store.state.vuex_hasLogin)">
  16. <view class="u-font-18 u-p-b-20">{{ userInfo.nickname || '请登录' }}</view>
  17. <view class="u-font-14 u-tips-color">手机号:{{ userInfo.tel || '暂无' }}</view>
  18. </view>
  19. <view class="u-m-l-10 u-p-10">
  20. <u-icon name="scan" color="#969799" size="28"></u-icon>
  21. </view>
  22. <view class="u-m-l-10 u-p-10">
  23. <u-icon name="arrow-right" color="#969799" size="28"></u-icon>
  24. </view>
  25. </view>
  26. <view class="u-m-t-20">
  27. <u-cell-group>
  28. <u-cell-item icon="rmb-circle" title="微信支付" v-if="userAgent!='aliAgent'" @click="submitOrder()"></u-cell-item>
  29. <u-cell-item icon="rmb-circle" title="微信退款" v-if="userAgent!='aliAgent'" @click="refund()"></u-cell-item>
  30. <u-cell-item icon="rmb-circle" title="支付宝支付" v-if="userAgent!='wxAgent'" @click="handleAliPay()"></u-cell-item>
  31. <u-cell-item icon="rmb-circle" title="支付宝支付退款" v-if="userAgent!='wxAgent'" @click="handleAliRefund()"></u-cell-item>
  32. <!-- <u-cell-item icon="rmb-circle" title="支付宝gotoPayPage" v-if="userAgent!='wxAgent'" @click="handleAliPayPage()"></u-cell-item> -->
  33. <u-cell-item icon="rmb-circle" title="支付宝生成收款码" v-if="userAgent!='wxAgent'" @click="handleAligetPayimg()"></u-cell-item>
  34. </u-cell-group>
  35. </view>
  36. <view class="u-m-t-20">
  37. <u-cell-group>
  38. <u-cell-item icon="star" title="收藏"></u-cell-item>
  39. <u-cell-item icon="photo" title="相册"></u-cell-item>
  40. <u-cell-item icon="coupon" title="卡券"></u-cell-item>
  41. <u-cell-item icon="heart" title="关注"></u-cell-item>
  42. </u-cell-group>
  43. </view>
  44. <view class="u-m-t-20">
  45. <u-cell-group>
  46. <!-- <u-cell-item icon="setting" title="设置"></u-cell-item> -->
  47. <u-cell-item icon="setting" :title="vuex_user.tel?'更换手机号':'绑定手机号'" @click="openPage('/pages/template/bindPhoneNumber/bindPhoneNumber')"></u-cell-item>
  48. <u-cell-item icon="lock-opened-fill" title="退出" v-if="vuex_hasLogin" @click="logout"></u-cell-item>
  49. </u-cell-group>
  50. </view>
  51. <u-toast ref="uToast" />
  52. </view>
  53. </template>
  54. <script>
  55. import VueQrcode from '@chenfengyuan/vue-qrcode'
  56. export default {
  57. components:{
  58. VueQrcode
  59. },
  60. data() {
  61. return {
  62. pic:'https://uviewui.com/common/logo.png',
  63. show:true,
  64. userInfo:[],
  65. requested:true,
  66. userAgent:null,
  67. //二维码内容
  68. qrcontent:null,
  69. }
  70. },
  71. onLoad() {
  72. if(this.$store.state.vuex_hasLogin){
  73. this.userInfo = this.$store.state.vuex_user;
  74. }else{
  75. this.userInfo = [];
  76. };
  77. //判断客户端类别
  78. if (/MicroMessenger/.test(window.navigator.userAgent)) {
  79. this.userAgent = "wxAgent";
  80. // console.log('handleAliPay 微信客户端');
  81. } else if (/AlipayClient/.test(window.navigator.userAgent)) {
  82. this.userAgent = "aliAgent";
  83. // console.log('handleAliPay 支付宝客户端');
  84. } else {
  85. this.userAgent = "otherAgent";
  86. // console.log('handleAliPay 其他浏览器');
  87. };
  88. },
  89. methods: {
  90. openPage(path) {
  91. console.log('path',path);
  92. this.$u.route({
  93. url: path
  94. })
  95. },
  96. showToast() {
  97. this.$refs.uToast.show({
  98. title: this.message || "请设置提示语",
  99. type: this.messageType||"success",
  100. icon:false,
  101. // url: '/pages/user/index'
  102. })
  103. },
  104. //登录判断
  105. login(status){
  106. if(!status){
  107. console.log('config',this.config);
  108. window.location.replace(this.config.loginUrl)
  109. }
  110. },
  111. //提交校验
  112. submitOrder:function(){
  113. if(!this.vuex_hasLogin){
  114. this.message = "请先登录"
  115. this.showToast();
  116. return;
  117. }
  118. if(this.requested){
  119. this.requested = false;
  120. uni.showLoading({
  121. title: '订单生成中。'
  122. });
  123. // if(this.cartList.length == 0){
  124. // this.$api.msg("请先选择产品!")
  125. // return;
  126. // }else{
  127. // let userInfo = uni.getStorageSync("userInfo");
  128. // console.log( uni.getStorageSync("linkType") );
  129. let params = {
  130. // customerId:userInfo.guid,
  131. // list:this.cartList,
  132. // linkType: uni.getStorageSync("linkType") || '',
  133. // activityId:uni.getStorageSync("togetherId") || ''
  134. }
  135. this.syncData(params);
  136. // }
  137. }else{
  138. // this.showToast();
  139. setTimeout(()=>{
  140. uni.showLoading({
  141. title: '订单生成中。'
  142. });
  143. },2000);
  144. return
  145. };
  146. },
  147. //订单提交,拿到订单id
  148. syncData(data){
  149. this.$u.api.createOrder(data)
  150. .then(res=>{
  151. this.requested = true;
  152. console.log('res',res);
  153. if(res.retHead.errCode == 0){
  154. // this.pullWeichatPay(res.retBody)
  155. this.pullWeichatPay(res.retBody.orderId)
  156. uni.setStorage({
  157. key:'wxTradeNo',
  158. data:res.retBody.orderId
  159. });
  160. }else{
  161. this.message = res.retHead.errMsg;
  162. this.showToast();
  163. }
  164. uni.hideLoading()
  165. }).catch(err=>{console.log('createOrder err',err)})
  166. },
  167. //拉起微信支付
  168. async pullWeichatPay(id){
  169. let params = {
  170. orderId:id,
  171. openid:this.$store.state.vuex_user.openId,
  172. tradeType:"test"
  173. }
  174. this.$pay.wxPay(params).then(res =>{
  175. if(res.code == 0){
  176. uni.reLaunch({
  177. url: '/pages/buySuccess/buySuccess?orderId=' + params.orderId
  178. })
  179. }else if(res.code == 1){
  180. uni.redirectTo({
  181. url: '/pages/userCenter/myOrder/myOrder'
  182. })
  183. }else if(res.code == 2){
  184. this.message = "支付失败,请检查!"
  185. this.showToast();
  186. setTimeout(()=>{
  187. uni.redirectTo({
  188. url: '/pages/userCenter/myOrder/myOrder'
  189. });
  190. },1000)
  191. }
  192. })
  193. },
  194. //退出
  195. logout(){
  196. this.$u.vuex('vuex_hasLogin', false);
  197. this.$router.go(0);
  198. },
  199. //退款
  200. refund(){
  201. let orderId = null;
  202. try {
  203. orderId = uni.getStorageSync('wxTradeNo');
  204. if (orderId) {
  205. console.log(orderId);
  206. }
  207. } catch (e) {
  208. console.log('handleAliRefund e',e)
  209. // error
  210. };
  211. this.$u.api.refund({orderId:orderId,refundDesc:'测试'})
  212. .then(res =>{
  213. this.message = res.retHead.errMsg;
  214. this.showToast();
  215. console.log('refund res',res)
  216. }).catch(err=>{
  217. this.message = err.retHead.errMsg;
  218. this.showToast();
  219. console.log('refund err',err)
  220. })
  221. },
  222. //支付宝支付
  223. handleAliPay(){
  224. let tradeNo = new Date().getTime();
  225. uni.setStorage({
  226. key:'aliTradeNo',
  227. data:tradeNo
  228. });
  229. this.$u.api.alipage({outTradeNo:tradeNo})
  230. .then(res=>{
  231. let divForm = document.getElementsByTagName('divform')
  232. if (divForm.length) {
  233. document.body.removeChild(divForm[0])
  234. }
  235. const div = document.createElement('divform')
  236. div.innerHTML = res.retBody // res.data就是sb支付宝返回给你的form
  237. document.body.appendChild(div);
  238. // document.forms[0].setAttribute('target', '_blank') // 加了_blank可能出问题所以我注释了
  239. document.punchout_form.submit();
  240. // document.getElementById('alipay_submit').submit();
  241. console.log('alipage',res);
  242. }).catch(err=>{
  243. console.log('alipage err',err);
  244. })
  245. },
  246. //支付宝退款
  247. handleAliRefund(){
  248. let aliTradeNo = null;
  249. try {
  250. aliTradeNo = uni.getStorageSync('aliTradeNo');
  251. if (aliTradeNo) {
  252. console.log(aliTradeNo);
  253. }
  254. } catch (e) {
  255. console.log('handleAliRefund e',e)
  256. // error
  257. };
  258. this.$u.api.alirefund({outTradeNo:aliTradeNo})
  259. .then(res=>{
  260. alert(res.retHead.errMsg);
  261. console.log('handleAliRefund res',res);
  262. }).catch(err=>{
  263. console.log('handleAliRefund err',err);
  264. })
  265. },
  266. handleAliPayPage(){
  267. this.$u.api.aliPayPage()
  268. .then(res=>{
  269. console.log('handleAliPayPage res',res);
  270. }).catch(err=>{
  271. console.log('handleAliPayPage err',err);
  272. })
  273. },
  274. handleAligetPayimg(){
  275. let tradeNo = new Date().getTime();
  276. this.$u.api.getPayimg({outTradeNo:tradeNo})
  277. .then(res=>{
  278. this.qrcontent = res.retBody;
  279. console.log('handleAliPayPage res',res);
  280. }).catch(err=>{
  281. console.log('handleAliPayPage err',err);
  282. })
  283. }
  284. }
  285. }
  286. </script>
  287. <style lang="scss">
  288. page{
  289. background-color: #ededed;
  290. }
  291. .camera{
  292. width: 54px;
  293. height: 44px;
  294. &:active{
  295. background-color: #ededed;
  296. }
  297. }
  298. .user-box{
  299. background-color: #fff;
  300. }
  301. </style>