index.tsx 1.6 KB

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