index.tsx 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. import NavBarNormal from "@/components/NavBarNormal/index";
  2. import { View } from "@tarojs/components";
  3. import PageCustom from "@/components/page-custom/index";
  4. import TabBarButtons from "@/components/wemeta-tabs/TabBarButtons";
  5. import AgentSetting from "./components/AgentSetting/";
  6. import AgentWebsite from "./components/AgentWebsite/";
  7. import { useModalStore } from "@/store/modalStore";
  8. import { useAgentStore, useAgentStoreActions } from "@/store/agentStore";
  9. import { useEffect, useState } from "react";
  10. import Taro, { useDidShow, useRouter } from "@tarojs/taro";
  11. import { useComponentStore } from "@/store/componentStore";
  12. import { useUserStore } from "@/store/userStore";
  13. import { useAppStore } from "@/store/appStore";
  14. import style from './index.module.less'
  15. import {restrictedPage} from '@/utils'
  16. export default function Index() {
  17. restrictedPage()
  18. const { showModal } = useModalStore((state) => state.actions);
  19. const router = useRouter();
  20. const headerHeight = useAppStore((state) => state.headerHeight);
  21. const agentId = router.params.agentId;
  22. const agent = useAgentStore((state) => state.agent);
  23. const { clearMyAgent, fetchAgent, saveAgent } = useAgentStoreActions();
  24. const { fetchMyEntList } = useUserStore();
  25. const { setComponentList } = useComponentStore();
  26. const [tabIndex, setTabIndex] = useState('1');
  27. const handleTabIndexChange = (index: string) => {
  28. setTabIndex(index);
  29. };
  30. const fetchData = async (agentId: string) => {
  31. const result = await fetchAgent(agentId);
  32. if (result) {
  33. const components = result.components ?? []
  34. // 过滤掉没有 id 的组件防止有错误数据
  35. setComponentList(components.filter(c => !!c.data?.id), agentId);
  36. }
  37. fetchMyEntList()
  38. };
  39. const tabList = [
  40. {
  41. key: "1",
  42. label: "智能体",
  43. },
  44. {
  45. key: "2",
  46. label: "微官网",
  47. },
  48. ];
  49. const agentTemp = useAgentStore(state=> state.agentTemp);
  50. const { fetchAgents } = useAgentStoreActions();
  51. useEffect(()=> {
  52. fetchAgents()
  53. }, [])
  54. const handleSave = async () =>{
  55. await saveAgent()
  56. }
  57. const handleNavBack = async () => {
  58. if(!agentTemp){
  59. return true
  60. }
  61. // 创建的智能体没有名字时拦截弹窗
  62. if(!agentTemp.name){
  63. const r = await new Promise((resolve)=> {
  64. showModal({
  65. content: <View className="text-black font-pingfangSCMedium font-medium text-14 leading-22">确定放弃创建智能体?</View>,
  66. confirmText: "我再想想",
  67. onConfirm() {
  68. Taro.showTabBar().catch(()=> {});
  69. resolve(true)
  70. },
  71. onCancel() {
  72. Taro.showTabBar().catch(()=> {});
  73. resolve(false)
  74. },
  75. })
  76. })
  77. return r
  78. }
  79. }
  80. useDidShow(()=> {
  81. if(agentId){
  82. fetchData(agentId);
  83. }else{
  84. clearMyAgent();
  85. }
  86. })
  87. return (
  88. <PageCustom>
  89. <NavBarNormal onNavBack={handleNavBack}>编辑智能体</NavBarNormal>
  90. <View className="px-16 w-full flex flex-col gap-20">
  91. <View className={style.tabContainer}
  92. style={{
  93. paddingTop: headerHeight,
  94. }}
  95. >
  96. <View className="flex flex-center px-16 pb-12">
  97. <TabBarButtons
  98. current={tabIndex}
  99. list={tabList}
  100. onTabIndexChange={handleTabIndexChange}
  101. ></TabBarButtons>
  102. </View>
  103. </View>
  104. <View className="pt-52">
  105. <View className={`${tabIndex === "1" ? "block" : "hidden"}`}>
  106. <AgentSetting save={handleSave}></AgentSetting>
  107. </View>
  108. <View className={`${tabIndex === "2" ? "block" : "hidden"}`}>
  109. <View className="pt-36 pb-80">
  110. <AgentWebsite></AgentWebsite>
  111. </View>
  112. </View>
  113. </View>
  114. </View>
  115. </PageCustom>
  116. );
  117. }