index.tsx 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. import {
  2. computed,
  3. ref,
  4. defineComponent,
  5. onMounted,
  6. reactive,
  7. watch,
  8. onBeforeMount
  9. } from 'vue'
  10. import { Card, Cell, CellGroup, Popup, SubmitBar, Toast } from 'vant'
  11. import { addressType, cartConfirm, formateAttr } from '../cart'
  12. import styles from '../index.module.less'
  13. import Address from '../components/address'
  14. import request from '@/helpers/request'
  15. import { useRouter } from 'vue-router'
  16. import ColProtocol from '@/components/col-protocol'
  17. import Payment from '@/views/order-detail/payment'
  18. import { state } from '@/state'
  19. import ColPopup from '@/components/col-popup'
  20. import UserAuth from '@/views/order-detail/userAuth'
  21. import ColResult from '@/components/col-result'
  22. import { moneyFormat } from '@/helpers/utils'
  23. import UseCoupons, { couponEnum } from '@/views/order-detail/use-coupons'
  24. import ColHeader from '@/components/col-header'
  25. export default defineComponent({
  26. name: 'cartConfirmAgin',
  27. setup() {
  28. // console.log(cartConfirm)
  29. const list = cartConfirm.orderInfo?.orderItemList || []
  30. const calcAmount = {
  31. totalAmount: cartConfirm.orderInfo?.totalAmount || 0,
  32. payAmount: cartConfirm.orderInfo?.payAmount || 0,
  33. freightAmount: cartConfirm.orderInfo?.freightAmount || 0,
  34. couponAmount: cartConfirm.orderInfo?.couponAmount
  35. }
  36. const payType = ref(0) // 0->未支付;1->支付宝;2->微信
  37. const address: addressType = {
  38. city: cartConfirm.orderInfo?.receiverCity,
  39. detailAddress: cartConfirm.orderInfo?.receiverDetailAddress,
  40. name: cartConfirm.orderInfo?.receiverName,
  41. phoneNumber: cartConfirm.orderInfo?.receiverPhone,
  42. postCode: cartConfirm.orderInfo?.receiverPostCode,
  43. province: cartConfirm.orderInfo?.receiverProvince,
  44. region: cartConfirm.orderInfo?.receiverRegion
  45. }
  46. const agreeStatus = ref(false)
  47. const paymentPopup = ref(false)
  48. const authPopup = ref(false)
  49. const orderInfo = ref<any>()
  50. //修复实名认证头部问题
  51. watch(authPopup, (value, oldValue) => {
  52. if (authPopup.value) {
  53. // 设置是否显示导航栏 0 显示 1 不显示
  54. postMessage({ api: 'setBarStatus', content: { status: 0 } })
  55. } else {
  56. postMessage({ api: 'setBarStatus', content: { status: 1 } })
  57. }
  58. })
  59. // 提交
  60. const onSubmit = () => {
  61. if (!agreeStatus.value) {
  62. Toast('请先阅读并同意《产品及服务协议》')
  63. return
  64. }
  65. // const users = state.user.data
  66. // 判断是否需要实名认证
  67. // if (!users?.student.realName || !users?.student.idCardNo) {
  68. // authPopup.value = true
  69. // return
  70. // }
  71. // 判断是否有订单号
  72. createOrder()
  73. }
  74. const router = useRouter()
  75. const createOrder = async () => {
  76. console.log(cartConfirm)
  77. const body = {
  78. orderNo: cartConfirm.orderInfo.orderSn
  79. }
  80. try {
  81. const { code, data } = await request.post(
  82. '/api-mall-portal/order/generateOrder',
  83. { data: body }
  84. )
  85. if (code === 200) {
  86. paymentPopup.value = true
  87. orderInfo.value = data
  88. }
  89. } catch (error) {}
  90. }
  91. return () => (
  92. <>
  93. <ColHeader />
  94. {list.length ? (
  95. <div class={styles.cartConfirm}>
  96. <div class={styles.cartConfirmBox}>
  97. <Address item={address as any} isLink={false} />
  98. </div>
  99. <div
  100. style={{ marginTop: '20px' }}
  101. class={[styles.cartBox, styles.cartConfirmBox]}
  102. >
  103. <div class={styles.shopBox}>
  104. {list.map((item: any) => (
  105. <div
  106. class={[styles.cartItem]}
  107. style={{ marginBottom: '10px' }}
  108. >
  109. <Card
  110. price={moneyFormat(item.productPrice)}
  111. desc={formateAttr(item.productAttr)}
  112. title={item.productName}
  113. thumb={item.productPic}
  114. num={item.productQuantity}
  115. ></Card>
  116. </div>
  117. ))}
  118. </div>
  119. <CellGroup border={true}>
  120. {/* <Cell
  121. border={false}
  122. title="优惠劵"
  123. v-slots={{
  124. value: () => (
  125. <span
  126. style={{
  127. fontSize: '0.42667rem',
  128. color: '#ff3535',
  129. fontWeight: 'bold'
  130. }}
  131. >
  132. {'-¥ ' + calcAmount.couponAmount}
  133. </span>
  134. )
  135. }}
  136. ></Cell> */}
  137. <Cell
  138. border={false}
  139. title="总额"
  140. value={'¥ ' + calcAmount.totalAmount}
  141. ></Cell>
  142. {/* <Cell
  143. border={false}
  144. title="运费"
  145. value={calcAmount.freightAmount}
  146. ></Cell>
  147. */}
  148. {/* <Cell border={false} title="优惠卷" value="暂无可用优惠卷"></Cell>
  149. <Cell border={false} title="乐乐币抵扣" value={"-¥" + calcAmount.promotionAmount}></Cell> */}
  150. </CellGroup>
  151. </div>
  152. <div class={styles.payProtocol}>
  153. <ColProtocol v-model={agreeStatus.value}></ColProtocol>
  154. <SubmitBar
  155. buttonText={`结算(${list.length})`}
  156. buttonColor="var(--van-primary)"
  157. disabled={list.length === 0}
  158. onSubmit={() => onSubmit()}
  159. >
  160. <div class={styles.confirmBottom}>
  161. 合计{' '}
  162. <span class={styles['price-des']}>
  163. ¥{moneyFormat(calcAmount.payAmount)}
  164. </span>
  165. </div>
  166. </SubmitBar>
  167. </div>
  168. <div style={{ height: 'var(--van-submit-bar-height)' }}></div>
  169. {/* <ColPopup v-model={authPopup.value}>
  170. <UserAuth onSuccess={onAuthSuccess} />
  171. </ColPopup> */}
  172. <Popup
  173. show={paymentPopup.value}
  174. closeOnClickOverlay={false}
  175. position="bottom"
  176. round
  177. closeOnPopstate
  178. safeAreaInsetBottom
  179. style={{ minHeight: '30%' }}
  180. >
  181. <Payment
  182. v-model={paymentPopup.value}
  183. orderInfo={orderInfo.value}
  184. paymentType="goodsPay"
  185. onBackOut={() => (paymentPopup.value = false)}
  186. />
  187. </Popup>
  188. </div>
  189. ) : (
  190. <ColResult
  191. buttonText="去购物车"
  192. onClick={() => {
  193. router.push({ path: '/cart' })
  194. }}
  195. ></ColResult>
  196. )}
  197. </>
  198. )
  199. }
  200. })