detail.vue 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388
  1. <route lang="yaml">
  2. style:
  3. navigationBarTitleText: 设计师详情
  4. navigationBarBackgroundColor: '#fff'
  5. navigationStyle: custom
  6. </route>
  7. <script setup lang="ts">
  8. import NavbarEvo from '@/components/navbar-evo.vue'
  9. import { getFollowUpPage, getUserInfoById } from '../../../core/libs/agent-requests'
  10. import {
  11. desinTopBg,
  12. rightArrowIcon,
  13. vipIcon,
  14. locationIcon,
  15. shareIcon,
  16. praiseIcon,
  17. messageIcon,
  18. yinyongIcon,
  19. } from '@designer-hub/assets/src/svgs'
  20. import PageHelperEvo from '@/components/page-helper-evo.vue'
  21. import { dayjs } from 'wot-design-uni'
  22. import { toHomePage } from '../../../core/libs/actions'
  23. const id = ref()
  24. const { data, run: setData } = useRequest(() => getUserInfoById(id.value))
  25. const tab = ref('followUp')
  26. const tabs = ref([
  27. { label: '数据动态', value: 'integral' },
  28. { label: '跟进记录', value: 'followUp' },
  29. // { label: '圈子动态', value: 'interact' },
  30. { label: '兑换商品', value: 'product' },
  31. ])
  32. const followUpQuery = ref({})
  33. const toPointsDetails = () => {
  34. uni.navigateTo({ url: '/pages/designer/points_details/index' })
  35. }
  36. const toOrderDetails = () => {
  37. uni.navigateTo({ url: '/pages/mine/merchant/orders/detail/index' })
  38. }
  39. const toArchives = () => {
  40. uni.navigateTo({ url: '/pages/agent/designer/archives/index?id=' + id.value })
  41. }
  42. onLoad(async (query: { id: string }) => {
  43. id.value = query.id
  44. await setData()
  45. })
  46. </script>
  47. <template>
  48. <view>
  49. <NavbarEvo placeholder transparent dark></NavbarEvo>
  50. <div class="aspect-[1.575/1] absolute left-0 right-0 top-0">
  51. <wd-img width="100%" height="100%" :src="desinTopBg" custom-class="vertical-top"></wd-img>
  52. </div>
  53. <div class="p-4 flex flex-col gap-4 relative">
  54. <div class="bg-white rounded-2xl shadow flex items-center p-4">
  55. <div>
  56. <img class="w-16 h-16 rounded-full" :src="data?.avatar" />
  57. </div>
  58. <div class="flex-1 ml-[11px]">
  59. <div class="flex flex-col w-[100%]">
  60. <div class="flex-row flex items-center justify-between w-full">
  61. <div class="flex-row flex items-center">
  62. <div
  63. class="text-black/90 text-base font-normal font-['PingFang_SC'] leading-[10.18px]"
  64. >
  65. <!-- 苏小萌 -->
  66. {{ data?.name }}
  67. </div>
  68. <div
  69. class="h-4 bg-neutral-100 rounded-[20px] justify-start items-center inline-flex flex-row ml-[9px]"
  70. >
  71. <wd-img width="17" height="17" :src="vipIcon"></wd-img>
  72. <div
  73. class="text-black/40 text-[10px] font-normal font-['PingFang_SC'] px-[7px] leading-none"
  74. >
  75. 白银会员
  76. </div>
  77. </div>
  78. </div>
  79. <div
  80. class="text-black/60 text-xs font-normal font-['PingFang_SC'] leading-snug flex items-center"
  81. @click="toHomePage(id.value)"
  82. >
  83. <div>个人主页</div>
  84. <wd-img width="13" height="13" :src="rightArrowIcon"></wd-img>
  85. </div>
  86. </div>
  87. </div>
  88. <div
  89. class="mt-4 px-1.5 py-1 bg-[#f0f3ff] rounded justify-center items-center gap-px inline-flex"
  90. @click="toArchives"
  91. >
  92. <div class="text-[#2357e9] text-xs font-normal font-['PingFang_SC'] leading-3">
  93. 个人档案
  94. </div>
  95. <wd-icon name="arrow-right" size="13" color="#2357e9"></wd-icon>
  96. </div>
  97. </div>
  98. </div>
  99. <div>
  100. <wd-tabs v-model="tab">
  101. <block v-for="(item, index) in tabs" :key="index">
  102. <wd-tab :title="`${item.label}`" :name="item.value"></wd-tab>
  103. </block>
  104. </wd-tabs>
  105. <view class="content mt-[20px]" v-if="tab === 'integral'">
  106. <div class="bg-white rounded-2xl shadow pa-[15px]">
  107. <div class="flex items-center justify-between">
  108. <div class="text-black/90 text-base font-normal font-['PingFang_SC'] leading-relaxed">
  109. 积分动态
  110. </div>
  111. <div
  112. class="text-black/30 text-xs font-normal font-['PingFang_SC'] leading-none"
  113. @click="toPointsDetails"
  114. >
  115. 积分明细
  116. </div>
  117. </div>
  118. <div class="mt-3 grid grid-cols-3 gap-2.5">
  119. <template
  120. v-for="{ name, value } of [
  121. { name: '当前剩余积分', des: '最近', value: 220 },
  122. { name: '累计获得积分', des: '本年', value: 220 },
  123. { name: '累计消耗积分', des: '本年', value: 220 },
  124. { name: '累计跟进次数', des: '本年', value: 220 },
  125. { name: '累计消耗次数', des: '本年', value: 220 },
  126. { name: '累计获得次数', des: '本年', value: 220 },
  127. ]"
  128. :key="name"
  129. >
  130. <div class="rounded-lg aspect-[1/1] flex flex-col justify-around p-2.5">
  131. <div class="text-black/60 text-xs font-normal font-['PingFang_SC'] leading-none">
  132. {{ name }}
  133. </div>
  134. <div class="text-black/90 text-lg font-bold font-['D-DIN Exp'] leading-normal">
  135. {{ value }}
  136. </div>
  137. <div class="flex items-center gap-1">
  138. <div
  139. class="text-black/40 text-xs font-normal font-['PingFang_SC'] leading-none"
  140. >
  141. 年新增
  142. </div>
  143. <div class="text-black/90 text-xs font-normal font-['D-DIN Exp'] leading-norma">
  144. 20
  145. </div>
  146. </div>
  147. </div>
  148. </template>
  149. </div>
  150. </div>
  151. <div class="bg-white rounded-2xl shadow pa-[15px] mt-[20px]">
  152. <div class="flex items-center justify-between">
  153. <div class="text-black/90 text-base font-normal font-['PingFang_SC'] leading-relaxed">
  154. 使用动态
  155. </div>
  156. </div>
  157. <div class="mt-3 grid grid-cols-3 gap-2.5">
  158. <template
  159. v-for="{ name, value } of [
  160. { name: '打开次数', des: '最近', value: 220 },
  161. { name: '浏览时长', des: '本年', value: 220 },
  162. { name: '发圈次数', des: '本年', value: 220 },
  163. { name: '主页分享数', des: '本年', value: 220 },
  164. { name: '分享浏览数', des: '本年', value: 220 },
  165. { name: '分享获客数', des: '本年', value: 220 },
  166. ]"
  167. :key="name"
  168. >
  169. <div class="rounded-lg aspect-[1/1] flex flex-col justify-around p-2.5">
  170. <div class="text-black/60 text-xs font-normal font-['PingFang_SC'] leading-none">
  171. {{ name }}
  172. </div>
  173. <div class="text-black/90 text-lg font-bold font-['D-DIN Exp'] leading-normal">
  174. {{ value }}
  175. </div>
  176. <div class="flex items-center gap-1">
  177. <div
  178. class="text-black/40 text-xs font-normal font-['PingFang_SC'] leading-none"
  179. >
  180. 年新增
  181. </div>
  182. <div class="text-black/90 text-xs font-normal font-['D-DIN Exp'] leading-norma">
  183. 20
  184. </div>
  185. </div>
  186. </div>
  187. </template>
  188. </div>
  189. </div>
  190. <div class="bg-white rounded-2xl shadow pa-[15px] mt-[20px]">
  191. <div class="flex items-center justify-between">
  192. <div class="text-black/90 text-base font-normal font-['PingFang_SC'] leading-relaxed">
  193. 最近动态
  194. </div>
  195. </div>
  196. <div class="mt-3">
  197. <div class="text-black/90 text-sm font-normal font-['PingFang_SC'] leading-none">
  198. 苏小萌报名了早稻田深度设计游学
  199. </div>
  200. <div
  201. class="text-black/30 text-xs font-normal font-['PingFang_SC'] leading-none mt-[10px]"
  202. >
  203. 2024-09-08 14:12
  204. </div>
  205. </div>
  206. </div>
  207. </view>
  208. <view class="content mt-[20px]" v-if="tab === 'followUp'">
  209. <PageHelperEvo :request="getFollowUpPage" :query="followUpQuery">
  210. <template #default="{ source }">
  211. <div class="flex flex-col gap-4">
  212. <template v-for="(it, index) in source.list" :key="index">
  213. <div class="bg-white rounded-2xl shadow pl-[15px] py-[15px] flex-col gap-2 flex">
  214. <div class="flex items-center justify-between">
  215. <div
  216. class="text-black/90 text-base font-normal font-['PingFang SC'] leading-relaxed"
  217. >
  218. {{ dayjs(it.followTime).format('YYYY-MM-DD HH:mm') }}
  219. </div>
  220. <div
  221. class="text-white text-xs font-normal font-['PingFang_SC'] leading-none pa-[8px]"
  222. :class="`${{ 1: 'bg-[#2357E9]', 2: 'bg-[#f8b344]' }[it.followType]}`"
  223. style="border-top-left-radius: 15px; border-bottom-left-radius: 5px"
  224. >
  225. <div class="flex items-center gap-1">
  226. <div class="w-1 h-1 bg-white rounded-full border"></div>
  227. <!-- 线下拜访 -->
  228. {{ it.followTypeName }}
  229. </div>
  230. </div>
  231. </div>
  232. <div
  233. class="text-black/60 text-sm font-normal font-['PingFang_SC'] leading-normal mr-[15px] mt-[29px]"
  234. >
  235. <!-- 和周老师在工作碰了环球项目,选了瓷砖款式,后天客户交定金,订单金额初步为
  236. 304958 -->
  237. {{ it.remark }}
  238. </div>
  239. <div class="mt-[15px] flex gap-2.5">
  240. <template v-for="(src, index) in it?.imgUrl?.split(',')" :key="index">
  241. <wd-img
  242. custom-class="rounded-lg overflow-hidden"
  243. width="70"
  244. height="70"
  245. :src="src"
  246. />
  247. </template>
  248. </div>
  249. <div class="flex items-center justify-between mt-[19px]">
  250. <div
  251. class="h-[25px] px-1.5 bg-[#f4f4f4] rounded-md justify-center items-center gap-1 inline-flex"
  252. >
  253. <wd-img width="15px" height="15px" :src="locationIcon"></wd-img>
  254. <div
  255. class="text-black/40 text-[10px] font-normal font-['PingFang_SC'] leading-[25px]"
  256. >
  257. <!-- 一间空间设计工作室 -->
  258. {{ it?.address.address }}
  259. </div>
  260. </div>
  261. <div
  262. class="text-black/90 text-sm font-normal font-['PingFang_SC'] leading-relaxed mr-[15px]"
  263. >
  264. 渠道:{{ it?.brokerName }}
  265. </div>
  266. </div>
  267. </div>
  268. </template>
  269. </div>
  270. </template>
  271. </PageHelperEvo>
  272. </view>
  273. <view class="content mt-[20px]" v-if="tab === ''">
  274. <div class="bg-white rounded-2xl shadow pa-[15px] mt-[20px] flex-col gap-2 flex">
  275. <div class="flex-row flex items-center justify-between w-full">
  276. <div class="flex-row flex items-center">
  277. <div
  278. class="text-black/90 text-base font-normal font-['PingFang_SC'] leading-[10.18px]"
  279. >
  280. 苏小萌
  281. </div>
  282. <div
  283. class="h-4 bg-neutral-100 rounded-[20px] justify-start items-center inline-flex flex-row ml-[9px]"
  284. >
  285. <wd-img width="17" height="17" :src="vipIcon"></wd-img>
  286. <div
  287. class="text-black/40 text-[10px] font-normal font-['PingFang_SC'] px-[7px] leading-none"
  288. >
  289. 白银会员
  290. </div>
  291. </div>
  292. </div>
  293. <div class="text-black/40 text-sm font-normal font-['PingFang_SC'] leading-[10.18px]">
  294. 4小时前
  295. </div>
  296. </div>
  297. <div class="mt-[26px]">
  298. <img
  299. class="w-[165px] h-[220px] rounded-lg"
  300. src="https://via.placeholder.com/165x220"
  301. />
  302. </div>
  303. <div
  304. class="text-black/90 text-base font-normal font-['PingFang_SC'] leading-[10.18px] mt-[29px]"
  305. >
  306. 用心做好设计,为客户创造美好家居环境
  307. </div>
  308. <div
  309. class="h-7 py-1.5 rounded-[50px] border border-black/20 justify-start items-center gap-[5px] inline-flex mt-[29px]"
  310. >
  311. <wd-img width="17" height="17" :src="yinyongIcon"></wd-img>
  312. <div class="text-black/60 text-xs font-normal font-['PingFang_SC'] leading-none">
  313. 意大利游学设计班
  314. </div>
  315. </div>
  316. <div class="flex items-center justify-between mt-[19px]">
  317. <div class="flex items-center gap-[8px]">
  318. <wd-img width="17" height="17" :src="shareIcon"></wd-img>
  319. <div class="text-black/90 text-sm font-normal font-['D-DIN Exp'] leading-snug">
  320. 232
  321. </div>
  322. </div>
  323. <div class="flex items-center gap-[8px]">
  324. <wd-img width="17" height="17" :src="messageIcon"></wd-img>
  325. <div class="text-black/90 text-sm font-normal font-['D-DIN Exp'] leading-snug">
  326. 232
  327. </div>
  328. </div>
  329. <div class="flex items-center gap-[8px]">
  330. <wd-img width="17" height="17" :src="praiseIcon"></wd-img>
  331. <div class="text-black/90 text-sm font-normal font-['D-DIN Exp'] leading-snug">
  332. 232
  333. </div>
  334. </div>
  335. </div>
  336. </div>
  337. </view>
  338. <view class="content mt-[20px]" v-if="tab === 'product'">
  339. <div
  340. class="bg-white rounded-2xl shadow pa-[15px] mt-[20px] flex-col gap-2 flex"
  341. @click="toOrderDetails"
  342. >
  343. <div class="bg-white rounded-2xl flex items-center justify-between w-full">
  344. <div>
  345. <img class="w-[76px] h-[101px]" src="https://via.placeholder.com/76x101" />
  346. </div>
  347. <div class="ml-[16px] flex flex-col justify-start">
  348. <div class="text-black text-base font-normal font-['PingFang_SC'] leading-normal">
  349. 阿芙佳朵
  350. </div>
  351. <div
  352. class="text-left text-black/30 text-sm font-normal font-['PingFang_SC'] leading-normal"
  353. >
  354. x2
  355. </div>
  356. <div
  357. class="text-left text-black/30 text-sm font-normal font-['PingFang_SC'] leading-normal"
  358. >
  359. 600积分
  360. </div>
  361. </div>
  362. <div class="flex-1"></div>
  363. <div>
  364. <div class="text-[#2357e9] text-xs font-normal font-['PingFang_SC'] leading-normal">
  365. 已完成
  366. </div>
  367. </div>
  368. </div>
  369. </div>
  370. </view>
  371. </div>
  372. </div>
  373. </view>
  374. </template>
  375. <style scoped lang="scss">
  376. :deep(.wd-tabs) {
  377. background: transparent;
  378. }
  379. </style>