index.tsx 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. import { View, Text, } from "@tarojs/components";
  2. import Taro, { useDidShow } from "@tarojs/taro";
  3. import NavBarNormal from "@/components/NavBarNormal/index";
  4. import PageCustom from "@/components/page-custom/index";
  5. import IconArrowDownRounded from '@/components/icon/IconArrowDownRounded';
  6. import DataCard from './components/DataCard'
  7. import VisitorList from "./components/VisitorList";
  8. import PickerSingleColumn from "@/components/Picker/PickerSingleColumn";
  9. import { useEffect, useState } from "react";
  10. import { useAgentStore } from "@/store/agentStore";
  11. import { getVisitorSummary, type TVisitorSummary } from '@/service/visitor'
  12. import { isSuccess } from "@/utils";
  13. export default () => {
  14. const {agents, fetchAgents} = useAgentStore()
  15. // 是否显示选择器
  16. const [showPicker, setShowPicker] = useState(false)
  17. const [summary, setSummary] = useState<TVisitorSummary>()
  18. // 当前选中的值
  19. const [selected, setSelected] = useState<string>();
  20. const currentAgent = agents.find( _agent => _agent.name === selected)
  21. const onPicked = (value: string) => {
  22. setSelected(value)
  23. }
  24. useEffect(()=> {
  25. fetchAgents()
  26. }, [])
  27. useEffect(() => {
  28. setSelected('全部智能体')
  29. }, [])
  30. const fetchInitData = async () => {
  31. const currentAgent = agents.find( _agent => _agent.name === selected)
  32. const response = await getVisitorSummary(currentAgent?.agentId)
  33. if(isSuccess(response.status)){
  34. setSummary(response.data)
  35. }
  36. }
  37. useEffect(()=> {
  38. fetchInitData()
  39. }, [selected])
  40. if(!agents || !selected) {
  41. return <View>...</View>
  42. }
  43. const options = ['全部智能体', ...agents.map(_agent => _agent.name)]
  44. return (
  45. <PageCustom>
  46. <NavBarNormal scrollFadeIn leftColumn={()=> <Text className="font-medium text-dark leading-22 text-16">数据分析</Text>}>
  47. </NavBarNormal>
  48. <View className="w-full pt-8 px-16 pb-40">
  49. {(!!options.length && !!selected) &&
  50. <PickerSingleColumn options={options} selected={selected} onPicked={onPicked} showPicker={showPicker} setShowPicker={setShowPicker}>
  51. <View className="flex items-center gap-2 bg-white rounded-12 p-12 mb-16" onClick={() => setShowPicker(true)}>
  52. <View className="flex-1 text-14 leading-22 text-gray-45">{selected}</View>
  53. <View className="flex-center">
  54. <IconArrowDownRounded/>
  55. </View>
  56. </View>
  57. </PickerSingleColumn>
  58. }
  59. <View className="grid grid-cols-2 gap-8 bg-white rounded-12 p-12 mb-12">
  60. <DataCard text="今日访问次数" unitText="次" value={summary?.todayPv ?? 0} />
  61. <DataCard text="今日对话人数" unitText="人" value={summary?.todayUv ?? 0} />
  62. <DataCard text="累计访问次数" unitText="次" value={summary?.sumPv ?? 0} />
  63. <DataCard text="累计对话人数" unitText="人" value={summary?.sumPv ?? 0} />
  64. <DataCard text="好评" unitText="条" value={summary?.unreadLikeCnt ?? 0} arrow />
  65. <DataCard onClick={()=> {
  66. const query = currentAgent?.agentId ? `agentId=${currentAgent.agentId}` : ''
  67. Taro.navigateTo({
  68. url: `/pages/dashboard-dislike-messages/index?${query}`
  69. })
  70. }} text="待处理差评" unitText="条" value={summary?.unprocessedDislikeCnt ?? 0} arrow />
  71. </View>
  72. <VisitorList agentId={currentAgent?.agentId}></VisitorList>
  73. </View>
  74. </PageCustom>
  75. );
  76. };