Kaynağa Gözat

feat: icon svg

王晓东 1 ay önce
ebeveyn
işleme
da0ab678f5
92 değiştirilmiş dosya ile 1440 ekleme ve 907 silme
  1. 22 1
      project.private.config.json
  2. 12 5
      src/app.config.ts
  3. 16 18
      src/app.less
  4. 0 8
      src/app.tsx
  5. 1 1
      src/components/auth-phone/douya.tsx
  6. 7 0
      src/components/icon/icon-certificate-color/index.tsx
  7. 7 0
      src/components/icon/icon-chat-white/index.tsx
  8. 7 0
      src/components/icon/icon-correct/index.tsx
  9. 7 0
      src/components/icon/icon-edit-black/index.tsx
  10. 7 0
      src/components/icon/icon-edit-gray/index.tsx
  11. 7 0
      src/components/icon/icon-location-gray/index.tsx
  12. 7 0
      src/components/icon/icon-mail-gray/index.tsx
  13. 7 0
      src/components/icon/icon-more-black/index.tsx
  14. 7 0
      src/components/icon/icon-phone-gray/index.tsx
  15. 7 0
      src/components/icon/icon-qrcode-black/index.tsx
  16. 7 0
      src/components/icon/icon-qrcode-gray/index.tsx
  17. 7 0
      src/components/icon/icon-send-black/index.tsx
  18. 7 0
      src/components/icon/icon-star-color/index.tsx
  19. 7 0
      src/components/icon/icon-swap-black/index.tsx
  20. 8 0
      src/components/logo/index.tsx
  21. 2 1
      src/components/nav-bar-normal/index.tsx
  22. 3 3
      src/components/page-wrapper/index.module.less
  23. 1 1
      src/components/popup/popup-modal/index.tsx
  24. 1 1
      src/components/popup/popup-pay-success/index.tsx
  25. 1 1
      src/components/popup/popup-vip/index.tsx
  26. 10 0
      src/components/tag-certificated/index.tsx
  27. 7 7
      src/components/wemeta-radio/index.module.less
  28. 1 1
      src/components/wemeta-textarea/index.module.less
  29. 1 1
      src/components/wemeta-textarea/index.tsx
  30. 5 0
      src/images/svgs/icon-certificate-color.svg
  31. 3 0
      src/images/svgs/icon-chat-white.svg
  32. 3 0
      src/images/svgs/icon-correct.svg
  33. 3 0
      src/images/svgs/icon-edit-black.svg
  34. 3 0
      src/images/svgs/icon-edit-gray.svg
  35. 3 0
      src/images/svgs/icon-location.svg
  36. 3 0
      src/images/svgs/icon-mail.svg
  37. 3 0
      src/images/svgs/icon-more-black.svg
  38. 3 0
      src/images/svgs/icon-phone.svg
  39. 11 0
      src/images/svgs/icon-qrcode-black.svg
  40. 11 0
      src/images/svgs/icon-qrcode.svg
  41. 3 0
      src/images/svgs/icon-send-black.svg
  42. 14 0
      src/images/svgs/icon-star-color.svg
  43. 3 0
      src/images/svgs/icon-swap-black.svg
  44. 70 0
      src/pages/agent-gen/components/step/StepConfirm.tsx
  45. 82 15
      src/pages/agent-gen/components/step/StepPick.tsx
  46. 28 9
      src/pages/agent-gen/components/step/StepStart.tsx
  47. 145 0
      src/pages/agent-gen/components/step/index.module.less
  48. 33 7
      src/pages/agent-gen/index.tsx
  49. 54 0
      src/pages/agent/components/AgentSetting/components/AgentContactCard/index.module.less
  50. 42 0
      src/pages/agent/components/AgentSetting/components/AgentContactCard/index.tsx
  51. 4 0
      src/pages/agent/components/AgentSetting/index.tsx
  52. 1 1
      src/pages/analysis/index.tsx
  53. 2 2
      src/pages/choose-contact/index.tsx
  54. 1 1
      src/pages/component-library/index.tsx
  55. 9 0
      src/pages/editor-contact/index.config.ts
  56. 80 0
      src/pages/editor-contact/index.tsx
  57. 1 1
      src/pages/editor-pages/editor-chat/components/edit-character/components/textarea-form/index.tsx
  58. 2 2
      src/pages/editor-pages/editor-chat/components/edit-character/index.tsx
  59. 2 2
      src/pages/editor-pages/editor-chat/components/edit-rule/index.tsx
  60. 49 60
      src/pages/editor-pages/editor-company/index.tsx
  61. 44 65
      src/pages/editor-pages/editor-email/index.tsx
  62. 2 2
      src/pages/editor-pages/editor-link/index.tsx
  63. 5 0
      src/pages/editor-pages/editor-name/index.config.ts
  64. 2 0
      src/pages/editor-pages/editor-name/index.module.less
  65. 79 0
      src/pages/editor-pages/editor-name/index.tsx
  66. 5 0
      src/pages/editor-pages/editor-phone/index.config.ts
  67. 2 0
      src/pages/editor-pages/editor-phone/index.module.less
  68. 79 0
      src/pages/editor-pages/editor-phone/index.tsx
  69. 5 0
      src/pages/editor-pages/editor-position/index.config.ts
  70. 2 0
      src/pages/editor-pages/editor-position/index.module.less
  71. 79 0
      src/pages/editor-pages/editor-position/index.tsx
  72. 5 0
      src/pages/editor-pages/editor-qrcode/index.config.ts
  73. 13 0
      src/pages/editor-pages/editor-qrcode/index.module.less
  74. 82 0
      src/pages/editor-pages/editor-qrcode/index.tsx
  75. 1 1
      src/pages/editor-pages/editor-store-home/index.tsx
  76. 1 1
      src/pages/editor-pages/editor-store-product/index.tsx
  77. 1 1
      src/pages/index/components/welcome/index.tsx
  78. 0 44
      src/pages/index1111111/components/AICard/Index.module.less
  79. 0 75
      src/pages/index1111111/components/AICard/Index.tsx
  80. 0 47
      src/pages/index1111111/components/AICardAdd/Index.module.less
  81. 0 64
      src/pages/index1111111/components/AICardAdd/Index.tsx
  82. 0 8
      src/pages/index1111111/index.config.ts
  83. 0 56
      src/pages/index1111111/index.module.less
  84. 0 213
      src/pages/index1111111/index.tsx
  85. 1 1
      src/pages/login/index.tsx
  86. 44 0
      src/pages/profile/components/top-bar/index.module.less
  87. 79 0
      src/pages/profile/components/top-bar/index.tsx
  88. 42 174
      src/pages/profile/index.tsx
  89. 1 1
      src/pages/test/index.tsx
  90. 1 1
      src/pages/vip/index.tsx
  91. 1 1
      src/pages/voice/index.tsx
  92. 4 3
      tailwind.config.js

+ 22 - 1
project.private.config.json

@@ -1,6 +1,27 @@
 {
   "projectname": "bluenote",
   "setting": {
-    "compileHotReLoad": true
+    "compileHotReLoad": true,
+    "urlCheck": false
+  },
+  "condition": {
+    "miniprogram": {
+      "list": [
+        {
+          "name": "pages/agent-gen/index",
+          "pathName": "pages/agent-gen/index",
+          "query": "",
+          "launchMode": "default",
+          "scene": null
+        },
+        {
+          "name": "pages/editor-pages/editor-qrcode/index",
+          "pathName": "pages/editor-pages/editor-qrcode/index",
+          "query": "",
+          "launchMode": "default",
+          "scene": null
+        }
+      ]
+    }
   }
 }

+ 12 - 5
src/app.config.ts

