index.vue 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375
  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-item icon="rmb-circle" title="支付宝条码支付" v-if="userAgent!='wxAgent'" @click="handleShowScanner()"></u-cell-item>
  35. <u-cell-item icon="rmb-circle" title="贵州银行支付" @click="guizhouPay()"></u-cell-item>
  36. </u-cell-group>
  37. </view>
  38. <view class="u-m-t-20">
  39. <u-cell-group>
  40. <u-cell-item icon="star" title="收藏"></u-cell-item>
  41. <u-cell-item icon="photo" title="相册"></u-cell-item>
  42. <u-cell-item icon="coupon" title="卡券"></u-cell-item>
  43. <u-cell-item icon="heart" title="关注"></u-cell-item>
  44. </u-cell-group>
  45. </view>
  46. <view class="u-m-t-20">
  47. <u-cell-group>
  48. <!-- <u-cell-item icon="setting" title="设置"></u-cell-item> -->
  49. <u-cell-item icon="setting" :title="vuex_user.tel?'更换手机号':'绑定手机号'" @click="openPage('/pages/template/bindPhoneNumber/bindPhoneNumber')"></u-cell-item>
  50. <u-cell-item icon="lock-opened-fill" title="退出" v-if="vuex_hasLogin" @click="logout"></u-cell-item>
  51. </u-cell-group>
  52. </view>
  53. <!-- 获取扫描信息 -->
  54. <view class="scanner" v-if="showScanner" @click.self="handleCloseScanner"><!-- @click="handleCloseScanner" -->
  55. <!-- <u-input v-model="scannerText" type="text" :focus="true" :border="true" @change="scannerChange" /> -->
  56. <u-field v-model="scannerText" :focus="true" label-width="0" label="" placeholder="请使用扫描枪扫码" confirm="scannerChange">
  57. </u-field>
  58. <u-button type="primary" @click="handleBarcode">确定</u-button>
  59. </view>
  60. <u-toast ref="uToast" />
  61. </view>
  62. </template>
  63. <script>
  64. import VueQrcode from '@chenfengyuan/vue-qrcode'
  65. export default {
  66. components:{
  67. VueQrcode
  68. },
  69. data() {
  70. return {
  71. pic:'https://uviewui.com/common/logo.png',
  72. show:true,
  73. userInfo:[],
  74. requested:true,
  75. userAgent:null,
  76. //二维码内容
  77. qrcontent:null,
  78. // 扫描枪内容
  79. scannerText:null,
  80. showScanner:false,
  81. }
  82. },
  83. onLoad() {
  84. if(this.$store.state.vuex_hasLogin){
  85. this.userInfo = this.$store.state.vuex_user;
  86. }else{
  87. this.userInfo = [];
  88. };
  89. //判断客户端类别
  90. if (/MicroMessenger/.test(window.navigator.userAgent)) {
  91. this.userAgent = "wxAgent";
  92. // console.log('handleAliPay 微信客户端');
  93. } else if (/AlipayClient/.test(window.navigator.userAgent)) {
  94. this.userAgent = "aliAgent";
  95. // console.log('handleAliPay 支付宝客户端');
  96. } else {
  97. this.userAgent = "otherAgent";
  98. // console.log('handleAliPay 其他浏览器');
  99. };
  100. },
  101. methods: {
  102. openPage(path) {
  103. console.log('path',path);
  104. this.$u.route({
  105. url: path
  106. })
  107. },
  108. showToast() {
  109. this.$refs.uToast.show({
  110. title: this.message || "请设置提示语",
  111. type: this.messageType||"success",
  112. icon:false,
  113. // url: '/pages/user/index'
  114. })
  115. },
  116. //登录判断
  117. login(status){
  118. if(!status){
  119. console.log('config',this.config);
  120. window.location.replace(this.config.loginUrl)
  121. }
  122. },
  123. //提交校验
  124. submitOrder:function(){
  125. if(!this.vuex_hasLogin){
  126. this.message = "请先登录"
  127. this.showToast();
  128. return;
  129. }
  130. if(this.requested){
  131. this.requested = false;
  132. uni.showLoading({
  133. title: '订单生成中。'
  134. });
  135. // if(this.cartList.length == 0){
  136. // this.$api.msg("请先选择产品!")
  137. // return;
  138. // }else{
  139. // let userInfo = uni.getStorageSync("userInfo");
  140. // console.log( uni.getStorageSync("linkType") );
  141. let params = {
  142. // customerId:userInfo.guid,
  143. // list:this.cartList,
  144. // linkType: uni.getStorageSync("linkType") || '',
  145. // activityId:uni.getStorageSync("togetherId") || ''
  146. }
  147. this.syncData(params);
  148. // }
  149. }else{
  150. // this.showToast();
  151. setTimeout(()=>{
  152. uni.showLoading({
  153. title: '订单生成中。'
  154. });
  155. },2000);
  156. return
  157. };
  158. },
  159. //订单提交,拿到订单id
  160. syncData(data){
  161. this.$u.api.createOrder(data)
  162. .then(res=>{
  163. this.requested = true;
  164. console.log('res',res);
  165. if(res.retHead.errCode == 0){
  166. // this.pullWeichatPay(res.retBody)
  167. this.pullWeichatPay(res.retBody.orderId)
  168. uni.setStorage({
  169. key:'wxTradeNo',
  170. data:res.retBody.orderId
  171. });
  172. }else{
  173. this.message = res.retHead.errMsg;
  174. this.showToast();
  175. }
  176. uni.hideLoading()
  177. }).catch(err=>{console.log('createOrder err',err)})
  178. },
  179. //拉起微信支付
  180. async pullWeichatPay(id){
  181. let params = {
  182. orderId:id,
  183. openid:this.$store.state.vuex_user.openId,
  184. tradeType:"test"
  185. }
  186. this.$pay.wxPay(params).then(res =>{
  187. if(res.code == 0){
  188. uni.reLaunch({
  189. url: '/pages/buySuccess/buySuccess?orderId=' + params.orderId
  190. })
  191. }else if(res.code == 1){
  192. uni.redirectTo({
  193. url: '/pages/userCenter/myOrder/myOrder'
  194. })
  195. }else if(res.code == 2){
  196. this.message = "支付失败,请检查!"
  197. this.showToast();
  198. setTimeout(()=>{
  199. uni.redirectTo({
  200. url: '/pages/userCenter/myOrder/myOrder'
  201. });
  202. },1000)
  203. }
  204. })
  205. },
  206. //退出
  207. logout(){
  208. this.$u.vuex('vuex_hasLogin', false);
  209. this.$router.go(0);
  210. },
  211. //退款
  212. refund(){
  213. let orderId = null;
  214. try {
  215. orderId = uni.getStorageSync('wxTradeNo');
  216. if (orderId) {
  217. console.log(orderId);
  218. }
  219. } catch (e) {
  220. console.log('handleAliRefund e',e)
  221. // error
  222. };
  223. this.$u.api.refund({orderId:orderId,refundDesc:'测试'})
  224. .then(res =>{
  225. this.message = res.retHead.errMsg;
  226. this.showToast();
  227. console.log('refund res',res)
  228. }).catch(err=>{
  229. this.message = err.retHead.errMsg;
  230. this.showToast();
  231. console.log('refund err',err)
  232. })
  233. },
  234. //支付宝支付
  235. handleAliPay(){
  236. let tradeNo = new Date().getTime();
  237. uni.setStorage({
  238. key:'aliTradeNo',
  239. data:tradeNo
  240. });
  241. this.$u.api.alipage({outTradeNo:tradeNo})
  242. .then(res=>{
  243. let divForm = document.getElementsByTagName('divform')
  244. if (divForm.length) {
  245. document.body.removeChild(divForm[0])
  246. }
  247. const div = document.createElement('divform')
  248. div.innerHTML = res.retBody // res.data就是sb支付宝返回给你的form
  249. document.body.appendChild(div);
  250. // document.forms[0].setAttribute('target', '_blank') // 加了_blank可能出问题所以我注释了
  251. document.punchout_form.submit();
  252. // document.getElementById('alipay_submit').submit();
  253. console.log('alipage',res);
  254. }).catch(err=>{
  255. console.log('alipage err',err);
  256. })
  257. },
  258. //支付宝退款
  259. handleAliRefund(){
  260. let aliTradeNo = null;
  261. try {
  262. aliTradeNo = uni.getStorageSync('aliTradeNo');
  263. if (aliTradeNo) {
  264. console.log(aliTradeNo);
  265. }
  266. } catch (e) {
  267. console.log('handleAliRefund e',e)
  268. // error
  269. };
  270. this.$u.api.alirefund({outTradeNo:aliTradeNo})
  271. .then(res=>{
  272. alert(res.retHead.errMsg);
  273. console.log('handleAliRefund res',res);
  274. }).catch(err=>{
  275. console.log('handleAliRefund err',err);
  276. })
  277. },
  278. handleAliPayPage(){
  279. this.$u.api.aliPayPage()
  280. .then(res=>{
  281. console.log('handleAliPayPage res',res);
  282. }).catch(err=>{
  283. console.log('handleAliPayPage err',err);
  284. })
  285. },
  286. handleAligetPayimg(){
  287. let tradeNo = new Date().getTime();
  288. this.$u.api.getPayimg({outTradeNo:tradeNo})
  289. .then(res=>{
  290. this.qrcontent = res.retBody;
  291. console.log('handleAliPayPage res',res);
  292. }).catch(err=>{
  293. console.log('handleAliPayPage err',err);
  294. })
  295. },
  296. // handleShowScanner
  297. handleShowScanner(){
  298. this.scannerText = null,
  299. this.showScanner = true;
  300. },
  301. handleCloseScanner(){
  302. this.scannerText = null,
  303. this.showScanner = false;
  304. },
  305. handleBarcode(){
  306. this.$u.api.barcode({authCode:this.scannerText})
  307. .then(res=>{
  308. console.log('handleBarcode res',res);
  309. this.scannerText = null;
  310. this.showScanner = false;
  311. console.log('this.scannerText',this.scannerText);
  312. alert(res.retHead.errMsg);
  313. }).catch(err=>{
  314. this.scannerText = null;
  315. console.log('this.scannerText',this.scannerText);
  316. console.log('handleBarcode err',err);
  317. })
  318. },
  319. // 贵州银行支付
  320. guizhouPay(){
  321. let tradeNo = new Date().getTime();
  322. uni.setStorage({
  323. key:'gzbankTradeNo',
  324. data:tradeNo
  325. });
  326. this.$u.api.gzbank({orderId:tradeNo,openid:'111'})
  327. .then(res=>{
  328. console.log('gzbank',res);
  329. // let divForm = document.getElementsByTagName('divform')
  330. // if (divForm.length) {
  331. // document.body.removeChild(divForm[0])
  332. // }
  333. // const div = document.createElement('divform')
  334. // div.innerHTML = res.retBody // res.data就是sb支付宝返回给你的form
  335. // document.body.appendChild(div);
  336. // // document.forms[0].setAttribute('target', '_blank') // 加了_blank可能出问题所以我注释了
  337. // document.punchout_form.submit();
  338. // // document.getElementById('alipay_submit').submit();
  339. // console.log('alipage',res);
  340. }).catch(err=>{
  341. console.log('gzbank err',err);
  342. });
  343. }
  344. }
  345. }
  346. </script>
  347. <style lang="scss">
  348. page{
  349. background-color: #ededed;
  350. }
  351. .camera{
  352. width: 54px;
  353. height: 44px;
  354. &:active{
  355. background-color: #ededed;
  356. }
  357. }
  358. .user-box{
  359. background-color: #fff;
  360. }
  361. // 获取扫描枪内容
  362. .scanner{position: fixed;left: 0;top: 0;bottom: 0;right: 0;padding: 0 20px;background: rgba(0,0,0,0.5);z-index: 999;display: flex;align-items: center;justify-content: center;}
  363. .scanner .u-field{background-color: #fff;}
  364. </style>