index.vue 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336
  1. <template>
  2. <!-- 各种回调页面 -->
  3. <div class="app-content" :class="[contentClass]">
  4. <div class="callback-wrap">
  5. <div class="callback-blo">
  6. <!-- 使用icon -->
  7. <!-- 待支付 -->
  8. <block v-if="pagestatus == 1 || pagestatus == 2">
  9. <div class="icon">
  10. <i class="iconfont icondaizhifu"></i>
  11. </div>
  12. </block>
  13. <!-- 使用图片 -->
  14. <!-- 支付成功 -->
  15. <block v-else>
  16. <div class="status-img">
  17. <img :src="`${constant.imgUrl}/retail/callback/success.png`" alt mode="widthFix" />
  18. </div>
  19. </block>
  20. <div class="status-text app-size-36 app-bold">{{ pageTit }}</div>
  21. <!-- 待支付 -->
  22. <block v-if="pagestatus == 1 || pagestatus == 2">
  23. <div class="price">
  24. <span>¥</span>
  25. <span class="app-size-36 app-bold">{{ option.totalPrice }}</span>
  26. </div>
  27. <div class="surplus app-color-3" v-if="!$util.isEmpty(shopUser)">剩余¥{{ shopUser.userAsset.balance }}</div>
  28. <div class="order-num app-color-3">订单号: {{ option.orderSn }}</div>
  29. </block>
  30. <!-- 待支付 - 订单支付成功 -->
  31. <block v-else-if="pagestatus == 3 && payDiscountPrice">
  32. <div>
  33. <span class="app-color-2">使用优惠券为您</span>
  34. <span class="app-price">节省 {{ payDiscountPrice }}元</span>
  35. </div>
  36. </block>
  37. <!-- 评价成功 -->
  38. <block v-else-if="pagestatus == 4">
  39. <div class="app-color-2">谢谢您,我还会继续努力么么哒~</div>
  40. </block>
  41. <!-- 一个主按钮 -->
  42. <!-- 待支付 -->
  43. <block v-if="pagestatus == 1 || pagestatus == 2">
  44. <div class="call-one-btn">
  45. <button v-if="isYeBtnShow" class="button-com red pay-ye" @click="balancePayFn">余额支付</button>
  46. <button class="button-com green pay-wx" @click="_wxPay">微信支付</button>
  47. </div>
  48. </block>
  49. <!-- 两个主按钮 -->
  50. <block v-else-if="pagestatus == 3 || pagestatus == 4 || pagestatus == 5">
  51. <div class="call-btn-com call-two-btn">
  52. <button class="button-com default" @click="pageTo({
  53. url: '/pages/order/detail',
  54. query: {
  55. orderSn: option.orderSn
  56. }
  57. })">查看订单</button>
  58. <button class="button-com" @click="pageTo({
  59. url: '/pages/home/index',
  60. type: 4
  61. })">返回首页</button>
  62. </div>
  63. </block>
  64. </div>
  65. <!-- 优惠券 -->
  66. <div class="coupon-wrap" v-if="option.pagestatus == 5">
  67. <div class="coupon-img">
  68. <img :src="`${constant.imgUrl}/retail/callback/coupon.png`" alt mode="widthFix" />
  69. </div>
  70. <div class="qrcode-img">
  71. <img :src="`${constant.imgUrl}/retail/images/extension.png`" alt mode="widthFix" />
  72. </div>
  73. </div>
  74. </div>
  75. <!-- 支付密码弹窗 -->
  76. <modal-module :show="passwordModal" @cancel="modalCancel" @click="passwordModalClick" :maskClosable="false" title="支付密码" padding="30rpx 30rpx">
  77. <template v-slot:content>
  78. <div class="app-modal-input-wrap">
  79. <div class="inp-list-line">
  80. <!-- <div class="line-label">支付密码</div> -->
  81. <div class="line-input">
  82. <input type="password" v-model="form.payPassword" :adjust-position="false" class="inp-input" />
  83. </div>
  84. </div>
  85. </div>
  86. </template>
  87. </modal-module>
  88. </div>
  89. </template>
  90. <script>
  91. /** *
  92. * 页面状态
  93. * @parmas pagestatus 进入页面的状态
  94. * @parmas 1 待支付 - 余额支付 或者 微信支付 -- awaitPayYe
  95. * @parmas 2 待支付 - 微信支付 -- awaitPayWx
  96. * @parmas 3 支付成功 -- successPay
  97. * @parmas 4 评价成功 -- successEval
  98. * @parmas 5 支付成功 - 扫码支付 -- successPayCode
  99. */
  100. import { mapGetters } from 'vuex'
  101. import ModalModule from '@/components/plugin/modal'
  102. // api
  103. import wexinPay from '@/utils/pay/wxPay'
  104. import { getShopUser } from '@/utils/auth'
  105. import { balancePay, wxPay } from '@/api/order'
  106. export default {
  107. name: 'callback',
  108. components: {
  109. ModalModule
  110. },
  111. data() {
  112. return {
  113. constant: this.$constant,
  114. pageTit: '',
  115. pagestatus: 1,
  116. contentClass: '',
  117. payDiscountPrice: null,
  118. // 支付相关 ============
  119. passwordModal: false,
  120. form: {
  121. payPassword: ''
  122. }
  123. }
  124. },
  125. computed: {
  126. ...mapGetters({ shopUser: 'getShopUser' }),
  127. isYeBtnShow() {
  128. if (this.$util.isEmpty(this.shopUser)) return false
  129. return this.shopUser.userAsset.balance > this.option.totalPrice
  130. }
  131. },
  132. onLoad() {
  133. this.init()
  134. },
  135. methods: {
  136. init() {
  137. this.pagestatus = this.option.pagestatus
  138. this.payDiscountPrice = this.option.payDiscountPrice
  139. this.initClass(this.pagestatus)
  140. getShopUser()
  141. },
  142. // 支付相关块 =======================================================
  143. // 余额支付
  144. _balancePay() {
  145. if (!this.form.payPassword) {
  146. this.$msg('请先输入支付密码!')
  147. return false
  148. }
  149. balancePay({
  150. payPassword: this.form.payPassword,
  151. orderSn: this.option.orderSn,
  152. couponId: this.option.couponId
  153. })
  154. .then(res => {
  155. this.modalCancel()
  156. this.$msg('支付成功!')
  157. this.paySuccess(res)
  158. })
  159. .catch(e => {
  160. this.$msg(e.msg)
  161. this.payFail(e)
  162. })
  163. },
  164. // 微信支付
  165. _wxPay() {
  166. wxPay({
  167. orderSn: this.option.orderSn,
  168. couponId: this.option.couponId
  169. }).then(res => {
  170. wexinPay(res.data, this.paySuccess, this.payFail)
  171. })
  172. },
  173. paySuccess(res) {
  174. alert('支付成功!')
  175. this.$util.pageTo({
  176. url: '/pages/callback/index',
  177. type: 2,
  178. query: {
  179. pagestatus: 3,
  180. orderSn: this.option.orderSn,
  181. payDiscountPrice: res.data.discountAmount
  182. }
  183. })
  184. },
  185. payFail() {
  186. alert('支付失败!')
  187. },
  188. balancePayFn() {
  189. this.passwordModal = true
  190. },
  191. passwordModalClick(e) {
  192. if (e.index === 0) {
  193. this.modalCancel()
  194. } else {
  195. this._balancePay()
  196. }
  197. },
  198. modalCancel() {
  199. this.passwordModal = false
  200. this.form.payPassword = ''
  201. },
  202. // 初始样式
  203. initClass(val) {
  204. switch (val) {
  205. case '1':
  206. this.pageTit = '待支付'
  207. this.contentClass = 'awaitPayYe'
  208. break
  209. case '2':
  210. this.pageTit = '待支付'
  211. this.contentClass = 'awaitPayWx'
  212. break
  213. case '3':
  214. this.pageTit = '支付成功'
  215. this.contentClass = 'successPay'
  216. break
  217. case '4':
  218. this.pageTit = '评价成功'
  219. this.contentClass = 'successEval'
  220. break
  221. case '5':
  222. this.pageTit = '支付成功'
  223. this.contentClass = 'successPayCode'
  224. break
  225. default:
  226. this.pageTit = '支付成功'
  227. this.contentClass = 'awaitPayYe'
  228. break
  229. }
  230. uni.setNavigationBarTitle({
  231. title: this.pageTit
  232. })
  233. }
  234. }
  235. }
  236. </script>
  237. <style lang="scss" scoped>
  238. .app-content {
  239. .callback-wrap {
  240. padding-top: 50px;
  241. background-image: url('../../static/images/callback/bg.png');
  242. background-repeat: no-repeat;
  243. background-size: 100% auto;
  244. .callback-blo {
  245. width: 90%;
  246. margin: 0 auto;
  247. padding: 70px 0;
  248. background-color: #fff;
  249. box-shadow: 2px 2px 16px 0px rgba(181, 181, 181, 0.29);
  250. border-radius: 10px;
  251. text-align: center;
  252. // 使用icon
  253. .icon {
  254. .iconfont {
  255. font-size: 170px;
  256. }
  257. }
  258. // 使用状态图片
  259. .status-img {
  260. width: 294px;
  261. margin: 0 auto;
  262. }
  263. .call-btn-com {
  264. margin-top: 56px;
  265. @include disFlex(center, space-evenly);
  266. }
  267. // 一个按钮
  268. .call-one-btn {
  269. .button-com {
  270. width: 80%;
  271. padding-top: 22px;
  272. padding-bottom: 22px;
  273. font-size: 32px;
  274. margin-top: 40px;
  275. }
  276. }
  277. // 两个按钮
  278. .call-two-btn {
  279. .button-com {
  280. width: 40%;
  281. padding-top: 22px;
  282. padding-bottom: 22px;
  283. font-size: 32px;
  284. }
  285. .default {
  286. margin-right: 20px;
  287. }
  288. }
  289. }
  290. // 优惠券
  291. .coupon-wrap {
  292. width: 96%;
  293. margin: 52px auto 0;
  294. position: relative;
  295. .qrcode-img {
  296. width: 170px;
  297. height: 170px;
  298. position: absolute;
  299. top: 40px;
  300. right: 108px;
  301. }
  302. }
  303. }
  304. }
  305. // 待支付 - 公共
  306. .awaitPayWx,
  307. .awaitPayYe {
  308. .status-text {
  309. margin-top: 22px;
  310. margin-bottom: 52px;
  311. color: #ffa92e;
  312. }
  313. .surplus {
  314. margin-top: 22px;
  315. margin-bottom: 38px;
  316. }
  317. .icon {
  318. .iconfont {
  319. color: #ffa92e;
  320. }
  321. }
  322. }
  323. // 待支付 - 余额
  324. .successPay,
  325. .successPayCode,
  326. .successEval {
  327. .status-text {
  328. color: #333;
  329. margin-top: 22px;
  330. margin-bottom: 52px;
  331. }
  332. }
  333. </style>