Quellcode durchsuchen

feat: 保存标题组件

王晓东 vor 1 Monat
Ursprung
Commit
3480d9ef91
2 geänderte Dateien mit 39 neuen und 45 gelöschten Zeilen
  1. 13 14
      src/pages/editor-pages/editor-title/index.tsx
  2. 26 31
      src/store/componentStore.ts

+ 13 - 14
src/pages/editor-pages/editor-title/index.tsx

@@ -6,7 +6,7 @@ import NavBarNormal from "@/components/nav-bar-normal/index";
 import editorStyle from "../editor.module.less";
 import WemetaRadioGroup from "@/components/wemeta-radio-group/index";
 import { useComponentStore } from '@/store/componentStore'
-import { useCharacterStore } from '@/store/characterStore'
+import BottomBar from "@/components/BottomBar";
 import WemetaTextarea from "@/components/wemeta-textarea/index";
 import Taro, {useRouter, useUnload} from "@tarojs/taro";
 export default function Index() {
@@ -14,11 +14,9 @@ export default function Index() {
   const { id } = router.params;
   const deltaNum = id ? 1 : 2
   let currentComponent = useComponentStore((state)=>  state.currentComponent);
-  const character = useCharacterStore((state)=> state.character);
-  const loading = useComponentStore((state)=> state.loading);
   const { saveComponent } = useComponentStore();
   const [value, setValue] = useState(currentComponent?.data?.text ?? '');
-  const [radioValue, setRadioValue] = useState(currentComponent?.data?.layout ?? 'center')
+  const [radioValue, setRadioValue] = useState<string>(currentComponent?.data?.layout ?? 'center')
   const radioList = [
     {
       text: "居中",
@@ -32,8 +30,8 @@ export default function Index() {
     },
   ];
   
-  const handleSave = async () => {
-    if(loading){
+  const handleSubmit = async () => {
+    if(!currentComponent?.data.id){
       return
     }
     if(value.length <= 0){
@@ -43,17 +41,17 @@ export default function Index() {
       data: {
         text: value,
         layout: radioValue,
+        id: currentComponent?.data.id,
+        index: currentComponent?.data?.index,
       },
       enabled: currentComponent?.enabled ?? true,
-      id: currentComponent?.id,
-      name: currentComponent?.name ?? "章节标题",
-      index: currentComponent?.index,
-      characterProfileId: currentComponent?.characterProfileId ?? character?.profileId,
       type: "title",
     };
 
     
     await saveComponent(c)
+
+    Taro.navigateBack()
   };
 
   const onChange = (e: any) => {
@@ -66,15 +64,13 @@ export default function Index() {
     return false;
   };
 
-  const handleNavBack = async () => {
-    await handleSave()
-  }
+  
   
   
 
   return (
     <PageCustom bgColor="global-light-green-bg">
-      <NavBarNormal backText="保存" navDelta={deltaNum} onNavBack={ handleNavBack }>章节标题</NavBarNormal>
+      <NavBarNormal backText="返回" >章节标题</NavBarNormal>
       <View className="flex flex-col items-center w-full">
         <View className={editorStyle.container}>
           <View
@@ -96,6 +92,9 @@ export default function Index() {
             ></WemetaRadioGroup>
           </View>
         </View>
+        <BottomBar>
+          <View className="button-rounded button-primary flex-1" onClick={handleSubmit}>保存</View>
+        </BottomBar>
       </View>
     </PageCustom>
   );

+ 26 - 31
src/store/componentStore.ts

@@ -1,6 +1,7 @@
 import { create } from "zustand";
 import { editAgentWebsite as _editAgentWebsite, editAgentAvatar, editAgentWebsite } from "@/service/agent";
 import { TComponentItem } from "@/types/agent";
+import { isSuccess } from "@/utils";
 
 
 function safeSwap(arr:any[], index1:number, index2: number) {
@@ -23,7 +24,7 @@ export interface ComponentState {
   currentComponent: TComponentItem | null;
   setComponentList: (list: TComponentItem[], agentId: string) => void;
   delComponent: (c: TComponentItem) => Promise<void>;
-  saveComponent: (c: TComponentItem) => Promise<TComponentItem | null>;
+  saveComponent: (c: TComponentItem) => Promise<boolean>;
   insertComponent: (c: TComponentItem[]) => Promise<TComponentItem[] | null>;
   swapTwoComponent: (c: TComponentItem, direction: number) => Promise<void>;
   setCurrentComponent: (
@@ -113,43 +114,37 @@ export const useComponentStore = create<ComponentState>((set, get) => ({
   saveComponent: async (c: TComponentItem) => {
     console.log("saveComponent");
 
-    // insertIndex 是组件列表插入组件时提前设置的
+    if (c.data.id === undefined) {
+      console.log('没有 id 无法编辑该组件')
+      return false
+    }
+
     const insertIndex = get().insertIndex;
-    console.log(c.id, insertIndex);
-    // 没有 id  且 insertIndex > -1 说明是插入组件
-    if (c.id === undefined && insertIndex > -1) {
-      console.log("insertComponentBatch:", c, insertIndex);
+    const agentId = get().agentId;
+    const components = [...get().components];
+    console.log(c.data.id, insertIndex);
+    
+    const edit = components.find(item => item.data.id === c.data.id)
 
-      return await get().insertComponent(c);
+    if(edit){
+      edit.data = c.data
+      edit.enabled = c.enabled
     }
 
     // 简单更新组件
-    console.log("updateComponent: ", c, insertIndex);
-    // 如果是普通保存(直接 tabbar 点击添加组件按钮进入,非插入)
-    if (c.id === undefined) {
-      return null;
-    }
+    console.log("a: ", components);
+    console.log("b: ", get().components);
+    
     // 普通更新或新建
-    const res = await _save(c);
-    if (res.code !== 0) {
-      return null;
+    const {status} = await editAgentWebsite(agentId, {components: components});
+    if(isSuccess(status)){
+      set({
+        components
+      })
+      return true
     }
-    set((state) => {
-      let _components = state.components;
-      if (c.id) {
-        _components = _components.filter(
-          (item: TComponentItem) => item?.id !== c.id
-        );
-      }
-      let sorted = [..._components, res.data].sort(sortComponentsByIndex);
-      state.calcMaxIndex(sorted);
-      return {
-        components: sorted,
-        loading: false,
-      };
-    });
-
-    return res?.data;
+    return false
+    
   },
   setInsertIndex: (index) => {
     console.log(index,' setInsertIndex')