瀏覽代碼

feat: 微信公众号文章, 视频组件

王晓东 1 月之前
父節點
當前提交
3c757c20b4
共有 58 個文件被更改,包括 747 次插入1762 次删除
  1. 1 1
      src/app.config.ts
  2. 31 23
      src/app.less
  3. 18 36
      src/components/AgentPage/index.tsx
  4. 1 1
      src/components/auth-phone/index.tsx
  5. 1 1
      src/components/component-list/components/card-channels/index.module.less
  6. 77 58
      src/components/component-list/components/card-channels/index.tsx
  7. 7 8
      src/components/component-list/components/card-contacts/index.tsx
  8. 47 46
      src/components/component-list/components/card-link/index.tsx
  9. 8 7
      src/components/component-list/components/card-mini-program/index.tsx
  10. 4 1
      src/components/component-list/components/card-tel/index.tsx
  11. 7 8
      src/components/component-list/components/social-media/index.tsx
  12. 70 44
      src/components/component-list/index.tsx
  13. 2 2
      src/components/nav-bar-normal/index.tsx
  14. 1 1
      src/components/popup-link-copyer/index.module.less
  15. 2 4
      src/components/widgets/widget-map/index.tsx
  16. 22 11
      src/consts/enum.ts
  17. 43 42
      src/consts/socialMedia.ts
  18. 1 5
      src/pages/agent/components/AgentWebsite/index.tsx
  19. 42 42
      src/pages/component-library/components/comp-item/index.module.less
  20. 15 5
      src/pages/component-library/components/createComponentData.ts
  21. 11 7
      src/pages/component-library/index.tsx
  22. 30 24
      src/pages/editor-pages/editor-channels/index.tsx
  23. 70 107
      src/pages/editor-pages/editor-link-social/index.tsx
  24. 54 0
      src/pages/editor-pages/editor-link/components/LinkPicker/LinkPicker.tsx
  25. 3 0
      src/pages/editor-pages/editor-link/components/LinkPicker/index.module.less
  26. 30 9
      src/pages/editor-pages/editor-link/index.tsx
  27. 43 38
      src/pages/editor-pages/editor-mini-program/index.tsx
  28. 20 24
      src/pages/editor-pages/editor.module.less
  29. 0 1
      src/pages/index/index.tsx
  30. 11 2
      src/pages/knowledge/components/view-style/ViewStyleList.tsx
  31. 10 11
      src/pages/member/components/list-row-auth-phone/index.tsx
  32. 0 55
      src/pages/page/components/avatar-magic-style/index.module.less
  33. 0 61
      src/pages/page/components/avatar-magic-style/index.tsx
  34. 0 55
      src/pages/page/components/bg-style-config/index.module.less
  35. 0 297
      src/pages/page/components/bg-style-config/index.tsx
  36. 0 32
      src/pages/page/components/bottom-nav-bar/index.tsx
  37. 0 29
      src/pages/page/components/tab-buttons/index.tsx
  38. 0 9
      src/pages/page/index.config.ts
  39. 0 151
      src/pages/page/index.module.less
  40. 0 276
      src/pages/page/index.tsx
  41. 0 5
      src/service/appConfig.ts
  42. 0 15
      src/service/asset.ts
  43. 1 1
      src/service/audio.ts
  44. 0 19
      src/service/auth.ts
  45. 0 42
      src/service/component.ts
  46. 1 1
      src/service/contact.ts
  47. 0 18
      src/service/document.ts
  48. 6 2
      src/service/knowledge.ts
  49. 0 7
      src/service/pay.ts
  50. 1 1
      src/service/stats.ts
  51. 10 10
      src/store/appStore.ts
  52. 19 4
      src/store/componentStore.ts
  53. 0 89
      src/store/documentStore.ts
  54. 9 1
      src/store/knowledge.ts
  55. 9 4
      src/styles/_vars.less
  56. 1 1
      src/types/agent.ts
  57. 7 7
      src/utils/auth.ts
  58. 1 1
      src/xiaolanbenlib/utils/auth.ts

+ 1 - 1
src/app.config.ts

