pay.js 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548
  1. var __request = require('../../utils/request.js')
  2. var _handle = require('../../utils/handle.js')
  3. var validator = require('../../utils/validator.js')
  4. Page({
  5. data: {
  6. orderId: 0,
  7. payData: {},
  8. address: null,
  9. pick_address: null,
  10. selectaddress:false,
  11. selectpickaddress:false,
  12. balanceInfo: {},
  13. centInfo:{},
  14. userInfo: {},
  15. radish: 0,
  16. pwd: '',
  17. pwdDialog: false,
  18. useRadishSelect: false,
  19. useRadishSelectVal: 'select',
  20. showModal: false,
  21. luoboCount: '',
  22. countMoney: '',
  23. curPayway: 'weixinpay',
  24. payway: {
  25. weixin: 'weixinpay',
  26. balance: 'balance',
  27. cent: 'cent'
  28. },
  29. total:0,
  30. yunfei:0,
  31. _yunfei:0,
  32. payFlag:false,
  33. useBalance:false,
  34. afterdec:0,//使用提货券扣除后的总额
  35. remark:'',
  36. receivetype:0,//提货方式
  37. pickdepartsList:[],
  38. repickdepartsList:[],
  39. pickindex:0,
  40. pickid:0,
  41. },
  42. onLoad: function (options) {
  43. this.data.orderId = options.orderId;
  44. this.getOrderInfo()
  45. // this.getBalanceInfo()
  46. wx.setStorageSync('use_address', false);
  47. wx.setStorageSync('use_pick_address', false);
  48. wx.setStorageSync('receivetype', 0);
  49. this.getpickdeparts();
  50. },
  51. onShow: function () {
  52. this.getUserInfo()
  53. var receivetype = wx.getStorageSync('receivetype');
  54. if(receivetype == 0){
  55. var address = wx.getStorageSync('use_address');
  56. if(address){
  57. this.setData({
  58. address: address,
  59. selectaddress:true,
  60. receivetype : receivetype,
  61. yunfei : this.data._yunfei
  62. });
  63. }
  64. }else{
  65. var address = wx.getStorageSync('use_pick_address');
  66. if(address){
  67. this.setData({
  68. pick_address: address,
  69. selectpickaddress:true,
  70. receivetype : receivetype,
  71. yunfei : 0
  72. });
  73. }
  74. }
  75. this.setData({
  76. payFlag: false
  77. })
  78. },
  79. inputPwd: function (e) {
  80. this.setData({
  81. pwd: e.detail.value
  82. })
  83. },
  84. checkboxChange: function (e) {
  85. if (e.detail.value[0]) {
  86. this.setData({
  87. useRadishSelect: true,
  88. useRadishSelectVal: 'select'
  89. })
  90. } else {
  91. this.setData({
  92. useRadishSelect: false
  93. })
  94. }
  95. },
  96. getOrderInfo: function () {
  97. var that = this
  98. var url = "v1/order/" + that.data.orderId;
  99. var params = {}
  100. var success = function (val) {
  101. if (val.data && val.data.product && !val.data.product.robo_balance_price) {
  102. that.setData({
  103. curPayway: 'weixinpay'
  104. })
  105. }
  106. var total = 0;
  107. for(var i in val.data.product_list){
  108. total = total + (val.data.product_list[i].price * val.data.product_list[i].count)
  109. }
  110. var canusebalance = 0;
  111. var nousebalance = 0;
  112. for(var i in val.data.product_list){
  113. var item = val.data.product_list[i];
  114. if(item.pv >= item.price){
  115. canusebalance = canusebalance + (item.price * item.count);
  116. }else{
  117. nousebalance = nousebalance + (item.price * item.count);
  118. }
  119. }
  120. console.log('canusebalance',canusebalance);
  121. console.log('nousebalance',nousebalance);
  122. that.setData({
  123. payData: val.data,
  124. project: val.data.product_list,
  125. total:total,
  126. yunfei:that.data.receivetype == 0 ? total<9900?val.data.freight:0 : 0,
  127. _yunfei:total<9900?val.data.freight:0,
  128. canusebalance:canusebalance,
  129. nousebalance:nousebalance
  130. });
  131. if(that.data.payData.order_type == 3){
  132. that.getCentInfo();
  133. }else{
  134. that.getBalanceInfo();
  135. }
  136. }
  137. __request.$get(url, params, success)
  138. },
  139. getDefaultAddress: function () {
  140. var that = this
  141. var url = "v1/user/address/default";
  142. var params = {}
  143. var success = function (val) {
  144. if (val.data !== null) {
  145. that.setData({
  146. address: val.data
  147. });
  148. }
  149. }
  150. __request.$get(url, params, success)
  151. },
  152. getBalanceInfo: function () {
  153. var that = this
  154. var url = "v1/user/balance/info";
  155. var params = {}
  156. var success = function (val) {
  157. // console.log('showusebalance:',(val.data.total > 0 && that.data.payData.order_type == 0))
  158. var afterdec = 0;
  159. if(that.data.receivetype == 0){
  160. console.log('val.data.total',val.data.total);
  161. console.log('that.data.canusebalance',that.data.canusebalance);
  162. console.log('that.data.yunfei',that.data.yunfei);
  163. if(parseInt(val.data.total) >= parseInt(that.data.canusebalance) + parseInt(that.data.yunfei)){
  164. afterdec = that.data.nousebalance;
  165. }else{
  166. afterdec = Math.abs((that.data.canusebalance + that.data.yunfei)-val.data.total) + that.data.nousebalance;
  167. }
  168. }else{
  169. if(parseInt(val.data.total) >= parseInt(that.data.canusebalance)){
  170. afterdec = that.data.nousebalance;
  171. }else{
  172. afterdec = Math.abs((that.data.canusebalance)-val.data.total) + that.data.nousebalance;
  173. }
  174. }
  175. that.setData({
  176. balanceInfo: val.data,
  177. cache: false,
  178. // curPayway:val.data.total >= (that.data.total + that.data.yunfei)?'balance':'weixinpay'
  179. curPayway:'weixinpay',
  180. // useBalance:(val.data.total > 0 && that.data.payData.order_type == 0 && that.data.payData.pv >= that.data.payData.total_price)? true:false,
  181. useBalance:(val.data.total > 0 && that.data.payData.order_type == 0)? true:false,
  182. afterdec: afterdec
  183. });
  184. }
  185. __request.$get(url, params, success)
  186. },
  187. getCentInfo: function () {
  188. var that = this
  189. var url = "v1/user/cent/info";
  190. var params = {}
  191. var success = function (val) {
  192. // console.log('showusebalance:',(val.data.total > 0 && that.data.payData.order_type == 0))
  193. that.setData({
  194. centInfo: val.data,
  195. cache: false,
  196. curPayway:'cent',
  197. useBalance:false,
  198. afterdec:that.data.receivetype == 0 ? parseInt(val.data.total) >= parseInt(that.data.total) + parseInt(that.data.yunfei)?'0':(that.data.total + that.data.yunfei)-val.data.total : 0
  199. });
  200. }
  201. __request.$get(url, params, success)
  202. },
  203. switchChange:function(e){
  204. var that = this;
  205. that.setData({
  206. useBalance:e.detail.value
  207. })
  208. },
  209. getUserInfo: function () {
  210. var that = this
  211. var url = "v1/user/info";
  212. var params = {
  213. cache: false
  214. }
  215. var success = function (val) {
  216. that.setData({
  217. userInfo: val.data
  218. });
  219. }
  220. __request.$get(url, params, success)
  221. },
  222. cancelDialog: function () {
  223. this.setData({
  224. pwdDialog: false
  225. })
  226. },
  227. toPay: function (e) {
  228. if(this.data.payFlag){
  229. wx.showToast({
  230. title: '支付中,请稍后...',
  231. icon: 'none',
  232. duration: 2000
  233. })
  234. return false;
  235. }
  236. _handle.setFormId(e)
  237. var that = this
  238. this.setData({
  239. payFlag: true
  240. })
  241. if (that.data.receivetype == 0 && !that.data.address) {
  242. wx.showToast({
  243. title: '请先填写地址',
  244. icon: 'none',
  245. duration: 2000
  246. })
  247. that.setData({
  248. payFlag: false
  249. })
  250. } else if (that.data.receivetype == 0 && !validator.required1(this.data.address.contact)) {
  251. wx.showToast({
  252. title: '国家安全局规定:运单禁止出现“先生”,“小姐”,“女士”等,请重新填写地址',
  253. icon: 'none',
  254. duration: 2000
  255. })
  256. that.setData({
  257. payFlag: false
  258. })
  259. }else if (that.data.receivetype == 1 && !that.data.pick_address) {
  260. wx.showToast({
  261. title: '请先选择提货人',
  262. icon: 'none',
  263. duration: 2000
  264. })
  265. that.setData({
  266. payFlag: false
  267. })
  268. }else if (that.data.receivetype == 1 && !that.data.pickid) {
  269. wx.showToast({
  270. title: '请选择自提门店',
  271. icon: 'none',
  272. duration: 2000
  273. })
  274. that.setData({
  275. payFlag: false
  276. })
  277. } else {
  278. if (that.data.curPayway === 'balance') {
  279. var p
  280. if (that.data.project) {
  281. p = that.data.balanceInfo.total - that.data.project.robo_balance_price * that.data.payData.count
  282. }
  283. if (p < 0) {
  284. this.setData({
  285. luoboCount: -(that.data.balanceInfo.total - that.data.project.robo_balance_price * that.data.payData.count),
  286. showModal: true,
  287. countMoney: -(that.data.balanceInfo.total - that.data.project.robo_balance_price * that.data.payData.count) / 100,
  288. payFlag: false
  289. })
  290. } else {
  291. that.pay()
  292. }
  293. } else if (that.data.curPayway === 'cent') {
  294. // var b
  295. // if (that.data.project) {
  296. // b = that.data.balanceInfo.dc_total - that.data.project.mall_balance_price * that.data.payData.count
  297. // }
  298. // if (b < 0) {
  299. // this.setData({
  300. // luoboCount: that.data.project.mall_balance_price * that.data.payData.count - that.data.balanceInfo.dc_total,
  301. // showModal: true,
  302. // payFlag: false
  303. // })
  304. // } else {
  305. that.pay()
  306. // }
  307. } else if (that.data.curPayway === 'weixinpay') {
  308. if(that.data.useBalance && that.data.afterdec > 0){
  309. wx.showModal({
  310. title: '提示',
  311. content: '订单将抵扣 '+ (that.data.payData.coupon_price>0?that.data.payData.coupon_price/100:((that.data.total+that.data.yunfei)-that.data.afterdec) / 100)+' 元提货券,剩下 '+(that.data.afterdec / 100)+' 元将由微信支付,祝您购物愉快!' ,
  312. success: function (sm) {
  313. if (sm.confirm) {
  314. that.pay()
  315. } else if (sm.cancel) {
  316. console.log('用户点击取消')
  317. that.setData({
  318. payFlag: false
  319. })
  320. }
  321. }
  322. })
  323. }else{
  324. that.pay()
  325. }
  326. }
  327. // if (!that.data.userInfo.user.has_trade_pwd) {
  328. // that.setPwdDialog()
  329. // } else {
  330. // if (that.data.balanceInfo.total - that.data.project.price * that.data.payData.count < 0) {
  331. // this.setData({
  332. // luoboCount: -(that.data.balanceInfo.total - that.data.project.price * that.data.payData.count),
  333. // showModal: true,
  334. // countMoney: -(that.data.balanceInfo.total - that.data.project.price * that.data.payData.count) / 100
  335. // })
  336. // } else {
  337. // that.setData({
  338. // pwdDialog: true
  339. // })
  340. // if (that.data.useRadishSelect) {
  341. // that.setData({
  342. // pwdDialog: true
  343. // })
  344. // } else {
  345. // that.openToast('请勾选使用提货券兑换~')
  346. // }
  347. // }
  348. // }
  349. }
  350. },
  351. onCancel: function () {
  352. this.setData({
  353. showModal: false
  354. });
  355. },
  356. onConfirm: function () {
  357. wx.navigateTo({
  358. url: '/packageUser/pages/user/exchange/exchange'
  359. })
  360. },
  361. onConfirm1: function() {
  362. wx.navigateTo({
  363. url: '/packageUser/pages/user/buy/buy?path=/pages/pay/pay&orderId=' + this.data.orderId +
  364. '&luoboCount=' + this.data.luoboCount + '&countMoney=' + this.data.countMoney
  365. })
  366. // /pages/pay/pay?order_id=EX201807206A91F25E
  367. },
  368. onConfirm2: function () {
  369. wx.navigateTo({
  370. url: '/pages/parse/parse?id=8'
  371. })
  372. },
  373. preventTouchMove: function () {
  374. },
  375. selectClick: function (e) {
  376. var that = this
  377. that.setData({
  378. curPayway: e.target.dataset.payway
  379. });
  380. },
  381. pay: function () {
  382. var that = this
  383. var url = "v1/pay";
  384. var params;
  385. if(that.data.receivetype == 0){
  386. params = {
  387. pick_way: 0,
  388. order_id: that.data.orderId,
  389. trad_pwd: that.data.pwd,
  390. pay_way: that.data.curPayway,
  391. address_id: that.data.address.id,
  392. s: 'xcx',
  393. use_coupon:that.data.useBalance,
  394. remark:that.data.remark
  395. }
  396. }else{
  397. params = {
  398. pick_way: 1,
  399. order_id: that.data.orderId,
  400. trad_pwd: that.data.pwd,
  401. pay_way: that.data.curPayway,
  402. s: 'xcx',
  403. use_coupon:that.data.useBalance,
  404. remark:that.data.remark,
  405. pick_dept:that.data.pickid,
  406. pick_addr_id:that.data.pick_address.id
  407. }
  408. }
  409. console.log('onpay',params)
  410. var success = function (val) {
  411. console.log(val);
  412. if(val.statusCode === 200){
  413. if (that.data.curPayway === 'weixinpay' && val.data.need_wx) {
  414. wx.requestPayment({
  415. 'timeStamp': val.data.pay_data.timeStamp,
  416. 'nonceStr': val.data.pay_data.nonceStr,
  417. 'package': val.data.pay_data.package,
  418. 'signType': val.data.pay_data.signType,
  419. 'paySign': val.data.pay_data.paySign,
  420. 'success':function(res){
  421. wx.showToast({
  422. title: '支付成功',
  423. icon: 'success',
  424. duration: 1000
  425. })
  426. wx.navigateTo({
  427. // url: '/packageUser/pages/user/orders/orders'
  428. url: '/pages/projects/project-success/project-success?id=' + that.data.orderId
  429. })
  430. },
  431. 'fail':function(res){
  432. that.setData({
  433. payFlag: false
  434. })
  435. }
  436. })
  437. } else {
  438. that.setData({
  439. pay: val.data
  440. });
  441. wx.redirectTo({
  442. // url: '/packageUser/pages/user/orders/orders'
  443. url: '/pages/projects/project-success/project-success?id=' + that.data.orderId
  444. })
  445. }
  446. that.setData({
  447. payFlag: false
  448. })
  449. }else{
  450. that.setData({
  451. payFlag: false
  452. })
  453. }
  454. }
  455. var fail = function(err){
  456. that.setData({
  457. payFlag: false
  458. })
  459. }
  460. __request.$post(url, params, success, fail)
  461. },
  462. setPwdDialog: function () {
  463. wx.showModal({
  464. title: '提示',
  465. confirmColor: '#eab86a',
  466. content: '您未设置交易密码,是否前往设置?',
  467. success: function(res) {
  468. if (res.confirm) {
  469. wx.navigateTo({
  470. url: '/packageUser/pages/user/safe/safe'
  471. })
  472. } else if (res.cancel) {
  473. }
  474. }
  475. })
  476. },
  477. onShareAppMessage: function (val) {
  478. return _request.share({
  479. sc: 'xcx_pay'
  480. })
  481. },
  482. bindremark (e) {
  483. this.setData({
  484. remark: e.detail.value
  485. })
  486. },
  487. receivetbn(e){
  488. this.setData({
  489. receivetype: e.target.dataset.value,
  490. yunfei : e.target.dataset.value == 0 ? this.data._yunfei : 0
  491. })
  492. wx.setStorageSync('receivetype', e.target.dataset.value) //存入
  493. this.getBalanceInfo()
  494. },
  495. getpickdeparts: function () {
  496. var that = this
  497. var url = "v1/pick_departs";
  498. var params = {}
  499. var success = function (val) {
  500. let list = [];
  501. for(var i in val.data){
  502. list.push(val.data[i]['pick_address']+'-'+val.data[i]['pick_title'])
  503. }
  504. that.setData({
  505. pickdepartsList:val.data,
  506. repickdepartsList:list,
  507. pickindex: 0,
  508. pickid:val.data[0]['id']
  509. })
  510. }
  511. __request.$get(url, params, success)
  512. },
  513. bindPickerChange: function(e) {
  514. console.log('picker发送选择改变,携带值为', e.detail.value)
  515. var that = this;
  516. this.setData({
  517. pickindex: e.detail.value,
  518. pickid:that.data.pickdepartsList[e.detail.value]['id']
  519. })
  520. },
  521. })