pay.js 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641
  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(val.data.special_promotion){//新增双十一促销判断
  115. canusebalance = canusebalance + (item.price * item.count);
  116. }else{
  117. if(item.pv >= item.price){
  118. canusebalance = canusebalance + (item.price * item.count);
  119. }else{
  120. nousebalance = nousebalance + (item.price * item.count);
  121. }
  122. }
  123. }
  124. console.log('canusebalance',canusebalance);
  125. console.log('nousebalance',nousebalance);
  126. that.setData({
  127. payData: val.data,
  128. project: val.data.product_list,
  129. total:total,
  130. yunfei:that.data.receivetype == 0 ? total<9900?val.data.freight:0 : 0,
  131. _yunfei:total<9900?val.data.freight:0,
  132. canusebalance:canusebalance,
  133. nousebalance:nousebalance
  134. });
  135. if(that.data.payData.order_type == 3){
  136. that.getCentInfo();
  137. }else{
  138. that.getBalanceInfo();
  139. }
  140. if(val.data.pay_way != '' && (val.data.address_id != 0 || val.data.pick_dept != 0)){
  141. if(val.data.pick_way == 0){
  142. that.getAddress(val.data.address_id);
  143. that.setData({
  144. selectaddress:true,
  145. receivetype : val.data.pick_way,
  146. yunfei : val.data.freight,
  147. remark : val.data.remark
  148. });
  149. }else{
  150. // that.getPickAddress(val.data.pick_dept);
  151. var pid = 0;
  152. for(var i = 0;i<that.data.pickdepartsList.length;i++){
  153. if(that.data.pickdepartsList[i]['id'] == val.data.pick_dept) pid = i;
  154. }
  155. var _pick_address = {
  156. contact:val.data.contact,
  157. tel:val.data.tel
  158. }
  159. that.setData({
  160. selectpickaddress:true,
  161. receivetype : val.data.pick_way,
  162. yunfei : 0,
  163. pick_address:_pick_address,
  164. pickindex:pid,
  165. pickid:that.data.payData.pick_dept,
  166. remark : val.data.remark
  167. });
  168. }
  169. }
  170. }
  171. __request.$get(url, params, success)
  172. },
  173. getDefaultAddress: function () {
  174. var that = this
  175. var url = "v1/user/address/default";
  176. var params = {}
  177. var success = function (val) {
  178. if (val.data !== null) {
  179. that.setData({
  180. address: val.data
  181. });
  182. }
  183. }
  184. __request.$get(url, params, success)
  185. },
  186. getBalanceInfo: function () {
  187. var that = this
  188. var url = "v1/user/balance/info";
  189. var params = {}
  190. var success = function (val) {
  191. // console.log('showusebalance:',(val.data.total > 0 && that.data.payData.order_type == 0))
  192. var afterdec = 0;
  193. if(that.data.payData.pay_way == ''){
  194. if(that.data.receivetype == 0){
  195. console.log('val.data.total',val.data.total);
  196. console.log('that.data.canusebalance',that.data.canusebalance);
  197. console.log('that.data.yunfei',that.data.yunfei);
  198. if(parseInt(val.data.total) >= parseInt(that.data.canusebalance) + parseInt(that.data.yunfei)){
  199. afterdec = that.data.nousebalance;
  200. }else{
  201. afterdec = Math.abs((that.data.canusebalance + that.data.yunfei)-val.data.total) + that.data.nousebalance;
  202. }
  203. }else{
  204. if(parseInt(val.data.total) >= parseInt(that.data.canusebalance)){
  205. afterdec = that.data.nousebalance;
  206. }else{
  207. afterdec = Math.abs((that.data.canusebalance)-val.data.total) + that.data.nousebalance;
  208. }
  209. }
  210. }else{
  211. afterdec = that.data.total+that.data.yunfei-that.data.payData.coupon_price;
  212. }
  213. that.setData({
  214. balanceInfo: val.data,
  215. cache: false,
  216. // curPayway:val.data.total >= (that.data.total + that.data.yunfei)?'balance':'weixinpay'
  217. curPayway:'weixinpay',
  218. // useBalance:(val.data.total > 0 && that.data.payData.order_type == 0 && that.data.payData.pv >= that.data.payData.total_price)? true:false,
  219. useBalance:(val.data.total > 0 && that.data.payData.order_type == 0) || !val.data.payData.shut_wechat ? true:false,
  220. afterdec: afterdec
  221. });
  222. }
  223. __request.$get(url, params, success)
  224. },
  225. getCentInfo: function () {
  226. var that = this
  227. var url = "v1/user/cent/info";
  228. var params = {}
  229. var success = function (val) {
  230. // console.log('showusebalance:',(val.data.total > 0 && that.data.payData.order_type == 0))
  231. that.setData({
  232. centInfo: val.data,
  233. cache: false,
  234. curPayway:'cent',
  235. useBalance:false,
  236. 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
  237. });
  238. }
  239. __request.$get(url, params, success)
  240. },
  241. switchChange:function(e){
  242. var that = this;
  243. that.setData({
  244. useBalance:e.detail.value
  245. })
  246. },
  247. getUserInfo: function () {
  248. var that = this
  249. var url = "v1/user/info";
  250. var params = {
  251. cache: false
  252. }
  253. var success = function (val) {
  254. that.setData({
  255. userInfo: val.data
  256. });
  257. }
  258. __request.$get(url, params, success)
  259. },
  260. cancelDialog: function () {
  261. this.setData({
  262. pwdDialog: false
  263. })
  264. },
  265. toPay: function (e) {
  266. if(this.data.payFlag){
  267. wx.showToast({
  268. title: '支付中,请稍后...',
  269. icon: 'none',
  270. duration: 2000
  271. })
  272. return false;
  273. }
  274. _handle.setFormId(e)
  275. var that = this
  276. this.setData({
  277. payFlag: true
  278. })
  279. if (that.data.receivetype == 0 && !that.data.address) {
  280. wx.showToast({
  281. title: '请先填写地址',
  282. icon: 'none',
  283. duration: 2000
  284. })
  285. that.setData({
  286. payFlag: false
  287. })
  288. } else if (that.data.receivetype == 0 && !validator.required1(this.data.address.contact)) {
  289. wx.showToast({
  290. title: '国家安全局规定:运单禁止出现“先生”,“小姐”,“女士”等,请重新填写地址',
  291. icon: 'none',
  292. duration: 2000
  293. })
  294. that.setData({
  295. payFlag: false
  296. })
  297. }else if (that.data.receivetype == 1 && !that.data.pick_address) {
  298. wx.showToast({
  299. title: '请先选择提货人',
  300. icon: 'none',
  301. duration: 2000
  302. })
  303. that.setData({
  304. payFlag: false
  305. })
  306. }else if (that.data.receivetype == 1 && !that.data.pickid) {
  307. wx.showToast({
  308. title: '请选择自提门店',
  309. icon: 'none',
  310. duration: 2000
  311. })
  312. that.setData({
  313. payFlag: false
  314. })
  315. } else {
  316. if (that.data.curPayway === 'balance') {
  317. var p
  318. if (that.data.project) {
  319. p = that.data.balanceInfo.total - that.data.project.robo_balance_price * that.data.payData.count
  320. }
  321. if (p < 0) {
  322. this.setData({
  323. luoboCount: -(that.data.balanceInfo.total - that.data.project.robo_balance_price * that.data.payData.count),
  324. showModal: true,
  325. countMoney: -(that.data.balanceInfo.total - that.data.project.robo_balance_price * that.data.payData.count) / 100,
  326. payFlag: false
  327. })
  328. } else {
  329. that.pay()
  330. }
  331. } else if (that.data.curPayway === 'cent') {
  332. // var b
  333. // if (that.data.project) {
  334. // b = that.data.balanceInfo.dc_total - that.data.project.mall_balance_price * that.data.payData.count
  335. // }
  336. // if (b < 0) {
  337. // this.setData({
  338. // luoboCount: that.data.project.mall_balance_price * that.data.payData.count - that.data.balanceInfo.dc_total,
  339. // showModal: true,
  340. // payFlag: false
  341. // })
  342. // } else {
  343. that.pay()
  344. // }
  345. } else if (that.data.curPayway === 'weixinpay') {
  346. // if(that.data.useBalance && that.data.afterdec > 0){
  347. // wx.showModal({
  348. // title: '提示',
  349. // 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)+' 元将由微信支付,祝您购物愉快!' ,
  350. // success: function (sm) {
  351. // if (sm.confirm) {
  352. // that.pay()
  353. // } else if (sm.cancel) {
  354. // console.log('用户点击取消')
  355. // that.setData({
  356. // payFlag: false
  357. // })
  358. // }
  359. // }
  360. // })
  361. // }else{
  362. that.pay()
  363. // }
  364. }
  365. // if (!that.data.userInfo.user.has_trade_pwd) {
  366. // that.setPwdDialog()
  367. // } else {
  368. // if (that.data.balanceInfo.total - that.data.project.price * that.data.payData.count < 0) {
  369. // this.setData({
  370. // luoboCount: -(that.data.balanceInfo.total - that.data.project.price * that.data.payData.count),
  371. // showModal: true,
  372. // countMoney: -(that.data.balanceInfo.total - that.data.project.price * that.data.payData.count) / 100
  373. // })
  374. // } else {
  375. // that.setData({
  376. // pwdDialog: true
  377. // })
  378. // if (that.data.useRadishSelect) {
  379. // that.setData({
  380. // pwdDialog: true
  381. // })
  382. // } else {
  383. // that.openToast('请勾选使用提货券兑换~')
  384. // }
  385. // }
  386. // }
  387. }
  388. },
  389. onCancel: function () {
  390. this.setData({
  391. showModal: false
  392. });
  393. },
  394. onConfirm: function () {
  395. wx.navigateTo({
  396. url: '/packageUser/pages/user/exchange/exchange'
  397. })
  398. },
  399. onConfirm1: function() {
  400. wx.navigateTo({
  401. url: '/packageUser/pages/user/buy/buy?path=/pages/pay/pay&orderId=' + this.data.orderId +
  402. '&luoboCount=' + this.data.luoboCount + '&countMoney=' + this.data.countMoney
  403. })
  404. // /pages/pay/pay?order_id=EX201807206A91F25E
  405. },
  406. onConfirm2: function () {
  407. wx.navigateTo({
  408. url: '/pages/parse/parse?id=8'
  409. })
  410. },
  411. preventTouchMove: function () {
  412. },
  413. selectClick: function (e) {
  414. var that = this
  415. that.setData({
  416. curPayway: e.target.dataset.payway
  417. });
  418. },
  419. pay: function () {
  420. var that = this
  421. var url = "v1/pay";
  422. var params;
  423. if(that.data.receivetype == 0){
  424. params = {
  425. pick_way: 0,
  426. order_id: that.data.orderId,
  427. trad_pwd: that.data.pwd,
  428. pay_way: that.data.curPayway,
  429. address_id: that.data.address.id,
  430. s: 'xcx',
  431. use_coupon:that.data.useBalance,
  432. remark:that.data.remark
  433. }
  434. }else{
  435. params = {
  436. pick_way: 1,
  437. order_id: that.data.orderId,
  438. trad_pwd: that.data.pwd,
  439. pay_way: that.data.curPayway,
  440. s: 'xcx',
  441. use_coupon:that.data.useBalance,
  442. remark:that.data.remark,
  443. pick_dept:that.data.pickid,
  444. pick_addr_id:that.data.pick_address.id
  445. }
  446. }
  447. console.log('onpay',params)
  448. var success = function (val) {
  449. console.log(val);
  450. if(val.statusCode === 200){
  451. if (that.data.curPayway === 'weixinpay' && val.data.need_wx) {
  452. wx.requestPayment({
  453. 'timeStamp': val.data.pay_data.timeStamp,
  454. 'nonceStr': val.data.pay_data.nonceStr,
  455. 'package': val.data.pay_data.package,
  456. 'signType': val.data.pay_data.signType,
  457. 'paySign': val.data.pay_data.paySign,
  458. 'success':function(res){
  459. wx.showToast({
  460. title: '支付成功',
  461. icon: 'success',
  462. duration: 1000
  463. })
  464. wx.navigateTo({
  465. // url: '/packageUser/pages/user/orders/orders'
  466. url: '/pages/projects/project-success/project-success?id=' + that.data.orderId
  467. })
  468. },
  469. 'fail':function(res){
  470. that.setData({
  471. payFlag: false
  472. })
  473. that.getOrderInfo()
  474. }
  475. })
  476. } else {
  477. that.setData({
  478. pay: val.data
  479. });
  480. wx.redirectTo({
  481. // url: '/packageUser/pages/user/orders/orders'
  482. url: '/pages/projects/project-success/project-success?id=' + that.data.orderId
  483. })
  484. }
  485. that.setData({
  486. payFlag: false
  487. })
  488. that.getOrderInfo()
  489. }else{
  490. that.setData({
  491. payFlag: false
  492. })
  493. that.getOrderInfo()
  494. }
  495. }
  496. var fail = function(err){
  497. that.setData({
  498. payFlag: false
  499. })
  500. }
  501. __request.$post(url, params, success, fail)
  502. },
  503. setPwdDialog: function () {
  504. wx.showModal({
  505. title: '提示',
  506. confirmColor: '#eab86a',
  507. content: '您未设置交易密码,是否前往设置?',
  508. success: function(res) {
  509. if (res.confirm) {
  510. wx.navigateTo({
  511. url: '/packageUser/pages/user/safe/safe'
  512. })
  513. } else if (res.cancel) {
  514. }
  515. }
  516. })
  517. },
  518. onShareAppMessage: function (val) {
  519. return _request.share({
  520. sc: 'xcx_pay'
  521. })
  522. },
  523. bindremark (e) {
  524. this.setData({
  525. remark: e.detail.value
  526. })
  527. },
  528. receivetbn(e){
  529. if(this.data.payData.pay_way == ''){
  530. this.setData({
  531. receivetype: e.target.dataset.value,
  532. yunfei : e.target.dataset.value == 0 ? this.data._yunfei : 0
  533. })
  534. wx.setStorageSync('receivetype', e.target.dataset.value) //存入
  535. this.getBalanceInfo()
  536. }else{
  537. wx.showToast({
  538. title: '当前提货方式已确定',
  539. icon: 'none',
  540. duration: 2000
  541. })
  542. }
  543. },
  544. getpickdeparts: function () {
  545. var that = this
  546. var url = "v1/pick_departs";
  547. var params = {}
  548. var success = function (val) {
  549. let list = [];
  550. for(var i in val.data){
  551. list.push(val.data[i]['pick_address']+'-'+val.data[i]['pick_title'])
  552. }
  553. that.setData({
  554. pickdepartsList:val.data,
  555. repickdepartsList:list,
  556. pickindex: 0,
  557. pickid:val.data[0]['id']
  558. })
  559. }
  560. __request.$get(url, params, success)
  561. },
  562. bindPickerChange: function(e) {
  563. var that = this;
  564. console.log('picker发送选择改变,携带值为', e.detail.value)
  565. this.setData({
  566. pickindex: e.detail.value,
  567. pickid:that.data.pickdepartsList[e.detail.value]['id']
  568. })
  569. },
  570. getAddress(id) {
  571. var that = this
  572. var url = 'v1/address/'
  573. var params = {
  574. }
  575. var success = function (res) {
  576. var setaddress;
  577. for(var i in res.data){
  578. if(res.data[i]['id'] == id){
  579. setaddress = res.data[i];
  580. }
  581. }
  582. that.setData({
  583. address:setaddress
  584. })
  585. }
  586. __request.$get(url, params, success)
  587. },
  588. getPickAddress(id) {
  589. var that = this
  590. var url = 'v1/pick_address'
  591. var params = {
  592. }
  593. var success = function (res) {
  594. var setaddress;
  595. for(var i in res.data){
  596. if(res.data[i]['id'] == id){
  597. setaddress = res.data[i];
  598. }
  599. }
  600. that.setData({
  601. pick_address:setaddress
  602. })
  603. }
  604. __request.$get(url, params, success)
  605. }
  606. })