@@ -37,7 +37,7 @@ export default defineAppConfig({
     
     
     'pages/choose-contact/index',
-    'pages/page/index',
+    
     'pages/editor-pages/editor-media/index',
     
     'pages/editor-pages/editor-chat/index',

+ 31 - 23
src/app.less

@@ -173,35 +173,43 @@
 
 .social-media-shiping{
   .social-media-icon();
-  background-image: url(@shipingLinkUrl);
-}
-.social-media-tiktok{
-  .social-media-icon();
-  background-image: url(@tiktokUrl);
-}
-.social-media-xiaohongshu{
-  .social-media-icon();
-  background-image: url(@xiaohongshuUrl);
-}
-.social-media-kwai{
-  .social-media-icon();
-  background-image: url(@kwaiUrl);
-}
-.social-media-bilibili{
-  .social-media-icon();
-  background-image: url(@bilibiliUrl);
+  background-image: url(@shipingUrl);
 }
-.social-media-qq{
+// .social-media-tiktok{
+//   .social-media-icon();
+//   background-image: url(@tiktokUrl);
+// }
+// .social-media-xiaohongshu{
+//   .social-media-icon();
+//   background-image: url(@xiaohongshuUrl);
+// }
+// .social-media-kwai{
+//   .social-media-icon();
+//   background-image: url(@kwaiUrl);
+// }
+// .social-media-bilibili{
+//   .social-media-icon();
+//   background-image: url(@bilibiliUrl);
+// }
+// .social-media-qq{
+//   .social-media-icon();
+//   background-image: url(@qqUrl);
+// }
+// .social-media-sina{
+//   .social-media-icon();
+//   background-image: url(@sinaUrl);
+// }
+.social-media-shipingVideo{
   .social-media-icon();
-  background-image: url(@qqUrl);
+  background-image: url(@shipingVideoUrl);
 }
-.social-media-sina{
+.component-icon-tel{
   .social-media-icon();
-  background-image: url(@sinaUrl);
+  background-image: url(@tel);
 }
-.social-media-shipingVideo{
+.component-icon-address{
   .social-media-icon();
-  background-image: url(@shipingUrl);
+  background-image: url(@local);
 }
 
 // 空气按钮分享

+ 18 - 36
src/components/AgentPage/index.tsx

@@ -5,7 +5,8 @@ import Logo from "@/components/logo";
 import SummaryBar from "./components/SummaryBar";
 import { useAgentStore } from "@/store/agentStore";
 import { useEffect, useState } from "react";
-
+import { useComponentStore } from "@/store/componentStore";
+import ComponentList from "@/components/component-list";
 
 
 interface IProps {
@@ -13,10 +14,23 @@ interface IProps {
 }
 export default function Index({ agentId }: IProps) {
   const { fetchAgent } = useAgentStore();
+  
+  const { setComponentList } = useComponentStore()
+  const components = useComponentStore((state) => state.components);
+
+  const fetchAgentDetail = async (agentId: string) => {
+    const result = await fetchAgent(agentId);
+    if (result) {
+      const components = result.components ?? []
+      // 过滤掉没有 id 的组件防止有错误数据
+      setComponentList(components.filter(c => !!c.data?.id), agentId);
+    }
+  };
 
   useEffect(() => {
     if (agentId) {
-      fetchAgent(agentId);
+      fetchAgentDetail(agentId);
+      
     }
   }, [agentId]);
 
@@ -27,40 +41,8 @@ export default function Index({ agentId }: IProps) {
       <NavBarNormal scrollFadeIn showBgColor leftColumn={Logo}></NavBarNormal>
       <SummaryBar></SummaryBar>
       
-      <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 className="flex flex-col w-full p-16 gap-12">
+        <ComponentList components={components}></ComponentList>
       </View>
     </View>
   );

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

@@ -1,5 +1,5 @@
 import { View, Button, ButtonProps, BaseEventOrig } from "@tarojs/components";
-import { authBind } from "@/service/auth";
+
 import { EBindKind } from "@/consts/enum";
 interface Props {
   text?: string

+ 1 - 1
src/components/component-list/components/card-channels/index.module.less

@@ -2,7 +2,7 @@
 .iconVideo{
   width: 24px;
   height: 24px;
-  background: url(@shipingLinkUrl) center center no-repeat;
+  background: url(@shipingUrl) center center no-repeat;
   border-radius: 4px;
   background-size: 24px 24px;
   background-color: var(--color-bg-primary);

+ 77 - 58
src/components/component-list/components/card-channels/index.tsx

@@ -2,27 +2,27 @@ import Taro from "@tarojs/taro";
 import { View, Image } from "@tarojs/components";
 import WidgetCard from "@/components/widgets/widget-card/index";
 import style from "./index.module.less";
-import type {
-  IEntityDocument,
-  TEntityComponent,
-} from "@/types/index";
+
+import { TComponentItem } from "@/types/agent";
 
 interface Props {
   index: number;
   editMode: boolean;
-  component: TEntityComponent;
-  components: TEntityComponent[];
-  onSwitchChanged: (c: TEntityComponent, checked: boolean) => void;
-  onDelete: (c: IEntityDocument) => void;
-  onMove: (c: TEntityComponent, direction: number) => void;
-  onClick: (c:TEntityComponent, url: string ) => void;
+  component: TComponentItem;
+  components: TComponentItem[];
+  onSwitchChanged: (c: TComponentItem, checked: boolean) => void;
+  onDelete: (c: TComponentItem) => void;
+  onMove: (c: TComponentItem, direction: number) => void;
+  onClick: (c: TComponentItem, url: string) => void;
 }
 
-const redirectTips = ()=> {
+const redirectTips = () => {
   return (
-    <View className="text-white text-10 leading-18 bg-gray-45 rounded-30 right-8 bottom-8 inline-block absolute px-6">跳转视频号查看</View>
-  )
-}
+    <View className="text-white text-10 leading-18 bg-gray-45 rounded-30 right-8 bottom-8 inline-block absolute px-6">
+      跳转视频号查看
+    </View>
+  );
+};
 
 export default ({
   index,
@@ -34,10 +34,9 @@ export default ({
   onMove,
   onClick,
 }: Props) => {
-  
-  const openShipingVideo = (value:any)=> {
-    if(!value.videoId || !value.accountId){
-      return
+  const openShipingVideo = (value: any) => {
+    if (!value.videoId || !value.accountId) {
+      return;
     }
     Taro.openChannelsActivity({
       finderUserName: value.accountId,
@@ -47,37 +46,56 @@ export default ({
       },
       fail: (err) => {
         console.log(err);
-      }
-    })
-  }
-  const handleClick = ()=> {
-    if(editMode){
-      onClick(component, `/pages/editor-pages/editor-channels/index`)
-    }else{
-      openShipingVideo(component.data?.value)
+      },
+    });
+  };
+  const handleClick = () => {
+    if (editMode) {
+      onClick(component, `/pages/editor-pages/editor-channels/index`);
+    } else {
+      openShipingVideo(component.data?.value);
     }
+  };
+
+  const hasValue = component.data.value?.videoId && component.data.value?.accountId
+
+  const renderEmpty = ()=> {
+    return <View className="px-16"><View className="component-card-empty">
+      <View className="component-card-content">
+        <View className="component-card-empty-figure"></View>
+        <View className="component-card-empty-tips">点击配置图片/视频</View>
+      </View>
+    </View>
+    </View>
   }
 
-  if(!editMode){
-    return <View className="rounded-20 overflow-hidden bg-white" onClick={handleClick}>
-      <View className="px-16 py-18" >
+  if (!editMode) {
+    return (
+      <View
+        className="rounded-20 overflow-hidden bg-white"
+        onClick={handleClick}
+      >
+        <View className="px-16 py-18">
           <View className="flex items-center gap-8">
             <View className={style.iconVideo}></View>
-            <View className="text-16 font-medium">{component.data?.value?.desc ?? '视频名称'}</View>  
+            <View className="text-16 font-medium">
+              {component.data?.value?.desc ?? "视频名称"}
+            </View>
           </View>
-            
+        </View>
+        {!hasValue && renderEmpty()}
+        {hasValue && component.data?.value?.poster && (
+          <View className="w-full overflow-hidden relative">
+            <Image
+              className="w-full align-bottom"
+              mode="widthFix"
+              src={component.data.value.poster}
+            ></Image>
+            {redirectTips()}
           </View>
-          {component.data?.value?.poster && 
-              <View className="w-full overflow-hidden relative">
-                <Image
-                  className="w-full align-bottom"
-                  mode="widthFix"
-                  src={component.data.value.poster}
-                ></Image>
-                {redirectTips()}
-              </View>
-            }
-    </View>
+        )}
+      </View>
+    );
   }
 
   return (
@@ -86,7 +104,7 @@ export default ({
         disableChangeStyle
         index={index}
         enabled={component.enabled}
-        onSwitchChanged={(checked)=> onSwitchChanged(component, checked)}
+        onSwitchChanged={(checked) => onSwitchChanged(component, checked)}
         components={components}
         editMode={editMode}
         onDelete={() => onDelete(component)}
@@ -95,22 +113,23 @@ export default ({
       >
         <View className="px-16">
           <View className="flex items-center gap-8">
-            <View className={style.iconVideo}></View>
-            <View className="text-16 font-medium">{component.data?.value?.desc ?? '视频名称'}</View>  
-          </View>
-            {component.data?.value?.poster && 
-              <View className="w-full overflow-hidden mt-16 relative">
-                <Image
-                  className="w-full align-bottom"
-                  mode="widthFix"
-                  src={component.data.value.poster}
-                  lazyLoad
-                ></Image>
-                {redirectTips()}
-              </View>
-            }
+            <View className="social-media-shipingVideo"></View>
+            <View className="text-16 font-medium">
+              {component.data?.value?.desc ?? "视频名称"}
+            </View>
           </View>
-          
+          {component.data?.value?.poster && (
+            <View className="w-full overflow-hidden mt-16 relative">
+              <Image
+                className="w-full align-bottom"
+                mode="widthFix"
+                src={component.data.value.poster}
+                lazyLoad
+              ></Image>
+              {redirectTips()}
+            </View>
+          )}
+        </View>
       </WidgetCard>
     </>
   );

+ 7 - 8
src/components/component-list/components/card-contacts/index.tsx

@@ -8,21 +8,20 @@ import IconArrowRight from "@/images/icon_24_right.png";
 import { axios } from "taro-axios";
 import type {
   ICharacter,
-  IEntityDocument,
-  TEntityComponent,
 } from "@/types/index";
 import { useEffect, useState } from "react";
+import { TComponentItem } from "@/types/agent";
 
 interface Props {
   index: number;
   editMode: boolean;
-  component: TEntityComponent;
-  components: TEntityComponent[];
-  onSwitchChanged: (c: TEntityComponent, checked: boolean) => void;
-  onDelete: (c: IEntityDocument) => void;
-  onMove: (c: TEntityComponent, direction: number) => void;
+  component: TComponentItem;
+  components: TComponentItem[];
+  onSwitchChanged: (c: TComponentItem, checked: boolean) => void;
+  onDelete: (c: TComponentItem) => void;
+  onMove: (c: TComponentItem, direction: number) => void;
   onClick: () => void;
-  onStyleChanged: (c: TEntityComponent) => void
+  onStyleChanged: (c: TComponentItem) => void
 }
 
 export default ({

+ 47 - 46
src/components/component-list/components/card-link/index.tsx

@@ -3,15 +3,11 @@ import { View, Image } from "@tarojs/components";
 import WidgetCard from "@/components/widgets/widget-card/index";
 import style from "./index.module.less";
 import MediaItem from "@/components/media-item/index";
-import IconLink from "@/components/icon/icon-link";
-import IconWechat from "@/components/icon/icon-wechat";
-import {  navToWebView } from '@/utils/index'
-import { CORP_DOMAINS } from '@/config'
-import type {
-  TSocialMediaItem,
-} from "@/types/index";
-import { TComponentItem } from "@/types/agent";
 
+import { navToWebView } from "@/utils/index";
+import { CORP_DOMAINS } from "@/config";
+import type { TSocialMediaItem } from "@/types/index";
+import { TComponentItem } from "@/types/agent";
 
 interface Props {
   index: number;
@@ -26,7 +22,7 @@ interface Props {
     link: string,
     mediaItem: TSocialMediaItem
   ) => void;
-  onStyleChanged: (c: TComponentItem) => void
+  onStyleChanged: (c: TComponentItem) => void;
 }
 
 export default ({
@@ -40,9 +36,8 @@ export default ({
   onClick,
   onStyleChanged,
 }: Props) => {
-  
   const data = component?.data;
-  const posterExist = data?.poster
+  const posterExist = data?.poster;
   const mediaItem = {
     value: "link",
     label: data?.text ?? data?.link,
@@ -50,7 +45,8 @@ export default ({
     color: "#000",
     bgColor: "#85F393",
   };
-  const isOfficialAccountArticle = data?.linkType === 'weixinOfficialAccountArticle'
+  const isOfficialAccountArticle =
+    data?.linkType === "weixinOfficialAccountArticle";
   const openMiniProgram = (shortLink: string) => {
     console.log(shortLink);
     if (!shortLink) {
@@ -66,16 +62,16 @@ export default ({
       },
     });
   };
-  const openOfficialAccountArticle = (link:string)=> {
+  const openOfficialAccountArticle = (link: string) => {
     //@ts-ignore
     wx.openOfficialAccountArticle({
-      url: link
-    })
-  }
+      url: link,
+    });
+  };
 
   const handleClick = () => {
     const linkValue = data?.link ?? "";
-    if(!editMode){
+    if (!editMode) {
       // 如果链接是小程序链接,则直接跳转
       if (linkValue.indexOf("#小程序://") > -1) {
         openMiniProgram(linkValue);
@@ -83,7 +79,7 @@ export default ({
       }
       // 如果是合作方链接,打开webview显示
       if (linkValue.indexOf(CORP_DOMAINS) > -1) {
-        navToWebView(linkValue)
+        navToWebView(linkValue);
         return;
       }
       if (isOfficialAccountArticle) {
@@ -91,31 +87,30 @@ export default ({
         return;
       }
     }
-    
     // 如果是普通链接,则正常处理成显示链接并复制的逻辑
     onClick(component, linkValue, mediaItem);
   };
 
-  const renderIcon = ()=> {
-    if(posterExist){
-      return <></>
+  const renderIcon = () => {
+    if (posterExist) {
+      return <></>;
     }
 
-    if(isOfficialAccountArticle){
-      return <View className={`icon-24-fill icon-box`}>{IconWechat()}</View>
+    if (isOfficialAccountArticle) {
+      return <View className={`social-media-wechat`}></View>;
     }
-    
-    return <View className={`icon-24-fill icon-box`}>{IconLink()}</View>
-  }
 
-  const renderRight = ()=> {
-    if(posterExist){
-      return <></>
+    return <View className={`social-media-link`}></View>;
+  };
+
+  const renderRight = () => {
+    if (posterExist) {
+      return <></>;
     }
-    return <View className="w-24 h-24"></View>
-  }
+    return <View className="w-24 h-24"></View>;
+  };
 
-  const renderPoster = (data:any)=> {
+  const renderPoster = (data: any) => {
     return (
       <View className="w-full">
         <MediaItem
@@ -126,27 +121,27 @@ export default ({
         ></MediaItem>
       </View>
     );
-  }
+  };
 
   const renderContent = () => {
     // 如果存在封面则显示封面
     if (posterExist) {
-      return renderPoster(data)
+      return renderPoster(data);
     }
     // 否则展示链接描述文本或链接本身
     return (
       <View
-        className={`flex flex-1 ${data?.layout === 'center' ? "justify-center" : ""}`}
+        className={`flex flex-1 ${
+          data?.layout === "center" ? "justify-center" : ""
+        }`}
       >
         {data?.text ? data?.text : data?.link}
       </View>
     );
   };
 
-  if(posterExist && !editMode){
-    return <View onClick={handleClick}>
-      {renderPoster(data)}
-    </View>
+  if (posterExist && !editMode) {
+    return <View onClick={handleClick}>{renderPoster(data)}</View>;
   }
 
   return (
@@ -160,12 +155,18 @@ export default ({
         editMode={editMode}
         onDelete={() => onDelete(component)}
         onMove={(direction) => onMove(component, direction)}
-        onClick={handleClick}
-        onChanged={()=> {
-          if(component.data?.layout === 'left'){
-            onStyleChanged({...component, data: {...component.data, layout: 'center'}})
-          }else{
-            onStyleChanged({...component, data: {...component.data, layout: 'left'}})
+        
+        onChanged={() => {
+          if (component.data?.layout === "left") {
+            onStyleChanged({
+              ...component,
+              data: { ...component.data, layout: "center" },
+            });
+          } else {
+            onStyleChanged({
+              ...component,
+              data: { ...component.data, layout: "left" },
+            });
           }
         }}
       >

+ 8 - 7
src/components/component-list/components/card-mini-program/index.tsx

@@ -2,18 +2,19 @@ import Taro from "@tarojs/taro";
 import { View, Image } from "@tarojs/components";
 import WidgetCard from "@/components/widgets/widget-card/index";
 import style from "./index.module.less";
-import type { IEntityDocument, TEntityComponent } from "@/types/index";
+
 import IconArrowRight from "@/images/icon_24_right.png";
 import IconMiniprogram from "@/components/icon/icon-miniprogram";
+import { TComponentItem } from "@/types/agent";
 interface Props {
   index: number;
   editMode: boolean;
-  component: TEntityComponent;
-  components: TEntityComponent[];
-  onSwitchChanged: (c: TEntityComponent, checked: boolean) => void;
-  onDelete: (c: IEntityDocument) => void;
-  onMove: (c: TEntityComponent, direction: number) => void;
-  onClick: (c: TEntityComponent, url: string) => void;
+  component: TComponentItem;
+  components: TComponentItem[];
+  onSwitchChanged: (c: TComponentItem, checked: boolean) => void;
+  onDelete: (c: TComponentItem) => void;
+  onMove: (c: TComponentItem, direction: number) => void;
+  onClick: (c: TComponentItem, url: string) => void;
 }
 
 export default ({

+ 4 - 1
src/components/component-list/components/card-tel/index.tsx

@@ -3,7 +3,7 @@ import WidgetCard from "@/components/widgets/widget-card/index";
 import WidgetTypeRow, {
 } from "@/components/widgets/widget-type-row/index";
 import Taro from '@tarojs/taro';
-import IconPhone from '@/components/icon/icon-phone'
+
 
 import { TComponentItem } from "@/types/agent";
 
@@ -29,6 +29,9 @@ export default ({
   onStyleChanged,
   onClick
 }:Props) => {
+  const IconPhone = ()=> {
+    return <View className='component-icon-tel'></View>
+  }
   const handleClick = ()=> {
     if(editMode){
       onClick()

+ 7 - 8
src/components/component-list/components/social-media/index.tsx

@@ -1,22 +1,21 @@
 import WidgetCard from "@/components/widgets/widget-card/index";
 import WidgetTypeRow from "@/components/widgets/widget-type-row/index";
+import { TComponentItem } from "@/types/agent";
 import type {
-  IEntityDocument,
-  TEntityComponent,
   TSocialMediaItem,
 } from "@/types/index";
 interface Props {
   index: number
   editMode: boolean
-  component: TEntityComponent
-  components: TEntityComponent[]
+  component: TComponentItem
+  components: TComponentItem[]
   mediaItem: TSocialMediaItem
-  onSwitchChanged: (c: TEntityComponent, checked: boolean)=> void
-  onDelete:(c: IEntityDocument)=> void
+  onSwitchChanged: (c: TComponentItem, checked: boolean)=> void
+  onDelete:(c: TComponentItem)=> void
   onClick:() => void
-  onMove: (c: TEntityComponent, direction: number) => void
+  onMove: (c: TComponentItem, direction: number) => void
   showMediaLink: (mediaItem: TSocialMediaItem, link: string) => void
-  onStyleChanged: (c: TEntityComponent) => void
+  onStyleChanged: (c: TComponentItem) => void
 }
 export default ({
   index,

+ 70 - 44
src/components/component-list/index.tsx

@@ -27,6 +27,7 @@ import CardLink from "./components/card-link/index";
 import { TComponentItem } from "@/types/agent";
 
 import { handleChooseAddress } from './components/address'
+import { EComponentType } from "@/consts/enum";
 
 interface Props {
   components: TComponentItem[];
@@ -38,6 +39,7 @@ export default ({ components, editMode = false }: Props) => {
     setCurrentComponent,
     setInsertIndex,
     swapTwoComponent,
+    saveComponent,
   } = useComponentStore();
 
   const [show, setShow] = useState(true);
@@ -50,7 +52,24 @@ export default ({ components, editMode = false }: Props) => {
   
 
   const showMediaLink = (mediaItem: TSocialMediaItem, link: string, c: TEntityComponent) => {
-    console.log(c.type,  SocialMediaType.shiping.value)
+    console.log(c,  SocialMediaType.shiping.value)
+    // 微信公众号直接跳转
+    if(c?.type === SocialMediaType.wechat.value){
+      // 跳转的公众号需与小程序为同主体或关联主体
+      //@ts-ignore
+      // wx.openOfficialAccountProfile({
+      //   username: c.data?.value,
+      //   success: () => {},
+      //   fail: (res) => {
+      //     console.log(res)
+      //     // 如果失败,则显示复制框
+      //     setCurrentMediaItem(mediaItem);
+      //     setCurrentLink(link);
+      //     setShow(true);
+      //   },
+      // })
+      return
+    }
     // 视频号不显示复制框,直接跳转
     if(c?.type === SocialMediaType.shiping.value && link){
       Taro.openChannelsUserProfile({
@@ -85,20 +104,20 @@ export default ({ components, editMode = false }: Props) => {
 
   const handleSort = async (c: TComponentItem, direction: number) => {
     console.log(c, direction)
-    const res = await swapTwoComponent(c, direction);
-    
+    await swapTwoComponent(c, direction);
   };
 
-  const handleSwitchChanged = (c: TEntityComponent, checked: boolean) => {
-    // saveComponent({
-    //   ...c,
-    //   enabled: checked,
-    // });
+  const handleSwitchChanged = (c: TComponentItem, checked: boolean) => {
+    saveComponent({
+      ...c,
+      enabled: checked,
+    });
   };
-  const changeStyle = (c: TEntityComponent) => {
-    // saveComponent({
-    //   ...c,
-    // });
+  const changeStyle = (c: TComponentItem) => {
+    console.log(c)
+    saveComponent({
+      ...c,
+    });
   };
 
   const handleCreateNew = (index: number) => {
@@ -117,6 +136,9 @@ export default ({ components, editMode = false }: Props) => {
       </View>
     );
   };
+
+
+  
   // 渲染组件列表
   const renderComponents = () => {
     if (!components) {
@@ -128,8 +150,8 @@ export default ({ components, editMode = false }: Props) => {
         if (!c.data) {
           return undefined;
         }
-        // 视频号
-        if(c.type === 'channels'){
+        // 视频号视频
+        if(c.type === EComponentType.shipingVideo){
           return {
             component: c,
             renderer: (
@@ -166,34 +188,35 @@ export default ({ components, editMode = false }: Props) => {
         }
         
         // 联系人
-        if(c.type === "bluebook"){
-          return {
-            component: c,
-            renderer: (
-              <CardContacts
-                index={index}
-                key={c.id}
-                component={c}
-                components={components}
-                onSwitchChanged={handleSwitchChanged}
-                editMode={editMode}
-                onDelete={handleDelete}
-                onMove={handleSort}
-                onStyleChanged={changeStyle}
-                onClick={() =>
-                  editMode &&
-                  handleNavigate(
-                    c,
-                    `/pages/editor-pages/editor-link-contact/index`
-                  )
-                }
-              ></CardContacts>
-            ),
-          };
-        }
+        // if(c.type === "bluebook"){
+        //   return {
+        //     component: c,
+        //     renderer: (
+        //       <CardContacts
+        //         index={index}
+        //         key={c.id}
+        //         component={c}
+        //         components={components}
+        //         onSwitchChanged={handleSwitchChanged}
+        //         editMode={editMode}
+        //         onDelete={handleDelete}
+        //         onMove={handleSort}
+        //         onStyleChanged={changeStyle}
+        //         onClick={() =>
+        //           editMode &&
+        //           handleNavigate(
+        //             c,
+        //             `/pages/editor-pages/editor-link-contact/index`
+        //           )
+        //         }
+        //       ></CardContacts>
+        //     ),
+        //   };
+        // }
+        
         // 社交媒体组件
         if (c?.type && SocialMediaType[c?.type]) {
-          console.log(SocialMediaType[c?.type]);
+          
           const { value } = SocialMediaType[c.type];
           return {
             component: c,
@@ -281,8 +304,9 @@ export default ({ components, editMode = false }: Props) => {
         }
 
         
-
-        if (c.type === 'link') {
+        // 普通链接及公众号文章
+        if (c.type === 'link' || c.type === 'wechatArticle') {
+          
           return {
             component: c,
             renderer: (
@@ -299,9 +323,10 @@ export default ({ components, editMode = false }: Props) => {
                     if(editMode){
                       handleNavigate(
                         c,
-                        `/pages/editor-pages/editor-link/index`,
+                        `/pages/editor-pages/editor-link/index?linkType=${c.data.linkType}&title=${c.data.title}`,
                       )
                     }else{
+                      
                       showMediaLink(mediaItem, link, c)
                     }
                   }}
@@ -451,8 +476,9 @@ export default ({ components, editMode = false }: Props) => {
     }
     return componentsWithJSX.map((item) => item.renderer);
   };
-
+  
   return (
+    
     <>
       {currentMediaItem && (
         <PopupLinkCopyer

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

@@ -50,13 +50,13 @@ const Index: React.FC<Props> = ({
       Taro.navigateBack({
         delta: navDelta,
         complete: () => {
-          console.log(children);
+          
         },
       });
     } else {
       Taro.navigateBack({
         complete: () => {
-          console.log(children);
+          
         },
       });
     }

+ 1 - 1
src/components/popup-link-copyer/index.module.less

@@ -75,7 +75,7 @@
   overflow: hidden;
 }
 .copyButton{
-  color: #3d7d44;
+  color: var(--color-primary-dark);
   font-size: 12px;
   line-height: 20px;
   font-weight: 400;

+ 2 - 4
src/components/widgets/widget-map/index.tsx

@@ -1,6 +1,6 @@
 import { View, Map } from '@tarojs/components'
 import style from './index.module.less'
-import IconLocation from '@/components/icon/icon-location'
+
 import Taro from '@tarojs/taro';
 interface Props {
   children?: React.ReactChild |  React.ReactChild[];
@@ -31,9 +31,7 @@ const Index: React.FC<Props> = ({children, latitude, longitude, name = '', addre
   return (
     <View className='flex flex-col gap-16 px-16'>
       <View className={`flex items-center gap-8`}>
-        <View className={`icon-24 icon-box`}>
-          {IconLocation()}
-        </View>
+        <View className="component-icon-address"></View>
         <View className='flex-1 truncate'>
           {children}
         </View>

+ 22 - 11
src/consts/enum.ts

@@ -88,18 +88,29 @@ export enum EComponentType {
   tel = 'tel',
   bluebook = 'bluebook',
   wechat = 'wechat',
+  wechatArticle = 'wechatArticle',
   shiping = 'shiping',
-  tiktok = 'tiktok',
-  xiaohongshu = 'xiaohongshu',
-  kwai = 'kwai',
-  bilibili = 'bilibili',
-  qq = 'qq',
-  name = 'name',
-  comp = 'comp',
-  sina = 'sina',
-  green = 'green',
+  // tiktok = 'tiktok',
+  // xiaohongshu = 'xiaohongshu',
+  // kwai = 'kwai',
+  // bilibili = 'bilibili',
+  // qq = 'qq',
+  // name = 'name',
+  // comp = 'comp',
+  // sina = 'sina',
+  // green = 'green',
   shipingVideo = 'shipingVideo',
   miniProgram = 'miniProgram',
-  storeProduct = 'storeProduct',
-  storeHome = 'storeHome',
+  // storeProduct = 'storeProduct',
+  // storeHome = 'storeHome',
+}
+
+export enum EKnowlegeTypes {
+  text='text', // text文本文件
+  image='image', // image图片
+  video='video', // video视频文件
+  audio='audio', // audio音频文件
+  web='web',  // web链接类
+  other='other', //other其它
+  // text文本文件/image图片/video视频文件/audio音频文件/web链接类/other其它
 }

+ 43 - 42
src/consts/socialMedia.ts

@@ -13,48 +13,7 @@ export const SocialMediaType = {
 		color: '#FFF',
 		bgColor: '#9D733F',
 	},
-  tiktok: {
-		value: 'tiktok',
-		label: '抖音',
-		className: 'social-media-tiktok',
-		color: '#FFF',
-		bgColor: '#321C37',
-	},
-  xiaohongshu: {
-		value: 'xiaohongshu',
-		label: '小红书',
-		className: 'social-media-xiaohongshu',
-		color: '#FFF',
-		bgColor: '#F5486C',
-	},
-  kwai: {
-		value: 'kwai',
-		label: '快手',
-		className: 'social-media-kwai',
-		color: '#FFF',
-		bgColor: '#EC7047',
-	},
-  bilibili: {
-		value: 'bilibili',
-		label: '哔哩哔哩',
-		className: 'social-media-bilibili',
-		color: '#FFF',
-		bgColor: '#DF7791',
-	},
-  qq: {
-		value: 'qq',
-		label: 'QQ 空间',
-		className: 'social-media-qq',
-		color: '#FFF',
-		bgColor: '#EFCA32',
-	},
-  sina: {
-		value: 'sina',
-		label: '新浪微博',
-		className: 'social-media-sina',
-		color: '#FFF',
-		bgColor: '#FED85C',
-	},
+  
   shipingVideo: {
 		value: 'shipingVideo',
 		label: '视频号视频',
@@ -62,4 +21,46 @@ export const SocialMediaType = {
 		color: '#FFF',
 		bgColor: '#FED85C',
 	},
+	// tiktok: {
+	// 	value: 'tiktok',
+	// 	label: '抖音',
+	// 	className: 'social-media-tiktok',
+	// 	color: '#FFF',
+	// 	bgColor: '#321C37',
+	// },
+  // xiaohongshu: {
+	// 	value: 'xiaohongshu',
+	// 	label: '小红书',
+	// 	className: 'social-media-xiaohongshu',
+	// 	color: '#FFF',
+	// 	bgColor: '#F5486C',
+	// },
+  // kwai: {
+	// 	value: 'kwai',
+	// 	label: '快手',
+	// 	className: 'social-media-kwai',
+	// 	color: '#FFF',
+	// 	bgColor: '#EC7047',
+	// },
+  // bilibili: {
+	// 	value: 'bilibili',
+	// 	label: '哔哩哔哩',
+	// 	className: 'social-media-bilibili',
+	// 	color: '#FFF',
+	// 	bgColor: '#DF7791',
+	// },
+  // qq: {
+	// 	value: 'qq',
+	// 	label: 'QQ 空间',
+	// 	className: 'social-media-qq',
+	// 	color: '#FFF',
+	// 	bgColor: '#EFCA32',
+	// },
+  // sina: {
+	// 	value: 'sina',
+	// 	label: '新浪微博',
+	// 	className: 'social-media-sina',
+	// 	color: '#FFF',
+	// 	bgColor: '#FED85C',
+	// },
 }

+ 1 - 5
src/pages/agent/components/AgentWebsite/index.tsx

@@ -1,11 +1,7 @@
 import { View } from "@tarojs/components";
 import { useState } from "react";
-import CardList from "@/components/list/card-list";
-import CardListItem from "@/components/list/card-list-item";
-
-import IconArrow from "@/components/icon/icon-arrow";
-
 import Taro from "@tarojs/taro";
+
 import ComponentList from "@/components/component-list";
 import { useComponentStore } from "@/store/componentStore";
 export default function Index() {

+ 42 - 42
src/pages/component-library/components/comp-item/index.module.less

@@ -32,7 +32,7 @@
 }
 .compIconText{
   .compIcon();
-  background-image: url(https://cdn.wehome.cn/cmn/png/105/META-H8UK0IWU-LIGPDI0B88LDCAMAO6LN3-23CYVI2M-W61.png);
+  background-image: url(https://cdn.wehome.cn/cmn/png/43/META-H8UKVHWU-1JNUXQBKDFMDLDZZ7BUW3-7MZMM1CM-AV2.png);
 }
 .compIconLink{
   .compIcon();
@@ -60,50 +60,50 @@
 }
 .compIconMiniProgram{
   .compIcon();
-  background-image: url(https://cdn.wehome.cn/cmn/png/19/META-H8UKWHWU-KIWQFXN9CWIKI7PA148U3-ENWHSG4M-17.png);
+  background-image: url(https://cdn.wehome.cn/cmn/png/145/META-H8UKWHWU-2JNUAG2BARJF55VHU9QS3-MD1MM1CM-AU2.png);
 }
 
 
 
 .compIconWechat{
   .compIcon();
-  background-image: url(@wechatUrl);
+  background-image: url('https://cdn.wehome.cn/cmn/png/105/META-H8UKVHWU-1JNUXQBKDFMDLDZZ7BUW3-JHIIM1CM-8V2.png');
 }
 .compIconShiping{
   .compIcon();
-  background-image: url(@shipingLinkUrl);
-}
-.compIconTiktok{
-  .compIcon();
-  background-image: url(@tiktokUrl);
-}
-.compIconXiaohongshu{
-  .compIcon();
-  background-image: url(@xiaohongshuUrl);
-}
-.compIconKwai{
-  .compIcon();
-  background-image: url(@kwaiUrl);
-}
-.compIconBilibili{
-  .compIcon();
-  background-image: url(@bilibiliUrl);
-}
-.compIconQQ{
-  .compIcon();
-  background-image: url(@qqUrl);
-}
-.compIconSina{
-  .compIcon();
-  background-image: url(@sinaUrl);
-}
-.compIconGreen{
-  .compIcon();
-  background-image: url(https://cdn.wehome.cn/cmn/png/125/META-H8UK0IWU-LIGPDI0B88LDCAMAO6LN3-DM8VVI2M-S61.png);
-}
+  background-image: url('https://cdn.wehome.cn/cmn/png/38/META-H8UKVHWU-1JNUXQBKDFMDLDZZ7BUW3-7DLKM1CM-9V2.png');
+}
+// .compIconTiktok{
+//   .compIcon();
+//   background-image: url(@tiktokUrl);
+// }
+// .compIconXiaohongshu{
+//   .compIcon();
+//   background-image: url(@xiaohongshuUrl);
+// }
+// .compIconKwai{
+//   .compIcon();
+//   background-image: url(@kwaiUrl);
+// }
+// .compIconBilibili{
+//   .compIcon();
+//   background-image: url(@bilibiliUrl);
+// }
+// .compIconQQ{
+//   .compIcon();
+//   background-image: url(@qqUrl);
+// }
+// .compIconSina{
+//   .compIcon();
+//   background-image: url(@sinaUrl);
+// }
+// .compIconGreen{
+//   .compIcon();
+//   background-image: url(https://cdn.wehome.cn/cmn/png/125/META-H8UK0IWU-LIGPDI0B88LDCAMAO6LN3-DM8VVI2M-S61.png);
+// }
 .compIconShipingVideo{
   .compIcon();
-  background-image: url(@shipingUrl);
+  background-image: url('https://cdn.wehome.cn/cmn/png/133/META-H8UKWHWU-2JNUAG2BARJF55VHU9QS3-UWGJM1CM-9U2.png');
 }
 
 
@@ -116,14 +116,14 @@
   background-image: url(https://cdn.wehome.cn/cmn/png/237/META-H8UK0IWU-LIGPDI0B88LDCAMAO6LN3-ZQYTVI2M-R61.png);
 }
 
-.compIconStoreProduct{
-  .compIcon();
-  background-image: url(https://cdn.wehome.cn/cmn/png/144/META-H8UKXHWU-PIWQ5G6H7F9LO74FT7QR2-VH4RIJ4M-NC.png);
-}
-.compIconStoreHome{
-  .compIcon();
-  background-image: url(https://cdn.wehome.cn/cmn/png/242/META-H8UKXHWU-PIWQ5G6H7F9LO74FT7QR2-C4RRIJ4M-OC.png);
-}
+// .compIconStoreProduct{
+//   .compIcon();
+//   background-image: url(https://cdn.wehome.cn/cmn/png/144/META-H8UKXHWU-PIWQ5G6H7F9LO74FT7QR2-VH4RIJ4M-NC.png);
+// }
+// .compIconStoreHome{
+//   .compIcon();
+//   background-image: url(https://cdn.wehome.cn/cmn/png/242/META-H8UKXHWU-PIWQ5G6H7F9LO74FT7QR2-C4RRIJ4M-OC.png);
+// }
 
 
 

+ 15 - 5
src/pages/component-library/components/createComponentData.ts

@@ -8,7 +8,7 @@ export function createComponentData(type: EComponentType): Record<string, any> |
   }
   if(type === EComponentType.text){
     return {
-      text: '默认文本内容',
+      text: '点击编辑输入您的文本内容',
       layout: 'left'
     }
   }
@@ -18,7 +18,17 @@ export function createComponentData(type: EComponentType): Record<string, any> |
       layout: 'left',
       poster: '',
       linkType: '',
-      title: '默认链接',
+      text: '默认链接',
+    }
+  }
+  
+  if(type === EComponentType.wechatArticle){
+    return {
+      link: '',
+      layout: 'left',
+      poster: '',
+      linkType: 'weixinOfficialAccountArticle',
+      text: '公众号文章',
     }
   }
   if(type === EComponentType.tel){
@@ -48,7 +58,7 @@ export function createComponentData(type: EComponentType): Record<string, any> |
       layout: 'mini',
     }
   }
-  // 微信公众号
+  // 微信公众号(文章)
   // wx.openOfficialAccountProfile 
   if(type === EComponentType.wechat){
     return  {
@@ -64,7 +74,7 @@ export function createComponentData(type: EComponentType): Record<string, any> |
     return  {
       layout: 'left',
       value: '',
-      text: '微信公众号',
+      text: '视频号',
     }
   }
   // 小程序
@@ -72,7 +82,7 @@ export function createComponentData(type: EComponentType): Record<string, any> |
   if(type === EComponentType.miniProgram){
     return  {
       value: {
-        name: '',
+        name: '默认小程序',
         shortLink: '',
         poster: '',
       },

+ 11 - 7
src/pages/component-library/index.tsx

@@ -2,7 +2,7 @@ import { View } from "@tarojs/components";
 import style from "./index.module.less";
 import CompItem, { CompType } from "./components/comp-item/compItem";
 import Taro from "@tarojs/taro";
-import { SocialMediaType } from "@/consts/socialMedia";
+
 import { useComponentStore } from "@/store/componentStore";
 import { generateRandomId } from '@/utils/index'
 
@@ -21,14 +21,14 @@ type TWidget = {
   text: string,
 }
 export default () => {
-  const {insertComponent} = useComponentStore()
+  const { loading, insertComponent, setLoading} = useComponentStore()
   const { agent, editAgentWebsite, fetchAgent } = useAgentStore()
   
 
 
   const [commonWidget, setCommonWidget] = useState<TWidget[]>([
     {type: EComponentType.title , typeStyle: CompType.title, num: 0, text: '章节标题'},
-    {type: EComponentType.text , typeStyle: CompType.link, num: 0, text: '文本内容'},
+    {type: EComponentType.text , typeStyle: CompType.text, num: 0, text: '文本内容'},
     {type: EComponentType.link , typeStyle: CompType.link, num: 0, text: '链接'},
     {type: EComponentType.media , typeStyle: CompType.image, num: 0, text: '图片/视频'},
     {type: EComponentType.tel , typeStyle: CompType.tel, num: 0, text: '电话'},
@@ -37,7 +37,7 @@ export default () => {
   ])
   
   const [wechatWidget, setWechatWidget] = useState<TWidget[]>([
-    {type: EComponentType.wechat , typeStyle: CompType.wechat, num: 0, text: '微信公众号'},
+    {type: EComponentType.wechatArticle , typeStyle: CompType.wechat, num: 0, text: '微信公众号文章'},
     {type: EComponentType.shiping , typeStyle: CompType.shiping, num: 0, text: '视频号'},
     {type: EComponentType.miniProgram , typeStyle: CompType.miniProgram, num: 0, text: '小程序'},
     {type: EComponentType.shipingVideo , typeStyle: CompType.shipingVideo, num: 0, text: '视频号视频'},
@@ -90,6 +90,9 @@ export default () => {
   }
 
   const handleSubmit = async () => {
+    if(loading){
+      return
+    }
     const a = getComponents(commonWidget) as TComponentItem[]
     const b = getComponents(wechatWidget) as TComponentItem[]
     
@@ -102,19 +105,20 @@ export default () => {
     if(!agent?.agentId){
       return 
     }
-    
+    setLoading(true)
     const inserted  = await insertComponent(results)
+    setLoading(false)
     if(!inserted){
       return 
     }
-    
+    console.log(inserted)
     const result = await editAgentWebsite(agent.agentId, inserted)
     if(result){
       await fetchAgent(agent.agentId)
       Taro.navigateBack()
     }
   }
-
+  
   return (
     <View className={`global-gray-bg ${style.container}`}>
       <View className={style.compComtainer}>

+ 30 - 24
src/pages/editor-pages/editor-channels/index.tsx

@@ -6,31 +6,34 @@ import NavBarNormal from "@/components/nav-bar-normal/index";
 import Popup from "@/components/popup/popup";
 import style from './index.module.less'
 import editorStyle from "../editor.module.less";
-import { useCharacterStore } from "@/store/characterStore";
+
 import { useComponentStore } from "@/store/componentStore";
 import WemetaInput from "@/components/wemeta-input/index";
 import { uploadImage } from "@/utils/http";
+import { EComponentType } from "@/consts/enum";
+import BottomBar from "@/components/BottomBar";
 
 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);
+  if(!currentComponent){
+    return <></>
+  }
+  
   const { saveComponent } = useComponentStore();
   const loading = useComponentStore((state) => state.loading);
-  const { value } = currentComponent?.data ?? {};
+  const data = currentComponent?.data;
   const [shipingValue, setShipingValue] = useState<{
     accountId: string;
     videoId: string;
     desc: string;
     poster: string;
-  }>(value ?? {});
+  }>(data.value ?? {});
 
   const [show, setShow] = useState(false);
   const [tipsType, setTipsType] = useState(1);
 
-  const handleSave = async () => {
+  const handleSubmit = async () => {
     if (loading) {
       return;
     }
@@ -41,21 +44,18 @@ export default function Index() {
       data: {
         value: shipingValue,
         layout: 'mini',
+        id: data.id,
+        index: data.index,
       },
       enabled: currentComponent?.enabled ?? true,
-      id: currentComponent?.id,
-      name: currentComponent?.name ?? "视频号",
-      characterProfileId:
-        currentComponent?.characterProfileId ?? character?.profileId,
-      type: "channels",
+      type: EComponentType.shipingVideo,
     };
     console.log(c);
     await saveComponent(c);
+    Taro.navigateBack()
   };
 
-  const handleNavBack = async () => {
-    await handleSave();
-  };
+  
 
   const setValueByKey = (key: string, v: string) => {
     shipingValue[key] = v;
@@ -82,8 +82,8 @@ export default function Index() {
           success: async (cropRes) => {
             const path = cropRes.tempFilePath;
             const res = await uploadImage(path);
-            if (res?.code === 0 && res.data) {
-              setValueByKey('poster', res.data)
+            if (res?.publicUrl) {
+              setValueByKey('poster', res.publicUrl)
             }
           },
         });
@@ -126,7 +126,7 @@ export default function Index() {
       return (
         <>
           <View>
-            🌟 <Text className="font-medium">小绿提示:</Text>
+            🌟 <Text className="font-medium">小蓝本提示:</Text>
             <Text>需要登录微信官方视频号助手平台,首页就找到视频号ID。</Text>
           </View>
           <Image
@@ -140,7 +140,7 @@ export default function Index() {
     return (
       <>
         <View>
-          🌟 <Text className="font-medium">小绿提示:</Text>
+          🌟 <Text className="font-medium">小蓝本提示:</Text>
           <Text>
             需要登录微信官方视频号助手平台,找到目标视频,点击视频右侧的分享按钮查看。
           </Text>
@@ -158,14 +158,11 @@ export default function Index() {
   return (
     <PageCustom>
       <NavBarNormal
-        backText="保存"
-        navDelta={deltaNum}
-        onNavBack={handleNavBack}
       >
         视频号信息
       </NavBarNormal>
       <View className="flex flex-col items-center w-full pt-20">
-        <View className={editorStyle.container}>
+        <View className="px-16 w-full">
           <View className={editorStyle.formContainer}>
             <View className={editorStyle.formItem}>
               <View className={editorStyle.formItemLabel}>
@@ -218,6 +215,15 @@ export default function Index() {
         </View>
       </View>
 
+      <BottomBar>
+        <View
+          className="button-rounded button-primary flex-1"
+          onClick={handleSubmit}
+        >
+          保存
+        </View>
+      </BottomBar>
+
       <Popup
         title={tipsType === 1 ? "获取视频号ID" : "获取视频号视频ID"}
         show={show}

+ 70 - 107
src/pages/editor-pages/editor-link-social/index.tsx

@@ -1,146 +1,109 @@
 import { useState } from "react";
 import { View, Text, Image } from "@tarojs/components";
-import Taro, { useUnload } from '@tarojs/taro'
+import Taro, { useRouter, useUnload } from "@tarojs/taro";
 import PageCustom from "@/components/page-custom/index";
 import NavBarNormal from "@/components/nav-bar-normal/index";
-import WemetaTabs from "@/components/wemeta-tabs/index";
+
 import editorStyle from "../editor.module.less";
-import WemetaRadioGroup from "@/components/wemeta-radio-group/index";
 import WemetaTextarea from "@/components/wemeta-textarea/index";
 import WemetaInput from "@/components/wemeta-input/index";
-import { useCharacterStore } from '@/store/characterStore'
 import { useComponentStore } from "@/store/componentStore";
 import { SocialMediaType } from "@/consts/socialMedia";
-
+import BottomBar from "@/components/BottomBar";
+import { EComponentType } from "@/consts/enum";
 export default function Index() {
-  const $instance = Taro.getCurrentInstance()
-  const {mediaType, id} = $instance.router?.params ?? {}
-  const deltaNum = id ? 1:2;
-  let mt = mediaType ?? 'link'
+  const router = useRouter();
+  // 社交媒体类型
+  const { mediaType } = router.params;
+  let mt = mediaType ?? "link"; 
   const defaultLabel = `${SocialMediaType[mt]?.label} 链接`;
-  let currentComponent = useComponentStore((state)=>  state.currentComponent);
-  const character = useCharacterStore((state)=> state.character);
-  const { saveComponent } = useComponentStore();
-  const loading = useComponentStore((state)=> state.loading);
-  const {link, text, layout} = currentComponent?.data ?? {};
-  const [linkValue, setLinkValue] = useState( link ?? '');
-  const [linkText, setLinkText] = useState(text?? '');
-  const [radioValue, setRadioValue] = useState(layout ?? 'center')
-  
-  // 是否为视频号, 视频号需要特殊提示
-  // 如果后期还有更特殊需求,抽取单独页面
-  const isShiping = SocialMediaType[mt]?.value === 'shiping'
-
-
-  const onRadioChange = (value: string) => {
-    setRadioValue(value)
-    return false;
-  };
-
-  const handleNavBack = async () => {
-    await handleSave()
+  let currentComponent = useComponentStore((state) => state.currentComponent);
+  if (!currentComponent) {
+    return <></>;
   }
 
-  
-  
-  const radioList = [
-    {
-      text: "居中",
-      value: "center",
-      checked: false,
-    },
-    {
-      text: "左对齐",
-      value: "left",
-      checked: false,
-    },
-  ];
+  const { saveComponent } = useComponentStore();
+  const loading = useComponentStore((state) => state.loading);
+  const data = currentComponent?.data ?? {};
+  const { value, text, layout } = data;
+  const [linkValue, setLinkValue] = useState(value ?? "");
+  const [linkText, setLinkText] = useState(text ?? "");
 
-  const tabList = [
-    {
-      key: "1",
-      label: "内容",
-      children: <View className={`flex flex-col gap-6`}>
-      <View className="flex gap-4 items-center">
-        <View className={editorStyle.formLabel}>链接描述</View>
-        <View className={editorStyle.formLabelRequired}>(选填)</View>
-      </View>
-      <WemetaInput
-        value={linkText}
-        onInput={(value: string) => setLinkText(value)}
-        placeholder="请输入..."
-      />
-    </View>,
-    },
-    {
-      key: "2",
-      label: "版式",
-      children: (
-        <WemetaRadioGroup
-          radioList={radioList}
-          value={radioValue}
-          onChange={onRadioChange}
-        ></WemetaRadioGroup>
-      ),
-    },
-  ];
+  // 是否为视频号, 视频号需要特殊提示
+  // 如果后期还有更特殊需求,抽取单独页面
+  const isShiping = SocialMediaType[mt]?.value === "shiping";
 
-  const handleSave = async () => {    
-    if(!linkValue.length && !linkText.length){
-      return
+  const handleSubmit = async () => {
+    if (!data?.id) {
+      return;
     }
-    if(loading){
+    if (loading) {
       return;
     }
     const c = {
       data: {
-        link: linkValue,
+        value: linkValue,
         text: linkText,
-        layout: radioValue,
+        layout: layout ?? '',
+        id: data.id,
+        index: data.index,
       },
       enabled: currentComponent?.enabled ?? true,
-      id: currentComponent?.id,
-      name: currentComponent?.name ?? defaultLabel,
-      characterProfileId: currentComponent?.characterProfileId ?? character?.profileId,
-      type: mediaType,
+      type: mediaType as EComponentType,
     };
 
-    console.log(c)
-    
-    await saveComponent(c)
-  };
+    console.log(c);
 
-
-  
-  
+    await saveComponent(c);
+    Taro.navigateBack();
+  };
 
   return (
     <PageCustom bgColor="global-light-green-bg">
-      <NavBarNormal backText="保存" navDelta={deltaNum} onNavBack={handleNavBack}>{defaultLabel}</NavBarNormal>
-      <View className="flex flex-col items-center w-full">
-        <View className={editorStyle.container}>
+      <NavBarNormal>{defaultLabel}</NavBarNormal>
+      <View className="flex flex-col items-center gap-12 w-full px-16 pb-120">
+        <View className="w-full">
           <WemetaTextarea
             value={linkValue}
             onInput={(value: string) => setLinkValue(value)}
             placeholder="填写链接"
-          >
-          </WemetaTextarea>
-          {isShiping && 
-            <View className="flex flex-col gap-10 rounded-20 p-12 bg-white mt-48">
-              <View className="text-gray-65">
-                🌟 <Text className="font-medium">小绿提示:</Text>
-                <Text>获取视频号ID的需要登录视频号助手,在首页可以查看自己的视频号ID</Text>
-              </View>
-              <Image
-                className="w-full"
-                mode="widthFix"
-                src="https://cdn.wehome.cn/cmn/png/196/META-H8UK0IWU-9NNPJOLLD1MU95DE0NMA3-8W1EZW2M-2B1.png"
-              ></Image>
+          ></WemetaTextarea>
+        </View>
+        {isShiping && (
+          <View className="flex flex-col gap-10 rounded-20 p-12 bg-white mt-48">
+            <View className="text-gray-65">
+              🌟 <Text className="font-medium">小蓝本提示:</Text>
+              <Text>
+                获取视频号ID的需要登录视频号助手,在首页可以查看自己的视频号ID
+              </Text>
             </View>
-          }
-          <WemetaTabs list={tabList} current="1"></WemetaTabs>
+            <Image
+              className="w-full"
+              mode="widthFix"
+              src="https://cdn.wehome.cn/cmn/png/196/META-H8UK0IWU-9NNPJOLLD1MU95DE0NMA3-8W1EZW2M-2B1.png"
+            ></Image>
+          </View>
+        )}
+        <View className={`flex flex-col gap-6 w-full`}>
+          <View className="flex gap-4 items-center">
+            <View className={editorStyle.formLabel}>链接描述</View>
+            <View className={editorStyle.formLabelRequired}>(选填)</View>
+          </View>
+          <WemetaInput
+            value={linkText}
+            onInput={(value: string) => setLinkText(value)}
+            placeholder="请输入..."
+          />
         </View>
       </View>
+      <BottomBar>
+        <View
+          className="button-rounded button-primary flex-1"
+          onClick={handleSubmit}
+        >
+          保存
+        </View>
+      </BottomBar>
     </PageCustom>
   );
 }

+ 54 - 0
src/pages/editor-pages/editor-link/components/LinkPicker/LinkPicker.tsx

@@ -0,0 +1,54 @@
+import { useEffect, useState } from "react";
+import { View, Text, Image } from "@tarojs/components";
+import style from './index.module.less'
+import Popup from "@/components/popup/popup";
+import WemetaTabs from "@/components/wemeta-tabs/index";
+import ViewStyleList from '@/pages/knowledge/components/view-style/ViewStyleList'
+import { EKnowlegeTypes } from "@/consts/enum";
+
+export interface IProps {
+  show: boolean
+  setShow: (show: boolean) => void
+}
+export default function Index({show, setShow}: IProps) {
+
+  
+  
+  useEffect(()=> {
+
+  }, [])
+
+
+  const tabList = [
+    {
+      key: "1",
+      label: "个人",
+      children: (
+        <>
+          <View className={style.tabContainer}>
+            <ViewStyleList types={[EKnowlegeTypes.web]}></ViewStyleList>
+          </View>
+        </>
+      ),
+    },
+    {
+      key: "2",
+      label: "企业",
+      children: (
+        <>
+          <View className="pt-12">
+            <View className={style.tabContainer}>
+              ent
+            </View>
+          </View>
+        </>
+      ),
+    },
+  ];
+
+  return (
+    <Popup setShow={setShow} show={show} title="知识库-链接">
+      <WemetaTabs current="1" list={tabList}></WemetaTabs>
+    </Popup>
+  );
+}

+ 3 - 0
src/pages/editor-pages/editor-link/components/LinkPicker/index.module.less

@@ -0,0 +1,3 @@
+.tabContainer{
+  height: 200px;
+}

+ 30 - 9
src/pages/editor-pages/editor-link/index.tsx

@@ -5,12 +5,13 @@ import PageCustom from "@/components/page-custom/index";
 import NavBarNormal from "@/components/nav-bar-normal/index";
 import WemetaTextarea from "@/components/wemeta-textarea/index";
 import WemetaInput from "@/components/wemeta-input/index";
-
+import Popup from "@/components/popup/popup";
+import WemetaTabs from "@/components/wemeta-tabs/index";
 import editorStyle from "../editor.module.less";
 import style from "./index.module.less";
 
 import BottomBar from "@/components/BottomBar";
-
+import LinkPick from './components/LinkPicker/LinkPicker'
 import { useComponentStore } from "@/store/componentStore";
 import { uploadImage } from "@/utils/http";
 import { EComponentType } from "@/consts/enum";
@@ -29,6 +30,8 @@ export default function Index() {
   const [linkValue, setLinkValue] = useState(link ?? "");
   const [linkText, setLinkText] = useState(text ?? "");
   const [linkPoster, setLinkPoster] = useState(poster ?? "");
+
+  const [showPopup, setShowPopup] = useState(false);
   
 
   const handleSubmit = async () => {
@@ -71,6 +74,10 @@ export default function Index() {
     });
   };
 
+  const showKnowlegePopup = ()=> {
+    setShowPopup(true)
+  }
+
   const renderPoster = (src?: string) => {
     if (src) {
       return (
@@ -94,22 +101,34 @@ export default function Index() {
     );
   };
 
+
+  
+
   return (
     <PageCustom>
       <NavBarNormal>链接</NavBarNormal>
       <View className="flex flex-col items-center w-full">
         <View className="px-16 w-full pb-120">
-          <WemetaTextarea
-            value={linkValue}
-            onInput={(value: string) => setLinkValue(value)}
-            placeholder="请输入URL..."
-          ></WemetaTextarea>
+          
 
           <View className={editorStyle.formContainer}>
             <View className={editorStyle.formItem}>
               <View className={editorStyle.formItemLabel}>
-                <View className={editorStyle.formLabel}>链接描述</View>
-                <View className={editorStyle.formLabelRequired}>(选填)</View>
+                <View className="flex flex-1 items-center">
+                  <View className={editorStyle.formLabel}>链接地址</View>
+                  <View className={editorStyle.formLabelRequired}>*</View>
+                </View>
+                <View className="text-primary" onClick={showKnowlegePopup}>知识库导入</View>
+              </View>
+              <WemetaTextarea
+                value={linkValue}
+                onInput={(value: string) => setLinkValue(value)}
+                placeholder="请输入URL..."
+              ></WemetaTextarea>
+            </View>
+            <View className={editorStyle.formItem}>
+              <View className={editorStyle.formItemLabel}>
+                <View>链接描述<Text className="text-gray-45">(选填)</Text></View>
               </View>
               <WemetaInput
                 value={linkText}
@@ -136,6 +155,8 @@ export default function Index() {
           <View className="button-rounded button-primary flex-1" onClick={handleSubmit}>保存</View>
         </BottomBar>
       </View>
+      <LinkPick setShow={setShowPopup} show={showPopup}></LinkPick>
+      
     </PageCustom>
   );
 }

+ 43 - 38
src/pages/editor-pages/editor-mini-program/index.tsx

@@ -1,4 +1,4 @@
-import { useState } from "react";
+import { useMemo, useState, memo } from "react";
 import { View, Image,Text } from "@tarojs/components";
 import Taro from '@tarojs/taro'
 import PageCustom from "@/components/page-custom/index";
@@ -7,23 +7,26 @@ import WemetaInput from "@/components/wemeta-input/index";
 import Popup from "@/components/popup/popup";
 import style from './index.module.less'
 import editorStyle from "../editor.module.less";
-import { useCharacterStore } from '@/store/characterStore'
+import BottomBar from "@/components/BottomBar";
+
 import { useComponentStore } from "@/store/componentStore";
 import { uploadImage } from "@/utils/http";
+import { EComponentType } from "@/consts/enum";
 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);
+  if(!currentComponent){
+    return <></>
+  }
+  
   const { saveComponent } = useComponentStore();
   const loading = useComponentStore((state)=> state.loading);
-  const {value, layout} = currentComponent?.data ?? {};
+  const data = currentComponent.data;
   const [linkValue, setLinkValue] = useState<{
     name: string;
     shortLink: string;
     poster: string;
-  }>(value ?? {});
+  }>(data.value);
   const [show, setShow] = useState(false);
   
   const setValueByKey = (key: string, v: string) => {
@@ -33,21 +36,11 @@ export default function Index() {
     });
   };
 
-  const handleSave = async () => {    
-    if(!linkValue.shortLink){
-      // Taro.showToast({
-      //   title: "请输入小程序链接",
-      //   icon: "none"
-      // })
+  const handleSubmit = async () => {    
+    
+    if(!data?.id){
       return
     }
-    // if(!linkValue.poster){
-    //   Taro.showToast({
-    //     title: "未上传小程序封面",
-    //     icon: "none"
-    //   })
-    //   return
-    // }
     if(loading){
       return;
     }
@@ -55,32 +48,34 @@ export default function Index() {
       data: {
         value: linkValue,
         layout: 'full',
+        id: data.id,
+        index: data.index,
       },
       enabled: currentComponent?.enabled ?? true,
-      id: currentComponent?.id,
-      name: currentComponent?.name ?? "小程序链接",
-      characterProfileId: currentComponent?.characterProfileId ?? character?.profileId,
-      type: "miniProgram",
+      type: EComponentType.miniProgram,
     };
     
-    await saveComponent(c)
+    const result = await saveComponent(c)
+    if(result){
+      Taro.navigateBack()
+    }
   };
 
 
   
 
-  const handleNavBack = async () => {
-    await handleSave()
-  }
+  
   
 
-  const renderPoster = (src?: string)=> {
+  const RenderPoster =  memo(({src}:{src: string})=> {
     if(src){
+      console.log('render image')
       return (
-        <View className="w-full overflow-hidden">
+        <View className="overflow-hidden">
           <Image
             className="w-160 h-160"
             mode="widthFix"
+            style="height:auto"
             src={src}
           ></Image>
         </View>
@@ -94,7 +89,12 @@ export default function Index() {
         <View className="text-gray-45 text-12 leading-20 text-center">建议上传1:1标准尺寸图</View>
       </>
     )
-  }
+  })
+
+  // useMemo 麻烦...
+  const RenderPosterCached = useMemo(()=> {
+    return <RenderPoster src={linkValue.poster}></RenderPoster>
+  }, [linkValue.poster])
   
   const handleAddPoster = () => {
     Taro.chooseImage({
@@ -109,8 +109,8 @@ export default function Index() {
           success: async (cropRes) => {
             const path = cropRes.tempFilePath;
             const res = await uploadImage(path);
-            if (res?.code === 0 && res.data) {
-              setValueByKey('poster', res.data)
+            if (res?.publicUrl) {
+              setValueByKey('poster', res.publicUrl)
             }
           },
         });
@@ -122,7 +122,7 @@ export default function Index() {
     return (
       <>
         <View>
-          🌟 <Text className="font-medium">小绿提示:</Text>
+          🌟 <Text className="font-medium">小蓝本提示:</Text>
           <Text>打开小程序主页 - 顶部更多操作/评分入口 - 复制链接</Text>
         </View>
         <Image
@@ -136,9 +136,9 @@ export default function Index() {
 
   return (
     <PageCustom>
-      <NavBarNormal backText="保存" navDelta={deltaNum} onNavBack={handleNavBack}>小程序链接</NavBarNormal>
+      <NavBarNormal>小程序链接</NavBarNormal>
       <View className="flex flex-col items-center w-full">
-        <View className={editorStyle.container}>
+        <View className="px-16 pt-12 pb-120 w-full">
         <View className={editorStyle.formContainer}>
             <View className={editorStyle.formItem}>
               <View className={editorStyle.formItemLabel}>
@@ -169,13 +169,18 @@ export default function Index() {
                 <View className="flex-1">封面图 <Text className="text-gray-45">(选填)</Text></View>
               </View>
               <View className={`${style.coverContainer}`} onClick={handleAddPoster}>
-                {renderPoster(linkValue.poster)}
+                {RenderPosterCached}
               </View>
             </View>
             
           </View>
         </View>
       </View>
+
+      <BottomBar>
+          <View className="button-rounded button-primary flex-1" onClick={handleSubmit}>保存</View>
+        </BottomBar>
+
       <Popup
         title='获取小程序链接'
         show={show}

+ 20 - 24
src/pages/editor-pages/editor.module.less

@@ -75,29 +75,25 @@
   line-height: 22px;
 }
 
-// .transitionBottom{
-//   transition: bottom 0.2s linear;
-// }
-
 
-// .formInputContainer{
-//   padding: 12px 10px;
-//   border-radius: 20px;
-//   background-color: white;
-// }
+.formInputContainer{
+  padding: 12px 10px;
+  border-radius: 20px;
+  background-color: white;
+}
 
-// .formLabel{
-//   color: #000;
-//   font-size: 14px;
-//   font-style: normal;
-//   font-weight: 500;
-//   line-height: 28px; /* 183.333% */
-// }
-// .formLabelRequired{
-//   color: rgba(0, 0, 0, 0.45);
-//   font-family: "PingFang SC";
-//   font-size: 14px;
-//   font-style: normal;
-//   font-weight: 500;
-//   line-height: 28px;
-// }
+.formLabel{
+  color: #000;
+  font-size: 14px;
+  font-style: normal;
+  font-weight: 500;
+  line-height: 28px; /* 183.333% */
+}
+.formLabelRequired{
+  color: rgba(238, 73, 73, 1);
+  font-family: "PingFang SC";
+  font-size: 14px;
+  font-style: normal;
+  font-weight: 500;
+  line-height: 28px;
+}

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

@@ -1,4 +1,3 @@
-
 import PageCustom from "@/components/page-custom/index";
 import { View,Image } from "@tarojs/components";
 import { useEffect, useState } from "react";

+ 11 - 2
src/pages/knowledge/components/view-style/ViewStyleList.tsx

@@ -10,9 +10,15 @@ import Taro from "@tarojs/taro";
 
 import { useKnowledgeStore } from "@/store/knowledge";
 import type { TKnowledgeItem } from "@/types/knowledge";
+import { EKnowlegeTypes } from "@/consts/enum";
+export interface IProps {
+  types?: EKnowlegeTypes[]
+}
+const Index = ({types}: IProps) => {
+  
+  const { listItems, listScrollTop, loadMoreList, initLoadList, setListTypes } = useKnowledgeStore();
 
-const Index = () => {
-  const { listItems, listScrollTop, loadMoreList, initLoadList } = useKnowledgeStore();
+  
 
   const onScrollToUpper = async () => {
     console.log('toUpper')
@@ -20,6 +26,9 @@ const Index = () => {
   }
 
   useEffect(()=> {
+    if(types){
+      setListTypes(types)
+    }
     initLoadList()
   }, [])
 

+ 10 - 11
src/pages/member/components/list-row-auth-phone/index.tsx

@@ -1,12 +1,10 @@
 import { View } from "@tarojs/components";
 import ListRow from "@/components/list/list-row";
 import { useUserStore } from "@/store/userStore";
-import { EBindKind } from "@/consts/enum";
-import AuthPhone from '@/components/auth-phone/index'
+
 
 export default () => {
-  const { fetchUser } = useUserStore();
-  const user = useUserStore((state) => state.user);
+  
   const handleGetPhoneNumber = async (
     phone: string
   ) => {
@@ -17,14 +15,15 @@ export default () => {
 
   const renderRight = () => {
 
-    if (user?.phone) {
-      // 包含了区号,提取后11位手机号
-      return <View className="text-gray-45 text-14 font-normal">{user.phone.slice(-11)}</View>;
-    }
+    return <View>hello</View>
+    // if (user?.phone) {
+    //   // 包含了区号,提取后11位手机号
+    //   return <View className="text-gray-45 text-14 font-normal">{user.phone.slice(-11)}</View>;
+    // }
 
-    return (
-      <AuthPhone bindKind={EBindKind.WechatPhone} getPhoneNumber={handleGetPhoneNumber}></AuthPhone>
-    );
+    // return (
+    //   <AuthPhone bindKind={EBindKind.WechatPhone} getPhoneNumber={handleGetPhoneNumber}></AuthPhone>
+    // );
   };
 
   return (

+ 0 - 55
src/pages/page/components/avatar-magic-style/index.module.less

@@ -1,55 +0,0 @@
-.colorItem {
-  box-sizing: border-box;
-  width: 45px;
-  height: 45px;
-  border: 3px solid transparent;
-}
-
-.colorItemActived {
-  .colorItem();
-  border: 3px solid #000;
-}
-
-.tabContent{
-  margin-top: 24px;
-  min-height: 360px;
-  overflow-y: auto;
-  padding-bottom: 140px;
-}
-
-.bgItem {
-  position: relative;
-  box-sizing: border-box;
-  width: 109px;
-  height: 192px;
-  border-radius: 10px;  
-  overflow: hidden;
-  background: white url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAUAAAAFACAYAAADNkKWqAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAATXSURBVHgB7d2hkeVQEARB6UJ8/Tfz00d0RrRYZVrQqGLY3Oec9/rQ7/e7vvT393d9yb6NfRv7Nl/v+3cBRAkgkCWAQJYAAlkCCGQJIJAlgECWAAJZAghkCSCQJYBAlgACWQIIZAkgkCWAQJYAAlkCCGQJIJAlgEDW40fBxr6NfRv7Ni5AIEsAgSwBBLIEEMgSQCBLAIEsAQSyBBDIEkAgSwCBLAEEsgQQyBJAIEsAgSwBBLIEEMgSQCBLAIEsAQSy7nPOe33Ij4KNfRv7NrV9LkAgSwCBLAEEsgQQyBJAIEsAgSwBBLIEEMgSQCBLAIEsAQSyBBDIEkAgSwCBLAEEsgQQyBJAIEsAgSwBBLIePwo29m3s29i3cQECWQIIZAkgkCWAQJYAAlkCCGQJIJAlgECWAAJZAghkCSCQJYBAlgACWQIIZAkgkCWAQJYAAlkCCGQJIJB1n3Pe60N+FGzs29i3qe1zAQJZAghkCSCQJYBAlgACWQIIZAkgkCWAQJYAAlkCCGQJIJAlgECWAAJZAghkCSCQJYBAlgACWQIIZAkgkPX4UbCxb2Pfxr6NCxDIEkAgSwCBLAEEsgQQyBJAIEsAgSwBBLIEEMgSQCBLAIEsAQSyBBDIEkAgSwCBLAEEsgQQyBJAIEsAgaz7nPNeH/KjYGPfxr5NbZ8LEMgSQCBLAIEsAQSyBBDIEkAgSwCBLAEEsgQQyBJAIEsAgSwBBLIEEMgSQCBLAIEsAQSyBBDIEkAgSwCBrMePgo19G/s29m1cgECWAAJZAghkCSCQJYBAlgACWQIIZAkgkCWAQJYAAlkCCGQJIJAlgECWAAJZAghkCSCQJYBAlgACWQIIZN3nnPf6kB8FG/s29m1q+1yAQJYAAlkCCGQJIJAlgECWAAJZAghkCSCQJYBAlgACWQIIZAkgkCWAQJYAAlkCCGQJIJAlgECWAAJZAghkPX4UbOzb2Lexb+MCBLIEEMgSQCBLAIEsAQSyBBDIEkAgSwCBLAEEsgQQyBJAIEsAgSwBBLIEEMgSQCBLAIEsAQSyBBDIEkAg6z7nvNeH/CjY2Lexb1Pb5wIEsgQQyBJAIEsAgSwBBLIEEMgSQCBLAIEsAQSyBBDIEkAgSwCBLAEEsgQQyBJAIEsAgSwBBLIEEMgSQCDr8aNgY9/Gvo19GxcgkCWAQJYAAlkCCGQJIJAlgECWAAJZAghkCSCQJYBAlgACWQIIZAkgkCWAQJYAAlkCCGQJIJAlgECWAAJZ9znnvT7kR8HGvo19m9o+FyCQJYBAlgACWQIIZAkgkCWAQJYAAlkCCGQJIJAlgECWAAJZAghkCSCQJYBAlgACWQIIZAkgkCWAQJYAAlmPHwUb+zb2bezbuACBLAEEsgQQyBJAIEsAgSwBBLIEEMgSQCBLAIEsAQSyBBDIEkAgSwCBLAEEsgQQyBJAIEsAgSwBBLIEEMi6zznv9SE/Cjb2bezb1Pa5AIEsAQSyBBDIEkAgSwCBLAEEsgQQyBJAIEsAgSwBBLIEEMgSQCBLAIEsAQSyBBDIEkAgSwCBLAEEsgQQyHr8KNjYt7FvY9/GBQhkCSCQJYBAlgACWQIIZAkgkCWAQJYAAlkCCGQJIJAlgECWAAJZAghkCSCQJYBAlgACWQIIZAkgkCWAQNZ//TegmFjB2HgAAAAASUVORK5CYII=) no-repeat center;
-}
-.bgItemAddButton{
-  .bgItem();
-  background: #F5F6F7;
-}
-.bgItemActived{
-  .bgItem();
-  border: 3px solid #000;
-}
-.bgItemBlank{
-  .bgItem();
-  background: #F5F6F7;
-  // border: 2px solid ;
-  // &::after{
-  //   content: "";
-  //   position: absolute;
-  //   left: 50%;
-  //   top: 0;
-  //   margin-left: -1px;
-  //   width: 1px;
-  //   background-color: red;
-  //   height: 100%;
-  //   box-sizing: border-box;
-  //   transform-origin: center center;
-  //   transform:rotateZ(28deg) scale(1.414);
-  // }
-  
-}

+ 0 - 61
src/pages/page/components/avatar-magic-style/index.tsx

@@ -1,61 +0,0 @@
-import Popup from "@/components/popup/popup/index";
-import style from "./index.module.less";
-import { View, Image, ITouchEvent, ScrollView } from "@tarojs/components";
-import WemetaTabs from "@/components/wemeta-tabs/index";
-import { useEffect, useState } from "react";
-import Taro from "@tarojs/taro";
-import { uploadImage } from "@/utils/http";
-import { TEntityAsset, type TMediaType } from "@/types/index";
-import { deleteAsset, listAssets } from "@/service/asset";
-import { EAssetScene } from "@/consts/enum";
-import { useCharacterStore, useCurrentCharacter } from "@/store/characterStore";
-
-export interface IProps {
-  show: boolean;
-  setShow: (show: boolean) => void;
-}
-export default function Index({ show, setShow }: IProps) {
-  const { saveCharacter } = useCharacterStore();
-  const character = useCurrentCharacter();
-  
-  
-
-  
-
-  
-   
-  
-
-  const tabList = [
-    {
-      key: "1",
-      label: "模板",
-      children: (
-        <View className={style.tabContent}>
-          <View className={`grid grid-cols-6 gap-x-12 gap-y-24 box-border`}>
-            风格化列表
-          </View>
-        </View>
-      ),
-    },
-    {
-      key: "2",
-      label: '我的',
-      children: (
-        <View className={`pb-68 ${style.tabContent}`}>
-          我的头像 {character?.avatar}
-        </View>
-      ),
-    },
-  ];
-
-  
-
-  return (
-    <Popup title="头像风格化" show={show} setShow={setShow}>
-      <View style={{ height: "380px" }}>
-        <WemetaTabs list={tabList} current="1" tabStyle="button"></WemetaTabs>
-      </View>
-    </Popup>
-  );
-}

+ 0 - 55
src/pages/page/components/bg-style-config/index.module.less

@@ -1,55 +0,0 @@
-.colorItem {
-  box-sizing: border-box;
-  width: 45px;
-  height: 45px;
-  border: 3px solid transparent;
-}
-
-.colorItemActived {
-  .colorItem();
-  border: 3px solid #000;
-}
-
-.tabContent{
-  margin-top: 24px;
-  min-height: 360px;
-  overflow-y: auto;
-  padding-bottom: 140px;
-}
-
-.bgItem {
-  position: relative;
-  box-sizing: border-box;
-  width: 109px;
-  height: 192px;
-  border-radius: 10px;  
-  overflow: hidden;
-  background: white url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAUAAAAFACAYAAADNkKWqAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAATXSURBVHgB7d2hkeVQEARB6UJ8/Tfz00d0RrRYZVrQqGLY3Oec9/rQ7/e7vvT393d9yb6NfRv7Nl/v+3cBRAkgkCWAQJYAAlkCCGQJIJAlgECWAAJZAghkCSCQJYBAlgACWQIIZAkgkCWAQJYAAlkCCGQJIJAlgEDW40fBxr6NfRv7Ni5AIEsAgSwBBLIEEMgSQCBLAIEsAQSyBBDIEkAgSwCBLAEEsgQQyBJAIEsAgSwBBLIEEMgSQCBLAIEsAQSy7nPOe33Ij4KNfRv7NrV9LkAgSwCBLAEEsgQQyBJAIEsAgSwBBLIEEMgSQCBLAIEsAQSyBBDIEkAgSwCBLAEEsgQQyBJAIEsAgSwBBLIePwo29m3s29i3cQECWQIIZAkgkCWAQJYAAlkCCGQJIJAlgECWAAJZAghkCSCQJYBAlgACWQIIZAkgkCWAQJYAAlkCCGQJIJB1n3Pe60N+FGzs29i3qe1zAQJZAghkCSCQJYBAlgACWQIIZAkgkCWAQJYAAlkCCGQJIJAlgECWAAJZAghkCSCQJYBAlgACWQIIZAkgkPX4UbCxb2Pfxr6NCxDIEkAgSwCBLAEEsgQQyBJAIEsAgSwBBLIEEMgSQCBLAIEsAQSyBBDIEkAgSwCBLAEEsgQQyBJAIEsAgaz7nPNeH/KjYGPfxr5NbZ8LEMgSQCBLAIEsAQSyBBDIEkAgSwCBLAEEsgQQyBJAIEsAgSwBBLIEEMgSQCBLAIEsAQSyBBDIEkAgSwCBrMePgo19G/s29m1cgECWAAJZAghkCSCQJYBAlgACWQIIZAkgkCWAQJYAAlkCCGQJIJAlgECWAAJZAghkCSCQJYBAlgACWQIIZN3nnPf6kB8FG/s29m1q+1yAQJYAAlkCCGQJIJAlgECWAAJZAghkCSCQJYBAlgACWQIIZAkgkCWAQJYAAlkCCGQJIJAlgECWAAJZAghkPX4UbOzb2Lexb+MCBLIEEMgSQCBLAIEsAQSyBBDIEkAgSwCBLAEEsgQQyBJAIEsAgSwBBLIEEMgSQCBLAIEsAQSyBBDIEkAg6z7nvNeH/CjY2Lexb1Pb5wIEsgQQyBJAIEsAgSwBBLIEEMgSQCBLAIEsAQSyBBDIEkAgSwCBLAEEsgQQyBJAIEsAgSwBBLIEEMgSQCDr8aNgY9/Gvo19GxcgkCWAQJYAAlkCCGQJIJAlgECWAAJZAghkCSCQJYBAlgACWQIIZAkgkCWAQJYAAlkCCGQJIJAlgECWAAJZ9znnvT7kR8HGvo19m9o+FyCQJYBAlgACWQIIZAkgkCWAQJYAAlkCCGQJIJAlgECWAAJZAghkCSCQJYBAlgACWQIIZAkgkCWAQJYAAlmPHwUb+zb2bezbuACBLAEEsgQQyBJAIEsAgSwBBLIEEMgSQCBLAIEsAQSyBBDIEkAgSwCBLAEEsgQQyBJAIEsAgSwBBLIEEMi6zznv9SE/Cjb2bezb1Pa5AIEsAQSyBBDIEkAgSwCBLAEEsgQQyBJAIEsAgSwBBLIEEMgSQCBLAIEsAQSyBBDIEkAgSwCBLAEEsgQQyHr8KNjYt7FvY9/GBQhkCSCQJYBAlgACWQIIZAkgkCWAQJYAAlkCCGQJIJAlgECWAAJZAghkCSCQJYBAlgACWQIIZAkgkCWAQNZ//TegmFjB2HgAAAAASUVORK5CYII=) no-repeat center;
-}
-.bgItemAddButton{
-  .bgItem();
-  background: #F5F6F7;
-}
-.bgItemActived{
-  .bgItem();
-  border: 3px solid #000;
-}
-.bgItemBlank{
-  .bgItem();
-  background: #F5F6F7;
-  // border: 2px solid ;
-  // &::after{
-  //   content: "";
-  //   position: absolute;
-  //   left: 50%;
-  //   top: 0;
-  //   margin-left: -1px;
-  //   width: 1px;
-  //   background-color: red;
-  //   height: 100%;
-  //   box-sizing: border-box;
-  //   transform-origin: center center;
-  //   transform:rotateZ(28deg) scale(1.414);
-  // }
-  
-}

+ 0 - 297
src/pages/page/components/bg-style-config/index.tsx

@@ -1,297 +0,0 @@
-import Popup from "@/components/popup/popup/index";
-import style from "./index.module.less";
-import { View, Image, ITouchEvent, ScrollView } from "@tarojs/components";
-import WemetaTabs from "@/components/wemeta-tabs/index";
-import Icon24Vip from "@/images/icon-24-vip.png";
-import { useEffect, useState } from "react";
-import Taro from "@tarojs/taro";
-import { uploadImage } from "@/utils/http";
-import { TEntityAsset, type TMediaType } from "@/types/index";
-import { EUploadFileScene } from "@/consts/enum";
-import { deleteAsset, listAssets } from "@/service/asset";
-import { EAssetScene } from "@/consts/enum";
-import { useCharacterStore, useCurrentCharacter } from "@/store/characterStore";
-const themeColors = [
-  '#FF7E80',
-  '#FFB350',
-  '#FFE945',
-  '#CBF706',
-  '#9DFF4D',
-  '#06F7A3',
-
-  '#FFB7B7',
-  '#FFC67C',
-  '#FFE7A0',
-  '#FDFF7C',
-  '#B7FF7C',
-  '#A0FFE9',
-
-  '#7CD8FF',
-  '#63A9FF',
-  '#8577FF',
-  '#CE7EFF',
-  '#FF7EF0',
-  '#DADADA',
-
-  '#A0F7FF',
-  '#84B7FF',
-  '#95AED1',
-  '#BAB4FF',
-  '#FFC2FE',
-  '#FFA7D9',
-];
-
-import useSWR from "swr";
-
-export interface IProps {
-  show: boolean;
-  setShow: (show: boolean) => void;
-}
-export default function Index({ show, setShow }: IProps) {
-  const { saveCharacter } = useCharacterStore();
-  const character = useCurrentCharacter();
-  const [currentColor, setCurrentColor] = useState(
-    character?.bgColor || "#CBF706"
-  );
-  const [currentBgImage, setCurrentBgImage] = useState(character?.bgImg || "");
-  const [mediaValue, setMediaValue] = useState<TEntityAsset[]>([]);
-  let loading  = false;
-  const [page, setPage]  = useState(1)
-  const pageSize = 10
-  const fetcher = async ([url, page, pageSize]) => {
-    const res = await listAssets({ page, pageSize, scene: EAssetScene.BG_IMAGE })
-    if (res.code === 0 && res.data) {
-      return res.data
-    }
-    throw new Error('Failed to fetch data')
-  }
-  // 使用 useSWR
-  const { data } = useSWR(
-    // key 数组,当这些值变化时会重新请求
-    ['/v1/asset', page, pageSize],
-    fetcher
-  )
-
-  // 加载更多数据
-  const loadMore = () => {
-    // 没数据就不加载更多
-    if(data?.length){
-      setPage(prev => prev + 1)
-    }
-  }
-
-  const getBgMediaList = async () => {
-    const res = await listAssets({
-      page: 1,
-      pageSize: 20,
-      scene: EAssetScene.BG_IMAGE,
-    });
-    if (res?.data?.length) {
-      setMediaValue(res.data);
-    }
-  };
-
-  const setBgColor = async (color: string) => {
-    if (!character) return;
-
-    const res = await saveCharacter({
-      profileId: character.profileId,
-      bgColor: color,
-    });
-    if (res?.code === 0) {
-      setCurrentColor(color);
-    }
-  };
-  const setBgImage = async (imageLink: string) => {
-    if (!character) return;
-
-    const res = await saveCharacter({
-      profileId: character.profileId,
-      bgImg: imageLink,
-    });
-    if (res?.code === 0) {
-      setCurrentBgImage(imageLink);
-    }
-  };
-
-  const handleDeleteClick = async (e: ITouchEvent, item: TEntityAsset ) => {
-    e.stopPropagation();
-
-    Taro.showModal({
-      title: "提示",
-      content: "确定删除该组件吗?",
-      async success(res) {
-        if (res.confirm) {
-          if (!item.id) {
-            return;
-          }
-          const res = await deleteAsset(item.id);
-          if (res.code === 0) {
-            getBgMediaList();
-          }
-        } else if (res.cancel) {
-          console.log("用户点击取消");
-        }
-      },
-    });
-  };
-
-  const handleScrollToLower = ()=> {
-    console.log('lower')
-    loadMore();
-  }
-
-  let isUploading = false;
-  const handleUploadClick = () => {
-    Taro.chooseMedia({
-      count: 1,
-      mediaType: ["image", "video"],
-      sourceType: ["album", "camera"],
-      async success(res) {
-        isUploading = true;
-        const tmpPath = res.tempFiles[0].tempFilePath;
-        Taro.showLoading();
-        const response = await uploadImage(tmpPath, EUploadFileScene.BG_IMAGE);
-        Taro.hideLoading();
-        if (response?.code === 0 && response.data) {
-          getBgMediaList();
-        } else {
-          Taro.showModal({
-            title: "上传异常",
-            content: response?.msg ?? "图片上传失败",
-            showCancel: false,
-          });
-        }
-        isUploading = false;
-      },
-      complete() {
-        isUploading = false;
-      },
-      fail(err) {
-        console.log(err);
-      },
-    });
-  };
-   
-  const handleSetBlank = async () => {
-    if(loading){
-      return
-    }
-    loading = true;
-    Taro.showLoading();
-    const res = await saveCharacter({
-      profileId: character?.profileId,
-      bgImg: '',
-    });
-    Taro.hideLoading();
-    loading = false
-    if (res?.code === 0) {
-      setCurrentBgImage('');
-    }
-  }
-
-  const tabList = [
-    {
-      key: "1",
-      label: "按钮颜色",
-      children: (
-        <View className={style.tabContent}>
-          <View className={`grid grid-cols-6 gap-x-12 gap-y-24 box-border`}>
-            {themeColors.map((item, index) => {
-              return (
-                <View
-                  className={`rounded-full ${
-                    currentColor === item
-                      ? style.colorItemActived
-                      : style.colorItem
-                  }`}
-                  style={{ backgroundColor: item }}
-                  key={index}
-                  onClick={() => {
-                    setBgColor(item);
-                  }}
-                ></View>
-              );
-            })}
-          </View>
-        </View>
-      ),
-    },
-    {
-      key: "2",
-      label: (
-        <View className="flex items-center gap-4">
-          自定义背景<Image src={Icon24Vip} className="w-12 h-12"></Image>
-        </View>
-      ),
-      children: (
-        <View className={`pb-68 ${style.tabContent}`}>
-          <ScrollView scroll-y enable-flex style="flex-direction: row; height: 280px;" onScrollToLower={handleScrollToLower}>
-            <View className="grid grid-cols-3 gap-x-8 gap-y-12">
-              <View
-                className={`flex items-center justify-center ${style.bgItemAddButton}`}
-                onClick={handleUploadClick}
-              >
-                <Image
-                  src="https://cdn.wehome.cn/cmn/png/100/META-H8UKVHWU-KIGP3BIL7M5AYC6XHNUA2-VDZCWI2M-O91.png"
-                  className="w-20 h-20"
-                ></Image>
-              </View>
-              <View
-                className={`flex items-center justify-center ${style.bgItemBlank}`}
-                onClick={handleSetBlank}
-              >
-                
-              </View>
-              {mediaValue.map((item, index) => {
-                return (
-                  <View
-                    className={`${
-                      currentBgImage === item.link
-                        ? style.bgItemActived
-                        : style.bgItem
-                    }`}
-                    key={index}
-                    onClick={() => {
-                      item.link && setBgImage(item.link);
-                    }}
-                  >
-                    {!item.isSystem && (
-                      <View
-                        onClick={(e) => handleDeleteClick(e, item)}
-                        className="iconfont icon-icon_24_delet icon-24 text-white absolute right-8 top-10"
-                      ></View>
-                    )}
-                    {item.link && (
-                      <Image
-                        src={item.link}
-                        mode="widthFix"
-                        className="w-full"
-                      ></Image>
-                    )}
-                  </View>
-                );
-              })}
-            </View>
-          </ScrollView>
-        </View>
-      ),
-    },
-  ];
-
-  useEffect(() => {
-    if(data?.length){
-      setMediaValue((prevdata)=> {
-        return [...prevdata, ...data]
-      })
-    }
-  }, [data]);
-
-  return (
-    <Popup title="背景设定" show={show} setShow={setShow}>
-      <View style={{ height: "380px" }}>
-        <WemetaTabs list={tabList} current="1" tabStyle="button"></WemetaTabs>
-      </View>
-    </Popup>
-  );
-}

+ 0 - 32
src/pages/page/components/bottom-nav-bar/index.tsx

@@ -1,32 +0,0 @@
-import { memo } from "react";
-import { View, Image } from '@tarojs/components'
-import style from '../../index.module.less'
-import Taro from "@tarojs/taro";
-import IconEye24 from "@/images/icon-eye-24.png";
-import IconStyle from "@/images/icon-style.png";
-export default  memo(({ onShowBgStyle, profileId }: {
-  onShowBgStyle: () => void;
-  profileId?: string;
-}) => {
-  return (
-    <View className={`${style.bottomNavBar} overflow-x-hidden box-border`}>
-      <View className={style.bottomNavBarInner}>
-        <View className={style.navItem} onClick={onShowBgStyle}>
-          <Image src={IconStyle} className={style.navItemIcon}></Image>
-          <View className={style.navItemText}>背景设定</View>
-        </View>
-        <View
-          className={style.navItem}
-          onClick={() => {
-            Taro.navigateTo({
-              url: `/pages/profile/index?profileId=${profileId}&preview=true`,
-            });
-          }}
-        >
-          <Image src={IconEye24} className={style.navItemIcon}></Image>
-          <View className={style.navItemText}>效果预览</View>
-        </View>
-      </View>
-    </View>
-  );
-});

+ 0 - 29
src/pages/page/components/tab-buttons/index.tsx

@@ -1,29 +0,0 @@
-import { memo } from "react";
-import { View, Image } from '@tarojs/components'
-import style from '../../index.module.less'
-import Taro from "@tarojs/taro";
-export default memo(({ statusBarHeight, customBgImg, onNav2SetChat }: {
-  statusBarHeight: number;
-  customBgImg: string
-  onNav2SetChat: () => void;
-}) => {
-  return (
-    <View
-      className={`${customBgImg ? '':'global-gray-bg'} ${style.tabButtons}`}
-      style={{ top: `${statusBarHeight}px` }}
-    >
-      <View className={`${style.tabButtonActived}`}>内容与排版</View>
-      <View className={`${style.tabButton}`} onClick={onNav2SetChat}>
-        智能对话
-      </View>
-      <View
-        className={`${style.tabButton}`}
-        onClick={() => {
-          Taro.navigateTo({ url: "/pages/knowledge/index" });
-        }}
-      >
-        专业知识
-      </View>
-    </View>
-  );
-});

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

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

+ 0 - 151
src/pages/page/index.module.less

@@ -1,151 +0,0 @@
-.tabButtons{
-  position: fixed;
-  left: 0;
-  right: 0;
-  top: 48px;
-  display: flex; 
-  align-items: center;
-  width: 100%;
-  color: #999;
-  font-size: 14px;
-  height: 53px;
-  font-weight: 400;
-  z-index: 99;
-  background-color: white;
-}
-.tabButton{
-  position: relative;
-  flex: 1;
-  display: flex; 
-  align-items: center;
-  font-size: 14px;
-  height: 22px;
-  line-height: 22px;
-  justify-content: center;
-  &::after{
-    display: none;
-    content: '';
-    position: absolute;
-    bottom: -8px;
-    left: 50%;
-    width: 20px;
-    transform: translateX(-50%);
-    border-radius: 2px;
-    height: 3px;
-    background-color: var(--color-primary-dark);
-  }
-}
-.tabButtonActived{
-  .tabButton();
-  font-weight: 500;
-  color: var(--color-primary-dark);
-  &::after{
-    display: block;
-  }
-}
-
-.contentWrap{
-  margin-bottom: 132px;
-  margin-top: 83px;
-}
-
-.openDataAvatarChooseButton{
-  position: relative;
-  padding: 0;
-  padding-left: 0;
-  padding-right: 0;
-  display: flex;
-  align-items: center;
-  justify-content: center;
-  width: 174px;
-  height: 174px;
-  overflow: hidden;
-  border-radius: 100%;
-  background: white url(../../images/transparent-avatar-bg.png) no-repeat center;
-  background-size: cover;
-}
-.avatar{
-  width: 174px;
-  height: 174px;
-  overflow: hidden;
-  border-radius: 100%;
-}
-.iconCamera{
-  position: absolute;
-  width: 100%;
-  height: 100%;
-  z-index: 2;
-  background: transparent url(https://cdn.wehome.cn/cmn/png/14/META-H8UKWHWU-6NNPBTA0CSOODDVD47MV3-SX8NYT2M-NX.png) no-repeat center;
-  background-size: 48px 48px;
-}
-
-.mainButtonContainer{
-  padding: 0 164px;
-  display: flex;
-  width: 100%;
-  box-sizing: border-box;
-  justify-content: space-between;
-  align-items: center;
-}
-.bottomNavBar{
-  position: fixed;
-  right: 16px;
-  bottom: 32px;
-  box-sizing: border-box;
-  z-index: 10;
-  border-radius: 96px;
-  box-shadow: 0px 0px 20px 0px rgba(0, 0, 0, 0.10);
-}
-.bottomNavBarInner{
-  display: flex;
-  flex-direction: column;
-  justify-content: left;
-  padding: 27px 12px;
-  gap: 24px;
-  background: white;
-}
-.navItem{
-  text-align: center;
-  display: flex;
-  flex-direction: column;
-  align-items: center;
-  gap: 4px;
-  justify-content: center;
-}
-.navItemIcon{
-  width: 24px;
-  height: 24px;
-}
-.navItemText{
-  color: black;
-  font-size: 10px;
-  font-style: normal;
-  font-weight: 400;
-  line-height: 12px;
-}
-
-.nickname{
-  position: relative;
-  display: flex;
-  align-items: center;
-  gap: 8px;
-  font-weight: 500;
-  line-height: 28px;
-  color: black;
-  text-shadow: 0 0 1px #FFF, 0 0 1px #FFF, 0 0 1px #FFF, 0 0 1px #FFF;
-}
-
-.gutter{
-  display: flex;
-  align-items: center;
-  justify-content: center;
-  flex: 1;
-  height: 30px;
-}
-.gutterLine{
-  height: 30px;
-  width: 1px;
-  font-size: 0;
-  background-color: rgba(black, .1);
-}
-

+ 0 - 276
src/pages/page/index.tsx

@@ -1,276 +0,0 @@
-import ChatAI from "@/components/chat-ai/index";
-import ComponentList from "@/components/component-list";
-import NavBarNormal from "@/components/nav-bar-normal/index";
-import PageCustom from "@/components/page-custom/index";
-import IconEditOutline from "@/images/icon-edit-outline.png";
-import { useAppStore } from "@/store/appStore";
-import { useCharacterStore, useCurrentCharacter, useCharacterStyle } from "@/store/characterStore";
-import { useComponentStore } from "@/store/componentStore";
-import { uploadImage } from "@/utils/http";
-
-import CustomShareComponent from "@/components/custom-share/CustomShareComponent";
-import { Button, Image, Input, View, Video } from "@tarojs/components";
-import Taro, { useDidShow, useRouter, useUnload } from "@tarojs/taro";
-import { useRef, useState } from "react";
-import style from "./index.module.less";
-import BgStyleConfig from "./components/bg-style-config/index";
-import AvatarMagicStyle from "./components/avatar-magic-style/index";
-
-import BottomNavBar from "./components/bottom-nav-bar";
-import TabButtons from "./components/tab-buttons";
-import { EUploadFileScene } from "@/consts/enum";
-
-
-
-// !!! 临时存储当前头像上传组件上传的 url 用于判断是否要显示默认头像
-let uploadedAvatarUrl = "";
-export default function Index() {
-  const router = useRouter();
-  const { profileId, createTimeCloseEnough } = router.params;
-  const statusBarHeight = useAppStore((state) => state.statusBarHeight);
-  const headerHeight = useAppStore((state) => state.headerHeight);
-  const maxAvatarVideoSize = useAppStore((state) => state.appConfig?.maxAvatarVideoSize); // unit MB
-  const { saveCharacter, fetchCharacterList, getCharacterById } =
-    useCharacterStore();
-  const character = useCurrentCharacter();
-  console.log("page: profileId: ", profileId);
-  const { fetchComponentList } = useComponentStore();
-  const components = useComponentStore((state) => state.components);
-  const inputRef = useRef(null);
-  const {customStyled, customBgImg } = useCharacterStyle();
-  const [avatarUrl, setAvatarUrl] = useState(character?.avatar);
-  const [showBgStyle, setShowBgStyle] = useState(false);
-  const [showMagicStyle, setShowMagicStyle] = useState(false);
-
-  const bgImageStyle = customBgImg
-    ? {
-        background: `url(${customBgImg})`,
-        // 背景图片需要顶部距离+53 tabButton 高度
-        backgroundPosition: `0 ${statusBarHeight+53}px`
-      }
-    : undefined;
-  const processChooseResult = async (response: {
-    code: number;
-    data: string;
-    msg: string;
-} | null)=> {
-    if (response?.code === 0 && response.data && profileId) {
-      await saveCharacter({
-        avatar: response.data,
-        profileId: profileId,
-      });
-      fetchCharacterList();
-    }
-    Taro.hideLoading()
-  }
-  const onChooseAvatar = async () => {
-    Taro.chooseMedia({
-      count: 1,
-      mediaType: ["image", "video"],
-      sourceType: ["album", "camera"],
-      async success(r) {
-        const tempFile = r.tempFiles[0]
-        const tmpPath = tempFile.tempFilePath;
-        if (maxAvatarVideoSize && tempFile.size > maxAvatarVideoSize * 1024 * 1024) {
-          Taro.showToast({
-            title: `文件不能超过${maxAvatarVideoSize}MB`,
-            icon: 'none'
-          });
-          return;
-        }
-        
-        uploadedAvatarUrl = tmpPath;
-        setAvatarUrl(tmpPath);
-        if(r.type === 'image'){
-          Taro.cropImage({
-            src: tmpPath,
-            cropScale: "1:1",
-            success: async (res) => {
-              const path = res.tempFilePath;
-              Taro.showLoading()
-              const response = await uploadImage(path);
-              processChooseResult(response)
-            },
-          });
-        }else if(r.type === 'video'){
-          Taro.showLoading()
-          const response = await uploadImage(tmpPath, EUploadFileScene.AVATAR);
-          processChooseResult(response)
-        }
-        
-      },
-    });
-  };
-
-  const handleInputFocus = () => {
-    if (inputRef.current) {
-      //@ts-ignore
-      inputRef.current?.focus();
-    }
-  };
-
-  const handleNicknameChange = async (e: any) => {
-    const nickname = e.detail.value.trim();
-    if (nickname && profileId) {
-      await saveCharacter({
-        name: nickname,
-        profileId: profileId,
-      });
-      fetchCharacterList();
-    }
-  };
-
-  const handleNav2SetChat = () => {
-    if (profileId) {
-      Taro.navigateTo({
-        url: `/pages/editor-pages/editor-chat/index?profileId=${profileId}`,
-      });
-    }
-  };
-
-  const handleNavBack = async () => {
-    await fetchCharacterList();
-    return true;
-  };
-
-  const toggleMagicStylePanel = ()=> {
-    console.log('hello')
-    setShowMagicStyle(!showMagicStyle)
-  }
-
-  useDidShow(() => {
-    if (profileId) {
-      // 重新获取当前角色信息
-      getCharacterById(profileId);
-      fetchComponentList(profileId);
-    }
-  });
-
-  useUnload(() => {
-    const pages = Taro.getCurrentPages();
-    // 退出页面时清空
-    if (pages.length <= 2) {
-      uploadedAvatarUrl = "";
-    }
-  });
-
-  const renderAvatar = () => {
-    // !!! avatarUrl 有可能是默认的头像,但第一次创建时业务上要求不显示默认头像
-    // todo: 使用 AvatarMedia 代替
-    const isUseUploadedUrl = !createTimeCloseEnough || uploadedAvatarUrl.length;
-    if (avatarUrl && isUseUploadedUrl) {
-      if(avatarUrl.lastIndexOf('.mp4') > -1){
-        return (
-          <>
-            <View className={style.iconCamera}></View>
-            <Video
-              controls={false}
-              showCenterPlayBtn={false}
-              loop={true}
-              muted={true}
-              objectFit="cover"
-              className={`${style.avatar}`}
-              src={avatarUrl}
-            />
-          </>
-        );  
-      }
-      return (
-        <>
-          <View className={style.iconCamera}></View>
-          <Image
-            mode='aspectFill'
-            className={style.avatar}
-            src={avatarUrl}
-          ></Image>
-        </>
-      );
-    }
-    return <View className={style.iconCamera}></View>;
-  };
-  const avatarEditor = () => {
-    return (
-          <Button
-            className={style.openDataAvatarChooseButton}
-            onClick={onChooseAvatar}
-          >
-            {renderAvatar()}
-          </Button>
-    );
-  };
-
-  const nicknameEditor = () => {
-    return (
-      <>
-        <View className={style.nickname}>
-          <Input
-            ref={inputRef}
-            type='nickname'
-            defaultValue={character?.name}
-            placeholder='您的主页名称'
-            className={style.nickname}
-            onConfirm={(e) => {
-              handleNicknameChange(e);
-            }}
-            onBlur={(e) => {
-              handleNicknameChange(e);
-            }}
-          ></Input>
-          <Image
-            onClick={() => handleInputFocus()}
-            src={IconEditOutline}
-            className='w-24 h-24 absolute -right-20 top-0'
-            style={{}}
-          ></Image>
-        </View>
-      </>
-    );
-  };
-
-  const renderAI = () => {
-    if (character) {
-      return (
-        <ChatAI
-          avatarRenderer={avatarEditor}
-          nicknameRenderer={nicknameEditor}
-          character={character}
-          playGreeting={false}
-          getSession={true}
-        ></ChatAI>
-      );
-    }
-  };
-
-  return (
-    <PageCustom style={bgImageStyle} paddingTop={statusBarHeight}>
-      <NavBarNormal scrollFadeIn={false} showBgColor onNavBack={handleNavBack}>编辑</NavBarNormal>
-      <View style={customStyled} className="w-full">
-
-      <TabButtons onNav2SetChat={handleNav2SetChat} customBgImg={customBgImg} statusBarHeight={headerHeight} />
-      
-
-      <View
-        className={`flex flex-col items-center w-full mt-48 ${customBgImg ? '':'global-gray-bg'} ${style.contentWrap}`}
-      >
-        <CustomShareComponent character={character} />
-        <View className="relative">
-          {renderAI()}
-          <View className="absolute right-40 top-120 z-10 w-40 h-40" onClick={toggleMagicStylePanel}>
-            
-            {/* {showMagicStyle ? 'yoyo':'go'} */}
-          </View>
-        </View>
-        
-        <View className='w-full pt-48 px-16 overflow-x-hidden'>
-          <View className='flex flex-col gap-10'>
-            <ComponentList editMode components={components}></ComponentList>
-          </View>
-        </View>
-      </View>
-      <BottomNavBar onShowBgStyle={() => setShowBgStyle(true)} profileId={profileId}  />
-      </View>
-      <BgStyleConfig setShow={setShowBgStyle} show={showBgStyle} ></BgStyleConfig>
-      <AvatarMagicStyle setShow={setShowMagicStyle} show={showMagicStyle} ></AvatarMagicStyle>
-    </PageCustom>
-  );
-}

+ 0 - 5
src/service/appConfig.ts

@@ -1,5 +0,0 @@
-import { service } from '@/utils/http'
-import { TModelAppConfig } from '@/types/index'
-export const getAppConfig = () => {
-  return service.get<TModelAppConfig>('/v1/app/config')
-}

+ 0 - 15
src/service/asset.ts

@@ -1,15 +0,0 @@
-import { service } from '@/utils/http'
-import { TEntityAsset } from '@/types/index'
-import { EAssetScene } from '@/consts/enum'
-
-export const deleteAsset = (id: string|number) => {
-  return service.delete(`/v1/asset/${id}`)
-}
-
-export const listAssets = (params: {
-  page?: number
-  pageSize?: number
-  scene?: EAssetScene
-}) => {
-  return service.get<TEntityAsset[]>('/v1/asset', {params: params})
-}

+ 1 - 1
src/service/audio.ts

@@ -1,4 +1,4 @@
-import { service } from '@/utils/http'
+import service from '@/xiaolanbenlib/module/axios'
 import { TServiceAudioModel } from '@/types/index'
 import { getTempFileContent } from "@/utils";
 

+ 0 - 19
src/service/auth.ts

@@ -1,19 +0,0 @@
-import { service } from "@/utils/http";
-
-import { EBindKind } from "@/consts/enum";
-
-// 豆芽部落授权
-export const authBind = (key: EBindKind, value: string) => {
-  return service.post<any, string>(`/v1/auth/bind`, {
-    kind: key,
-    value: value,
-  });
-};
-
-// 豆芽部落授权
-export const authDouya = (id: string, phone: string) => {
-  return service.post<any, string>(`/v1/external/douya/authorize`, {
-    id,
-    phone,
-  });
-};

+ 0 - 42
src/service/component.ts

@@ -1,42 +0,0 @@
-/**
- * 组件相关接口
- */
-import { service } from '@/utils/http'
-import type { TEntityComponent } from '@/types/index'
-
-export interface ComponentRequest {
-  data?: { [key: string]: any };
-  enabled?: boolean;
-  id?: number;
-  name?: string;
-  order?: number;
-  /**
-   * Type 组件类型
-   */
-  type?: string;
-  [property: string]: any;
-}
-
-export const saveComponent = (data: ComponentRequest) => {
-  return service.post<ComponentRequest, TEntityComponent>('/v1/component', data)
-}
-
-export const saveComponentBatch = (data: ComponentRequest[]) => {
-  return service.put<ComponentRequest[], TEntityComponent[]>('/v1/component/batch', data)
-}
-
-export const getComponentList = (profileID: string) => {
-  return service.get<TEntityComponent[]>('/v1/component', {params: {
-    profileId: profileID,
-  }})
-}
-export const getComponent = (id: number) => {
-  return service.get<TEntityComponent[]>(`/v1/component/${id}`)
-}
-export const delComponent = (id: number) => {
-  return service.delete<TEntityComponent[]>(`/v1/component/${id}`)
-}
-
-export const sortComponent = (data: TEntityComponent[]) => {
-  return service.put<TEntityComponent[],TEntityComponent[] >('/v1/component/sort', data)
-}

+ 1 - 1
src/service/contact.ts

@@ -1,7 +1,7 @@
 /**
  * 组件相关接口
  */
-import { service } from '@/utils/http'
+import service from '@/xiaolanbenlib/module/axios'
 import type { IPageParams, IContactModel } from '@/types/index'
 
 export type TNewContact = {

+ 0 - 18
src/service/document.ts

@@ -1,18 +0,0 @@
-/**
- * 组件相关接口
- */
-import { service } from '@/utils/http'
-import type { IPageParams, IEntityDocument, IDocumentReq } from '@/types/index'
-
-
-
-export const createDocument = (data: IDocumentReq) => {
-  return service.post<IDocumentReq, IEntityDocument>('/v1/document', data)
-}
-
-export const getDocumentList = (data: IPageParams) => {
-  return service.get<IEntityDocument[]>('/v1/document', {params: data})
-}
-export const deleteDocument = (id: number) => {
-  return service.delete(`/v1/document/${id}`)
-}

+ 6 - 2
src/service/knowledge.ts

@@ -6,6 +6,7 @@ import request from "@/xiaolanbenlib/module/axios.js";
 import type { TKnowledgeItem, TQAListItem, TKnowledgeStreamResponseData, TKnowledgeDetail } from "@/types/knowledge";
 import { getSimpleHeader } from "@/xiaolanbenlib/module/axios.js";
 import { isSuccess } from "@/utils";
+import { EKnowlegeTypes } from "@/consts/enum";
 
 
 // 上传知识库文件
@@ -46,13 +47,16 @@ export type TKnowledgeListResponse = {
   "nextId": string,
   "totalCount": number
 }
-export const getKnowledgeList = ({startId, pageSize = 1}: {
+
+
+export const getKnowledgeList = ({startId, pageSize = 1, types = []}: {
   startId?: string;
+  types?: EKnowlegeTypes[]
   pageSize: number;
 }) => {
   return request.get<TKnowledgeListResponse>(
     `${bluebookAiAgent}api/v1/my/knowledge/list`,
-    { params: {startId, pageSize} }
+    { params: {startId, pageSize, types} }
   );
 };
 

+ 0 - 7
src/service/pay.ts

@@ -1,7 +0,0 @@
-import { service } from '@/utils/http'
-export const payVip = (priceId: number) => {
-  return service.post<{priceId: number, channel: string}, {
-    orderNo: string,
-    sign: string
-  }>('/v1/pay/wx', {channel: 'applet', priceId})
-}

+ 1 - 1
src/service/stats.ts

@@ -1,4 +1,4 @@
-import { service } from '@/utils/http'
+import service from '@/xiaolanbenlib/module/axios'
 import { TWeeklyChatStatistics, TEntityChatSession, IPageParams, TEntityChatSessionRecord } from '@/types/index'
 
 export const getWeeklyStats = () => {

+ 10 - 10
src/store/appStore.ts

@@ -1,5 +1,5 @@
 import { create } from 'zustand'
-import { getAppConfig } from '@/service/appConfig'
+
 import { TModelAppConfig, TModelVipProduct } from '@/types/index'
 import { useUserStore } from './userStore'
 import Taro from '@tarojs/taro'
@@ -79,16 +79,16 @@ export const useAppStore = create<AppState>((set) => ({
       
   },
   fetchAppConfig: async ()=> {
-    const res = await getAppConfig()
+    // const res = await getAppConfig()
     
-    if(res?.code === 0 && res.data){
-      set(() => {
-        return {
-          appConfig: {...res.data},
-        }
-      })
-      return res.data
-    }
+    // if(res?.code === 0 && res.data){
+    //   set(() => {
+    //     return {
+    //       appConfig: {...res.data},
+    //     }
+    //   })
+    //   return res.data
+    // }
     return null
   },
   setVip:  (vip: TModelVipProduct)=> {

+ 19 - 4
src/store/componentStore.ts

@@ -26,6 +26,7 @@ export interface ComponentState {
   components: TComponentItem[] | []; // 后期是否需要改成链表方便中间插入删除等操作??
   currentComponent: TComponentItem | null;
   loading: boolean;
+  setLoading: (loading: boolean) => void
   setComponentList: (list: TComponentItem[], agentId: string) => void;
   delComponent: (c: TComponentItem) => Promise<boolean>;
   saveComponent: (c: TComponentItem) => Promise<boolean>;
@@ -59,17 +60,22 @@ export const useComponentStore = create<ComponentState>((set, get) => ({
   currentComponent: null,
   maxIndex: 1,
   insertIndex: -1,
+  setLoading: (loading) =>{
+    set({loading})
+  },
   setComponentList: (list: TComponentItem[], agentId: string) => {
     let sorted = list.sort(sortComponentsByIndex);
     set({ agentId, components: sorted, maxIndex: getMaxIndex(sorted) });
   },
   insertComponent: async (list: TComponentItem[]) => {
+    
     const insertIndex = get().insertIndex;
     let _components = get().components.sort(sortComponentsByIndex);
     console.log("current components list:", _components);
     const _componentsLen = _components.length;
 
     console.log("insertIndex:", insertIndex);
+    
     if (insertIndex === -1) {
       console.log("顶部插入");
       // 顶部插入, 原组件列表所有 index + list.length
@@ -88,12 +94,13 @@ export const useComponentStore = create<ComponentState>((set, get) => ({
       _components = [..._components, ...list];
     } else {
       // 中间插入,
-      console.log("中间插入");
+      console.log("中间插入", insertIndex);
       const restIndex = insertIndex + 1;
       list = list.map((c) => {
         c.data.index = c.data.index + restIndex;
         return c;
       });
+      console.log("中间插入", list);
 
       let rest = _components.slice(restIndex).map((item) => {
         if (item.data.index) {
@@ -112,13 +119,13 @@ export const useComponentStore = create<ComponentState>((set, get) => ({
     return _components;
   },
   saveComponent: async (c: TComponentItem) => {
-    console.log("saveComponent");
+    console.log("saveComponent", c);
 
     if (c.data.id === undefined) {
       console.log("没有 id 无法编辑该组件");
       return false;
     }
-
+    set({loading: true})
     const insertIndex = get().insertIndex;
     const agentId = get().agentId;
     const components = [...get().components];
@@ -139,6 +146,7 @@ export const useComponentStore = create<ComponentState>((set, get) => ({
     const { status } = await editAgentWebsite(agentId, {
       components: components,
     });
+    set({loading: false})
     if (isSuccess(status)) {
       set({
         components,
@@ -163,18 +171,25 @@ export const useComponentStore = create<ComponentState>((set, get) => ({
       return false;
     }
 
+    set({loading: true})
+
     const filtered = components
       .filter((item: TComponentItem) => item?.data.id !== c.data.id)
       .sort(sortComponentsByIndex)
       .map((item: TComponentItem, index) => {
         return {
           ...item,
-          index: index + 1,
+          data: {
+            ...item.data,
+            index: index,
+          }
         };
       });
     const { status } = await editAgentWebsite(agentId, {
       components: filtered,
     });
+    set({loading: false})
+    
     if (isSuccess(status)) {
       set({ components: filtered });
       return true;

+ 0 - 89
src/store/documentStore.ts

@@ -1,89 +0,0 @@
-import { create } from 'zustand'
-
-import { getDocumentList as _getDocumentList, deleteDocument as _del, createDocument as _createDocument } from '@/service/document'
-import { IEntityDocument, IPageParams, IDocumentReq } from '@/types/index'
-import { TFileItem } from '@/types/file-types'
-
-export interface DocumentState {
-  loading: boolean
-  documents: IEntityDocument[] | []
-  fetchDocumentList: (data: IPageParams) => Promise<IEntityDocument[]>
-  deleteDocument: (id: number) => Promise<void>
-  createDocument: (data: IDocumentReq) => Promise<IEntityDocument|null>
-  uploadingList: TFileItem[]
-  setUploadingList: (list: TFileItem[]) => void
-  setUploadListItem: (fileItem: TFileItem) => void
-}
-
-
-
-
-export const useDocumentStore = create<DocumentState>((set, get) => ({
-  loading: false,
-  documents: [],
-  uploadingList: [],
-  setUploadingList: (list: TFileItem[]) => {
-    set({ uploadingList: list })
-  },
-  setUploadListItem: (fileItem: TFileItem) => {
-    set((state) => {
-      let list = state.uploadingList.map(item => {
-        if(item.file.name === fileItem.file.name){
-          return{
-            ...item,
-            status: fileItem.status,
-          }
-        }
-        return {...item}
-      })
-      const uploaded = list.filter(item => item.status === 2);
-      if(uploaded.length === list.length ){
-        list = []
-      }
-      return {
-        uploadingList: list
-      }
-    })
-    
-  },
-  fetchDocumentList: async (data: IPageParams) => {
-    const response = await _getDocumentList(data)
-    if (response.code === 0 && response.data) {
-      
-      set({ documents: response.data})
-    }
-    return response?.data
-  },
-  createDocument: async (c: IDocumentReq) => {
-    set({ loading: true })
-    const response = await _createDocument(c)
-    if(response.code !== 0){
-      return null
-    }
-    set((state) => {
-      return {
-        documents: [...state.documents, response.data],
-        loading: false
-      }
-    })
-    return response?.data
-  },
-  
-  deleteDocument: async (id) => {
-    const res = await _del(id)
-    if (res.code === 0) {
-      set((state) => {
-        const docs = state.documents.filter((item: IEntityDocument) => item?.id !== id)
-        return {
-          documents: [...docs]
-        }
-      })
-    }
-  },
-  setLoading: (loading: boolean) => {
-    set({ loading })
-  }
-}))
-
-
-

+ 9 - 1
src/store/knowledge.ts

@@ -7,6 +7,7 @@ import {
   getMyKnowledgeStream as _getMyKnowledgeStream,
   getKnowledgeList as _getKnowledgeList,
 } from "@/service/knowledge";
+import { EKnowlegeTypes } from "@/consts/enum";
 
 export interface KnowledgeStoreState {
   scrollTop: number;
@@ -15,6 +16,7 @@ export interface KnowledgeStoreState {
   isLoading: boolean;
   startId?: string;
   // List view specific state
+  listTypes?: EKnowlegeTypes[]
   listScrollTop: number;
   listTotalCount: number;
   listItems: TKnowledgeItem[];
@@ -25,6 +27,7 @@ export interface KnowledgeStoreState {
   // List view specific functions
   loadMoreList: (force?: boolean) => Promise<void>;
   initLoadList: () => Promise<void>;
+  setListTypes: (types: EKnowlegeTypes[])=> void
 }
 
 export const useKnowledgeStore = create<KnowledgeStoreState>((set, get) => ({
@@ -34,6 +37,7 @@ export const useKnowledgeStore = create<KnowledgeStoreState>((set, get) => ({
   isLoading: false,
   startId: undefined,
   // List view specific state
+  listTypes: [],
   listScrollTop: 9999,
   listTotalCount: 9999,
   listItems: [],
@@ -81,7 +85,7 @@ export const useKnowledgeStore = create<KnowledgeStoreState>((set, get) => ({
   },
   // 列表视图-加载
   loadMoreList: async (force) => {
-    const { listItems, listTotalCount, listLoading, listStartId } = get();
+    const { listItems, listTotalCount, listLoading, listStartId, listTypes } = get();
     
     if (!force && (listItems.length >= listTotalCount || listLoading)) {
       return;
@@ -93,6 +97,7 @@ export const useKnowledgeStore = create<KnowledgeStoreState>((set, get) => ({
       const response = await _getKnowledgeList({
         startId: listStartId,
         pageSize: 10,
+        types: listTypes,
       });
 
       const result = isSuccess(response.status);
@@ -108,6 +113,9 @@ export const useKnowledgeStore = create<KnowledgeStoreState>((set, get) => ({
       set({ listLoading: false, listScrollTop: get().listScrollTop + 1 });
     }
   },
+  setListTypes: (types)=> {
+    set({listTypes: types})
+  },
   initLoadList: async() => {
     set({
       listItems: [],

+ 9 - 4
src/styles/_vars.less

@@ -1,11 +1,16 @@
 
-@linkUrl: 'https://cdn.wehome.cn/cmn/png/12/META-H8UK0IWU-LIGPDI0B88LDCAMAO6LN3-5N8VVI2M-T61.png';
-@wechatUrl: 'https://cdn.wehome.cn/cmn/png/61/META-H8UKVHWU-KIGP3BIL7M5AYC6XHNUA2-J7CYVI2M-C91.png';
-@shipingLinkUrl: 'https://cdn.wehome.cn/cmn/png/137/META-H8UK0IWU-LIGPDI0B88LDCAMAO6LN3-13CYVI2M-V61.png';
+@linkUrl: 'https://cdn.wehome.cn/cmn/png/144/META-H8UKWHWU-2JNUAG2BARJF55VHU9QS3-NB1XL1CM-7U2.png';
+@tel: 'https://cdn.wehome.cn/cmn/png/101/META-H8UKVHWU-1JNUXQBKDFMDLDZZ7BUW3-TRTXL1CM-7V2.png';
+@local: 'https://cdn.wehome.cn/cmn/png/59/META-H8UKWHWU-2JNUAG2BARJF55VHU9QS3-Z6PDM1CM-8U2.png';
+@wechatUrl: 'https://cdn.wehome.cn/cmn/png/22/META-H8UKVHWU-1JNUXQBKDFMDLDZZ7BUW3-F10WL1CM-6V2.png';
+@wechatGreenUrl: 'https://cdn.wehome.cn/cmn/png/22/META-H8UKVHWU-1JNUXQBKDFMDLDZZ7BUW3-F10WL1CM-6V2.png';
+@shipingUrl: 'https://cdn.wehome.cn/cmn/png/99/META-H8UKWHWU-2JNUAG2BARJF55VHU9QS3-DORVL1CM-6U2.png';
+@shipingVideoUrl: 'https://cdn.wehome.cn/cmn/png/109/META-H8UKVHWU-1JNUXQBKDFMDLDZZ7BUW3-XPPTL1CM-5V2.png';
+
 @tiktokUrl: 'https://cdn.wehome.cn/cmn/png/247/META-H8UKVHWU-KIGP3BIL7M5AYC6XHNUA2-03CYVI2M-991.png';
 @xiaohongshuUrl: 'https://cdn.wehome.cn/cmn/png/71/META-H8UK0IWU-LIGPDI0B88LDCAMAO6LN3-H7CYVI2M-Y61.png';
 @kwaiUrl: 'https://cdn.wehome.cn/cmn/png/111/META-H8UK0IWU-LIGPDI0B88LDCAMAO6LN3-YN8VVI2M-U61.png';
 @bilibiliUrl: 'https://cdn.wehome.cn/cmn/png/29/META-H8UKVHWU-KIGP3BIL7M5AYC6XHNUA2-ZQYTVI2M-491.png';
 @qqUrl: 'https://cdn.wehome.cn/cmn/png/64/META-H8UKWHWU-6NNPBTA0CSOODDVD47MV3-C5XKEO2M-8I.png';
 @sinaUrl: 'https://cdn.wehome.cn/cmn/png/80/META-H8UKWHWU-6NNPBTA0CSOODDVD47MV3-YS739U2M-UY.png';
-@shipingUrl: 'https://cdn.wehome.cn/cmn/png/130/META-H8UK0IWU-9NNPJOLLD1MU95DE0NMA3-AJALZW2M-3B1.png';
+

+ 1 - 1
src/types/agent.ts

@@ -18,7 +18,7 @@ export type TAgent = {
 export type TComponentItem = {
   data: {
     id: string,
-    index: number,
+    index: number, // index 虽然维护着,但暂时没用到
     [property: string]: any;
   },
   enabled: boolean,

+ 7 - 7
src/utils/auth.ts

@@ -2,10 +2,10 @@ import Taro from "@tarojs/taro";
 import axios from './http'
 import { getToken, setToken } from '@/utils/index'
 
-import { authBind } from "@/service/auth";
-import { EBindKind } from "@/consts/enum";
+// import { authBind } from "@/service/auth";
+// import { EBindKind } from "@/consts/enum";
 
-let isLogining = false;
+// let isLogining = false;
 
 
 const authLoginH5 = async (resolve) => {
@@ -115,9 +115,9 @@ export const checkPermission = async (scope: string):Promise<boolean> => {
 }
 
 export const bindPhone = async (phone: string) => {
-	const res = await authBind(EBindKind.WechatPhone, phone);
-	if (res.data) {
-		return res.data
-	}
+	// const res = await authBind(EBindKind.WechatPhone, phone);
+	// if (res.data) {
+	// 	return res.data
+	// }
 	return null
 }

+ 1 - 1
src/xiaolanbenlib/utils/auth.ts

@@ -86,7 +86,7 @@ export default function refreshUserId(canUseCache = false) {
   }
   if (Taro.getStorageSync(IS_LOGIN_STORAGE_KEY)) {
     return getMyInfo().then((res) => {
-      console.log(res,8888)
+      // console.log(res,8888)
       Taro.setStorageSync(USER_ID_ENCODED_STORAGE_KEY, res.data.encodeUserId)
       Taro.setStorageSync(USER_ID_STORAGE_KEY, res.data.userId)
       userInfo = res.data