index.vue 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. <route lang="json5">
  2. { layout: 'tabbar', style: { navigationBarTitleText: '我的', navigationStyle: 'custom' } }
  3. </route>
  4. <script setup lang="ts">
  5. import { onMounted, ref } from 'vue'
  6. import {
  7. getOrders,
  8. getVendorAppInfo,
  9. getYearTarget,
  10. getDesignerStatistics,
  11. getFollowStatistics,
  12. getBroker,
  13. } from '../../core/libs/requests'
  14. import { storeToRefs } from 'pinia'
  15. import { isEmpty } from 'radash'
  16. import Card from '@designer-hub/app/src/components/card.vue'
  17. import { desinTopBg } from '@designer-hub/assets/src/svgs'
  18. import NavBarEvo from '@designer-hub/app/src/components/navbar-evo.vue'
  19. import dayjs from 'dayjs'
  20. import PageHelper from '../../components/page-helper.vue'
  21. import { useUserStore } from '../../store'
  22. import AgentMine from './components/agent-mine.vue'
  23. const userStore = useUserStore()
  24. const { isLogined, userInfo, isMerchant, isAgent } = storeToRefs(userStore)
  25. const avatar = computed(() =>
  26. !isEmpty(userInfo.value.avatar) ? userInfo.value.avatar : 'https://via.placeholder.com/72x72',
  27. )
  28. const { data, run: setData } = useRequest(() => getVendorAppInfo())
  29. const { data: orders, run: setOrders } = useRequest(() => getOrders())
  30. const { data: yearTarget, run: setYearTarget } = useRequest(() => getYearTarget())
  31. const { data: designerData, run: setdesignerData } = useRequest(() => getDesignerStatistics())
  32. const { data: followData, run: setFollowData } = useRequest(() => getFollowStatistics())
  33. const { data: agent, run: setAgent } = useRequest(() =>
  34. getBroker({ brokerId: userInfo.value.userId.toString() }),
  35. )
  36. const nickNameClickHandle = async () => {
  37. if (isLogined.value) return
  38. uni.navigateTo({ url: '/pages/login/index' })
  39. }
  40. const toInfoSeting = () => {
  41. uni.navigateTo({ url: '/pages/mine/merchant/merchant_settings' })
  42. }
  43. onShow(async () => {
  44. if (isLogined.value && isMerchant?.value) {
  45. await setData()
  46. await setOrders()
  47. }
  48. if (isLogined.value && isAgent?.value) {
  49. // await setData()
  50. await setAgent()
  51. await Promise.all([setYearTarget(), setdesignerData(), setFollowData()])
  52. }
  53. })
  54. onMounted(async () => {
  55. // await run()
  56. // console.log(data.value)
  57. // await getTaskData()
  58. })
  59. const navBarProps = ref({ customClass: 'bg-transparent!' })
  60. onPageScroll(({ scrollTop }: { scrollTop: number }) => {
  61. console.log(scrollTop)
  62. navBarProps.value.customClass = scrollTop === 0 ? 'bg-transparent!' : ''
  63. })
  64. </script>
  65. <template>
  66. <view>
  67. <NavBarEvo title="我的" transparent dark placeholder></NavBarEvo>
  68. <template v-if="isAgent">
  69. <AgentMine></AgentMine>
  70. </template>
  71. <template v-if="isMerchant">
  72. <view class="p-[16px]">
  73. <div class="aspect-[1.575/1] absolute left-0 right-0 top-0">
  74. <wd-img width="100%" height="100%" :src="desinTopBg" custom-class="vertical-top"></wd-img>
  75. </div>
  76. <div
  77. @click="toInfoSeting"
  78. class="bg-white rounded-2xl shadow relative mt-[28px] py-[29px] px-[14px] flex items-center"
  79. >
  80. <div>
  81. <wd-img width="64" height="64" round :src="data?.avatar" />
  82. </div>
  83. <div class="ml-[10px]">
  84. <div class="text-black/90 text-lg font-normal font-['PingFang_SC'] leading-[10.18px]">
  85. 商家:{{ data?.vendorName }}
  86. </div>
  87. <div
  88. class="h-6 px-1.5 py-1 bg-[#f5f6fa] rounded justify-center items-center gap-2.5 inline-flex mt-[17px]"
  89. >
  90. <div class="text-[#8b8b8b] text-xs font-normal font-['PingFang_SC'] leading-none">
  91. ID:{{ data?.id }}
  92. </div>
  93. </div>
  94. </div>
  95. </div>
  96. <div class="flex items-center mt-[20px]">
  97. <div class="w-1 h-[19px] bg-[#2357e9] rounded-md"></div>
  98. <div class="text-black text-lg font-normal font-['PingFang_SC'] leading-normal ml-[8px]">
  99. 记录
  100. </div>
  101. </div>
  102. <div class="mt-[16px]">
  103. <PageHelper :request="getOrders" :query="{}">
  104. <template #default="{ source }">
  105. <div class="flex flex-col gap-4">
  106. <template v-for="(it, i) in source.list" :key="i">
  107. <Card custom-class="py-4">
  108. <div
  109. class="bg-white rounded-2xl flex flex-col"
  110. @click="router.push(`/pages/mine/merchant/orders/detail/index?id=${it.id}`)"
  111. >
  112. <div
  113. class="text-black/90 text-sm font-normal font-['PingFang_SC'] leading-normal"
  114. >
  115. 支付时间:
  116. {{ dayjs(it.completeTime).format('YYYY-MM-DD hh:mm') }}
  117. </div>
  118. <div class="flex mt-[19px] items-center">
  119. <div class="w-[86px] h-[86px] bg-[#f6f6f6] rounded-[10px] overflow-hidden">
  120. <wd-img width="100%" height="100%" :src="it.orderImgUrl"></wd-img>
  121. </div>
  122. <div class="ml-[16px]">
  123. <div
  124. class="text-black text-base font-normal font-['PingFang_SC'] leading-normal"
  125. >
  126. {{ it.projectName }}
  127. </div>
  128. <div
  129. class="text-left text-black/30 text-sm font-normal font-['PingFang_SC'] leading-normal"
  130. >
  131. 数量x{{ it.orderQuantity }}
  132. </div>
  133. <div
  134. class="text-left text-black/30 text-sm font-normal font-['PingFang_SC'] leading-normal"
  135. >
  136. {{ it.points }}积分
  137. </div>
  138. </div>
  139. </div>
  140. </div>
  141. </Card>
  142. </template>
  143. </div>
  144. </template>
  145. </PageHelper>
  146. </div>
  147. </view>
  148. </template>
  149. </view>
  150. </template>
  151. <style scoped lang="scss"></style>