index.tsx 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. import OSticky from '@/components/o-sticky'
  2. import { useRect } from '@vant/use'
  3. import { Cell, CellGroup, Image, Tab, Tabs } from 'vant'
  4. import { defineComponent, onMounted, reactive, ref } from 'vue'
  5. import PaidList from './component/paid-list'
  6. import RefundList from './component/refund-list'
  7. import WaitPay from './component/wait-pay'
  8. import styles from './index.module.less'
  9. export default defineComponent({
  10. name: 'trade-record',
  11. setup() {
  12. const tabs = sessionStorage.getItem('tradeRecordTabs')
  13. const state = reactive({
  14. tabValue: (tabs || 'wait_pay') as 'wait_pay' | 'paid' | 'refund',
  15. height: 50
  16. })
  17. const tabsRef = ref()
  18. onMounted(() => {
  19. const { height } = useRect(tabsRef.value)
  20. state.height = height
  21. })
  22. return () => (
  23. <div class={styles.tradeRecord}>
  24. <Tabs
  25. lineWidth={20}
  26. lineHeight={4}
  27. sticky
  28. animated
  29. swipeable
  30. offsetTop={0}
  31. v-model:active={state.tabValue}
  32. onChange={(val: any) => {
  33. sessionStorage.setItem('tradeRecordTabs', val)
  34. }}
  35. >
  36. <Tab title="待完成" name="wait_pay">
  37. <WaitPay height={state.height} />
  38. </Tab>
  39. <Tab title="已完成" name="paid">
  40. <PaidList height={state.height} />
  41. </Tab>
  42. <Tab title="退费" name="refund">
  43. <RefundList height={state.height} />
  44. </Tab>
  45. </Tabs>
  46. </div>
  47. )
  48. }
  49. })