Parcourir la source

feat: 欢迎页

王晓东 il y a 1 mois
Parent
commit
e666142ca8
39 fichiers modifiés avec 1086 ajouts et 206 suppressions
  1. 4 1
      src/app.config.ts
  2. 14 5
      src/app.less
  3. 7 0
      src/components/icon/icon-change/index.tsx
  4. 1 1
      src/components/icon/icon-minus/index.tsx
  5. 7 0
      src/components/icon/icon-plus-big/index.tsx
  6. 7 0
      src/components/icon/icon-star/index.tsx
  7. 56 0
      src/components/popup/popup-sheets/index.module.less
  8. 68 0
      src/components/popup/popup-sheets/index.tsx
  9. 0 1
      src/components/wemeta-tabs/TabBarButtons.tsx
  10. 3 0
      src/images/icon-plus-big.svg
  11. BIN
      src/images/logo.png
  12. 3 0
      src/images/svgs/icon-change.svg
  13. 3 0
      src/images/svgs/icon-plus-big.svg
  14. 4 0
      src/images/svgs/icon-star.svg
  15. 27 0
      src/pages/agent-gen/components/step/StepPick.tsx
  16. 37 0
      src/pages/agent-gen/components/step/StepStart.tsx
  17. 34 0
      src/pages/agent-gen/components/step/index.module.less
  18. 9 0
      src/pages/agent-gen/index.config.ts
  19. 25 0
      src/pages/agent-gen/index.tsx
  20. 38 0
      src/pages/agent/components/AgentSetting/components/AgentEmptyCard/index.module.less
  21. 57 0
      src/pages/agent/components/AgentSetting/components/AgentEmptyCard/index.tsx
  22. 81 0
      src/pages/agent/components/AgentSetting/components/AgentKnowledgeLib/index.tsx
  23. 60 0
      src/pages/agent/components/AgentSetting/components/AgentSettingList/index.tsx
  24. 20 0
      src/pages/agent/components/AgentSetting/index.tsx
  25. 9 0
      src/pages/agent/index.config.ts
  26. 54 0
      src/pages/agent/index.tsx
  27. 59 0
      src/pages/index/components/welcome/index.module.less
  28. 30 0
      src/pages/index/components/welcome/index.tsx
  29. 16 196
      src/pages/index/index.tsx
  30. 0 0
      src/pages/index1111111/components/AICard/Index.module.less
  31. 0 0
      src/pages/index1111111/components/AICard/Index.tsx
  32. 0 0
      src/pages/index1111111/components/AICardAdd/Index.module.less
  33. 0 0
      src/pages/index1111111/components/AICardAdd/Index.tsx
  34. 8 0
      src/pages/index1111111/index.config.ts
  35. 56 0
      src/pages/index1111111/index.module.less
  36. 213 0
      src/pages/index1111111/index.tsx
  37. 9 0
      src/pages/login/index.config.ts
  38. 52 0
      src/pages/login/index.tsx
  39. 15 2
      src/pages/test/index.tsx

+ 4 - 1
src/app.config.ts

