pay.js 16 KB

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