@@ -1,11 +1,21 @@
 export default defineAppConfig({
   pages: [
+    'pages/profile/index',
     'pages/agent-gen/index',
     'pages/agent/index',
+    'pages/editor-contact/index',
     'pages/index/index',
     'pages/login/index',
     'pages/test/index',
     'pages/component-library/index',
+    'pages/editor-pages/editor-name/index',
+    'pages/editor-pages/editor-company/index',
+    'pages/editor-pages/editor-position/index',
+    'pages/editor-pages/editor-phone/index',
+    'pages/editor-pages/editor-email/index',
+    'pages/editor-pages/editor-qrcode/index',
+
+
     'pages/chat/index',
     'pages/editor-pages/editor-channels/index',
     'pages/analysis/index',
@@ -21,10 +31,7 @@ export default defineAppConfig({
     
     'pages/knowledge-lesson/index',
     'pages/editor-pages/editor-chat/index',
-    'pages/editor-pages/editor-company/index',
-    'pages/editor-pages/editor-business-card/index',
-    'pages/editor-pages/editor-email/index',
-    'pages/editor-pages/editor-tel/index',
+  
     'pages/editor-pages/editor-link/index',
     'pages/editor-pages/editor-mini-program/index',
     'pages/editor-pages/editor-link-social/index',
@@ -35,7 +42,7 @@ export default defineAppConfig({
     'pages/editor-pages/editor-store-home/index',
     'pages/contact/index',
     'pages/chat-history/index',
-    'pages/profile/index',
+    
     'pages/webview/index',
 
   ],

+ 16 - 18
src/app.less

@@ -53,13 +53,13 @@
 
 
 .global-page-bg{
-  min-height: 100vh;
+  height: 652px;
   background: var(--color-bg-gray);
 }
 
 .global-linear-gradient-bg{
   position: relative;
-  min-height: 100vh;
+  height: 652px;
   background: linear-gradient(176.35deg, #E6F1FF 18.69%, rgba(255, 255, 255, 0) 113.37%);
   background-size: 100% 600px;
   background-repeat: no-repeat;
@@ -74,7 +74,7 @@
 
 // buttons
 
-.rounded-button-big{
+.button-rounded-big{
   display: flex;
   width: 100%;
   height: 48px;
@@ -85,22 +85,20 @@
   overflow: hidden;
   color: white;
 }
-.pressed-button{
-  &:active{
-    background-color: #F3F706;
-  }
-}
 
-.rounded-button-big-normal{
-  .rounded-button-big();
+.button-plain{
+  .button-rounded-big();
   background-color: white;
   &:active{
-    background-color: #F3F706;
+    background-color: var(--color-primary);
   }
 }
+.button-warn{
+  .warn-color();
+}
 
 .wemeta-button{
-  .rounded-button-big();
+  .button-rounded-big();
   border-radius: 12px;  
 }
 
@@ -127,7 +125,7 @@
   background-color: var(--color-primary);
 }
 
-.rounded-button-mini{
+.button-rounded-mini{
   display: flex;
   padding: 2px 14px;
   justify-content: center;
@@ -143,12 +141,12 @@
   line-height: 20px;
 }
 
-.rounded-button-mini.disabled{
+.button-rounded-mini.disabled{
   opacity: .2;
 }
 
 
-.rounded-button{
+.button-rounded{
   display: flex;
   padding: 14px;
   align-items: center;
@@ -163,11 +161,11 @@
   line-height: 20px;
   transition: background-color .2s;
 }
-.rounded-button.actived{
+.button-rounded.actived{
   background-color: #000;
   color: #FFF;
 }
-.rounded-button.primary{
+.button-rounded.button-primary{
   color: white;
   font-size: 14px;
   background-color: var(--color-primary);
@@ -233,7 +231,7 @@
   background-color: transparent;
 }
 
-.full-rounded-button{
+.full-button-rounded{
   display: flex;
   width: 100%;
   padding: 17px 10px;

+ 0 - 8
src/app.tsx

@@ -41,19 +41,11 @@ function App({ children }: PropsWithChildren<any>) {
       // 新版本下载失败
     });
 
-    // const phone = option.query?.phone
-    
-    // console.log(phone, 11111111)
-
     Taro.getSystemInfoAsync({
       success(res) {
         setSystemInfo(res);
       },
     });
-
-    // Taro.onKeyboardHeightChange((res) => {
-    //   setKeyboardHeight(res.height)
-    // })
   });
   return <>{children}</>;
 }

+ 1 - 1
src/components/auth-phone/douya.tsx

@@ -53,7 +53,7 @@ const Index = () => {
       {/* 豆芽达人数据同步 */}
       <Popup title="绑定手机号,即可创建完成AI助理" setShow={setAuthPhoneVisible} show={authPhonePopupVisible}>
         <View className="py-40">
-          <View className="rounded-button-big">
+          <View className="button-rounded-big">
             <AuthPhone bindKind={EBindKind.WechatPhone} getPhoneNumber={handleGetPhoneNumber} contentStyle={{color: '#333'}} text='绑定手机号'></AuthPhone>
           </View>
         </View>

+ 7 - 0
src/components/icon/icon-certificate-color/index.tsx

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

+ 7 - 0
src/components/icon/icon-chat-white/index.tsx

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

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

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

+ 7 - 0
src/components/icon/icon-edit-black/index.tsx

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

+ 7 - 0
src/components/icon/icon-edit-gray/index.tsx

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

+ 7 - 0
src/components/icon/icon-location-gray/index.tsx

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

+ 7 - 0
src/components/icon/icon-mail-gray/index.tsx

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

+ 7 - 0
src/components/icon/icon-more-black/index.tsx

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

+ 7 - 0
src/components/icon/icon-phone-gray/index.tsx

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

+ 7 - 0
src/components/icon/icon-qrcode-black/index.tsx

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

+ 7 - 0
src/components/icon/icon-qrcode-gray/index.tsx

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

+ 7 - 0
src/components/icon/icon-send-black/index.tsx

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

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

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

+ 7 - 0
src/components/icon/icon-swap-black/index.tsx

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

+ 8 - 0
src/components/logo/index.tsx

@@ -0,0 +1,8 @@
+import { Image } from "@tarojs/components";
+import LogoImage from '@/images/logo.png'
+
+export default function Index() {
+  return (
+    <Image className="w-68 h-24" src={LogoImage}></Image>
+  );
+}

+ 2 - 1
src/components/nav-bar-normal/index.tsx

@@ -92,7 +92,8 @@ const Index: React.FC<Props> = ({
         id="leaf-nav-bar"
         style={{
           paddingTop: statusBarHeight,
-          backgroundColor: `rgba(255, 255, 255, ${opacity})`,
+          // rgba(230, 241, 255, 1)
+          backgroundColor: `rgba(230, 241, 255, ${opacity})`,
         }}
       >
         <View className={`${style.navBar}`}>

+ 3 - 3
src/components/page-wrapper/index.module.less

@@ -1,6 +1,6 @@
 .bg{
   position: fixed;
-  z-index: -2;
+  z-index: -1;
   left: 0;
   top: 0;
   right: 0;
@@ -25,7 +25,7 @@
   top: 0;
   right: 0;
   bottom: 0;
-  z-index: -1;
+  z-index: -2;
   width: 100%;
-  height: 100vh;
+  height: 652px;
 }

+ 1 - 1
src/components/popup/popup-modal/index.tsx

@@ -18,7 +18,7 @@ export default ({title = '', show, setShow, children}:Props)=> {
           {children}
         </View>
         <View className={style.footer}>
-          <View className="rounded-button-mini" onClick={()=> setShow(false)}>确定</View>
+          <View className="button-rounded-mini" onClick={()=> setShow(false)}>确定</View>
         </View>
       </View>
    </View>}

+ 1 - 1
src/components/popup/popup-pay-success/index.tsx

@@ -18,7 +18,7 @@ export default ({ show, onClose }:Props)=> {
       <View className={style.popupVip}>
         <View className={style.popupContent}>
           <View className={style.figureContainer}>
-            <View className={`full-rounded-button relative ${style.viewButton}`} onClick={nav2Vip}>
+            <View className={`full-button-rounded relative ${style.viewButton}`} onClick={nav2Vip}>
               立即分享
                 <Button openType={'share'} className="share-button"></Button>
               </View>

+ 1 - 1
src/components/popup/popup-vip/index.tsx

@@ -19,7 +19,7 @@ export default ({ show, onClose }:Props)=> {
       <View className={style.popupVip}>
         <View className={style.popupContent}>
           <View className={style.figureContainer}>
-            <View className={`full-rounded-button ${style.viewButton}`} onClick={nav2Vip}>查看详情</View>
+            <View className={`full-button-rounded ${style.viewButton}`} onClick={nav2Vip}>查看详情</View>
             <View className={`popup-close-button ${style.closeButton}`} onClick={onClose}></View>
             <Image className={style.figure} src="https://cdn.wehome.cn/cmn/png/124/META-H8UKVHWU-K4SOR0KW954A0B7Q6JXJ2-KW47NE1M-F8.png" mode="widthFix"></Image>
           </View>

+ 10 - 0
src/components/tag-certificated/index.tsx

@@ -0,0 +1,10 @@
+import IconCertificateColor from "@/components/icon/icon-certificate-color";
+import { View } from "@tarojs/components";
+export default () => {
+  return (
+    <View className="flex-center text-green bg-green bg-opacity-10 px-4 py-2 gap-2 rounded-4">
+      <IconCertificateColor/>
+      <View className="text-10">已认证</View>
+    </View>
+  )
+}

+ 7 - 7
src/components/wemeta-radio/index.module.less

@@ -2,8 +2,8 @@
   display: flex;
   align-items: center;
   justify-content: center;
-  width: 20px;
-  height: 20px;
+  width: 16px;
+  height: 16px;
   border: 1px solid rgba(#000, .45);
   border-radius: 100%;
   transition: all .3s;
@@ -13,14 +13,14 @@
   width: 8px;
   height: 8px;
   border-radius: 100%;
-  background: #FFF;
+  background: var(--color-bg-primary);
 }
 .innerDisabled{
   background: #EDEDED;
 }
 .radio.checked{
-  border: 1px solid #000;
-  background-color: #000;
+  border: 1px solid var(--color-primary);
+  background-color: var(--color-primary);
   .inner{
     opacity: 1;
   }
@@ -29,8 +29,8 @@
   display: flex;
   align-items: center;
   justify-content: center;
-  width: 20px;
-  height: 20px;
+  width: 16px;
+  height: 16px;
 }
 .checkboxIcon{
   width: 10px;

+ 1 - 1
src/components/wemeta-textarea/index.module.less

@@ -2,7 +2,7 @@
   display: flex;
   align-items: center;
   padding: 10px;
-  border-radius: 20px;
+  border-radius: 12px;
   background-color: white;
   border: 2px solid transparent;
 }

+ 1 - 1
src/components/wemeta-textarea/index.tsx

@@ -107,7 +107,7 @@ const index = ({
         />
         <View className={`${style.textareaButtons} justify-end`}>
           {extra && extra()}
-          {/* <View className={`rounded-button-mini ${!value.length ? 'disabled' :''}`} onClick={handleClear}>清除</View> */}
+          {/* <View className={`button-rounded-mini ${!value.length ? 'disabled' :''}`} onClick={handleClear}>清除</View> */}
           {maxlength && (
             <View>
               {maxlength}/{countCharacters(value)}

+ 5 - 0
src/images/svgs/icon-certificate-color.svg

@@ -0,0 +1,5 @@
+<svg width="12" height="12" viewBox="0 0 12 12" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M10.1996 4.57293L10.5597 4.93293C10.8448 5.21293 10.9999 5.59293 10.9999 5.99293C11.0049 6.39293 10.8498 6.77343 10.5697 7.05793C10.5664 7.0616 10.5631 7.06482 10.5597 7.06805C10.5581 7.06966 10.5564 7.07127 10.5547 7.07293L10.1996 7.42793C10.0595 7.56793 9.97951 7.75793 9.97951 7.95843V8.47293C9.97951 9.30293 9.30427 9.97843 8.47397 9.97843H7.95878C7.75871 9.97843 7.56864 10.0579 7.42859 10.1979L7.06846 10.5579C6.77335 10.8534 6.38821 10.9979 6.00307 10.9979C5.61793 10.9979 5.23279 10.8534 4.93769 10.5634L4.57255 10.1979C4.4325 10.0579 4.24243 9.97843 4.04236 9.97843H3.52717C2.69687 9.97843 2.02163 9.30293 2.02163 8.47293V7.95843C2.02163 7.75793 1.9416 7.56793 1.80155 7.42293L1.44142 7.06793C0.856206 6.48343 0.851204 5.52793 1.43642 4.93843L1.80155 4.57293C1.9416 4.43293 2.02163 4.24293 2.02163 4.03793V3.52793C2.02163 2.69793 2.69687 2.02343 3.52717 2.02343H4.04236C4.24243 2.02343 4.4325 1.94293 4.57255 1.80293L4.93268 1.44293C5.5179 0.853433 6.47324 0.853433 7.06346 1.43843L7.42859 1.80293C7.56864 1.94293 7.75871 2.02343 7.95878 2.02343H8.47397C9.30427 2.02343 9.97951 2.69793 9.97951 3.52793V4.04343C9.97951 4.24293 10.0595 4.43293 10.1996 4.57293ZM5.15275 4.71298C5.15275 4.47298 4.95768 4.27798 4.71759 4.27798C4.47751 4.27798 4.27744 4.47298 4.27744 4.71298C4.27744 4.95848 4.47751 5.15298 4.71759 5.15298C4.95768 5.15298 5.15275 4.95848 5.15275 4.71298Z" fill="#31BE59"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M7.73953 1.80008L5.99976 0.0603027L4.25998 1.80008H1.79977V4.26028L0.0600586 6L1.79977 7.73972V10.2001H4.26014L5.99976 11.9397L7.73937 10.2001H10.1998V7.73968L11.9395 6L10.1998 4.26032V1.80008H7.73953Z" fill="#31BE59"/>
+<path d="M3.87873 5.54558L5.57579 7.24264L8.12137 4.69706" stroke="white" stroke-width="0.84"/>
+</svg>

+ 3 - 0
src/images/svgs/icon-chat-white.svg

@@ -0,0 +1,3 @@
+<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="M6.40531 8.75362H5.33998V7.75362H6.40531V8.75362ZM8.89531 8.75362H7.82931V7.75362H8.89531V8.75362ZM11.3846 8.75362H10.3186V7.75362H11.3846V8.75362ZM3.76131 3.41296C4.98464 2.18962 6.61198 1.51562 8.34531 1.51562C10.078 1.51562 11.7066 2.18962 12.93 3.41362C14.1566 4.63962 14.8313 6.26962 14.83 8.00229C14.83 9.75962 13.9073 11.4343 13.5726 11.9836L15.1346 14.4743L14.526 14.469C14.4873 14.469 10.6526 14.4356 8.48598 14.4823C8.43731 14.483 8.38931 14.4836 8.34131 14.4836C6.61064 14.4836 4.98931 13.8123 3.76131 12.5836C1.23331 10.055 1.23331 5.94162 3.76131 3.41296Z" fill="white"/>
+</svg>

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

@@ -0,0 +1,3 @@
+<svg width="10" height="7" viewBox="0 0 10 7" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M1.45731 2.56063L4.28574 5.38906L8.52838 1.14642" stroke="white" stroke-width="1.4"/>
+</svg>

+ 3 - 0
src/images/svgs/icon-edit-black.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 fill-rule="evenodd" clip-rule="evenodd" d="M14.4023 5.25296L10.665 1.51562L1.59766 10.583L1.60099 14.317H1.60499V14.483L13.979 14.4836V13.4836H6.17166L14.4023 5.25296Z" fill="black"/>
+</svg>

+ 3 - 0
src/images/svgs/icon-edit-gray.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.1882 10.014L9.58139 4.33272C9.82015 4.02635 9.90504 3.67215 9.82546 3.31149C9.75648 2.98363 9.55486 2.67189 9.25243 2.43539L8.51493 1.84953C7.87293 1.33892 7.07706 1.39267 6.62076 1.97853L6.12732 2.61867C6.06365 2.69876 6.07957 2.81701 6.15916 2.88151C6.15916 2.88151 7.40602 3.88123 7.43255 3.90273C7.51744 3.98335 7.58111 4.09085 7.59703 4.21985C7.62356 4.47247 7.44846 4.70896 7.18848 4.74121C7.06645 4.75733 6.94972 4.71971 6.86483 4.64984L5.5543 3.60711C5.49063 3.55928 5.39512 3.56949 5.34207 3.63399L2.22757 7.66514C2.02595 7.91775 1.95697 8.24562 2.02595 8.56274L2.42388 10.2881C2.44511 10.3794 2.52469 10.4439 2.6202 10.4439L4.37111 10.4224C4.68945 10.4171 4.98658 10.2719 5.1882 10.014ZM7.63985 9.47668H10.4949C10.7734 9.47668 11 9.70619 11 9.98837C11 10.2711 10.7734 10.5001 10.4949 10.5001H7.63985C7.36129 10.5001 7.13474 10.2711 7.13474 9.98837C7.13474 9.70619 7.36129 9.47668 7.63985 9.47668Z" fill="black" fill-opacity="0.45"/>
+</svg>

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

@@ -0,0 +1,3 @@
+<svg width="12" height="12" viewBox="0 0 12 12" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M1.75 5.15888C1.75 2.85895 3.67194 1 5.99672 1C8.32806 1 10.25 2.85895 10.25 5.15888C10.25 6.31785 9.8285 7.39381 9.13475 8.30579C8.3694 9.31176 7.42608 10.1882 6.36427 10.8762C6.12126 11.0352 5.90194 11.0472 5.63522 10.8762C4.56737 10.1882 3.62404 9.31176 2.86525 8.30579C2.17099 7.39381 1.75 6.31785 1.75 5.15888ZM4.59711 5.28839C4.59711 6.05886 5.22582 6.66485 5.99672 6.66485C6.76811 6.66485 7.40288 6.05886 7.40288 5.28839C7.40288 4.52391 6.76811 3.88843 5.99672 3.88843C5.22582 3.88843 4.59711 4.52391 4.59711 5.28839Z" fill="black" fill-opacity="0.25"/>
+</svg>

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

@@ -0,0 +1,3 @@
+<svg width="12" height="12" viewBox="0 0 12 12" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M8.4697 1.5C9.1402 1.5 9.7852 1.765 10.2597 2.2405C10.7347 2.715 11.0002 3.355 11.0002 4.025V7.975C11.0002 9.37 9.8652 10.5 8.4697 10.5H3.5302C2.1347 10.5 1.0002 9.37 1.0002 7.975V4.025C1.0002 2.63 2.1297 1.5 3.5302 1.5H8.4697ZM9.2652 4.76998L9.3052 4.72998C9.4247 4.58498 9.4247 4.37498 9.2997 4.22998C9.2302 4.15548 9.1347 4.10998 9.0352 4.09998C8.9302 4.09448 8.8302 4.12998 8.7547 4.19998L6.5002 5.99998C6.2102 6.24048 5.7947 6.24048 5.5002 5.99998L3.2502 4.19998C3.0947 4.08498 2.8797 4.09998 2.7502 4.23498C2.6152 4.36998 2.6002 4.58498 2.7147 4.73498L2.7802 4.79998L5.0552 6.57498C5.3352 6.79498 5.6747 6.91498 6.0302 6.91498C6.3847 6.91498 6.7302 6.79498 7.0097 6.57498L9.2652 4.76998Z" fill="black" fill-opacity="0.25"/>
+</svg>

+ 3 - 0
src/images/svgs/icon-more-black.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="M8 11.5C8.82843 11.5 9.5 12.1716 9.5 13C9.5 13.8284 8.82843 14.5 8 14.5C7.17157 14.5 6.5 13.8284 6.5 13C6.5 12.1716 7.17157 11.5 8 11.5ZM8 6.5C8.82843 6.5 9.5 7.17157 9.5 8C9.5 8.82843 8.82843 9.5 8 9.5C7.17157 9.5 6.5 8.82843 6.5 8C6.5 7.17157 7.17157 6.5 8 6.5ZM8 1.5C8.82843 1.5 9.5 2.17157 9.5 3C9.5 3.82843 8.82843 4.5 8 4.5C7.17157 4.5 6.5 3.82843 6.5 3C6.5 2.17157 7.17157 1.5 8 1.5Z" fill="black"/>
+</svg>

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

@@ -0,0 +1,3 @@
+<svg width="12" height="12" viewBox="0 0 12 12" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M5.76587 6.23619C7.76041 8.23018 8.21289 5.92336 9.48282 7.19241C10.7071 8.41638 11.4108 8.6616 9.85962 10.2124C9.66532 10.3685 8.43081 12.2471 4.0923 7.90983C-0.246739 3.572 1.63079 2.33622 1.78698 2.14197C3.34193 0.586923 3.58293 1.29469 4.80725 2.51866C6.07718 3.78825 3.77133 4.24221 5.76587 6.23619Z" fill="black" fill-opacity="0.25"/>
+</svg>

+ 11 - 0
src/images/svgs/icon-qrcode-black.svg

@@ -0,0 +1,11 @@
+<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M3.93317 12.0932H4.93317V11.0332H3.93317V12.0932ZM1.6665 14.3332H7.2065V8.79322H1.6665V14.3332Z" fill="black"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M9.79603 2.66602H11.4167V1.66602H8.79604V5.41202H9.79603V2.66602Z" fill="black"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M8.7965 7.20255H11.2765V6.20255H8.7965V7.20255Z" fill="black"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M12.1987 1.66602V2.66602H13.3334V3.80002H14.3334V1.66602H12.1987Z" fill="black"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M13.3332 6.20241H12.1985V7.20241H14.3332V4.58241H13.3332V6.20241Z" fill="black"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M10.3449 3.24248V5.72182H12.5642V4.72182H11.3449V3.24248H10.3449Z" fill="black"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M12.9621 3.23594L11.9621 3.24261V4.24261H12.9621V3.23594Z" fill="black"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M3.93317 4.96654H4.93317V3.89988H3.93317V4.96654ZM1.6665 7.19988H7.2065V1.66654H1.6665V7.19988Z" fill="black"/>
+<path d="M13.8973 13.3665L13.9225 14.68L12.5975 14.078C12.3497 14.1413 12.0951 14.1736 11.8395 14.1742C10.2713 14.1742 9 13.0159 9 11.5871C9 10.1583 10.2713 9 11.8395 9C13.4077 9 14.679 10.1583 14.679 11.5871C14.6763 11.9212 14.6056 12.2513 14.4713 12.5572C14.3369 12.8632 14.1416 13.1385 13.8973 13.3665ZM10.7037 10.7668C10.5914 10.7668 10.4816 10.8001 10.3882 10.8625C10.2948 10.9249 10.222 11.0136 10.179 11.1174C10.136 11.2211 10.1248 11.3353 10.1467 11.4455C10.1686 11.5556 10.2227 11.6568 10.3021 11.7363C10.3816 11.8157 10.4827 11.8698 10.5929 11.8917C10.7031 11.9136 10.8173 11.9023 10.921 11.8594C11.0248 11.8164 11.1135 11.7436 11.1759 11.6502C11.2383 11.5568 11.2716 11.447 11.2716 11.3347C11.2716 11.1841 11.2118 11.0396 11.1053 10.9331C10.9988 10.8266 10.8543 10.7668 10.7037 10.7668ZM13.1015 10.7668C12.9892 10.7668 12.8794 10.8001 12.786 10.8625C12.6926 10.9249 12.6198 11.0136 12.5768 11.1174C12.5338 11.2211 12.5226 11.3353 12.5445 11.4455C12.5664 11.5556 12.6205 11.6568 12.6999 11.7363C12.7793 11.8157 12.8805 11.8698 12.9907 11.8917C13.1009 11.9136 13.215 11.9023 13.3188 11.8594C13.4226 11.8164 13.5113 11.7436 13.5737 11.6502C13.6361 11.5568 13.6694 11.447 13.6694 11.3347C13.6694 11.2601 13.6547 11.1863 13.6262 11.1174C13.5976 11.0485 13.5558 10.9859 13.5031 10.9331C13.4503 10.8804 13.3877 10.8386 13.3188 10.81C13.2499 10.7815 13.1761 10.7668 13.1015 10.7668Z" fill="black"/>
+</svg>

+ 11 - 0
src/images/svgs/icon-qrcode.svg

@@ -0,0 +1,11 @@
+<svg width="12" height="12" viewBox="0 0 12 12" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M2.94988 9.07016H3.69988V8.27516H2.94988V9.07016ZM1.24988 10.7502H5.40488V6.59516H1.24988V10.7502Z" fill="black" fill-opacity="0.25"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M8.29988 9.07016H9.04988V8.27516H8.29988V9.07016ZM6.59488 10.7502H10.7499V6.59516H6.59488V10.7502Z" fill="black" fill-opacity="0.25"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M7.34703 1.99976H8.56253V1.24976H6.59703V4.05926H7.34703V1.99976Z" fill="black" fill-opacity="0.25"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M6.59738 5.40215H8.45738V4.65215H6.59738V5.40215Z" fill="black" fill-opacity="0.25"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M9.14903 1.24976V1.99976H10V2.85026H10.75V1.24976H9.14903Z" fill="black" fill-opacity="0.25"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M9.99988 4.65205H9.14888V5.40205H10.7499V3.43705H9.99988V4.65205Z" fill="black" fill-opacity="0.25"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M7.75868 2.43211V4.29161H9.42318V3.54161H8.50868V2.43211H7.75868Z" fill="black" fill-opacity="0.25"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M9.72158 2.4272L8.97158 2.4322V3.1822H9.72158V2.4272Z" fill="black" fill-opacity="0.25"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M2.94988 3.72515H3.69988V2.92515H2.94988V3.72515ZM1.24988 5.40015H5.40488V1.25015H1.24988V5.40015Z" fill="black" fill-opacity="0.25"/>
+</svg>

+ 3 - 0
src/images/svgs/icon-send-black.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 fill-rule="evenodd" clip-rule="evenodd" d="M14.2677 1.43457L1.69704 5.1719L1.45837 5.26257V5.68924L6.37837 8.97724L10.145 5.21057L10.8524 5.9179L7.07771 9.6919L10.2357 14.4172L10.351 14.5652H10.779L14.5084 1.92924L14.5417 1.72124L14.2677 1.43457Z" fill="black"/>
+</svg>

+ 14 - 0
src/images/svgs/icon-star-color.svg

@@ -0,0 +1,14 @@
+<svg width="16" height="17" viewBox="0 0 16 17" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M14.25 8.17708C11.3433 7.42775 9.07199 5.15641 8.32266 2.24975L7.99999 0.998413L7.67732 2.24975C6.92799 5.15641 4.65666 7.42775 1.74999 8.17708L0.498657 8.49975L1.74999 8.82308C4.65666 9.57241 6.92799 11.8437 7.67732 14.7497L7.99999 16.0017L8.32266 14.7497C9.07199 11.8437 11.3433 9.57241 14.25 8.82308L15.5013 8.49975L14.25 8.17708Z" fill="url(#paint0_linear_561_15383)"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M12.5007 5.66469C12.5007 4.89002 13.35 3.99869 14.1667 3.99869C13.3807 3.99869 12.5007 3.09802 12.5007 2.33335C12.5007 3.09802 11.6287 3.99869 10.8353 3.99869C11.5987 3.99869 12.5007 4.88535 12.5007 5.66469Z" fill="url(#paint1_linear_561_15383)"/>
+<defs>
+<linearGradient id="paint0_linear_561_15383" x1="13.8029" y1="12.2509" x2="0.328205" y2="9.9806" gradientUnits="userSpaceOnUse">
+<stop stop-color="#317CFA"/>
+<stop offset="1" stop-color="#FF2DF8"/>
+</linearGradient>
+<linearGradient id="paint1_linear_561_15383" x1="13.8029" y1="12.2509" x2="0.328205" y2="9.9806" gradientUnits="userSpaceOnUse">
+<stop stop-color="#317CFA"/>
+<stop offset="1" stop-color="#FF2DF8"/>
+</linearGradient>
+</defs>
+</svg>

+ 3 - 0
src/images/svgs/icon-swap-black.svg

@@ -0,0 +1,3 @@
+<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M13.9531 8.75391H17.1316C17.1674 8.7539 17.2025 8.74418 17.2332 8.72578C17.2639 8.70739 17.2891 8.68102 17.306 8.64947C17.3229 8.61793 17.3309 8.58239 17.3292 8.54665C17.3275 8.5109 17.3161 8.47629 17.2963 8.44649L15.0621 5.08712C15.0439 5.05978 15.0192 5.03741 14.9902 5.02203C14.9611 5.00665 14.9287 4.99875 14.8959 4.99903L14.1828 5.0045C14.0692 5.00538 13.9605 5.05114 13.8804 5.13181C13.8004 5.21248 13.7555 5.32152 13.7555 5.43516V6.61212C13.7555 6.70872 13.7171 6.80137 13.6488 6.86969C13.5805 6.938 13.4878 6.97637 13.3912 6.97637H2.68809C2.63561 6.97637 2.58529 6.99722 2.54818 7.03432C2.51108 7.07143 2.49023 7.12175 2.49023 7.17423V8.55528C2.49029 8.60774 2.51115 8.65803 2.54824 8.69513C2.58533 8.73222 2.63563 8.75308 2.68809 8.75313L13.9531 8.75391ZM17.2998 11.2498H2.86621C2.81946 11.2497 2.77427 11.2666 2.73897 11.2973C2.70368 11.3279 2.68068 11.3703 2.67422 11.4166C2.66891 11.4431 2.66894 11.4703 2.6743 11.4967C2.67967 11.5231 2.69027 11.5482 2.70547 11.5705L4.87227 14.8066C4.91183 14.8658 4.96539 14.9142 5.02819 14.9476C5.09099 14.9811 5.16108 14.9985 5.23223 14.9983L5.80508 14.9969C5.91951 14.9967 6.02917 14.9511 6.11 14.8701C6.19082 14.7891 6.23618 14.6793 6.23613 14.5649V13.3803C6.23611 13.3339 6.24522 13.288 6.26294 13.2452C6.28067 13.2023 6.30666 13.1634 6.33943 13.1306C6.37221 13.0978 6.41112 13.0718 6.45396 13.054C6.49679 13.0363 6.5427 13.0272 6.58906 13.0272H17.2998C17.3512 13.0272 17.4006 13.0067 17.4369 12.9704C17.4733 12.934 17.4937 12.8846 17.4937 12.8332V11.4451C17.4939 11.4195 17.489 11.3942 17.4793 11.3705C17.4697 11.3468 17.4554 11.3253 17.4374 11.3072C17.4193 11.289 17.3979 11.2746 17.3743 11.2648C17.3507 11.2549 17.3254 11.2498 17.2998 11.2498Z" fill="black"/>
+</svg>

+ 70 - 0
src/pages/agent-gen/components/step/StepConfirm.tsx

@@ -0,0 +1,70 @@
+import { View, Image } from "@tarojs/components";
+import React, { useState } from "react";
+import style from "./index.module.less";
+import WemetaRadio from '@/components/wemeta-radio'
+import Taro from "@tarojs/taro";
+interface IProps {
+  prev: ()=>void
+}
+export default React.memo(function Index({prev}:IProps) {
+  
+  const handleEdit = ()=> {
+    Taro.downloadFile({
+      url: 'https://cdn.wehome.cn/cmn/png/53/META-H8UKWHWU-2JNUAG2BARJF55VHU9QS3-YBQGHDAM-IW.png',
+      success (res) {
+        // 只要服务器有响应数据,就会把响应内容写入文件并进入 success 回调,业务需要自行判断是否下载到了想要的内容
+        if (res.statusCode === 200) {
+          Taro.cropImage({
+            src: res.tempFilePath,
+            cropScale: "1:1",
+            success: async (cropRes) => {
+              const result = cropRes.tempFilePath;
+              console.log(result)
+              // const res = await uploadImage(path);
+              // if (res?.code === 0 && res.data) {
+              //   setValueByKey('poster', res.data)
+              // }
+            },
+          });
+        }
+      }
+    })
+    
+  }
+  return (
+    <View>
+      <View className={style.confirmContainer}>
+        <View className={style.confirmRoundedAvatarWrap} onClick={handleEdit}>
+          <Image
+            mode='aspectFill'
+            className={style.confirmRoundedAvatar}
+            src="https://cdn.wehome.cn/cmn/png/53/META-H8UKWHWU-2JNUAG2BARJF55VHU9QS3-YBQGHDAM-IW.png"
+          ></Image>
+        </View>
+        <View className={style.confirmChatAvatarBg}>
+          <Image
+                mode="widthFix"
+                className={style.confirmChatAvatarBg}
+                src="https://cdn.wehome.cn/cmn/png/53/META-H8UKWHWU-2JNUAG2BARJF55VHU9QS3-YBQGHDAM-IW.png"
+              ></Image>
+          <View className={style.confirmChatAvatarBgCover}>
+              <View className={style.block1}></View>
+              <View className={style.block2}></View>
+              <View className={style.block3}></View>
+          </View>
+        </View>
+        <View className="flex-center gap-8 text-14 font-medium leading-22 text-black">
+          <WemetaRadio checked checkbox></WemetaRadio>
+          启用聊天背景
+        </View>
+      </View>
+
+      <View className="bottom-bar">
+        <View className="grid grid-cols-2 gap-8 px-20 py-12">
+          <View className={`button-rounded`} onClick={prev}>更换形象</View>
+          <View className={`button-rounded primary opacity-20`}>确定</View>
+        </View>
+      </View>
+    </View>
+  );
+});

+ 82 - 15
src/pages/agent-gen/components/step/StepPick.tsx

@@ -1,27 +1,94 @@
-import { View,Text } from "@tarojs/components";
+import { View, Swiper, SwiperItem, Image } from "@tarojs/components";
+import React, { useEffect, useState } from "react";
+import style from "./index.module.less";
+import IconStarColor from "@/components/icon/icon-star-color";
+interface IProps {
+  prev: ()=>void
+  next: ()=>void
+}
+export default React.memo(function Index({prev, next}:IProps) {
+  const [currentSwiperIndex, setCurrentSwiperIndex] = useState(0);
+  const characters = [1, 2];
+  const onSwiperChange = (e: any) => {
+    const i = e.detail.current;
+    setCurrentSwiperIndex(i);
+  };
+  useEffect(()=> {
+    console.log('helloworldrendeer')
+  }, [])
+  const renderIndicator = (currentIndex: number) => {
+    return (
+      <>
+        <View className={style.indicatorContainer}>
+          {characters.map((_item, index) => {
+            return (
+              <View
+                key={index}
+                className={
+                  index === currentIndex
+                    ? `${style.indicator} ${style.indicatorActive}`
+                    : style.indicator
+                }
+              ></View>
+            );
+          })}
+        </View>
+      </>
+    );
+  };
 
-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 className={`${style.pickAvatarCard} ${style.pickGenCard}`}>
+          <View className="flex items-center gap-4">
+            <IconStarColor></IconStarColor> <View className={style.pickGenTips}>AI生成中</View>
+          </View>
+        </View> */}
+
+        <View className={`${style.pickAvatarCard}`}>
+          <Swiper
+            className={style.mySwiper}
+            indicatorColor="#999"
+            indicatorActiveColor="#333"
+            indicatorDots={false}
+            duration={200}
+            next-margin="-120rpx"
+            current={currentSwiperIndex}
+            onChange={(e) => onSwiperChange(e)}
+          >
+            <SwiperItem>
+            <View className={style.swiperItem}>
+              <Image
+                mode="widthFix"
+                src="https://cdn.wehome.cn/cmn/png/53/META-H8UKWHWU-2JNUAG2BARJF55VHU9QS3-YBQGHDAM-IW.png"
+              ></Image>
+              </View>
+            </SwiperItem>
+            
+            <SwiperItem>
+              <View className={style.swiperItem}>
+                <Image
+                  mode="widthFix"
+                  src="https://cdn.wehome.cn/cmn/png/53/META-H8UKWHWU-2JNUAG2BARJF55VHU9QS3-YBQGHDAM-IW.png"
+                ></Image>
+                <View className={style.pickAvatarOriginal}>
+                  <View>原图</View>
+                </View>
+              </View>
+            </SwiperItem>
+          </Swiper>
+          {/* <!-- 自定义指示点容器 --> */}
+          {renderIndicator(currentSwiperIndex)}
         </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 className={`button-rounded`} onClick={prev}>上一步</View>
+          <View className={`button-rounded primary opacity-20`} onClick={next}>使用这张</View>
         </View>
       </View>
     </View>
   );
-})
+});

+ 28 - 9
src/pages/agent-gen/components/step/StepStart.tsx

@@ -1,18 +1,37 @@
 import { View,Text } from "@tarojs/components";
-
-import React, { useState } from "react";
+import React, { useState, useCallback, useEffect } 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() {
+
+interface IProps {
+  next: ()=>void
+}
+
+export default React.memo(function StepStart({ next }: IProps) {
   const [value, setValue] = useState("");
+  
+  console.log('StepStart render', { value });
+
+  useEffect(() => {
+    console.log('StepStart mounted/updated');
+  });
+
+  const handleInput = useCallback((value: string) => {
+    setValue(value);
+  }, []);
+
+  const handleClick = useCallback(() => {
+    next();
+  }, [next]);
+
   return (
     <View>
       <View className={style.startContainer}>
         <View className={style.startCard}>
           <View className={style.startIconChange}>
-            <IconChange></IconChange>
+            <IconChange />
           </View>
         </View>
       </View>
@@ -20,18 +39,18 @@ export default React.memo(function Index() {
         <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)}
+          onInput={handleInput}
           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 className={`button-rounded-big gap-4 ${style.startGenButton}`} onClick={handleClick}>
+            <IconStar />
+            <View>生成微视频</View>
           </View>
         </View>
       </View>
     </View>
   );
-})
+});

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

@@ -32,3 +32,148 @@
 .startGenButton{
   background: linear-gradient(276.8deg, #317CFA -11.65%, #FF2DF8 91.8%);
 }
+.pickContainer{
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  width: 343px;
+  height: 533px;
+}
+.pickAvatarCard{
+  width: 300px;
+  height: 533px;
+  border-radius: 12px;
+}
+.pickGenCard{
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  background: linear-gradient(162.45deg, rgba(206, 49, 250, 0.1) 1.4%, rgba(49, 124, 250, 0.2) 100.04%);
+}
+.pickGenTips{
+    color: transparent; /* 文字透明以显示背景渐变 */
+    display: inline-block; /* 确保渐变生效 */
+    background: linear-gradient(279.56deg, #317CFA 13.29%, #FF2DF8 92.34%);
+    -webkit-background-clip: text;
+    background-clip: text;
+    -webkit-text-fill-color: transparent;
+}
+
+.mySwiper{
+  width: 300px;
+  height: 533px;
+  overflow: hidden;
+  border-radius: 12px;
+}
+
+.swiperItem{
+  position: relative;
+  width: 300px;
+  height: 533px;
+}
+
+
+/* 自定义指示点容器 */
+.indicatorContainer {
+  padding-top: 18px;
+  display: flex;
+  gap: 8px;
+  justify-content: center;
+}
+
+/* 单个指示点 */
+.indicator {
+  width: 8px;
+  height: 8px;
+  transition: all .3s;
+  border-radius: 100%;
+  background-color: rgba(#000, .25);
+  border-radius: 100%;
+}
+
+/* 当前选中的指示点 */
+.indicatorActive{
+  background-color: #000;
+}
+
+.pickAvatarOriginal{
+  position: absolute;
+  right: 0;
+  top: 0;
+  z-index: 1;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  font-weight: 400;
+  font-size: 12px;
+  line-height: 20px;
+  width: 60px;
+  height: 28px;
+  color: white;
+  border-bottom-left-radius: 12px;
+  background: rgba(#000, .4);
+}
+
+.confirmContainer{
+  width: 343px;
+  height: 511px;
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+}
+.confirmRoundedAvatarWrap{
+  width: 100px;
+  height: 100px;
+  margin-bottom: 24px;
+  border-radius: 100%;
+}
+.confirmRoundedAvatar{
+  width: 100px;
+  height: 100px;
+  overflow: hidden;
+  
+  border-radius: 100%;
+}
+.confirmChatAvatarBg{
+  position: relative;
+  width: 240px;
+  height: 427px;
+  margin-bottom: 16px;
+  border-radius: 24px;
+}
+.confirmChatAvatarBgCover{
+  display: flex;
+  flex-direction: column;
+  justify-content: flex-end;
+  position: absolute;
+  left: 0;
+  top: 0;
+  right: 0;
+  z-index: 1;
+  width: 240px;
+  height: 427px;
+  box-sizing: border-box;
+  padding: 0 24px 54px;
+  border-radius: 24px;
+  gap: 8px;
+  background: linear-gradient(180deg, rgba(255, 255, 255, 0) 50.12%, #D6D6D6 100%); 
+}
+.block{
+  background-color: white;
+  border-radius: 8px;
+  height: 30px;
+}
+.block1{
+  .block();
+  width: 135px;
+}
+.block2{
+  .block();
+  align-self: flex-end;
+  width: 123px;
+  background-color: rgba(#317CFA, .5);
+}
+.block3{
+  .block();
+  width: 192px;
+}

+ 33 - 7
src/pages/agent-gen/index.tsx

@@ -1,24 +1,50 @@
-
 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 { useState, useCallback } from "react";
 import StepStart from './components/step/StepStart'
 import StepPick from "./components/step/StepPick";
+import StepConfirm from "./components/step/StepConfirm";
+
+type TStep = 'start'|'pick'|'confirm'
 
 export default function Index() {
+  const [state, setState] = useState<TStep>('confirm')
   
-  const [state, setState] = useState<'start'|'pick'|'confirm'>('pick')
+  const getClassName = useCallback((_state: TStep) => {
+    return state === _state ? 'block': 'hidden'
+  }, [state]);
 
-  
+  const gotoStart = useCallback(() => {
+    setState('pick')
+  }, []);
+
+  const gotoPick = useCallback(() => {
+    setState('confirm')
+  }, []);
+
+  const gotoConfirm = useCallback(() => {
+    setState('start')
+  }, []);
 
   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 className={getClassName('start')}>
+          <StepStart next={gotoStart}/>
+        </View>
+        <View className={getClassName('pick')}>
+          <StepPick 
+            prev={gotoConfirm} 
+            next={gotoPick} 
+          />
+        </View>
+        <View className={getClassName('confirm')}>
+          <StepConfirm 
+            prev={gotoStart}  
+          />
+        </View>
       </View>
     </PageCustom>
   );

+ 54 - 0
src/pages/agent/components/AgentSetting/components/AgentContactCard/index.module.less

@@ -0,0 +1,54 @@
+.container{
+  padding: 24px 16px 0;
+  border-radius: 12px;
+  background-color: white;
+}
+.header{
+  display: flex;
+  align-items: center;
+  color: black;
+  font-family: PingFang SC;
+  font-weight: 500;
+  font-size: 20px;
+  line-height: 28px;
+}
+.items{
+ color: rgba(#000, .65);
+ font-family: PingFang SC;
+  font-weight: 400;
+  font-size: 12px;
+  line-height: 20px;
+}
+.item{
+  margin-bottom: 2px;
+}
+
+.name{
+  flex: 1;
+}
+.icons{
+  display: flex;
+  align-items: center;
+  gap: 8px;
+}
+.icon{
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  width: 24px;
+  height: 24px;
+  border-radius: 100%;
+  background-color: rgba(#000, .05);
+}
+.editButton{
+  display: block;
+  padding: 14px 0;
+  border-top: 1px solid rgba(#000, .05);
+}
+.editButtonText{
+  font-family: PingFang SC;
+  font-weight: 400;
+  font-size: 12px;
+  line-height: 20px;
+  color: rgba(#000, .45);
+}

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

@@ -0,0 +1,42 @@
+import { View } from "@tarojs/components"
+import style from './index.module.less'
+import IconPhoneGray from "@/components/icon/icon-phone-gray"
+import IconMailGray from "@/components/icon/icon-mail-gray"
+import IconLocationGray from "@/components/icon/icon-location-gray"
+import IconQRCodeGray from "@/components/icon/icon-qrcode-gray"
+import IconEditGray from "@/components/icon/icon-edit-gray"
+import Taro from "@tarojs/taro";
+export default () => {
+  const handleEdit = ()=> {
+    Taro.navigateTo({
+      url: '/pages/editor-contact/index',
+    })
+  }
+  return(
+    <View className={style.container}>
+      <View className={style.header}>
+        <View className={style.name}>你的名字</View>
+        <View className={style.icons}>
+          <View className={style.icon}><IconPhoneGray/></View>
+          <View className={style.icon}><IconMailGray/></View>
+          <View className={style.icon}><IconLocationGray/></View>
+          <View className={style.icon}><IconQRCodeGray/></View>
+        </View>
+      </View>
+      <View className={style.items}>
+        <View className={style.item}>
+          你的公司名称
+        </View>
+        <View className={style.item}>
+          你的岗位
+        </View>
+      </View>
+      <View className={style.editButton} onClick={handleEdit}>
+        <View className="flex-center gap-4">
+          <IconEditGray/>
+          <View className={style.editButtonText}>编辑</View>
+        </View>
+      </View>
+    </View>
+  )
+}

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

@@ -2,6 +2,7 @@ import { View } from "@tarojs/components";
 import AgentSettingList from './components/AgentSettingList'
 import AgentKnowledgeLib from './components/AgentKnowledgeLib'
 import AgentEmptyCard from './components/AgentEmptyCard'
+import AgentContactCard from './components/AgentContactCard'
 
 import React, { useState } from "react";
 
@@ -11,6 +12,9 @@ export default React.memo(function Index() {
   return (
     <View>
       <AgentEmptyCard></AgentEmptyCard>
+      <View className="mb-20">
+        <AgentContactCard></AgentContactCard>
+      </View>
       <AgentSettingList></AgentSettingList>
       <View className="pt-20">
         <AgentKnowledgeLib></AgentKnowledgeLib>

+ 1 - 1
src/pages/analysis/index.tsx

@@ -88,7 +88,7 @@ export default () => {
     return <View className="flex flex-col pt-56 items-center">
       <View className='data-empty'></View>
       <View className='text-12 text-gray-45 text-center leading-24 mt-12'>暂时没有互动记录,请先创建{APP_NAME_TEXT}</View>
-      <View className='full-rounded-button mt-20' style={{paddingLeft: '90px', paddingRight: '90px'}} onClick={gohome}>创建{APP_NAME_TEXT}</View>
+      <View className='full-button-rounded mt-20' style={{paddingLeft: '90px', paddingRight: '90px'}} onClick={gohome}>创建{APP_NAME_TEXT}</View>
     </View>
   }
   return (

+ 2 - 2
src/pages/choose-contact/index.tsx

@@ -128,7 +128,7 @@ export default function Index() {
         </View>
       </ScrollView>
         <View className="px-20" onClick={()=> handleSave()}>
-          <View className="rounded-button-big">确认添加</View>  
+          <View className="button-rounded-big">确认添加</View>  
         </View>
       </View>
     );
@@ -153,7 +153,7 @@ export default function Index() {
       </View>
       </ScrollView>
         <View className="px-20" onClick={()=> handleSave()}>
-          <View className="rounded-button-big">确认添加</View>  
+          <View className="button-rounded-big">确认添加</View>  
         </View>
       </View>
     )

+ 1 - 1
src/pages/component-library/index.tsx

@@ -82,7 +82,7 @@ export default () => {
 
       <View className="bottom-bar">
         <View className="px-20 pt-12">
-          <View className="rounded-button-big">添加组件</View>
+          <View className="button-rounded-big">添加组件</View>
         </View>
       </View>
     </View>

+ 9 - 0
src/pages/editor-contact/index.config.ts

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

+ 80 - 0
src/pages/editor-contact/index.tsx

@@ -0,0 +1,80 @@
+import NavBarNormal from "@/components/nav-bar-normal/index";
+import { View } from "@tarojs/components";
+import PageCustom from "@/components/page-custom/index";
+
+import CardList from "@/components/list/card-list";
+import TagCertificated from "@/components/tag-certificated";
+import CardListItem from "@/components/list/card-list-item";
+import Taro from "@tarojs/taro";
+
+
+export default function Index() {
+  const navToUrl = (url: string)=> {
+    Taro.navigateTo({url})
+  }
+  return (
+    <PageCustom>
+      <NavBarNormal backText="数字名片"></NavBarNormal>
+      <View className="px-16 w-full pt-4">
+        <CardList>
+          <View className="py-16 px-20 flex flex-col gap-20">
+            <CardListItem underline arrow onClick={()=> navToUrl('/pages/editor-pages/editor-name/index')}>
+              <View className="flex items-center font-normal pb-16">
+                <View className="flex-1 font-normal">姓名</View>
+                <View className="text-gray-65 mr-8">张三</View>
+              </View>
+            </CardListItem>
+            <CardListItem underline arrow onClick={()=> navToUrl('/pages/editor-pages/editor-phone/index')}>
+              <View className="flex items-center font-normal pb-16">
+                <View className="flex-1 font-normal">手机号码</View>
+                <View className="text-gray-65 mr-8">137 1234 1234</View>
+              </View>
+            </CardListItem>
+            <CardListItem underline arrow onClick={()=> navToUrl('/pages/editor-pages/editor-email/index')}>
+              <View className="flex items-center font-normal pb-16">
+                <View className="flex-1 font-normal">联系邮箱</View>
+                <View className="text-gray-65 mr-8 truncate max-w-[188px]">zhangsan@eyeclear.com</View>
+              </View>
+            </CardListItem>
+            <CardListItem underline arrow>
+              <View className="flex items-center font-normal pb-16">
+                <View className="flex-1 font-normal">联系地址</View>
+                <View className="text-gray-65 mr-8 truncate max-w-[188px]">浙江省杭州市上城区钱江国际时代广场2幢</View>
+              </View>
+            </CardListItem>
+            <CardListItem arrow onClick={()=> navToUrl('/pages/editor-pages/editor-qrcode/index')}>
+              <View className="flex items-center font-normal pb-16">
+                <View className="flex-1 font-normal">我的二维码</View>
+                <View className="text-gray-65 mr-8 text-primary">已上传</View>
+              </View>
+            </CardListItem>
+          </View>
+        </CardList>
+      </View>
+      <View className="px-16 w-full pt-12">
+        <CardList>
+          <View className="py-16 px-20 flex flex-col gap-20">
+            <CardListItem underline arrow onClick={()=> navToUrl('/pages/editor-pages/editor-company/index')}>
+              <View className="flex items-center font-normal pb-16">
+                <View className="flex-1 font-normal">企业</View>
+                <View className="text-gray-65 mr-8 truncate max-w-[188px]">北京茗视光眼科医院管理有限公司</View>
+              </View>
+            </CardListItem>
+            <CardListItem underline>
+              <View className="flex items-center font-normal pb-16">
+                <View className="flex-1 font-normal">企业认证</View>
+                <TagCertificated />
+              </View>
+            </CardListItem>
+            <CardListItem arrow onClick={()=> navToUrl('/pages/editor-pages/editor-position/index')}>
+              <View className="flex items-center font-normal pb-16">
+                <View className="flex-1 font-normal">职位</View>
+                <View className="text-gray-65 mr-8">销售医师</View>
+              </View>
+            </CardListItem>
+          </View>
+        </CardList>
+      </View>
+    </PageCustom>
+  );
+}

+ 1 - 1
src/pages/editor-pages/editor-chat/components/edit-character/components/textarea-form/index.tsx

@@ -40,7 +40,7 @@ export default ({
           maxlength={maxlength}
           bgColor='#F5F6F7'
         />
-        <View className="rounded-button-big" onClick={handleAdd}>添加</View>
+        <View className="button-rounded-big" onClick={handleAdd}>添加</View>
       </View>
     </>
   );

+ 2 - 2
src/pages/editor-pages/editor-chat/components/edit-character/index.tsx

@@ -196,7 +196,7 @@ export default forwardRef<IChatBasicComponent, Props>(({value, setValue}: Props,
             extraClass='leading-30'
           />
           <View
-            className='rounded-button-big'
+            className='button-rounded-big'
             onClick={() => {
               saveTextByKey("greeting", greeting);
               setGreetingShow(false);
@@ -222,7 +222,7 @@ export default forwardRef<IChatBasicComponent, Props>(({value, setValue}: Props,
             bgColor='#F5F6F7'
           />
           <View
-            className='rounded-button-big'
+            className='button-rounded-big'
             onClick={() => {
               saveTextByKey("personality", personality);
               setPersonalityShow(false);

+ 2 - 2
src/pages/editor-pages/editor-chat/components/edit-rule/index.tsx

@@ -132,7 +132,7 @@ export default forwardRef(({}: Props) => {
             maxlength={6}
             bgColor="#F5F6F7"
           />
-          <View className="rounded-button-big" onClick={handleAddKeyword}>
+          <View className="button-rounded-big" onClick={handleAddKeyword}>
             添加
           </View>
           <View className="mt-44 mb-48 text-14 leading-22 font-medium text-gray-65 p-12 rounded-20 bg-gray-f8">
@@ -156,7 +156,7 @@ export default forwardRef(({}: Props) => {
             maxlength={20}
             bgColor="#F5F6F7"
           />
-          <View className="rounded-button-big" onClick={handleAddQuestion}>
+          <View className="button-rounded-big" onClick={handleAddQuestion}>
             添加
           </View>
           <View className="mt-44 mb-48 pb-28 text-14 leading-22 font-medium text-gray-65 p-12 rounded-20 bg-gray-f8">

+ 49 - 60
src/pages/editor-pages/editor-company/index.tsx

@@ -1,87 +1,76 @@
 import { useState } from "react";
-import { View, Textarea } from "@tarojs/components";
+import { View } from "@tarojs/components";
 
 import PageCustom from "@/components/page-custom/index";
 import NavBarNormal from "@/components/nav-bar-normal/index";
 import editorStyle from "../editor.module.less";
+import WemetaRadioGroup from "@/components/wemeta-radio-group/index";
+import { useComponentStore } from '@/store/componentStore'
 import { useCharacterStore } from '@/store/characterStore'
-import { useComponentStore } from "@/store/componentStore";
-import Taro, { useUnload } from "@tarojs/taro";
 import WemetaTextarea from "@/components/wemeta-textarea/index";
-
+import Taro, {useRouter, useUnload} from "@tarojs/taro";
 export default function Index() {
-  const $instance = Taro.getCurrentInstance()
-  const id = $instance.router?.params.id
-  const deltaNum = id ? 1:2;
+  const router = useRouter();
+  const { id } = router.params;
+  const deltaNum = id ? 1 : 2
   let currentComponent = useComponentStore((state)=>  state.currentComponent);
   const character = useCharacterStore((state)=> state.character);
-  const { saveComponent } = useComponentStore();
   const loading = useComponentStore((state)=> state.loading);
-
-  const [value, setValue] = useState({
-    business: currentComponent?.data?.business ?? '',
-    company: currentComponent?.data?.company ?? '',
-  });
-
-  const onChange = (key: string, v: string) => {
-    value[key] = v;
-    setValue({
-      ...value,
-    });
-  };
-
-
+  const { saveComponent } = useComponentStore();
+  const [value, setValue] = useState(currentComponent?.data?.text ?? '');
+  
   const handleSave = async () => {
-    
-    if(!value.business?.length && !value.company?.length){
+    if(loading){
       return
     }
-    if(loading){
+    if(value.length <= 0){
       return;
     }
-    const c = {
-      data: {
-        business: value.business,
-        company: value.company,
-      },
-      enabled: currentComponent?.enabled ?? true,
-      id: currentComponent?.id,
-      name: currentComponent?.name ?? "公司信息",
-      characterProfileId: currentComponent?.characterProfileId ?? character?.profileId,
-      type: "company",
-    };
+    // const c = {
+    //   data: {
+    //     text: value,
+    //     layout: radioValue,
+    //   },
+    //   enabled: currentComponent?.enabled ?? true,
+    //   id: currentComponent?.id,
+    //   name: currentComponent?.name ?? "姓名",
+    //   index: currentComponent?.index,
+    //   characterProfileId: currentComponent?.characterProfileId ?? character?.profileId,
+    //   type: "title",
+    // };
+
     
-    await saveComponent(c)
+    // await saveComponent(c)
   };
 
-  const handleNavBack =  async () => {
-    await handleSave();
+  const onChange = (e: any) => {
+    setValue(e);
   };
   
+
+  
+
+  const handleNavBack = async () => {
+    await handleSave()
+  }
+  
+  
+
   return (
-    <PageCustom bgColor="global-light-green-bg">
-      <NavBarNormal backText="保存" navDelta={deltaNum} onNavBack={handleNavBack}>公司信息</NavBarNormal>
+    <PageCustom>
+      <NavBarNormal backText="企业"></NavBarNormal>
       <View className="flex flex-col items-center w-full">
         <View className={editorStyle.container}>
-          <View className={editorStyle.formContainer}>
-            <View className={editorStyle.formItem}>
-              <View className={editorStyle.formItemLabel}>公司简介</View>
-              <WemetaTextarea
-                  value={value.company}
-                  onInput={(value: string) => onChange("company", value)}
-                  placeholder="请输入..."
-                />
-            </View>
-
-            <View className={editorStyle.formItem}>
-              <View className={editorStyle.formItemLabel}>业务介绍</View>
-              <WemetaTextarea
-                    value={value.business}
-                    onInput={(value: string) => onChange("business", value)}
-                    cursorSpacing={200}
-                    placeholder="请输入..."
-                  />
-            </View>
+          <View
+            className={`${editorStyle.textInputContainer} ${editorStyle.underline}`}
+          >
+            <WemetaTextarea
+              value={value}
+              onBlur={(value: string) => onChange(value)}
+              onInput={(value: string) => onChange(value)}
+              placeholder="填写企业名称"
+              autoFocus
+            />
           </View>
         </View>
       </View>

+ 44 - 65
src/pages/editor-pages/editor-email/index.tsx

@@ -1,97 +1,76 @@
 import { useState } from "react";
-import { View, Input } from "@tarojs/components";
+import { View } from "@tarojs/components";
 
 import PageCustom from "@/components/page-custom/index";
 import NavBarNormal from "@/components/nav-bar-normal/index";
-
 import editorStyle from "../editor.module.less";
 import WemetaRadioGroup from "@/components/wemeta-radio-group/index";
-import { useComponentStore } from "@/store/componentStore";
-import { useCharacterStore } from "@/store/characterStore";
-import Taro, { useUnload } from "@tarojs/taro";
+import { useComponentStore } from '@/store/componentStore'
+import { useCharacterStore } from '@/store/characterStore'
 import WemetaTextarea from "@/components/wemeta-textarea/index";
-
+import Taro, {useRouter, useUnload} from "@tarojs/taro";
 export default function Index() {
-  const $instance = Taro.getCurrentInstance()
-  const id = $instance.router?.params.id
-  const deltaNum = id ? 1:2;
-  let currentComponent = useComponentStore((state) => state.currentComponent);
-  const character = useCharacterStore((state) => state.character);
-  const { saveComponent } =
-    useComponentStore();
-  const loading = useComponentStore((state) => state.loading);
-  const [value, setValue] = useState(currentComponent?.data?.text ?? "");
-  const [radioValue, setRadioValue] = useState(currentComponent?.data?.layout ?? 'simple')
-  const radioList = [
-    {
-      text: "居中",
-      value: "simple",
-      checked: false,
-    },
-    {
-      text: "左对齐",
-      value: "default",
-      checked: false,
-    },
-  ];
-
-  const handleSave = async (_newValue?: string) => {
-    if (!value.length) {
-      return;
+  const router = useRouter();
+  const { id } = router.params;
+  const deltaNum = id ? 1 : 2
+  let currentComponent = useComponentStore((state)=>  state.currentComponent);
+  const character = useCharacterStore((state)=> state.character);
+  const loading = useComponentStore((state)=> state.loading);
+  const { saveComponent } = useComponentStore();
+  const [value, setValue] = useState(currentComponent?.data?.text ?? '');
+  
+  const handleSave = async () => {
+    if(loading){
+      return
     }
-    if (loading) {
+    if(value.length <= 0){
       return;
     }
-    const c = {
-      data: {
-        text: value,
-        layout: radioValue,
-      },
-      enabled: currentComponent?.enabled ?? true,
-      id: currentComponent?.id,
-      name: currentComponent?.name ?? "邮箱",
-      characterProfileId:
-        currentComponent?.characterProfileId ?? character?.profileId,
-      type: "email",
-    };
+    // const c = {
+    //   data: {
+    //     text: value,
+    //     layout: radioValue,
+    //   },
+    //   enabled: currentComponent?.enabled ?? true,
+    //   id: currentComponent?.id,
+    //   name: currentComponent?.name ?? "姓名",
+    //   index: currentComponent?.index,
+    //   characterProfileId: currentComponent?.characterProfileId ?? character?.profileId,
+    //   type: "title",
+    // };
 
-    await saveComponent(c);
+    
+    // await saveComponent(c)
   };
 
-
-  const onRadioChange = (value: string) => {
-    setRadioValue(value)
-    return false;
+  const onChange = (e: any) => {
+    setValue(e);
   };
+  
+
+  
 
-  const handleNavBack =  async () => {
+  const handleNavBack = async () => {
     await handleSave()
   }
-
+  
   
 
   return (
-    <PageCustom bgColor="global-light-green-bg">
-      <NavBarNormal backText="保存" navDelta={deltaNum} onNavBack={handleNavBack}>邮箱</NavBarNormal>
+    <PageCustom>
+      <NavBarNormal backText="联系邮箱"></NavBarNormal>
       <View className="flex flex-col items-center w-full">
         <View className={editorStyle.container}>
           <View
             className={`${editorStyle.textInputContainer} ${editorStyle.underline}`}
           >
-            
             <WemetaTextarea
               value={value}
-              onInput={(value: string) => setValue(value)}
-              placeholder="请输入邮箱..."
+              onBlur={(value: string) => onChange(value)}
+              onInput={(value: string) => onChange(value)}
+              placeholder="填写联系邮箱"
+              autoFocus
             />
-            
-          </View>
-          <View className="pt-32">
-            <WemetaRadioGroup
-              radioList={radioList}
-              value={radioValue}
-              onChange={onRadioChange}
-            ></WemetaRadioGroup>
           </View>
         </View>
       </View>

+ 2 - 2
src/pages/editor-pages/editor-link/index.tsx

@@ -178,13 +178,13 @@ export default function Index() {
           
           <View className="flex items-center gap-12 py-32">
             <View
-              className={`rounded-button ${tabIndex === 0 ? "actived" : ""}`}
+              className={`button-rounded ${tabIndex === 0 ? "actived" : ""}`}
               onClick={() => setTabIndex(0)}
             >
               内容
             </View>
             <View
-              className={`rounded-button ${tabIndex === 1 ? "actived" : ""}`}
+              className={`button-rounded ${tabIndex === 1 ? "actived" : ""}`}
               onClick={() => setTabIndex(1)}
             >
               版式

+ 5 - 0
src/pages/editor-pages/editor-name/index.config.ts

@@ -0,0 +1,5 @@
+export default definePageConfig({
+  navigationBarTitleText: '章节标题',
+  "usingComponents": {},
+  navigationStyle: 'custom'
+})

+ 2 - 0
src/pages/editor-pages/editor-name/index.module.less

@@ -0,0 +1,2 @@
+
+

+ 79 - 0
src/pages/editor-pages/editor-name/index.tsx

@@ -0,0 +1,79 @@
+import { useState } from "react";
+import { View } from "@tarojs/components";
+
+import PageCustom from "@/components/page-custom/index";
+import NavBarNormal from "@/components/nav-bar-normal/index";
+import editorStyle from "../editor.module.less";
+import WemetaRadioGroup from "@/components/wemeta-radio-group/index";
+import { useComponentStore } from '@/store/componentStore'
+import { useCharacterStore } from '@/store/characterStore'
+import WemetaTextarea from "@/components/wemeta-textarea/index";
+import Taro, {useRouter, useUnload} from "@tarojs/taro";
+export default function Index() {
+  const router = useRouter();
+  const { id } = router.params;
+  const deltaNum = id ? 1 : 2
+  let currentComponent = useComponentStore((state)=>  state.currentComponent);
+  const character = useCharacterStore((state)=> state.character);
+  const loading = useComponentStore((state)=> state.loading);
+  const { saveComponent } = useComponentStore();
+  const [value, setValue] = useState(currentComponent?.data?.text ?? '');
+  
+  const handleSave = async () => {
+    if(loading){
+      return
+    }
+    if(value.length <= 0){
+      return;
+    }
+    // const c = {
+    //   data: {
+    //     text: value,
+    //     layout: radioValue,
+    //   },
+    //   enabled: currentComponent?.enabled ?? true,
+    //   id: currentComponent?.id,
+    //   name: currentComponent?.name ?? "姓名",
+    //   index: currentComponent?.index,
+    //   characterProfileId: currentComponent?.characterProfileId ?? character?.profileId,
+    //   type: "title",
+    // };
+
+    
+    // await saveComponent(c)
+  };
+
+  const onChange = (e: any) => {
+    setValue(e);
+  };
+  
+
+  
+
+  const handleNavBack = async () => {
+    await handleSave()
+  }
+  
+  
+
+  return (
+    <PageCustom>
+      <NavBarNormal backText="姓名"></NavBarNormal>
+      <View className="flex flex-col items-center w-full">
+        <View className={editorStyle.container}>
+          <View
+            className={`${editorStyle.textInputContainer} ${editorStyle.underline}`}
+          >
+            <WemetaTextarea
+              value={value}
+              onBlur={(value: string) => onChange(value)}
+              onInput={(value: string) => onChange(value)}
+              placeholder="填写姓名"
+              autoFocus
+            />
+          </View>
+        </View>
+      </View>
+    </PageCustom>
+  );
+}

+ 5 - 0
src/pages/editor-pages/editor-phone/index.config.ts

@@ -0,0 +1,5 @@
+export default definePageConfig({
+  navigationBarTitleText: '章节标题',
+  "usingComponents": {},
+  navigationStyle: 'custom'
+})

+ 2 - 0
src/pages/editor-pages/editor-phone/index.module.less

@@ -0,0 +1,2 @@
+
+

+ 79 - 0
src/pages/editor-pages/editor-phone/index.tsx

@@ -0,0 +1,79 @@
+import { useState } from "react";
+import { View } from "@tarojs/components";
+
+import PageCustom from "@/components/page-custom/index";
+import NavBarNormal from "@/components/nav-bar-normal/index";
+import editorStyle from "../editor.module.less";
+import WemetaRadioGroup from "@/components/wemeta-radio-group/index";
+import { useComponentStore } from '@/store/componentStore'
+import { useCharacterStore } from '@/store/characterStore'
+import WemetaTextarea from "@/components/wemeta-textarea/index";
+import Taro, {useRouter, useUnload} from "@tarojs/taro";
+export default function Index() {
+  const router = useRouter();
+  const { id } = router.params;
+  const deltaNum = id ? 1 : 2
+  let currentComponent = useComponentStore((state)=>  state.currentComponent);
+  const character = useCharacterStore((state)=> state.character);
+  const loading = useComponentStore((state)=> state.loading);
+  const { saveComponent } = useComponentStore();
+  const [value, setValue] = useState(currentComponent?.data?.text ?? '');
+  
+  const handleSave = async () => {
+    if(loading){
+      return
+    }
+    if(value.length <= 0){
+      return;
+    }
+    // const c = {
+    //   data: {
+    //     text: value,
+    //     layout: radioValue,
+    //   },
+    //   enabled: currentComponent?.enabled ?? true,
+    //   id: currentComponent?.id,
+    //   name: currentComponent?.name ?? "姓名",
+    //   index: currentComponent?.index,
+    //   characterProfileId: currentComponent?.characterProfileId ?? character?.profileId,
+    //   type: "title",
+    // };
+
+    
+    // await saveComponent(c)
+  };
+
+  const onChange = (e: any) => {
+    setValue(e);
+  };
+  
+
+  
+
+  const handleNavBack = async () => {
+    await handleSave()
+  }
+  
+  
+
+  return (
+    <PageCustom>
+      <NavBarNormal backText="手机号码"></NavBarNormal>
+      <View className="flex flex-col items-center w-full">
+        <View className={editorStyle.container}>
+          <View
+            className={`${editorStyle.textInputContainer} ${editorStyle.underline}`}
+          >
+            <WemetaTextarea
+              value={value}
+              onBlur={(value: string) => onChange(value)}
+              onInput={(value: string) => onChange(value)}
+              placeholder="填写手机号码"
+              autoFocus
+            />
+          </View>
+        </View>
+      </View>
+    </PageCustom>
+  );
+}

+ 5 - 0
src/pages/editor-pages/editor-position/index.config.ts

@@ -0,0 +1,5 @@
+export default definePageConfig({
+  navigationBarTitleText: '章节标题',
+  "usingComponents": {},
+  navigationStyle: 'custom'
+})

+ 2 - 0
src/pages/editor-pages/editor-position/index.module.less

@@ -0,0 +1,2 @@
+
+

+ 79 - 0
src/pages/editor-pages/editor-position/index.tsx

@@ -0,0 +1,79 @@
+import { useState } from "react";
+import { View } from "@tarojs/components";
+
+import PageCustom from "@/components/page-custom/index";
+import NavBarNormal from "@/components/nav-bar-normal/index";
+import editorStyle from "../editor.module.less";
+import WemetaRadioGroup from "@/components/wemeta-radio-group/index";
+import { useComponentStore } from '@/store/componentStore'
+import { useCharacterStore } from '@/store/characterStore'
+import WemetaTextarea from "@/components/wemeta-textarea/index";
+import Taro, {useRouter, useUnload} from "@tarojs/taro";
+export default function Index() {
+  const router = useRouter();
+  const { id } = router.params;
+  const deltaNum = id ? 1 : 2
+  let currentComponent = useComponentStore((state)=>  state.currentComponent);
+  const character = useCharacterStore((state)=> state.character);
+  const loading = useComponentStore((state)=> state.loading);
+  const { saveComponent } = useComponentStore();
+  const [value, setValue] = useState(currentComponent?.data?.text ?? '');
+  
+  const handleSave = async () => {
+    if(loading){
+      return
+    }
+    if(value.length <= 0){
+      return;
+    }
+    // const c = {
+    //   data: {
+    //     text: value,
+    //     layout: radioValue,
+    //   },
+    //   enabled: currentComponent?.enabled ?? true,
+    //   id: currentComponent?.id,
+    //   name: currentComponent?.name ?? "姓名",
+    //   index: currentComponent?.index,
+    //   characterProfileId: currentComponent?.characterProfileId ?? character?.profileId,
+    //   type: "title",
+    // };
+
+    
+    // await saveComponent(c)
+  };
+
+  const onChange = (e: any) => {
+    setValue(e);
+  };
+  
+
+  
+
+  const handleNavBack = async () => {
+    await handleSave()
+  }
+  
+  
+
+  return (
+    <PageCustom>
+      <NavBarNormal backText="职位"></NavBarNormal>
+      <View className="flex flex-col items-center w-full">
+        <View className={editorStyle.container}>
+          <View
+            className={`${editorStyle.textInputContainer} ${editorStyle.underline}`}
+          >
+            <WemetaTextarea
+              value={value}
+              onBlur={(value: string) => onChange(value)}
+              onInput={(value: string) => onChange(value)}
+              placeholder="填写职位名称"
+              autoFocus
+            />
+          </View>
+        </View>
+      </View>
+    </PageCustom>
+  );
+}

+ 5 - 0
src/pages/editor-pages/editor-qrcode/index.config.ts

@@ -0,0 +1,5 @@
+export default definePageConfig({
+  navigationBarTitleText: '章节标题',
+  "usingComponents": {},
+  navigationStyle: 'custom'
+})

+ 13 - 0
src/pages/editor-pages/editor-qrcode/index.module.less

@@ -0,0 +1,13 @@
+
+.card{
+  margin-bottom: 16px;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  width: 343px;
+  height: 452px;
+  border-radius: 16px;
+  background-color: white;
+}
+
+

+ 82 - 0
src/pages/editor-pages/editor-qrcode/index.tsx

@@ -0,0 +1,82 @@
+import { useState } from "react";
+import { View,Image } from "@tarojs/components";
+
+import PageCustom from "@/components/page-custom/index";
+import NavBarNormal from "@/components/nav-bar-normal/index";
+import style from "./index.module.less";
+
+import { useComponentStore } from '@/store/componentStore'
+import { useCharacterStore } from '@/store/characterStore'
+import IconPlusBig from "@/components/icon/icon-plus-big";
+
+import Taro, {useRouter, useUnload} from "@tarojs/taro";
+export default function Index() {
+  const router = useRouter();
+  const { id } = router.params;
+  let currentComponent = useComponentStore((state)=>  state.currentComponent);
+  const character = useCharacterStore((state)=> state.character);
+  const loading = useComponentStore((state)=> state.loading);
+  const { saveComponent } = useComponentStore();
+  const [value, setValue] = useState(currentComponent?.data?.text ?? '');
+  
+  const handleSave = async () => {
+    if(loading){
+      return
+    }
+    if(value.length <= 0){
+      return;
+    }
+    // const c = {
+    //   data: {
+    //     text: value,
+    //     layout: radioValue,
+    //   },
+    //   enabled: currentComponent?.enabled ?? true,
+    //   id: currentComponent?.id,
+    //   name: currentComponent?.name ?? "姓名",
+    //   index: currentComponent?.index,
+    //   characterProfileId: currentComponent?.characterProfileId ?? character?.profileId,
+    //   type: "title",
+    // };
+
+    
+    // await saveComponent(c)
+  };
+
+  const onChange = (e: any) => {
+    setValue(e);
+  };
+  
+
+  
+
+  const handleNavBack = async () => {
+    await handleSave()
+  }
+  
+  
+
+  return (
+    <PageCustom>
+      <NavBarNormal backText="我的二维码"></NavBarNormal>
+      <View className="px-16 pt-4">
+        <View className={style.card}>
+          <View>
+            <View className="flex-center flex-col">
+              <View className="w-36 h-36 rounded-full flex-center mb-12 bg-primary">
+                <IconPlusBig/>
+              </View>
+              <View className="text-14 leading-22 font-medium mb-4">上传你的二维码</View>
+              <View className="text-12 leading-20 text-gray-45">方便客户快速沟通,扫码即可联系你</View>
+            </View>
+          </View>
+          {/* <Image style={{maxWidth: '344px'}} src="https://cdn.wehome.cn/cmn/jpg/187/META-H8UKWHWU-2JNUAG2BARJF55VHU9QS3-4YZZNDAM-2X.jpg" mode="widthFix"></Image> */}
+        </View>
+        <View className="flex flex-col gap-12">
+          <View className="button-rounded-big">更新</View>
+          <View className="button-rounded-big button-plain button-warn">清除</View>
+        </View>
+      </View>
+    </PageCustom>
+  );
+}

+ 1 - 1
src/pages/editor-pages/editor-store-home/index.tsx

@@ -112,7 +112,7 @@ export default function Index() {
               src="https://cdn.wehome.cn/cmn/png/214/META-H8UKXHWU-PIWQ5G6H7F9LO74FT7QR2-9SOBIJ4M-KC.png"
             ></Image>
           </View>
-          <View className='rounded-button-big mt-20' onClick={() => setShow(false)}>知道了</View>
+          <View className='button-rounded-big mt-20' onClick={() => setShow(false)}>知道了</View>
         </View>
       </Popup>
     </PageCustom>

+ 1 - 1
src/pages/editor-pages/editor-store-product/index.tsx

@@ -156,7 +156,7 @@ export default function Index() {
           >
             {renderTips(tipsType)}
           </View>
-          <View className='rounded-button-big mt-20' onClick={() => setShow(false)}>知道了</View>
+          <View className='button-rounded-big mt-20' onClick={() => setShow(false)}>知道了</View>
         </View>
       </Popup>
     </PageCustom>

+ 1 - 1
src/pages/index/components/welcome/index.tsx

@@ -22,7 +22,7 @@ export default function Index() {
               <View>2.客户问题,AI 自动回应</View>
               <View>3.你的内容,一页呈现</View>
           </View>
-          <View className="rounded-button-big" onClick={go}>创建智能体</View>
+          <View className="button-rounded-big" onClick={go}>创建智能体</View>
         </View>
       </View>
       </View>

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

@@ -1,44 +0,0 @@
-.swiperCard{
-  padding: 2px;
-  width: 319px;
-  height: 570px;
-  box-sizing: border-box;
-  background-color: white;
-  border-radius: 20px;
-  overflow: hidden;
-}
-.cardContainer{
-  padding: 2px;
-  display: flex;
-  flex-direction: column;
-  align-items: center;
-  width: 100%;
-  height: 100%;
-  // border-radius: 40px;
-  box-sizing: border-box;
-}
-
-.cardButtons{
-  position: absolute;
-  left: 0px;
-  right: 0px;
-  bottom: 0px;
-}
-.cardButtonRow{
-  padding: 2px;
-  display: flex;
-  width: 100%;
-  // border-radius: 0 0 40px 40px;
-  // overflow: hidden;
-  box-sizing: border-box;
-}
-.cardButton{
-  flex: 1;
-  height: 50px;
-  font-size: 14px;
-  line-height: 22px;
-  font-weight: 500;
-  display: flex;
-  align-items: center;
-  justify-content: center;
-}

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

@@ -1,75 +0,0 @@
-import { useRef, useEffect, useState, useMemo } from 'react'
-import { View, Text, Button, Image } from "@tarojs/components";
-import ChatAI, {IChatAIComponent} from '@/components/chat-ai/index'
-import style from "./index.module.less";
-import type { ICharacter } from "@/types";
-import Taro from "@tarojs/taro";
-import IconEditFill from '@/images/icon_20_edit.png'
-import IconShare from '@/images/icon_20_share.png'
-import { handleShare } from '@/utils/share';
-import SharePopup from '@/components/custom-share/share-popup/index';
-import { useCharacterStore } from "@/store/characterStore";
-
-interface Props {
-  character: ICharacter
-  playGreeting: boolean
-  currentIndex: number
-  index: number
-}
-export default function Index({ character, currentIndex, index }: Props) {
-  const [sharePopupVisible, setSharePopupVisible] = useState(false)
-  const chatAIRef = useRef<IChatAIComponent>(null)
-  const {
-    setCurrentCharacter,
-  } = useCharacterStore();
-  const handleEdit = ()=> {
-    if(character){
-      setCurrentCharacter(character) 
-      Taro.navigateTo({url: `/pages/page/index?profileId=${character.profileId}`})
-    }
-  }
-
-  const handleShareClick = ()=> {
-    handleShare();
-    Taro.hideTabBar();
-    setSharePopupVisible(true)
-  }
-  const handleSharePopupClosed = ()=> {
-    Taro.showTabBar();
-    setSharePopupVisible(false)
-  }
-
-  useEffect(()=> {
-    if(currentIndex !== index){
-      chatAIRef.current?.stop()
-    }
-  }, [currentIndex, index])
-
-  return (
-    <View className={`flex flex-col items-center relative ${style.swiperCard}`}>
-      <View className={`absolute left-0 top-0 z-10 ${style.cardContainer}`}>
-        <ChatAI buttonSize='small' ref={chatAIRef} getSession={(currentIndex+1) === index} shareButton={false} playGreeting={false} enableGoPreview character={character}></ChatAI>
-        <View className={`border-t border-t-gray-4 black-light ${style.cardButtons}`}>
-          <View className={style.cardButtonRow}>
-            <View
-              className={`flex gap-4 items-center rounded-bl-20 ${style.cardButton}`}
-              onClick={handleEdit}
-            >
-              <Image src={IconEditFill} className="w-20 h-20"></Image>
-              <Text>编辑</Text>
-            </View>
-            <View
-              className={`flex gap-4 items-center rounded-br-20 ${style.cardButton} relative`}
-              onClick={handleShareClick}
-            >
-              <Image src={IconShare} className="w-20 h-20"></Image>
-              <Text>分享</Text>
-              {/* <Button openType="share" className="share-button"></Button> */}
-            </View>
-          </View>
-        </View>
-        <SharePopup character={character} visible={sharePopupVisible} onClose={handleSharePopupClosed}></SharePopup>
-      </View>
-    </View>
-  );
-}

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

@@ -1,47 +0,0 @@
-.swiperCard{
-  padding: 1px;
-  width: 335px;
-  height: 573px;
-  background-color: white;
-  border-radius: 20px;
-}
-.createButton{
-  display: flex;
-  justify-content: center;
-  align-items: center;
-  width: 56px;
-  height: 56px;
-  border-radius: 100%;
-  background-color: var(--color-primary);
-}
-.iconAdd{
-  width: 16px;
-  height: 16px;
-}
-
-.tips{
-  font-weight: 500;
-  font-size: 14px;
-  line-height: 22px;
-}
-
-.bottomButtonContainer{
-  position: absolute;
-  bottom: 0;
-  right: 0;
-  left: 0;
-  box-sizing: border-box;
-  padding: 20px;
-}
-.helpButton{
-  padding: 12px;
-  display: flex;
-  justify-content: center;
-  align-items: center;
-  gap: 10px;
-  width: 100%;
-  border-radius: 50px;
-  box-sizing: border-box;
-  color: #85A00F;
-  background-color: rgba(#CBF706, .1);
-}

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

@@ -1,64 +0,0 @@
-import { View, Image } from '@tarojs/components'
-import style from  './index.module.less'
-import Taro from '@tarojs/taro';
-import type {ITouchEvent} from '@tarojs/components'
-import { useAppStore } from '@/store/appStore'
-import { APP_NAME_TEXT, IS_MINI_GREEN_LEAF } from '@/config'
-
-interface Props {
-  length: number
-  onClick: () => void
-}
-export default function  Index({length, onClick}:Props){
-
-  const appConfig = useAppStore((state) => state.appConfig);
-
-  const handleClick = () => {
-    onClick()
-  }
-
-  const go2Help = (e:ITouchEvent)=> {
-    const guidanceLink = appConfig?.guidanceLink
-    e.stopPropagation();
-    // 如果服务端有配置
-    if(guidanceLink){
-      // 角色详情页跳转
-      if(guidanceLink.startsWith('character://')){
-        const profileId = guidanceLink.slice(12)
-        Taro.navigateTo({url: '/pages/profile/index?profileId='+profileId})
-        return
-      }
-      // 普通https连接
-      if(guidanceLink.startsWith('https://')){
-        Taro.navigateTo({
-          url: `/pages/webview/index?url=${guidanceLink}`
-        })
-        return
-      }
-    }
-    // 如果服务端没配置则默认跳转此页
-    Taro.navigateTo({
-      url: '/pages/webview/index?url=https://mp.weixin.qq.com/s/9Goo814D4GObS9H9ObCFyA'
-    })
-  }
-
-  return (
-    <View className={`flex flex-col gap-16 justify-center items-center relative ${style.swiperCard}`} onClick={handleClick}>
-      <View className={style.createButton}>
-        <Image src='https://cdn.wehome.cn/cmn/png/100/META-H8UKVHWU-KIGP3BIL7M5AYC6XHNUA2-VDZCWI2M-O91.png' className={style.iconAdd}></Image>
-      </View>
-      <View className='text-center'>
-        <View className={style.tips}>
-          {length === 0 ? '创建你的第一张AI主页': '创建主页'}
-        </View>
-      </View>
-
-      {IS_MINI_GREEN_LEAF && <View className={style.bottomButtonContainer}>
-          <View className={style.helpButton} onClick={go2Help}>
-            <View>🤔</View>
-            <View>{APP_NAME_TEXT}可以帮你做什么?</View>
-          </View>
-        </View>}
-    </View>
-  )
-}

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

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

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

@@ -1,56 +0,0 @@
-.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%;
-}

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

@@ -1,213 +0,0 @@
-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>
-  );
-}

+ 1 - 1
src/pages/login/index.tsx

@@ -41,7 +41,7 @@ export default function Index() {
         <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="button-rounded-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>

+ 44 - 0
src/pages/profile/components/top-bar/index.module.less

@@ -0,0 +1,44 @@
+.topBg{
+  position: absolute;
+  top: 0;
+  left: 0;
+  right: 0;
+  z-index: 1;
+  height: 652px;
+  width: 100%;
+  background-repeat: no-repeat;
+  background-position: center center;
+  background-size: 100%;
+}
+.topBarContainer{
+  padding-top: 276px;
+}
+.topBar{
+  position: relative;
+  z-index: 2;
+  padding: 20px 16px 0;
+  height: 370px;
+  border-top-left-radius: 24px;
+  border-top-right-radius: 24px;
+  background: rgba(#FFF, .45);
+  backdrop-filter: blur(38px);
+  
+}
+.boxButton{
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  width: 48px;
+  height: 48px;
+  border-radius: 12px;
+  background-color: white;
+}
+.icon{
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  width: 24px;
+  height: 24px;
+  border-radius: 100%;
+  background-color: rgba(#317CFA, .1);
+}

+ 79 - 0
src/pages/profile/components/top-bar/index.tsx

@@ -0,0 +1,79 @@
+import { View } from "@tarojs/components"
+import style from './index.module.less'
+import TagCertificated from '@/components/tag-certificated'
+import IconSwapBlack from '@/components/icon/icon-swap-black'
+import IconChatWhite from '@/components/icon/icon-chat-white'
+import IconQRCodeBlack from '@/components/icon/icon-qrcode-black'
+import IconSendBlack from '@/components/icon/icon-send-black'
+import IconEditBlack from '@/components/icon/icon-edit-black'
+import IconMoreBlack from '@/components/icon/icon-more-black'
+
+import IconPhoneGray from "@/components/icon/icon-phone-gray"
+import IconMailGray from "@/components/icon/icon-mail-gray"
+import IconLocationGray from "@/components/icon/icon-location-gray"
+import { useAppStore } from "@/store/appStore";
+
+export default ()=> {
+  const headerHeight = useAppStore((state) => state.headerHeight);
+  // 自定义背景样式
+  const bgImageStyle = {
+    marginTop: -headerHeight,
+    // background: `linear-gradient(rgba(242, 244, 245, 0) 0%, rgba(242, 244, 245, .8) 80% , rgba(242, 244, 245,1) 100%), url(${customBgImg})`,
+    backgroundImage: `url(https://cdn.wehome.cn/cmn/png/53/META-H8UKWHWU-2JNUAG2BARJF55VHU9QS3-YBQGHDAM-IW.png)`,
+  }
+  return (
+    <View className="relative">
+      <View className={style.topBg} style={bgImageStyle}></View>
+      <View className={style.topBarContainer}>
+      <View className={style.topBar} >
+        <View className="px-8 mb-16">
+          <View className="flex items-start mb-24">
+            <View className="flex flex-col flex-1">
+              <View className="flex items-end gap-8">
+                <View className="text-24 font-medium leading-32">张三</View>
+                <View className="text-12 leading-20">销售医师</View>
+              </View>
+              <View className="flex items-center gap-2">
+                <View className="text-12 leading-20 truncate max-w-[188px]">北京茗视光眼科医院管理有限公司</View>
+                <TagCertificated/>
+              </View>
+            </View>
+            <View className={style.boxButton}>
+              <IconSwapBlack/>
+            </View>
+          </View>
+          <View className="flex items-center gap-8">
+            <View className="flex-1">
+              <View className="button-rounded button-primary">
+                <IconChatWhite/>
+                和TA聊聊
+              </View>
+            </View>
+            <View className={style.boxButton}>
+              <IconQRCodeBlack/>
+            </View>
+            <View className={style.boxButton}>
+              <IconSendBlack/>
+            </View>
+            <View className={style.boxButton}>
+              <IconEditBlack/>
+            </View>
+            <View className={style.boxButton}>
+              <IconMoreBlack/>
+            </View>
+          </View>
+        </View>
+
+        <View className="rounded-12 bg-white p-20">
+          <View className="text-14 leading-22 font-medium border-b border-b-gray h-34 mb-22">联系方式</View>
+          <View className="flex flex-col gap-20 text-12 leading-20">
+            <View className="flex items-center gap-12"><View className={style.icon}><IconPhoneGray/></View><View>137 1234 1234</View></View>
+            <View className="flex items-center gap-12"><View className={style.icon}><IconMailGray/></View><View>zhangsan@eyeclear.com</View></View>
+            <View className="flex items-center gap-12"><View className={style.icon}><IconLocationGray/></View><View>浙江省杭州市上城区钱江国际时代广场2幢</View></View>
+          </View>
+        </View>
+      </View> 
+      </View>
+      </View>
+  )
+}

+ 42 - 174
src/pages/profile/index.tsx

@@ -1,194 +1,62 @@
-import ChatAI from "@/components/chat-ai/index";
-import ComponentList from "@/components/component-list/index";
-// import CustomShare from "@/components/custom-share/index";
-// import FloatingTips from "@/components/floating-tips/index";
 import NavBarNormal from "@/components/nav-bar-normal";
 import PageCustom from "@/components/page-custom/index";
-import useObserve from "@/hooks/useObserve";
-import logo from "@/images/logo.png";
-import { useCharacterStore, useCharacterStyle } from "@/store/characterStore";
-import { sortComponentsByIndex } from "@/store/componentStore";
-import { ICharacter, TEntityComponent } from "@/types";
-import { useAppStore } from "@/store/appStore";
-import { getToken } from "@/utils/index";
+
 import { Image, Text, View } from "@tarojs/components";
-import Taro, { useDidShow, useRouter } from "@tarojs/taro";
-import { useState } from "react";
-import style from "./index.module.less";
-import { APP_NAME_TEXT } from '@/config'
-import { reportProfilePage } from '@/utils/report'
+import Logo from '@/components/logo'
+import TopBar from './components/top-bar'
 
 export default function Index() {
-  const router = useRouter();
-  console.log(router.params, router)
-  const { isShared, fromContact, scene } = router.params;
-  const profileId = scene ?? router.params.profileId;
-  const { getProfileById } = useCharacterStore();
-  const { fetchAppConfig } = useAppStore();
-  const characters = useCharacterStore((state) => state.characters);
-  const { visible } = useObserve(this, true);
-  const [character, setCharacter] = useState<ICharacter | null>(null);
-  const [components, setComponents] = useState<TEntityComponent[] | null>(null);
-  const { customStyled, customBgImg } = useCharacterStyle();
-  const token = getToken();
-  const launchOptions = Taro.getLaunchOptionsSync();
-  // 如果有 referralCode 参数,则说明是通过分享的方式进入小程序,则需要获取 referralCode 参数
-  const referralCode = launchOptions.query?.referralCode;
-  const isMine = !!characters.find((item) => item.profileId === profileId);
-  const pages = Taro.getCurrentPages();
-
-  console.log(referralCode, profileId, isShared, fromContact);
-
-  const showError = ()=> {
-    // 从联系人页跳转过来的
-    if (fromContact) {
-      Taro.showModal({
-        content: `😭 该${APP_NAME_TEXT}已经失效,长按可以将其从联系人中删除`,
-        showCancel: false,
-      });
-      return;
-    }
-    Taro.showModal({
-      content: `😭 该${APP_NAME_TEXT}已失效`,
-      showCancel: false,
-    });
-  }
-
-  const fetchData = async () => {
-    if (profileId) {
-      Taro.showLoading();
-      const res = await getProfileById(profileId);
-      Taro.hideLoading();
-      // 登录过期
-      if(!res || res.code === 20001){
-        return;
-      }
-      if (!res.data) {
-        showError()
-        return;
-      }
-      
-      setCharacter(res.data.character);
-
-      const _components = res.data.components
-        .filter((item) => item.enabled)
-        .map((item) => {
-          // 兼容老数据 type images 类型 变为 media
-          if (item.type === "images" && item.data?.images?.length) {
-            item.data.media = item.data.images.map((img: any) => {
-              return {
-                url: img.src,
-                fileType: "image",
-              };
-            });
-          }
-          return item;
-        })
-        .sort(sortComponentsByIndex);
-
-      setComponents(_components);
-    }
-  };
-  
-  useDidShow(() => {
-    fetchAppConfig();
-    fetchData();
-  });
   
-  reportProfilePage(character?.profileId, character?.name)
 
-  const back2Index = () => {
-    Taro.switchTab({
-      url: "/pages/index/index",
-    });
-  };
-
-  const renderLeft = () => {
-    return (
-      <>
-        <View className={style.backButton} onClick={back2Index}>
-          <Text className={style.backButtonText}>{APP_NAME_TEXT}</Text>
-        </View>
-      </>
-    );
-  };
-
-  const renderNavBar = () => {
-    if (!isShared && pages.length > 1) {
-      return (
-        <NavBarNormal
-          center={!visible}
-          scrollFadeIn
-        >
-          <View className={style.title}>{!visible ? character?.name : ""}</View>
-        </NavBarNormal>
-      );
-    }
-
-    return (
-      <NavBarNormal
-        leftColumn={() => renderLeft()}
-        center={!visible}
-        scrollFadeIn
-      >
-        <View className={style.title}>{!visible ? character?.name : ""}</View>
-      </NavBarNormal>
-    );
-  };
-
-  const renderHomeButton = () => {
-    return (
-      <View className={style.homeButtonContainer} onClick={back2Index}>
-        <View className={style.homeButton}>
-          <View className={style.decorateLine}></View>
-          <View className="flex items-center gap-8">
-            <Image src={logo} mode="widthFix" className={style.logo}></Image>
-            <Text className={style.homeButtonText}>{APP_NAME_TEXT},我的智能主页</Text>
-          </View>
-          <View className={style.decorateLine}></View>
-        </View>
-        {!isMine && isShared && (
-          <View className="rounded-button-big">创建我的{APP_NAME_TEXT}</View>
-        )}
-      </View>
-    );
-  };
+  
 
   // const renderFloatingTips = () => {
   //   return isShared ? <FloatingTips></FloatingTips> : <></>;
   // };
 
-  // 自定义背景样式
-  const bgImageStyle = customBgImg
-    ? {
-        // background: `linear-gradient(rgba(242, 244, 245, 0) 0%, rgba(242, 244, 245, .8) 80% , rgba(242, 244, 245,1) 100%), url(${customBgImg})`,
-        background: `url(${customBgImg})`,
-      }
-    : undefined;
   
   
   
   return (
-    <PageCustom style={bgImageStyle}>
-      <View style={customStyled} className="w-full">
-        {renderNavBar()}
-        <View
-          className="flex flex-col items-center gap-48 w-full"
-          style={{ paddingBottom: "32px" }}
-        >
-            {character && token && (
-              <ChatAI playGreeting getSession character={character}></ChatAI>
-            )}
-          <View className="px-16 flex flex-col gap-10 w-full">
-            {components && (
-              <ComponentList components={components}></ComponentList>
-            )}
-            
-          </View>
-          {/* {character && <CustomShare character={character}></CustomShare>} */}
+    <PageCustom>
+      <View className="w-full">
+        <NavBarNormal scrollFadeIn showBgColor leftColumn={Logo}></NavBarNormal>
+        <TopBar></TopBar>
+        <View className="p-16">
+        <View className="rounded-12 bg-white p-24">
+        杭州茗视佳眼科,引入先进的精品专项医院运营模式,引进了阿玛仕1050rs、新版蔡司、生物力学分析仪、欧堡眼底照相等国际先进设备,汇聚浙一浙二的顶级近视手术专家手术。开展Smart全激光、半飞秒、全飞秒、ICL晶体植入以及多焦点人工晶体置换手术。
+        </View>
+        <View className="rounded-12 bg-white p-24">
+        杭州茗视佳眼科,引入先进的精品专项医院运营模式,引进了阿玛仕1050rs、新版蔡司、生物力学分析仪、欧堡眼底照相等国际先进设备,汇聚浙一浙二的顶级近视手术专家手术。开展Smart全激光、半飞秒、全飞秒、ICL晶体植入以及多焦点人工晶体置换手术。
+        </View>
+        <View className="rounded-12 bg-white p-24">
+        杭州茗视佳眼科,引入先进的精品专项医院运营模式,引进了阿玛仕1050rs、新版蔡司、生物力学分析仪、欧堡眼底照相等国际先进设备,汇聚浙一浙二的顶级近视手术专家手术。开展Smart全激光、半飞秒、全飞秒、ICL晶体植入以及多焦点人工晶体置换手术。
+        </View>
+        <View className="rounded-12 bg-white p-24">
+        杭州茗视佳眼科,引入先进的精品专项医院运营模式,引进了阿玛仕1050rs、新版蔡司、生物力学分析仪、欧堡眼底照相等国际先进设备,汇聚浙一浙二的顶级近视手术专家手术。开展Smart全激光、半飞秒、全飞秒、ICL晶体植入以及多焦点人工晶体置换手术。
+        </View>
+        <View className="rounded-12 bg-white p-24">
+        杭州茗视佳眼科,引入先进的精品专项医院运营模式,引进了阿玛仕1050rs、新版蔡司、生物力学分析仪、欧堡眼底照相等国际先进设备,汇聚浙一浙二的顶级近视手术专家手术。开展Smart全激光、半飞秒、全飞秒、ICL晶体植入以及多焦点人工晶体置换手术。
+        </View>
+        <View className="rounded-12 bg-white p-24">
+        杭州茗视佳眼科,引入先进的精品专项医院运营模式,引进了阿玛仕1050rs、新版蔡司、生物力学分析仪、欧堡眼底照相等国际先进设备,汇聚浙一浙二的顶级近视手术专家手术。开展Smart全激光、半飞秒、全飞秒、ICL晶体植入以及多焦点人工晶体置换手术。
+        </View>
+        <View className="rounded-12 bg-white p-24">
+        杭州茗视佳眼科,引入先进的精品专项医院运营模式,引进了阿玛仕1050rs、新版蔡司、生物力学分析仪、欧堡眼底照相等国际先进设备,汇聚浙一浙二的顶级近视手术专家手术。开展Smart全激光、半飞秒、全飞秒、ICL晶体植入以及多焦点人工晶体置换手术。
+        </View>
+        <View className="rounded-12 bg-white p-24">
+        杭州茗视佳眼科,引入先进的精品专项医院运营模式,引进了阿玛仕1050rs、新版蔡司、生物力学分析仪、欧堡眼底照相等国际先进设备,汇聚浙一浙二的顶级近视手术专家手术。开展Smart全激光、半飞秒、全飞秒、ICL晶体植入以及多焦点人工晶体置换手术。
+        </View>
+        <View className="rounded-12 bg-white p-24">
+        杭州茗视佳眼科,引入先进的精品专项医院运营模式,引进了阿玛仕1050rs、新版蔡司、生物力学分析仪、欧堡眼底照相等国际先进设备,汇聚浙一浙二的顶级近视手术专家手术。开展Smart全激光、半飞秒、全飞秒、ICL晶体植入以及多焦点人工晶体置换手术。
+        </View>
+        <View className="rounded-12 bg-white p-24">
+        杭州茗视佳眼科,引入先进的精品专项医院运营模式,引进了阿玛仕1050rs、新版蔡司、生物力学分析仪、欧堡眼底照相等国际先进设备,汇聚浙一浙二的顶级近视手术专家手术。开展Smart全激光、半飞秒、全飞秒、ICL晶体植入以及多焦点人工晶体置换手术。
+        </View>
+        <View className="rounded-12 bg-white p-24">
+        杭州茗视佳眼科,引入先进的精品专项医院运营模式,引进了阿玛仕1050rs、新版蔡司、生物力学分析仪、欧堡眼底照相等国际先进设备,汇聚浙一浙二的顶级近视手术专家手术。开展Smart全激光、半飞秒、全飞秒、ICL晶体植入以及多焦点人工晶体置换手术。
+        </View>
         </View>
-        {renderHomeButton()}
-        {/* {renderFloatingTips()} */}
       </View>
     </PageCustom>
   );

+ 1 - 1
src/pages/test/index.tsx

@@ -219,7 +219,7 @@ export default function Index() {
           </CardList>
         </View>
 
-        <View className="rounded-button-big" onClick={()=> setShowPopup(true)}>拉起弹层</View>
+        <View className="button-rounded-big" onClick={()=> setShowPopup(true)}>拉起弹层</View>
 
         {/* <Popup setShow={setShowPopup} show={showPopup} title="知识库-图片/视频">
           <View>你好啊世界</View>

+ 1 - 1
src/pages/vip/index.tsx

@@ -122,7 +122,7 @@ export default () => {
               </View>
               <View className="px-28">
                 <View
-                  className="full-rounded-button"
+                  className="full-button-rounded"
                   onClick={() => {
                     goPay();
                   }}

+ 1 - 1
src/pages/voice/index.tsx

@@ -263,7 +263,7 @@ export default ({ profileId, onPlay }: Props) => {
           setShow(true);
         }}
       >
-        <View className="rounded-button-big font-medium">
+        <View className="button-rounded-big font-medium">
           <View>添加克隆声音</View>
           <View className="font-normal text-12 leading-0">
             (剩{calcRemainCloneNum()}次)

+ 4 - 3
tailwind.config.js

@@ -38,10 +38,11 @@ module.exports = {
       'purple': '#7e5bef',
       'pink': '#ff49db',
       'orange': '#FD561F',
-      'green': '#3D7D44',
+      'red': '#EE4949',
+      'green': '#31BE59',
       'yellow': '#ffc82c',
-      'gray': '#F5F5F5',
-      'gray-page': '#f5f5f2',
+      'gray': '#f6f6f6',
+      'gray-page': '#f6f6f6',
       'gray-dark': '#273444',
       'gray-f8': '#F8F8F8',
       'black-light': 'rgba(0, 0, 0, 0.45)',