@@ -1,8 +1,11 @@
 export default defineAppConfig({
   pages: [
+    'pages/agent-gen/index',
+    'pages/agent/index',
+    'pages/index/index',
+    'pages/login/index',
     'pages/test/index',
     'pages/component-library/index',
-    'pages/index/index',
     'pages/chat/index',
     'pages/editor-pages/editor-channels/index',
     'pages/analysis/index',

+ 14 - 5
src/app.less

@@ -47,6 +47,9 @@
 .bg-primary-color {
   background-color: var(--color-bg-primary, #317CFA);
 }
+.warn-color{
+  color: #EE4949;
+}
 
 
 .global-page-bg{
@@ -147,22 +150,28 @@
 
 .rounded-button{
   display: flex;
-  padding: 8px 30px;
+  padding: 14px;
   align-items: center;
-  border-radius: 20px;
+  justify-content: center;
+  border-radius: 8px;
   background-color: white;
-  color: rgba(#000, .45);
+  color: rgba(#000, .85);
   text-align: center;
   font-size: 12px;
   font-style: normal;
   font-weight: 500;
-  line-height: 22px;
+  line-height: 20px;
   transition: background-color .2s;
 }
 .rounded-button.actived{
   background-color: #000;
   color: #FFF;
 }
+.rounded-button.primary{
+  color: white;
+  font-size: 14px;
+  background-color: var(--color-primary);
+}
 
 
 .social-media-icon{
@@ -306,4 +315,4 @@
   background-color: var(--color-bg-primary);
   padding-bottom: constant(safe-area-inset-bottom); /*兼容 IOS<11.2*/
 	padding-bottom: env(safe-area-inset-bottom); /*兼容 IOS>11.2*/
-}
+}

+ 7 - 0
src/components/icon/icon-change/index.tsx

@@ -0,0 +1,7 @@
+import { Image } from '@tarojs/components'
+import Icon from '@/images/svgs/icon-change.svg'
+export default () => {
+  return (
+    <Image src={Icon} mode="widthFix" style={{width: '16px', height: '16px'}}></Image>
+  )
+}

+ 1 - 1
src/components/icon/icon-minus/index.tsx

@@ -1,5 +1,5 @@
 import { Image } from '@tarojs/components'
-import Icon from '@/images/svgs/icon-minus.svg'
+import Icon from '@/images/svgs/icon-change.svg'
 export default () => {
   return (
     <Image src={Icon} mode="widthFix" style={{width: '16px', height: '16px'}}></Image>

+ 7 - 0
src/components/icon/icon-plus-big/index.tsx

@@ -0,0 +1,7 @@
+import { Image } from '@tarojs/components'
+import Icon from '@/images/svgs/icon-plus-big.svg'
+export default () => {
+  return (
+    <Image src={Icon} mode="widthFix" style={{width: '12px', height: '12px'}}></Image>
+  )
+}

+ 7 - 0
src/components/icon/icon-star/index.tsx

@@ -0,0 +1,7 @@
+import { Image } from '@tarojs/components'
+import Icon from '@/images/svgs/icon-star.svg'
+export default () => {
+  return (
+    <Image src={Icon} mode="widthFix" style={{width: '16px', height: '16px'}}></Image>
+  )
+}

+ 56 - 0
src/components/popup/popup-sheets/index.module.less

@@ -0,0 +1,56 @@
+.popup{
+  position: fixed;
+  top: 0;
+  right: 0;
+  left: 0;
+  bottom: 0;
+  z-index: 1000;
+  width: 100vw;
+  height: 100vh;
+  background-color: rgba(#000, .45);
+}
+.container{
+  position: absolute;
+  left: 10px;
+  right: 10px;
+  bottom: 0;
+  padding-top: 12px;
+  width: calc(100% - 20px);
+  border-radius: 24px 24px 0 0;
+  background-color: white;
+  transition: transform .14s ease-in;
+  transform: translateY(100%);
+}
+.show{
+  transform: translateY(0%);
+}
+.titleBar{
+  padding: 0 16px;
+  display: flex;
+  width: 100%;
+  height: 48px;
+  align-items: center;
+}
+.item{
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  height: 56px;
+  line-height: 56px;
+  font-weight: 500;
+}
+.bottomBorder{
+  border-bottom: 1px solid var(--color-bg-gray);
+}
+.bottomContainer{
+  border-top: 8px solid var(--color-bg-gray);
+  padding-bottom: constant(safe-area-inset-bottom); /*兼容 IOS<11.2*/
+	padding-bottom: env(safe-area-inset-bottom); /*兼容 IOS>11.2*/
+}
+.bottomButton{
+  .item();
+}
+
+
+
+

+ 68 - 0
src/components/popup/popup-sheets/index.tsx

@@ -0,0 +1,68 @@
+import { View } from "@tarojs/components";
+import style from "./index.module.less";
+import { useEffect, useState } from "react";
+
+type Ttype = "primary" | "warn"
+interface Props {
+  title?: string;
+  setShow: (show: boolean) => void;
+  show: boolean;
+  content: { item: string | JSX.Element; type?: Ttype, onClick?: ()=> void}[];
+  header?: JSX.Element | JSX.Element[];
+  bottom?: JSX.Element[];
+}
+export default ({ content, show, setShow }: Props) => {
+  const [slideUp, setSlideUp] = useState(false);
+  const handleClose = () => {
+    setSlideUp(false);
+    setTimeout(() => {
+      setShow(false);
+    }, 100);
+  };
+
+  useEffect(() => {
+    setTimeout(() => {
+      setSlideUp(show);
+    }, 100);
+  }, [show]);
+
+  const getTypeClassName = (type?: Ttype) => {
+    if(type === 'primary'){
+      return 'primary-color'
+    }
+    if(type === 'warn'){
+      return 'warn-color'
+    }
+    return ''
+  }
+
+  return (
+    <>
+      {show && (
+        <View className={style.popup}>
+          <View className={`${style.container} ${slideUp ? style.show : ""}`}>
+            <View className={style.content}>
+              {content.map((data, index) => {
+                return (
+                  <View
+                    className={`${style.item}
+                    ${getTypeClassName(data.type)}
+                    ${
+                      index < content.length ? style.bottomBorder : ""
+                    }`}
+                    onClick={()=> data.onClick && data.onClick()}
+                  >
+                    {data.item}
+                  </View>
+                );
+              })}
+            </View>
+            <View className={style.bottomContainer} onClick={handleClose}>
+              <View className={style.bottomButton}>取消</View>
+            </View>
+          </View>
+        </View>
+      )}
+    </>
+  );
+};

+ 0 - 1
src/components/wemeta-tabs/TabBarButtons.tsx

@@ -19,7 +19,6 @@ export default function Index({
   onTabIndexChange,
 }: Props) {
   const setTabIndex = (index: string)=> {
-    console.log(index)
     onTabIndexChange(index)
   }
   return (

+ 3 - 0
src/images/icon-plus-big.svg

@@ -0,0 +1,3 @@
+<svg width="13" height="12" viewBox="0 0 13 12" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M5.75 6.75V12H7.25V6.75H12.5V5.25H7.25V0H5.75V5.25H0.5V6.75H5.75Z" fill="white"/>
+</svg>

BIN
src/images/logo.png


+ 3 - 0
src/images/svgs/icon-change.svg

@@ -0,0 +1,3 @@
+<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M9.62437 7.63422C9.7145 7.63422 9.80113 7.66047 9.87464 7.71123L14.5117 10.8965C14.5675 10.9339 14.6134 10.9843 14.6454 11.0434C14.6774 11.1025 14.6946 11.1685 14.6953 11.2357C14.6961 11.3029 14.6805 11.3693 14.6499 11.4291C14.6192 11.4889 14.5745 11.5404 14.5195 11.5791L9.88164 14.9175C9.78891 14.9838 9.67412 15.0118 9.56127 14.9955C9.44842 14.9791 9.34624 14.9198 9.27609 14.83C9.22103 14.7578 9.1912 14.6696 9.19121 14.5788V12.4314H5.40038C2.69903 12.4463 1.2324 11.1476 0.999634 8.53642C1.23415 8.77532 2.25974 10.1859 5.40126 10.1859C7.49356 10.1859 8.75717 10.1623 9.19033 10.1159V8.05513C9.19033 7.82236 9.38547 7.63422 9.62437 7.63422ZM6.72437 1.17004C6.77943 1.24219 6.80926 1.33043 6.80925 1.42119V3.56862H10.6001C13.3014 3.55375 14.7681 4.85236 15.0008 7.46358C14.7663 7.22468 13.7407 5.81406 10.5992 5.81406C8.5069 5.81406 7.24329 5.83769 6.81013 5.88407V7.94487C6.80829 8.05821 6.76155 8.16619 6.68017 8.2451C6.5988 8.32402 6.48943 8.36742 6.37609 8.36578C6.2868 8.36599 6.19955 8.33914 6.12582 8.28877L1.4888 5.1035C1.43295 5.06612 1.38704 5.0157 1.35504 4.9566C1.32304 4.8975 1.30591 4.8315 1.30513 4.7643C1.30436 4.6971 1.31996 4.63071 1.35059 4.57089C1.38121 4.51107 1.42595 4.4596 1.48092 4.42095L6.11882 1.08254C6.21155 1.01618 6.32634 0.988237 6.43919 1.00454C6.55204 1.02085 6.65422 1.08015 6.72437 1.17004Z" fill="white"/>
+</svg>

+ 3 - 0
src/images/svgs/icon-plus-big.svg

@@ -0,0 +1,3 @@
+<svg width="13" height="12" viewBox="0 0 13 12" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M5.75 6.75V12H7.25V6.75H12.5V5.25H7.25V5.96046e-08L5.75 0V5.25H0.5V6.75H5.75Z" fill="white"/>
+</svg>

+ 4 - 0
src/images/svgs/icon-star.svg

@@ -0,0 +1,4 @@
+<svg width="17" height="16" viewBox="0 0 17 16" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M14.7501 7.67708C11.8434 6.92775 9.57205 4.65641 8.82272 1.74975L8.50005 0.498413L8.17738 1.74975C7.42805 4.65641 5.15672 6.92775 2.25005 7.67708L0.998718 7.99975L2.25005 8.32308C5.15672 9.07241 7.42805 11.3437 8.17738 14.2497L8.50005 15.5017L8.82272 14.2497C9.57205 11.3437 11.8434 9.07241 14.7501 8.32308L16.0014 7.99975L14.7501 7.67708Z" fill="white"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M13.0007 5.16469C13.0007 4.39002 13.8501 3.49869 14.6667 3.49869C13.8807 3.49869 13.0007 2.59802 13.0007 1.83335C13.0007 2.59802 12.1287 3.49869 11.3354 3.49869C12.0987 3.49869 13.0007 4.38535 13.0007 5.16469Z" fill="white"/>
+</svg>

+ 27 - 0
src/pages/agent-gen/components/step/StepPick.tsx

@@ -0,0 +1,27 @@
+import { View,Text } from "@tarojs/components";
+
+import React, { useState } from "react";
+import style from './index.module.less'
+export default React.memo(function Index() {
+  const [value, setValue] = useState("");
+  return (
+    <View>
+      <View className={style.pickContainer}>
+        <View className={style.pickAvatarCard}>
+          
+        </View>
+      </View>
+      
+      <View className="bottom-bar">
+        <View className="grid grid-cols-2 gap-8 px-20 py-12">
+          <View className={`rounded-button`}>
+              上一步
+          </View>
+          <View className={`rounded-button primary`}>
+              使用这张
+          </View>
+        </View>
+      </View>
+    </View>
+  );
+})

+ 37 - 0
src/pages/agent-gen/components/step/StepStart.tsx

@@ -0,0 +1,37 @@
+import { View,Text } from "@tarojs/components";
+
+import React, { useState } from "react";
+import style from './index.module.less'
+import IconChange from "@/components/icon/icon-change";
+import IconStar from "@/components/icon/icon-star";
+import WemetaTextarea from "@/components/wemeta-textarea/index";
+export default React.memo(function Index() {
+  const [value, setValue] = useState("");
+  return (
+    <View>
+      <View className={style.startContainer}>
+        <View className={style.startCard}>
+          <View className={style.startIconChange}>
+            <IconChange></IconChange>
+          </View>
+        </View>
+      </View>
+      <View className="mb-24">
+        <View className="text-14 font-medium text-black mb-10">创意描述<Text className="text-12 text-gray-45">(非必填)</Text></View>
+        <WemetaTextarea
+          value={value}
+          onInput={(value: string) => setValue(value)}
+          placeholder="描述你想要生成的画面和动作。例如:职场精英在点头微笑"
+        />
+      </View>
+      <View className="bottom-bar">
+        <View className="px-20 py-12">
+          <View className={`rounded-button-big gap-4 ${style.startGenButton}`}>
+              <IconStar></IconStar>
+              <View>生成微视频</View>
+          </View>
+        </View>
+      </View>
+    </View>
+  );
+})

+ 34 - 0
src/pages/agent-gen/components/step/index.module.less

@@ -0,0 +1,34 @@
+.startContainer{
+  padding: 24px 72px 32px;
+}
+.startCard{
+  position: relative;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  width: 200px;
+  height: 356px;
+  border-radius: 16px;
+  overflow: hidden;
+  background-color: white;
+}
+
+.startIconChange{
+  position: absolute;
+  right: 0;
+  top: 0;
+  z-index: 1;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  width: 36px;
+  height: 36px;
+  padding: 8px;
+  gap: 10px;
+  background-color: rgba(#000, .6);
+  border-bottom-left-radius: 12px;
+}
+
+.startGenButton{
+  background: linear-gradient(276.8deg, #317CFA -11.65%, #FF2DF8 91.8%);
+}

+ 9 - 0
src/pages/agent-gen/index.config.ts

@@ -0,0 +1,9 @@
+export default definePageConfig({
+  navigationBarTitleText: `${process.env.TARO_APP_NAME_TEXT}`,
+  enableShareAppMessage: true,
+  enableShareTimeline: true,
+  navigationStyle: 'custom',
+  usingComponents: {
+    
+  }
+})

+ 25 - 0
src/pages/agent-gen/index.tsx

@@ -0,0 +1,25 @@
+
+import NavBarNormal from "@/components/nav-bar-normal/index";
+import { View } from "@tarojs/components";
+import PageCustom from "@/components/page-custom/index";
+
+import { useState } from "react";
+import StepStart from './components/step/StepStart'
+import StepPick from "./components/step/StepPick";
+
+export default function Index() {
+  
+  const [state, setState] = useState<'start'|'pick'|'confirm'>('pick')
+
+  
+
+  return (
+    <PageCustom>
+      <NavBarNormal backText="形象照"></NavBarNormal>
+      <View className="px-16 w-full flex flex-col gap-20">
+        <View className={state === 'start' ? 'block': 'hidden'}><StepStart></StepStart></View>
+        <View className={state === 'pick' ? 'block': 'hidden'}><StepPick></StepPick></View>
+      </View>
+    </PageCustom>
+  );
+}

+ 38 - 0
src/pages/agent/components/AgentSetting/components/AgentEmptyCard/index.module.less

@@ -0,0 +1,38 @@
+.container{
+  padding: 24px 72px 32px;
+}
+.card{
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  width: 200px;
+  height: 356px;
+  border-radius: 16px;
+  background-color: white;
+}
+.tips{
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  justify-content: center;
+  gap: 8px;
+  width: 168px;
+  height: 82px;
+}
+
+.icon{
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  width: 28px;
+  height: 28px;
+  border-radius: 100%;
+  background-color: var(--color-primary);
+}
+.tipsText{
+  font-weight: 400;
+  font-size: 14px;
+  line-height: 22px;
+  color: rgba(#000, .45);
+   
+}

+ 57 - 0
src/pages/agent/components/AgentSetting/components/AgentEmptyCard/index.tsx

@@ -0,0 +1,57 @@
+import { View } from "@tarojs/components"
+import style from './index.module.less'
+import IconPlusBig from "@/components/icon/icon-plus-big"
+import Taro from "@tarojs/taro";
+export default ()=> {
+  const maxAvatarVideoSize = 10
+  // const maxAvatarVideoSize = useAppStore((state) => state.appConfig?.maxAvatarVideoSize); // unit MB
+  let isUploading = false
+  const handleClick = () => {
+    Taro.chooseMedia({
+      count: 1,
+      mediaType: ["image"],
+      sourceType: ["album", "camera"],
+      async success(r) {
+        const tempFile = r.tempFiles[0]
+        const tmpPath = tempFile.tempFilePath;
+        if (maxAvatarVideoSize && tempFile.size > maxAvatarVideoSize * 1024 * 1024) {
+          Taro.showToast({
+            title: `文件不能超过${maxAvatarVideoSize}MB`,
+            icon: 'none'
+          });
+          return;
+        }
+        
+        // setAvatarUrl(tmpPath);
+        if(r.type === 'image'){
+          Taro.cropImage({
+            src: tmpPath,
+            cropScale: "4:3",
+            success: async (res) => {
+              const path = res.tempFilePath;
+              console.log(path)
+              Taro.showLoading()
+              Taro.navigateTo({
+                url: '/pages/agent-gen/index'
+              })
+              // const response = await uploadImage(path);
+              // processChooseResult(response)
+            },
+          });
+        }
+      },
+    });
+  }
+  return(
+    <View className={style.container}>
+      <View className={style.card} onClick={handleClick}>
+      <View className={style.tips}>
+        <View className={style.icon}>
+          <IconPlusBig></IconPlusBig>
+        </View>
+        <View className={style.tipsText}>形象照</View>
+      </View>
+      </View>
+    </View>
+  )
+}

+ 81 - 0
src/pages/agent/components/AgentSetting/components/AgentKnowledgeLib/index.tsx

@@ -0,0 +1,81 @@
+import { View } from "@tarojs/components";
+import { useState } from "react";
+import CardList from "@/components/list/card-list";
+import CardListItem from "@/components/list/card-list-item";
+import WemetaSwitch from "@/components/wemeta-switch";
+
+import IconArrow from "@/components/icon/icon-arrow";
+
+import IconPageColor from "@/components/icon/icon-page-color";
+
+export default function Index() {
+  
+  const [checked, setChecked] = useState(false);
+  const handleSwitchChange = (checked: boolean) => {
+    setChecked(checked);
+    // onSwitchChanged && onSwitchChanged(checked);
+  };
+
+  const IconArrowRight = () => {
+    return (
+      <View className="flex items-center">
+        <IconArrow />
+      </View>
+    );
+  };
+
+  return (
+    <CardList>
+            <CardListItem
+              className="pl-16 pr-8"
+              leftRenderer={IconPageColor}
+              rightRenderer={IconArrowRight}
+            >
+              <View className="text-14 py-18 font-medium leading-22">
+                知识库
+              </View>
+            </CardListItem>
+            <View className="">
+              <View className="flex flex-col gap-12 px-16 pb-16">
+                <View className="flex rounded-8 p-16 gap-16 bg-gray-3">
+                  <View className="flex-1">
+                    <View className="text-14 font-medium leading-22 text-black pb-2">
+                      个人知识
+                    </View>
+                    <View className="text-12 leading-20 text-gray-45">
+                      使用你上传的内容(如文档、链接等)作为智能体回答的知识基础。
+                    </View>
+                  </View>
+
+                  <View className="flex-center">
+                    <WemetaSwitch
+                      checked={checked}
+                      onChange={(checked) => handleSwitchChange(checked)}
+                    ></WemetaSwitch>
+                  </View>
+                </View>
+
+                <View className="flex rounded-8 p-16 bg-gray-3">
+                  <View className="flex-1">
+                    <View className="text-14 font-medium leading-22 text-black pb-2">
+                      杭州茗视光眼科医院
+                    </View>
+                    <View className="text-12 leading-20 text-gray-45">
+                      引用企业统一配置的知识库内容,如用于支持专业、统一的客户沟通。
+                    </View>
+                  </View>
+
+                  <View className="flex-center">
+                    <WemetaSwitch
+                      checked={checked}
+                      onChange={(checked) => handleSwitchChange(checked)}
+                    ></WemetaSwitch>
+                  </View>
+                </View>
+              </View>
+            </View>
+          </CardList>
+  );
+}
+
+

+ 60 - 0
src/pages/agent/components/AgentSetting/components/AgentSettingList/index.tsx

@@ -0,0 +1,60 @@
+
+import { View } from "@tarojs/components";
+
+import IconVoiceColor from "@/components/icon/icon-voice-color";
+import CardList from "@/components/list/card-list";
+import CardListItem from "@/components/list/card-list-item";
+import IconPeopleColor from "@/components/icon/icon-people-color";
+import IconConversationColor from "@/components/icon/icon-conversation-color";
+import IconIdeaColor from "@/components/icon/icon-idea-color";
+
+import IconArrow from "@/components/icon/icon-arrow";
+
+export default function Index() {
+
+  const IconArrowRight = () => {
+    return (
+      <View className="flex items-center">
+        <IconArrow />
+      </View>
+    );
+  };
+
+  return (
+    <CardList>
+          <CardListItem
+            className="pl-16 pr-8"
+            underline
+            rightRenderer={IconArrowRight}
+            leftRenderer={IconVoiceColor}
+          >
+            <View className="text-14 py-18 font-medium leading-22">声音</View>
+          </CardListItem>
+          <CardListItem
+            className="pl-16 pr-8"
+            underline
+            rightRenderer={IconArrowRight}
+            leftRenderer={IconPeopleColor}
+          >
+            <View className="text-14 py-18 font-medium leading-22">人设</View>
+          </CardListItem>
+          <CardListItem
+            className="pl-16 pr-8"
+            underline
+            rightRenderer={IconArrowRight}
+            leftRenderer={IconConversationColor}
+          >
+            <View className="text-14 py-18 font-medium leading-22">开场白</View>
+          </CardListItem>
+          <CardListItem
+            className="pl-16 pr-8"
+            rightRenderer={IconArrowRight}
+            leftRenderer={IconIdeaColor}
+          >
+            <View className="text-14 py-18 font-medium leading-22">
+              开场提问引导
+            </View>
+          </CardListItem>
+        </CardList>
+  );
+}

+ 20 - 0
src/pages/agent/components/AgentSetting/index.tsx

@@ -0,0 +1,20 @@
+import { View } from "@tarojs/components";
+import AgentSettingList from './components/AgentSettingList'
+import AgentKnowledgeLib from './components/AgentKnowledgeLib'
+import AgentEmptyCard from './components/AgentEmptyCard'
+
+import React, { useState } from "react";
+
+export default React.memo(function Index() {
+  console.log('agent setting')
+
+  return (
+    <View>
+      <AgentEmptyCard></AgentEmptyCard>
+      <AgentSettingList></AgentSettingList>
+      <View className="pt-20">
+        <AgentKnowledgeLib></AgentKnowledgeLib>
+      </View>
+    </View>
+  );
+})

+ 9 - 0
src/pages/agent/index.config.ts

@@ -0,0 +1,9 @@
+export default definePageConfig({
+  navigationBarTitleText: `${process.env.TARO_APP_NAME_TEXT}`,
+  enableShareAppMessage: true,
+  enableShareTimeline: true,
+  navigationStyle: 'custom',
+  usingComponents: {
+    
+  }
+})

+ 54 - 0
src/pages/agent/index.tsx

@@ -0,0 +1,54 @@
+
+import NavBarNormal from "@/components/nav-bar-normal/index";
+import { View } from "@tarojs/components";
+import PageCustom from "@/components/page-custom/index";
+
+import TabBarButtons from "@/components/wemeta-tabs/TabBarButtons";
+import AgentSetting from './components/AgentSetting/'
+
+import { useState } from "react";
+
+export default function Index() {
+  const [tabIndex, setTabIndex] = useState("1");
+
+  const handleTabIndexChange = (index: string) => {
+    setTabIndex(index);
+  };
+
+  const tabList = [
+    {
+      key: "1",
+      label: "智能体",
+    },
+    {
+      key: "2",
+      label: "微官网",
+    },
+  ];
+
+
+
+  return (
+    <PageCustom>
+      <NavBarNormal backText="创建"></NavBarNormal>
+      <View className="px-16 w-full flex flex-col gap-20">
+        <View className="w-full">
+          <TabBarButtons
+            current={tabIndex}
+            list={tabList}
+            onTabIndexChange={handleTabIndexChange}
+          ></TabBarButtons>
+        </View>
+        <View className={`${tabIndex === '1' ? 'block':'hidden'}`}>
+          <AgentSetting></AgentSetting>
+        </View>
+        <View className={`${tabIndex === '2' ? 'block':'hidden'}`}>
+          components
+        </View>
+        
+
+        
+      </View>
+    </PageCustom>
+  );
+}

+ 59 - 0
src/pages/index/components/welcome/index.module.less

@@ -0,0 +1,59 @@
+.container{
+  width: 100%;
+  padding: 12px;
+  position: absolute;
+  bottom: 16px;
+  left: 0;
+  right: 0;
+  // display: flex;
+  // box-sizing: border-box;
+  // flex-direction: column;
+  // justify-content: flex-end;
+}
+.hello {
+  padding-left: 12px;
+  margin-bottom: 10px;
+  font-family: PingFang SC;
+  font-weight: 500;
+  font-size: 24px;
+  line-height: 32px;
+  color: #000;
+}
+
+.welcome {
+  padding-left: 12px;
+  margin-bottom: 54px;
+  font-family: PingFang SC;
+  font-weight: 400;
+  font-size: 12px;
+  line-height: 20px;
+
+}
+
+.box {
+  margin-bottom: 20px;
+  border-radius: 12px;
+  padding: 20px;
+  background-color: white;
+}
+
+.boxInner {
+  margin-bottom: 20px;
+  padding: 12;
+  border-radius: 8px;
+  background-color: rgba(var(--primary-color, .1));
+}
+
+.headline {
+  margin-bottom: 10px;
+  font-weight: 500;
+  font-size: 16px;
+  line-height: 24px;
+}
+
+.list {
+  padding-bottom: 38px;
+  font-weight: 400;
+  font-size: 14px;
+  line-height: 22px;
+}

+ 30 - 0
src/pages/index/components/welcome/index.tsx

@@ -0,0 +1,30 @@
+import { View } from "@tarojs/components";
+import style from "./index.module.less";
+
+export default function Index() {
+
+  const go = ()=> {
+    console.log('gogogo')
+  }
+
+  return (
+    <View className={style.container}>
+      <View className={style.hello}>你好</View>      
+      <View className={style.welcome}>欢迎你,小蓝本的第39293位用户</View>
+      <View className={style.box}>
+        <View className={style.boxInner}>
+          <View className={style.headline}>
+            <View>开启你的专属 AI 分身,</View>
+            <View>让客户随时随地了解你和你的解决方案。</View>
+          </View>
+          <View className={style.list}>
+              <View>1.企业 + 个人资料统一管理</View>
+              <View>2.客户问题,AI 自动回应</View>
+              <View>3.你的内容,一页呈现</View>
+          </View>
+          <View className="rounded-button-big" onClick={go}>创建智能体</View>
+        </View>
+      </View>
+      </View>
+  );
+}

+ 16 - 196
src/pages/index/index.tsx

@@ -1,213 +1,33 @@
 import { useEffect, useState } from "react";
-import { View, Swiper, SwiperItem } from "@tarojs/components";
+import { View,Image } from "@tarojs/components";
 import Taro, { useDidShow, useReady } from "@tarojs/taro";
 import style from "./index.module.less";
-import NavBar from "@/components/nav-bar/index";
-import PopupTips from "@/components/popup/popup-tips/index";
-import AICard from "./components/AICard/Index";
-import AICardAdd from "./components/AICardAdd/Index";
-import { useUserStore } from "@/store/userStore";
-import { useCharacterStore, useCurrentCharacter } from "@/store/characterStore";
-import { useAppStore } from "@/store/appStore";
-import { APP_NAME_TEXT } from '@/config'
-import { reportPageVisit } from '@/utils/report'
-import TabPageWrapper from "@/components/tab-page-wrapper/index";
+import NavBarNormal from "@/components/nav-bar-normal/index";
+import LogoImage from '@/images/logo.png'
+import PageCustom from "@/components/page-custom/index";
+// import { useUserStore } from "@/store/userStore";
+// import { useCharacterStore, useCurrentCharacter } from "@/store/characterStore";
+// import { useAppStore } from "@/store/appStore";
 
-
-// 判断角色是否是刚创建
-const checkCreateTime = (createdAt = '')=> {
-  let characterCreateAt = new Date();
-  if(createdAt){ 
-    characterCreateAt = new Date(createdAt)
-  }
-  // 创建时间与当前时间差是否小于1秒,用于判断是否要显示默认头像
-  const createTimeCloseEnough = ((new Date().getTime() - characterCreateAt.getTime())) < 1000 ? true : false
-  return createTimeCloseEnough
-}
+import WelcomeTips from './components/welcome/index'
 
 export default function Index() {
-  const {
-    characters,
-    fetchCharacterList,
-    setCurrentCharacter,
-    saveCharacter,
-    deleteCharacterById,
-  } = useCharacterStore();
-  const character = useCurrentCharacter()
-  const { fetchAppConfig, setVip } = useAppStore();
-  const appConfig = useAppStore((state) => state.appConfig);
-  const vip = useAppStore((state) => state.vip);
-  const [currentSwiperIndex, setCurrentSwiperIndex] = useState(0);
-  const [showVip, setShowVip] = useState(false);
-  const statusBarHeight = useAppStore((state) => state.statusBarHeight);
-  const headerHeight = useAppStore((state) => state.headerHeight);
-  const { fetchUser } = useUserStore();
-  const user = useUserStore((state) => state.user);
 
 
-  const onSwiperChange = (e: any) => {
-    const i = e.detail.current;
-    setCurrentSwiperIndex(i);
-    const c = characters[i];
-    console.log(c);
-    setCurrentCharacter(!!c ? c : null);
-  };
-  let creating = false;
-  const handleCreate = async () => {
-    const maxPage = vip?.metadata?.maxCharacterNum;
-    // 大于可创建角色数量
-    if(maxPage !== -1 && characters.length >= maxPage){
-      setShowVip(true)
-      return  
-    }
-    
-    creating = true;
 
-    const c = await saveCharacter({
-      name: "您的主页名称",
-    });
-    creating = false;
-    if (c) {
-      const createTimeCloseEnough = checkCreateTime(character?.createdAt)
-      Taro.navigateTo({ url: `/pages/page/index?profileId=${c.data.profileId}&createTimeCloseEnough=${createTimeCloseEnough}` });
-      return;
-    }
-  };
 
-  const handleLongPress = (profileId: string) => {
-    console.log("longpress");
-    Taro.showModal({
-      content: `😭 确认删除${APP_NAME_TEXT}?`,
-      async success(result) {
-        if (result.confirm) {
-          deleteCharacterById(profileId);
-        }
-      },
-    });
-  };
+  
 
-  const fetchList = async () => {
-    const r = await fetchCharacterList();
-    // 如果没有当前选中角色,且角色列表有数据,则设置第一个角色为当前角色
-    // 如果不设置当前角色,就无法调用 greeting 获取聊天的 session
-    if(!character && r?.length){
-      setCurrentCharacter(r[0])
-    }
-    
-  }
-
-
-  useReady(async () => {
-    // 静默登录
-    // await authLogin();
-    fetchUser();
-    fetchAppConfig();
-  });
-
-  useDidShow(()=> {
-    fetchList()
-  })
-
-  useEffect(() => {
-    if(appConfig && user){
-      const vip =
-      appConfig?.vips?.find((item) => {
-        if (user?.vip !== undefined && item.id === user.vip) {
-          return item;
-        }
-        return null;
-      }) ?? null;  
-      vip && setVip(vip)
-    }
-  }, [appConfig?.vips, user?.id]);
-
-  reportPageVisit()
-
-  const renderIndicator = (currentIndex: number)=> {
-    // 大于 10 张后指示器变为数字
-    if(characters.length > 10){
-      return <View className="flex justify-center mt-12">
-        <View className="text-center text-gray-45 text-10 rounded-full bg-gray-light w-12 h-12">{currentIndex+1}</View>
-      </View>
-    }
-
-    return <>
-      <View className={style.indicatorContainer}>
-        <View
-          className={
-            currentSwiperIndex === 0
-              ? `${style.indicator} ${style.indicatorActive}`
-              : style.indicator
-          }
-        ></View>  
-        {
-          characters.map((_item, index) => {
-            return (
-              <View
-                key={index}
-                className={
-                  index + 1 === currentSwiperIndex
-                    ? `${style.indicator} ${style.indicatorActive}`
-                    : style.indicator
-                }
-              ></View>
-            );
-          })
-        }
-      </View>
-    </>
+  const renderLogo = ()=> {
+    return <View><Image className="w-68 h-24" src={LogoImage}></Image></View>
   }
 
   return (
-    <TabPageWrapper>
-      <NavBar>{APP_NAME_TEXT}</NavBar>
-      <PopupTips show={showVip} onClose={() => setShowVip(false)}>
-        <View className={style.vipTips}>
-          <View className={style.vipTipsFigure}></View>
-          <View className="text-28 leading-36 font-semibold text-black pt-24">温馨提示</View>
-          <View className='text-14 leading-24 text-black pt-12'>
-            当前最多支持创建{vip?.metadata?.maxCharacterNum}个{APP_NAME_TEXT}面,您可以先编辑它们,或者长按删除
-          </View>
-          <View className='rounded-button-big mt-20' onClick={() => setShowVip(false)}>知道了</View>
-        </View>
-      </PopupTips>
-      <View style={{ paddingTop: 0 }}>
-
+    <PageCustom>
+      <NavBarNormal leftColumn={renderLogo}></NavBarNormal>
+      
+      <WelcomeTips></WelcomeTips>
       
-      <Swiper
-        className={style.mySwiper}
-        indicatorColor="#999"
-        indicatorActiveColor="#333"
-        indicatorDots={false}
-        duration={200}
-        next-margin="-120rpx"
-        current={currentSwiperIndex}
-        onChange={(e) => onSwiperChange(e)}
-      >
-        {characters.map((item, _index) => {
-          return (
-            <SwiperItem key={item.profileId}>
-              <View onLongPress={() => handleLongPress(item.profileId)}>
-                <AICard
-                  playGreeting={false}
-                  character={item}
-                  index={_index + 1}
-                  currentIndex={currentSwiperIndex}
-                ></AICard>
-              </View>
-            </SwiperItem>
-          );
-        })}
-        <SwiperItem className={style.swiperItem}>
-          <AICardAdd
-            onClick={() => handleCreate()}
-            length={characters.length}
-          ></AICardAdd>
-        </SwiperItem>
-      </Swiper>
-      {/* <!-- 自定义指示点容器 --> */}
-      {renderIndicator(currentSwiperIndex)}
-      </View>
-    </TabPageWrapper>
+      </PageCustom>
   );
 }

+ 0 - 0
src/pages/index/components/AICard/Index.module.less → src/pages/index1111111/components/AICard/Index.module.less


+ 0 - 0
src/pages/index/components/AICard/Index.tsx → src/pages/index1111111/components/AICard/Index.tsx


+ 0 - 0
src/pages/index/components/AICardAdd/Index.module.less → src/pages/index1111111/components/AICardAdd/Index.module.less


+ 0 - 0
src/pages/index/components/AICardAdd/Index.tsx → src/pages/index1111111/components/AICardAdd/Index.tsx


+ 8 - 0
src/pages/index1111111/index.config.ts

@@ -0,0 +1,8 @@
+export default definePageConfig({
+  navigationBarTitleText: '首页',
+  "usingComponents": {},
+  "navigationStyle": 'custom',
+  enableShareAppMessage: true,
+  enableShareTimeline: true,
+  enablePageMeta: true,
+})

+ 56 - 0
src/pages/index1111111/index.module.less

@@ -0,0 +1,56 @@
+.mySwiper{
+  width: 320px;
+  height: 573px;
+  overflow: hidden;
+  border-radius: 20px;
+}
+
+.swiperItem{
+  margin-right: 30px;
+  
+}
+
+
+/* 自定义指示点容器 */
+.indicatorContainer {
+  padding-top: 18px;
+  display: flex;
+  gap: 3px;
+  justify-content: center;
+}
+
+/* 单个指示点 */
+.indicator {
+  width: 6px;
+  height: 6px;
+  transition: all .3s;
+  border-radius: 100%;
+  background-color: rgba(#000, .15);
+  border-radius: 50%;
+}
+
+/* 当前选中的指示点 */
+.indicatorActive{
+  width: 16px;
+  border-radius: 30px;
+  background-color: rgba(#000, .35);
+}
+
+.logo{
+  margin-right: 5px;
+  width: 24px;
+  height: 24px;
+}
+
+.vipTips{
+  display: flex;
+  align-items: center;
+  flex-direction: column;
+}
+.vipTipsFigure{
+  margin-top: 48px;
+  width: 135px;
+  height: 96px;
+  background-image: url(https://cdn.wehome.cn/cmn/png/50/META-H8UK0IWU-9NNPJOLLD1MU95DE0NMA3-DAWUHO2M-AJ.png);
+  background-size: 100%;
+}

+ 213 - 0
src/pages/index1111111/index.tsx

@@ -0,0 +1,213 @@
+import { useEffect, useState } from "react";
+import { View, Swiper, SwiperItem } from "@tarojs/components";
+import Taro, { useDidShow, useReady } from "@tarojs/taro";
+import style from "./index.module.less";
+import NavBar from "@/components/nav-bar/index";
+import PopupTips from "@/components/popup/popup-tips/index";
+import AICard from "./components/AICard/Index";
+import AICardAdd from "./components/AICardAdd/Index";
+import { useUserStore } from "@/store/userStore";
+import { useCharacterStore, useCurrentCharacter } from "@/store/characterStore";
+import { useAppStore } from "@/store/appStore";
+import { APP_NAME_TEXT } from '@/config'
+import { reportPageVisit } from '@/utils/report'
+import TabPageWrapper from "@/components/tab-page-wrapper/index";
+
+
+// 判断角色是否是刚创建
+const checkCreateTime = (createdAt = '')=> {
+  let characterCreateAt = new Date();
+  if(createdAt){ 
+    characterCreateAt = new Date(createdAt)
+  }
+  // 创建时间与当前时间差是否小于1秒,用于判断是否要显示默认头像
+  const createTimeCloseEnough = ((new Date().getTime() - characterCreateAt.getTime())) < 1000 ? true : false
+  return createTimeCloseEnough
+}
+
+export default function Index() {
+  const {
+    characters,
+    fetchCharacterList,
+    setCurrentCharacter,
+    saveCharacter,
+    deleteCharacterById,
+  } = useCharacterStore();
+  const character = useCurrentCharacter()
+  const { fetchAppConfig, setVip } = useAppStore();
+  const appConfig = useAppStore((state) => state.appConfig);
+  const vip = useAppStore((state) => state.vip);
+  const [currentSwiperIndex, setCurrentSwiperIndex] = useState(0);
+  const [showVip, setShowVip] = useState(false);
+  const statusBarHeight = useAppStore((state) => state.statusBarHeight);
+  const headerHeight = useAppStore((state) => state.headerHeight);
+  const { fetchUser } = useUserStore();
+  const user = useUserStore((state) => state.user);
+
+
+  const onSwiperChange = (e: any) => {
+    const i = e.detail.current;
+    setCurrentSwiperIndex(i);
+    const c = characters[i];
+    console.log(c);
+    setCurrentCharacter(!!c ? c : null);
+  };
+  let creating = false;
+  const handleCreate = async () => {
+    const maxPage = vip?.metadata?.maxCharacterNum;
+    // 大于可创建角色数量
+    if(maxPage !== -1 && characters.length >= maxPage){
+      setShowVip(true)
+      return  
+    }
+    
+    creating = true;
+
+    const c = await saveCharacter({
+      name: "您的主页名称",
+    });
+    creating = false;
+    if (c) {
+      const createTimeCloseEnough = checkCreateTime(character?.createdAt)
+      Taro.navigateTo({ url: `/pages/page/index?profileId=${c.data.profileId}&createTimeCloseEnough=${createTimeCloseEnough}` });
+      return;
+    }
+  };
+
+  const handleLongPress = (profileId: string) => {
+    console.log("longpress");
+    Taro.showModal({
+      content: `😭 确认删除${APP_NAME_TEXT}?`,
+      async success(result) {
+        if (result.confirm) {
+          deleteCharacterById(profileId);
+        }
+      },
+    });
+  };
+
+  const fetchList = async () => {
+    const r = await fetchCharacterList();
+    // 如果没有当前选中角色,且角色列表有数据,则设置第一个角色为当前角色
+    // 如果不设置当前角色,就无法调用 greeting 获取聊天的 session
+    if(!character && r?.length){
+      setCurrentCharacter(r[0])
+    }
+    
+  }
+
+
+  useReady(async () => {
+    // 静默登录
+    // await authLogin();
+    fetchUser();
+    fetchAppConfig();
+  });
+
+  useDidShow(()=> {
+    fetchList()
+  })
+
+  useEffect(() => {
+    if(appConfig && user){
+      const vip =
+      appConfig?.vips?.find((item) => {
+        if (user?.vip !== undefined && item.id === user.vip) {
+          return item;
+        }
+        return null;
+      }) ?? null;  
+      vip && setVip(vip)
+    }
+  }, [appConfig?.vips, user?.id]);
+
+  reportPageVisit()
+
+  const renderIndicator = (currentIndex: number)=> {
+    // 大于 10 张后指示器变为数字
+    if(characters.length > 10){
+      return <View className="flex justify-center mt-12">
+        <View className="text-center text-gray-45 text-10 rounded-full bg-gray-light w-12 h-12">{currentIndex+1}</View>
+      </View>
+    }
+
+    return <>
+      <View className={style.indicatorContainer}>
+        <View
+          className={
+            currentSwiperIndex === 0
+              ? `${style.indicator} ${style.indicatorActive}`
+              : style.indicator
+          }
+        ></View>  
+        {
+          characters.map((_item, index) => {
+            return (
+              <View
+                key={index}
+                className={
+                  index + 1 === currentSwiperIndex
+                    ? `${style.indicator} ${style.indicatorActive}`
+                    : style.indicator
+                }
+              ></View>
+            );
+          })
+        }
+      </View>
+    </>
+  }
+
+  return (
+    <TabPageWrapper>
+      <NavBar>{APP_NAME_TEXT}</NavBar>
+      <PopupTips show={showVip} onClose={() => setShowVip(false)}>
+        <View className={style.vipTips}>
+          <View className={style.vipTipsFigure}></View>
+          <View className="text-28 leading-36 font-semibold text-black pt-24">温馨提示</View>
+          <View className='text-14 leading-24 text-black pt-12'>
+            当前最多支持创建{vip?.metadata?.maxCharacterNum}个{APP_NAME_TEXT}面,您可以先编辑它们,或者长按删除
+          </View>
+          <View className='rounded-button-big mt-20' onClick={() => setShowVip(false)}>知道了</View>
+        </View>
+      </PopupTips>
+      <View style={{ paddingTop: 0 }}>
+
+      
+      <Swiper
+        className={style.mySwiper}
+        indicatorColor="#999"
+        indicatorActiveColor="#333"
+        indicatorDots={false}
+        duration={200}
+        next-margin="-120rpx"
+        current={currentSwiperIndex}
+        onChange={(e) => onSwiperChange(e)}
+      >
+        {characters.map((item, _index) => {
+          return (
+            <SwiperItem key={item.profileId}>
+              <View onLongPress={() => handleLongPress(item.profileId)}>
+                <AICard
+                  playGreeting={false}
+                  character={item}
+                  index={_index + 1}
+                  currentIndex={currentSwiperIndex}
+                ></AICard>
+              </View>
+            </SwiperItem>
+          );
+        })}
+        <SwiperItem className={style.swiperItem}>
+          <AICardAdd
+            onClick={() => handleCreate()}
+            length={characters.length}
+          ></AICardAdd>
+        </SwiperItem>
+      </Swiper>
+      {/* <!-- 自定义指示点容器 --> */}
+      {renderIndicator(currentSwiperIndex)}
+      </View>
+    </TabPageWrapper>
+  );
+}

+ 9 - 0
src/pages/login/index.config.ts

@@ -0,0 +1,9 @@
+export default definePageConfig({
+  navigationBarTitleText: `${process.env.TARO_APP_NAME_TEXT}`,
+  enableShareAppMessage: true,
+  enableShareTimeline: true,
+  navigationStyle: 'custom',
+  usingComponents: {
+    
+  }
+})

+ 52 - 0
src/pages/login/index.tsx

@@ -0,0 +1,52 @@
+// import ChatAI from "@/components/chat-ai/index";
+// import ComponentList from "@/components/component-list";
+import NavBarNormal from "@/components/nav-bar-normal/index";
+import { View,Text, Image, Checkbox } from "@tarojs/components";
+import PageCustom from "@/components/page-custom/index";
+import LogoImage from '@/images/logo.png'
+// import { useAppStore } from "@/store/appStore";
+// import { useCharacterStore, useCurrentCharacter, useCharacterStyle } from "@/store/characterStore";
+// import { useComponentStore } from "@/store/componentStore";
+// import { uploadImage } from "@/utils/http";
+
+// import CustomShareComponent from "@/components/custom-share/CustomShareComponent";
+// import { Button, Image, Input, View, Video } from "@tarojs/components";
+// import Taro, { useDidShow, useRouter, useUnload } from "@tarojs/taro";
+// import { useRef, useState } from "react";
+// import style from "./index.module.less";
+
+import { useState } from "react";
+
+import Popup from "@/components/popup/popup";
+
+
+export default function Index() {
+  
+
+  
+
+
+  const [showPopup, setShowPopup] = useState(true);
+
+  const renderLogo = ()=> {
+    return <View><Image className="w-68 h-24" src={LogoImage}></Image></View>
+  }
+  
+
+  return (
+    <PageCustom>
+      <NavBarNormal leftColumn={renderLogo}></NavBarNormal>
+      
+        
+        <Popup setShow={setShowPopup} show={showPopup}>
+          <View className="text-24 font-medium leading-32 text-black mb-16">欢迎来到小蓝本</View>
+          <View className="text-gray-45 text-14 leading-22 mb-70">登录后享受更好的服务体验</View>
+          <View className="rounded-button-big mb-16">微信登录</View>
+          <View className="text-12 mb-86 text-center">
+            <Checkbox className="custom-checkbox" value='选中' checked color="#317CFA">选中</Checkbox>
+            同意<Text className="primary-color">《用户隐私条款》</Text><Text className="primary-color">《用户服务须知》</Text>
+          </View>
+        </Popup>
+    </PageCustom>
+  );
+}

+ 15 - 2
src/pages/test/index.tsx

@@ -30,6 +30,7 @@ import { useState } from "react";
 import IconArrow from "@/components/icon/icon-arrow";
 
 import Popup from "@/components/popup/popup";
+import PopupSheets from "@/components/popup/popup-sheets";
 
 export default function Index() {
   const [tabIndex, setTabIndex] = useState("1");
@@ -220,12 +221,24 @@ export default function Index() {
 
         <View className="rounded-button-big" onClick={()=> setShowPopup(true)}>拉起弹层</View>
 
-        <Popup setShow={setShowPopup} show={showPopup} title="知识库-图片/视频">
+        {/* <Popup setShow={setShowPopup} show={showPopup} title="知识库-图片/视频">
           <View>你好啊世界</View>
           <WemetaTabs current="1" list={dataLibTabList}>
 
           </WemetaTabs>
-        </Popup>
+        </Popup> */}
+
+        <PopupSheets 
+          setShow={setShowPopup} 
+          show={showPopup}
+          content={[
+            {item: <View className="text-12 font-normal text-gray-45">推荐知识库导入,可自动解析内容并提取知识</View>}, 
+            {item: '从知识库导入', type: 'primary', onClick: ()=> {console.log(111)}}, 
+            {item:'手动添加', onClick: ()=> {console.log(22)}},
+            {item:'删除', type: 'warn', onClick: ()=> {console.log(333)}},
+          ]}
+        >
+        </PopupSheets>
         
       </View>
     </PageCustom>