pay.vue 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482
  1. <template>
  2. <view class="content">
  3. <view class="tc-wrap">
  4. <view class="" style="text-align: center;font-size: 28rpx;font-weight: bold;padding: 20rpx;">
  5. 世界因你而美好
  6. </view>
  7. <view class="" style="text-align: center;font-size: 24rpx;padding-top: 10rpx;color: red;">
  8. 每月不高于500
  9. </view>
  10. <!-- <view class="tit flex">
  11. <view class="">
  12. 捐款金额
  13. </view>
  14. <image src="../../static/icon/cl.png" mode="" @click="closeTc"></image>
  15. </view> -->
  16. <view class="m-list flex">
  17. <view class="mitem" v-for="item in list" :class="{'action': item == money}" @click="money = item">
  18. ¥{{item}}/月
  19. </view>
  20. </view>
  21. <view class="sy-wrap flex">
  22. <input type="number" placeholder="请输入自定义金额" class="user-inp" v-if="diy" v-model="money" />
  23. <view class="user-inp" v-if="!diy" @click="diy = true">自定义金额</view>
  24. <view @click="sy" class="flex" style="align-items: center;">
  25. <image src="../../static/icon/re.png" mode="" class="re"></image>
  26. <view class="sy">
  27. 随缘
  28. </view>
  29. </view>
  30. </view>
  31. <view class="line">
  32. </view>
  33. <view class="jz-info">
  34. <view class="tit1">
  35. 捐赠方式
  36. </view>
  37. <picker @change="PickerType" :value="index" :range="chooseType" class="box-right">
  38. <view class="inp" >{{way}}</view>
  39. </picker>
  40. </view>
  41. <view class="jz-info">
  42. <view class="tit1">
  43. {{way === '个人'?'捐赠人':'捐赠单位'}}<text>*</text>
  44. </view>
  45. <input type="text" :placeholder="'请输入'+ (way === '个人'?'捐赠人':'捐赠单位')" class="inp" v-model="donate_er" />
  46. </view>
  47. <view class="jz-info">
  48. <view class="tit1">
  49. 手机号码
  50. </view>
  51. <input type="text" placeholder="请输入手机号码" class="inp" v-model="mobile" />
  52. </view>
  53. <view class="" style="text-align: center;padding: 20rpx;">
  54. <checkbox style="transform:scale(0.7)" :checked="isok" @click="changeOK" />我已阅读并同意<text
  55. style="color: #4768c9;" @click="openxy">用户协议</text>
  56. </view>
  57. <view class="" style="text-align: center;font-size: 24rpx;padding-top: 10rpx;color: red;">
  58. 开通月捐后,每月自动扣费,可随时取消
  59. </view>
  60. <view class="go" @click="go">
  61. 确认支付{{money}}元/月
  62. </view>
  63. </view>
  64. <uni-popup ref="popup" type="center">
  65. <view class="xy">
  66. <p style="text-align: center; "><span style="font-size: 9px;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span
  67. style="white-space: pre;"></span><span style="font-size: 18px;">用户协议</span></p>
  68. <p> </p>
  69. <p>&nbsp; 尊敬的付款人/捐款人,当您准备转账时,您应明确如下事项:</p>
  70. <p> </p>
  71. <p> </p>
  72. <p>&nbsp;
  73. (一)您已经年满18周岁或具备完全民事行为能力,或者您是在中国大陆地区合法开展经营活动或其他业务的法人或其他组织;本协议内容不受您所属国家或地区法律的排斥。不具备该条件的,您应立即停止支付行为。
  74. </p>
  75. <p> </p>
  76. <p>&nbsp;
  77. (二)您在使用该系统时,应自行判断收款发起方是否是完全民事行为能力人或是否为有资格进行收款的主体,您应自行判断发起方及其关联方是否有履约能力。并自行决定是否与对方进行交易或转账给对方等,且您应自行承担与此相关的所有风险。
  78. </p>
  79. <p> </p>
  80. <p>&nbsp; (三)您认可,您已经充分阅读、了解收款发起方、收款方发起方的主体资质、发布的内容或者提供的商品或服务。您认可您的支付行为完全出于自愿。</p>
  81. <p> </p>
  82. <p>&nbsp;
  83. (四)您同意,您通过该系统上发生的所有交易或支付,您不可撤销地授权由本单位按照制定的相应规则进行处理;同时本单位有权获取您的相关信息(包括但不限于交易商品、服务描述、物流信息、行为信息、账户相关信息等)。您确认,您使用灵析服务时,您仍应完全遵守本服务协议及本单位制定的各项规则及页面提示等。
  84. </p>
  85. <p> </p>
  86. <p>&nbsp; (五)本单位特别提示:</p>
  87. <p> </p>
  88. <p>&nbsp; 您所转出的款项将进入收款发起方账户,或发起方指定的收款人的账户。基于此项服务可能存在的风险, 在使用转账服务时, 您理解并接受:&nbsp;</p>
  89. <p> </p>
  90. <p>&nbsp;&nbsp;&nbsp;&nbsp;<span style="white-space:pre"></span>1.&nbsp; 使用交易或转账服务是基于您对收款发起方与转账原因的充分了解,
  91. 一旦您选用转账服务进行转账, 您应当自行承担因您指示错误(失误)。而导致的风险。本单位依照您指示的收款方并根据本协议的约定完成转账后,
  92. 即完成了当次服务的所有义务。对于收付款双方之间产生的关于当次转账的任何纠纷不承担任何责任, 也不提供任何形式的纠纷解决途径, 您应当自行处理相关的纠纷。</p>
  93. <p> </p>
  94. <p>&nbsp;&nbsp;&nbsp;&nbsp;<span style="white-space:pre"></span>2.&nbsp;
  95. 本单位并非银行或其它金融机构,本服务也非金融业务,本协议项下的资金移转均通过银行或第三方支付平台(包括支付宝、财付通、微信支付、银联在线、Paypal)来实现,你理解并同意您的资金在流转途中需要时间,本单位无法保障资金流转时间。
  96. </p>
  97. <p> </p>
  98. <p>&nbsp;&nbsp;&nbsp;&nbsp;3.&nbsp;
  99. 非经特别说明,本协议中“收款发起方”是指发起收费项目的收款的主体,收费项目包括但不限于:收费活动、销售商品或服务、众筹、募款,系实际收款的支配方。“收款方”是指您的资金所汇入的账户方,收款方既可以是收款发起方,也可以是收款发起方指定的第三方。
  100. </p>
  101. <p> </p>
  102. <p>&nbsp;&nbsp;&nbsp;&nbsp;<span style="white-space:pre"></span>4.&nbsp;
  103. 本单位并非银行或其他金融机构,亦不是收款方。因此事实上无法提供退款服务,您的款项一旦转出,将不可通过本单位撤销,如有疑问,请直接与收款发起方或收款方联系沟通。</p>
  104. <p> </p>
  105. <p>&nbsp;&nbsp;&nbsp;&nbsp;5.&nbsp; 本单位根据业务需求,有权随时对本协议条款进行调整,无需单独通知您,请您在转款之前,请认真阅读本协议。</p>
  106. <p>(六)您同意:</p>
  107. <p> </p>
  108. <p>&nbsp;&nbsp;&nbsp;&nbsp;1.&nbsp; 本单位仅对该系统中列明的责任承担范围负责。&nbsp;</p>
  109. <p> </p>
  110. <p>&nbsp;&nbsp;&nbsp;&nbsp;<span style="white-space:pre"></span>2.&nbsp;
  111. 您因交易或转账所产生的任何风险应由您与收款发起方承担。&nbsp;</p>
  112. <p> </p>
  113. <p>&nbsp;&nbsp;&nbsp;&nbsp;3.&nbsp; 本单位不对交易标的及本服务提供任何形式的保证,包括但不限于以下事项:&nbsp;</p>
  114. <p> </p>
  115. <p>&nbsp;&nbsp;&nbsp;&nbsp;<span style="white-space:pre"></span>(1)本服务符合您的需求。&nbsp;</p>
  116. <p> </p>
  117. <p>&nbsp;&nbsp;&nbsp;&nbsp;<span style="white-space:pre"></span>(2)本服务不受干扰、及时提供或免于出错。&nbsp;</p>
  118. <p> </p>
  119. <p>&nbsp;&nbsp;&nbsp;&nbsp;<span
  120. style="white-space:pre"></span>(3)您经由本服务购买或取得之任何产品、服务、资讯或其他资料符合您的期望。&nbsp;</p>
  121. <p> </p>
  122. <p>&nbsp;&nbsp;&nbsp;&nbsp;<span
  123. style="white-space:pre"></span>(4)您经由本服务之使用下载或取得任何资料,应由您自行考量且自负风险,因资料之下载而导致您电脑系统之任何损坏或资料流失,您应负完全责任。&nbsp;
  124. </p>
  125. <p> </p>
  126. <p>&nbsp;&nbsp;&nbsp;&nbsp;<span
  127. style="white-space:pre"></span>(5)您自本单位及本单位工作人员或经由本服务取得之建议和资讯,无论其为书面或口头形式,均不构成本单位对本服务之保证。</p>
  128. <p> </p>
  129. <p>&nbsp;&nbsp;&nbsp;&nbsp;<span
  130. style="white-space:pre"></span>(6)除本单位另有规定外,在任何情况下,本单位对本协议所承担的违约赔偿责任总额不超过向您收取的当次服务费用总额。</p>
  131. <p> </p>
  132. <p>&nbsp;&nbsp;&nbsp;&nbsp;<span
  133. style="white-space:pre"></span>(7)您充分知晓并同意本单位可能同时为您及您的(交易)对手方提供本服务,您同意对本单位可能存在的该等行为予以明确豁免,并不得以此来主张本单位在提供本服务时存在法律上的瑕疵。
  134. </p>
  135. <p>&nbsp;&nbsp;&nbsp;&nbsp;(8)除本单位另有规定或另行同意外,您对本单位的委托及向本单位发出的指令均不可撤销。</p>
  136. </view>
  137. </uni-popup>
  138. </view>
  139. </template>
  140. <script>
  141. import {
  142. mapState,
  143. mapMutations
  144. } from 'vuex';
  145. import {
  146. createSign
  147. } from '@/api/money.js';
  148. export default {
  149. data() {
  150. return {
  151. mobile: '',
  152. address:'',
  153. way: '个人', // 捐款方式
  154. way_id: 0, // 捐款方式id
  155. index:0,
  156. chooseType: ['个人', '单位'],
  157. donate_er: '',
  158. isok: false,
  159. isShowBase: false,
  160. diy: false,
  161. isOpen: false,
  162. money: 100,
  163. umoney: '',
  164. list: [50, 100, 200],
  165. description: '',
  166. art: {},
  167. id: 0,
  168. plan_id:0,
  169. order_name:''
  170. }
  171. },
  172. computed: {
  173. ...mapState(['weichatObj']),
  174. ...mapState('user',['userInfo']),
  175. },
  176. onLoad(opt) {
  177. this.plan_id = opt.id
  178. this.order_name = opt.tit
  179. this.donate_er = this.userInfo.nickname
  180. },
  181. methods: {
  182. PickerType: function(e) {
  183. this.way = this.chooseType[e.target.value];
  184. this.way_id = e.target.value;
  185. this.index = e.target.value;
  186. console.log('选择捐款方式', this.way_id)
  187. if (this.index == 1) {
  188. this.is_show = true
  189. } else {
  190. this.is_show = false
  191. }
  192. // if ( )
  193. },
  194. sy() {
  195. this.diy = true
  196. this.money = Math.floor(Math.random() * 500) + 1;
  197. },
  198. openxy() {
  199. this.$refs.popup.open()
  200. },
  201. changeOK(e) {
  202. // console.log(e);
  203. this.isok = !this.isok
  204. },
  205. go() {
  206. if (this.isok) {
  207. // uni.showModal({
  208. // title: '提示',
  209. // content: '功能审核中...',
  210. // success(res) {
  211. // if (res.confirm) {
  212. // console.log('用户点击确定');
  213. // } else if (res.cancel) {
  214. // console.log('用户点击取消');
  215. // }
  216. // }
  217. // })
  218. this.confirm()
  219. } else {
  220. uni.showModal({
  221. title: '提示',
  222. content: '请先阅读并同意用户协议',
  223. success(res) {
  224. if (res.confirm) {
  225. console.log('用户点击确定');
  226. } else if (res.cancel) {
  227. console.log('用户点击取消');
  228. }
  229. }
  230. })
  231. }
  232. },
  233. confirm() {
  234. let obj = this
  235. // if (!obj.way) {
  236. // this.$api.msg('请选择捐款方式!');
  237. // return;
  238. // }
  239. // if (!obj.money) {
  240. // this.$api.msg('请输入捐款金额!');
  241. // return;
  242. // }
  243. // if (obj.public) {
  244. // if (this.is_show) {
  245. // if (!obj.donate_er) {
  246. // this.$api.msg('请填写您的姓名');
  247. // return;
  248. // }
  249. // } else {
  250. // if (!obj.donate_er) {
  251. // this.$api.msg('请填写您的单位');
  252. // return;
  253. // }
  254. // }
  255. // const reg = /^(\+?0?86-?)?1[\d]\d{9}$/;
  256. // if (!reg.test(obj.mobile)) {
  257. // obj.$api.msg('请填写正确的手机号码');
  258. // return;
  259. // }
  260. // }
  261. // if (this.is_receipts == '0') {
  262. // // obj.address = '用户未填写联系地址'
  263. // if (!obj.address) {
  264. // this.$api.msg('请输入联系地址');
  265. // return;
  266. // }
  267. // }
  268. // if (!obj.address) {
  269. // obj.address = '用户未填写联系地址'
  270. // }
  271. // if (!obj.isHelp) {
  272. // if (!obj.intention) {
  273. // this.$api.msg('请选择捐款意向');
  274. // return;
  275. // }
  276. // }
  277. let updata = {
  278. amount: obj.money, //捐款金额
  279. name: obj.donate_er, //捐款人/单位
  280. tel: obj.mobile, //手机号
  281. address: obj.address, //联系地址
  282. is_open: 1, //是否实名公开
  283. is_ticket: 0, //是否开发票
  284. pay_type: 0, //支付方式0微信1支付宝
  285. type: obj.way_id,
  286. plan_id: obj.plan_id
  287. }
  288. // if (obj.isHelp) {
  289. // updata.help_id = obj.help_id
  290. updata.order_name = obj.order_name
  291. // } else {
  292. // updata.order_name = obj.intention //捐款意向
  293. // updata.category_id = obj.category_id //捐款意向id
  294. // }
  295. createSign(updata).then(({
  296. data
  297. }) => {
  298. let res = data.jsConfig;
  299. console.log(res)
  300. // 仅作为示例,非真实参数信息。
  301. obj.weichatObj.chooseWXPay({
  302. timestamp: res.timestamp,
  303. nonceStr: res.nonceStr,
  304. package: res.package,
  305. signType: res.signType,
  306. paySign: res.paySign,
  307. success: function(res) {
  308. let date = new Date()
  309. let year = date.getFullYear()
  310. let month = date.getMonth() >= 9 ? date.getMonth() + 1 : '0' + (date
  311. .getMonth() + 1)
  312. let day = date.getDate() >= 10 ? date.getDate() : '0' + date.getDate()
  313. // uni.navigateTo({
  314. // url: '/pages/form/donaSuccess?money=' + obj.money +
  315. // '&name=' + obj.donate_er + '&time=' + year + '年' +
  316. // month + '月' + day + '日'
  317. // })
  318. uni.navigateTo({
  319. url:'/pages/index/thank?money=' + obj.money +'&name=' + obj.donate_er + '&time=' + encodeURI(year + '年' + month + '月' + day + '日') + '&order_name=' + encodeURI(obj.order_name)
  320. })
  321. },
  322. fail: function(res) {
  323. // this.$refs.popup1.open()
  324. console.log(res, "失败")
  325. console.log(res.errMsg)
  326. }
  327. });
  328. })
  329. // 支付中
  330. obj.payLoding = true;
  331. }
  332. }
  333. }
  334. </script>
  335. <style lang="scss" scoped>
  336. page {
  337. background-color: #fff;
  338. height: 100%;
  339. }
  340. .tc-wrap {
  341. width: 750rpx;
  342. // height: 578rpx;
  343. background: #FFFFFF;
  344. border-radius: 30rpx 30rpx 0 0;
  345. padding: 0 31rpx 66rpx 32rpx;
  346. .tit {
  347. height: 114rpx;
  348. align-items: center;
  349. justify-content: space-between;
  350. font-weight: bold;
  351. font-size: 42rpx;
  352. color: #1E2B31;
  353. border-bottom: 1px solid #EDF0F2;
  354. image {
  355. width: 34rpx;
  356. height: 34rpx;
  357. }
  358. }
  359. .m-list {
  360. justify-content: space-between;
  361. padding: 30rpx 0;
  362. .mitem {
  363. width: 215rpx;
  364. line-height: 96rpx;
  365. background: #FFFFFF;
  366. border-radius: 5rpx;
  367. border: 1px solid #78919d;
  368. text-align: center;
  369. font-weight: bold;
  370. font-size: 29rpx;
  371. color: #1E2B31;
  372. }
  373. .action {
  374. background: #fdecee;
  375. border: 1px solid #ed3142;
  376. color: #ED3142;
  377. }
  378. }
  379. .sy-wrap {
  380. align-items: center;
  381. justify-content: space-between;
  382. }
  383. .user-inp {
  384. display: inline-block;
  385. width: 554rpx;
  386. height: 81rpx;
  387. line-height: 81rpx;
  388. background: #FFFFFF;
  389. border-radius: 5rpx;
  390. border: 1px solid #78919d;
  391. text-align: center;
  392. font-weight: bold;
  393. font-size: 29rpx;
  394. color: #1E2B31;
  395. }
  396. .re {
  397. width: 30rpx;
  398. height: 30rpx;
  399. margin-left: 33rpx;
  400. margin-right: 14rpx;
  401. }
  402. .sy {
  403. font-weight: bold;
  404. font-size: 29rpx;
  405. color: #0C0C0C;
  406. }
  407. .go {
  408. width: 100%;
  409. line-height: 94rpx;
  410. background: #f3392c;
  411. border-radius: 46rpx;
  412. text-align: center;
  413. font-weight: bold;
  414. font-size: 33rpx;
  415. color: #FFFFFF;
  416. margin-top: 20rpx;
  417. }
  418. }
  419. .xy {
  420. width: 600rpx;
  421. height: 700rpx;
  422. // overflow: hidden;
  423. background-color: #fff;
  424. border-radius: 40rpx 30rpx;
  425. padding: 20rpx;
  426. overflow: auto;
  427. line-height: 1.5;
  428. }
  429. .jz-info {
  430. padding: 20rpx 0;
  431. .tit1 {
  432. font-size:28rpx;
  433. padding-bottom: 10rpx;
  434. text {
  435. color:red;
  436. }
  437. }
  438. .inp {
  439. width: 690rpx;
  440. height: 81rpx;
  441. line-height: 81rpx;
  442. background: #FFFFFF;
  443. border-radius: 5rpx;
  444. border: 1px solid #78919d;
  445. text-align: center;
  446. font-weight: bold;
  447. font-size: 29rpx;
  448. color: #1E2B31;
  449. }
  450. }
  451. .line {
  452. width: 100%;
  453. }
  454. </style>