Forráskód Böngészése

feat: 形象照片上传

王晓东 1 hónapja
szülő
commit
4af19bd53c

+ 2 - 0
src/components/KnowledgeList/index.tsx

@@ -7,6 +7,7 @@ import WemetaRadio from "@/components/wemeta-radio/index";
 
 import IconFIleLink from "@/components/icon/IconFIleLink"
 
+
 import { useKnowledge } from "./knowledge";
 import type { TKnowledgeItem } from "@/types/knowledge";
 import { EKnowlegeTypes } from "@/consts/enum";
@@ -85,6 +86,7 @@ const Index = ({ types, multi,  entId, onChange }: IProps) => {
       }}
     >
       <FigureList>
+      
         {list.map((item) => {
           return (
             <FigureListItem

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


+ 2 - 2
src/pages/editor-pages/editor-link/components/LinkPicker/index.tsx → src/components/KnowledgePicker/index.tsx

@@ -54,8 +54,8 @@ export default function Index({ show, setShow, multi, types, onPicked }: IProps)
 
   const handleSubmit = () => {
     console.log(picked)
-    // onPicked(picked)
-    // setShow(false)
+    onPicked(picked)
+    setShow(false)
   };
 
   const renderEntContent = () => {

+ 23 - 5
src/pages/agent-gen/components/step/StepStart.tsx

@@ -1,16 +1,22 @@
-import { View,Text } from "@tarojs/components";
+import { View,Text, Image } from "@tarojs/components";
 import React, { useState, useCallback, useEffect } from "react";
 import style from './index.module.less'
 import IconChange from "@/components/icon/icon-change";
 import IconStar from "@/components/icon/icon-star";
 import WemetaTextarea from "@/components/wemeta-textarea/index";
-
+import { useRouter } from "@tarojs/taro";
+import { uploadAvatar } from '@/service/storage'
+import { isSuccess } from "@/utils";
 interface IProps {
   next: ()=>void
 }
 
 export default React.memo(function StepStart({ next }: IProps) {
-  const [value, setValue] = useState("");
+  
+  const router = useRouter();
+  const { avatarUrl } = router.params
+  const uploadedAvatarUrl = decodeURIComponent(avatarUrl ?? '')
+  const [value, setValue] = useState("职场精英,频频点头微笑,且桀骜不驯");
   
   console.log('StepStart render', { value });
 
@@ -22,8 +28,19 @@ export default React.memo(function StepStart({ next }: IProps) {
     setValue(value);
   }, []);
 
-  const handleClick = useCallback(() => {
-    next();
+  const handleClick = useCallback(async () => {
+    if(!uploadedAvatarUrl){
+      return
+    }
+    const response = await uploadAvatar({
+      aiGenerated: true,
+      avatarUrl: uploadedAvatarUrl,
+      description: value,
+    })
+    
+    if(isSuccess(response.status)){
+      next();
+    }
   }, [next]);
 
   return (
@@ -33,6 +50,7 @@ export default React.memo(function StepStart({ next }: IProps) {
           <View className={style.startIconChange}>
             <IconChange />
           </View>
+          <Image className={style.startCard} src={uploadedAvatarUrl} mode="widthFix"></Image>
         </View>
       </View>
       <View className="mb-24">

+ 21 - 2
src/pages/agent-gen/index.tsx

@@ -1,15 +1,23 @@
 import NavBarNormal from "@/components/nav-bar-normal/index";
 import { View } from "@tarojs/components";
 import PageCustom from "@/components/page-custom/index";
-import { useState, useCallback } from "react";
+import { useState, useCallback, useEffect } from "react";
 import StepStart from './components/step/StepStart'
 import StepPick from "./components/step/StepPick";
 import StepConfirm from "./components/step/StepConfirm";
+import { useRouter } from "@tarojs/taro";
+import { fetchMyAvatars } from "@/service/storage";
+import { isSuccess } from "@/utils";
 
 type TStep = 'start'|'pick'|'confirm'
 
 export default function Index() {
-  const [state, setState] = useState<TStep>('confirm')
+  const router = useRouter();
+  const { avatarUrl } = router.params
+
+  
+
+  const [state, setState] = useState<TStep>('start')
   
   const getClassName = useCallback((_state: TStep) => {
     return state === _state ? 'block': 'hidden'
@@ -27,6 +35,17 @@ export default function Index() {
     setState('start')
   }, []);
 
+  const getMyAvatars = async () => {
+    const response =  await fetchMyAvatars()
+    if(isSuccess(response.status)){
+      console.log(response.data)
+    }
+  }
+
+  useEffect(()=> {
+    getMyAvatars()
+  }, [])
+
   return (
     <PageCustom>
       <NavBarNormal backText="形象照"></NavBarNormal>

+ 26 - 17
src/pages/agent/components/AgentSetting/components/AgentEmptyCard/index.tsx

@@ -2,9 +2,10 @@ import { View } from "@tarojs/components"
 import style from './index.module.less'
 import IconPlusBig from "@/components/icon/icon-plus-big"
 import Taro from "@tarojs/taro";
+import { uploadImage } from '@/utils/http'
+import { EUploadFileScene } from "@/consts/enum";
 export default ()=> {
   const maxAvatarVideoSize = 10
-  // const maxAvatarVideoSize = useAppStore((state) => state.appConfig?.maxAvatarVideoSize); // unit MB
   let isUploading = false
   const handleClick = () => {
     Taro.chooseMedia({
@@ -21,24 +22,32 @@ export default ()=> {
           });
           return;
         }
-        
-        // setAvatarUrl(tmpPath);
-        if(r.type === 'image'){
-          Taro.cropImage({
-            src: tmpPath,
-            cropScale: "4:3",
-            success: async (res) => {
-              const path = res.tempFilePath;
-              console.log(path)
-              Taro.showLoading()
-              Taro.navigateTo({
-                url: '/pages/agent-gen/index'
+
+        Taro.showLoading()
+        const response = await uploadImage(tmpPath, EUploadFileScene.AVATAR)
+        Taro.hideLoading()
+        if(response?.publicUrl){
+            Taro.navigateTo({
+                url: `/pages/agent-gen/index?avatarUrl=${response?.publicUrl}`
               })
-              // const response = await uploadImage(path);
-              // processChooseResult(response)
-            },
-          });
         }
+        // setAvatarUrl(tmpPath);
+        // if(r.type === 'image'){
+        //   Taro.cropImage({
+        //     src: tmpPath,
+        //     cropScale: "4:3",
+        //     success: async (res) => {
+        //       const path = res.tempFilePath;
+        //       console.log(path)
+        //       Taro.showLoading()
+        //       Taro.navigateTo({
+        //         url: '/pages/agent-gen/index'
+        //       })
+        //       const response = await uploadAvatar(path);
+        //       // processChooseResult(response)
+        //     },
+        //   });
+        // }
       },
     });
   }

+ 31 - 26
src/pages/editor-pages/editor-link/index.tsx

@@ -10,7 +10,7 @@ import editorStyle from "../editor.module.less";
 import style from "./index.module.less";
 
 import BottomBar from "@/components/BottomBar";
-import LinkPick from './components/LinkPicker'
+import KnowledgePicker from '@/components/KnowledgePicker'
 import { useComponentStore } from "@/store/componentStore";
 import { uploadImage } from "@/utils/http";
 import { EComponentType, EKnowlegeTypes } from "@/consts/enum";
@@ -34,30 +34,7 @@ export default function Index() {
   const [showPopup, setShowPopup] = useState(false);
   
 
-  const handleSubmit = async () => {
-    if(!data?.id){
-      return;
-    }
-    if (loading) {
-      return;
-    }
-    const c = {
-      data: {
-        link: linkValue,
-        text: linkText,
-        layout: layout ?? 'center',
-        poster: linkPoster,
-        linkType: data.linkType,
-        id: currentComponent?.data.id,
-        index: currentComponent?.data?.index,
-      },
-      enabled: currentComponent?.enabled ?? true,
-      type: EComponentType.link,
-    };
-
-    await saveComponent(c);
-    Taro.navigateBack();
-  };
+  
 
   const handleAddPoster = () => {
     Taro.chooseImage({
@@ -74,6 +51,7 @@ export default function Index() {
     });
   };
 
+  // 选择知识库导入
   const onPicked = (pickedArr?: TKnowledgeItem[]) => {
     const picked = pickedArr?.[0]
     if(picked){
@@ -85,11 +63,38 @@ export default function Index() {
     }
   }
 
+  // 显示知识库导入弹层
   const showKnowlegePopup = ()=> {
     setShowPopup(true)
   }
 
+  const handleSubmit = async () => {
+    if(!data?.id){
+      return;
+    }
+    if (loading) {
+      return;
+    }
+    const c = {
+      data: {
+        link: linkValue,
+        text: linkText,
+        layout: layout ?? 'center',
+        poster: linkPoster,
+        linkType: data.linkType,
+        id: currentComponent?.data.id,
+        index: currentComponent?.data?.index,
+      },
+      enabled: currentComponent?.enabled ?? true,
+      type: EComponentType.link,
+    };
+
+    await saveComponent(c);
+    Taro.navigateBack();
+  };
+  
 
+  // 渲染封面
   const renderPoster = (src?: string) => {
     if (src) {
       return (
@@ -168,7 +173,7 @@ export default function Index() {
         </BottomBar>
       </View>
       
-      <LinkPick types={[EKnowlegeTypes.web]} onPicked={onPicked} setShow={setShowPopup} show={showPopup}></LinkPick>
+      <KnowledgePicker types={[EKnowlegeTypes.web]} onPicked={onPicked} setShow={setShowPopup} show={showPopup}></KnowledgePicker>
       
     </PageCustom>
   );

+ 2 - 3
src/pages/editor-pages/editor-media/index.tsx

@@ -2,9 +2,8 @@ import { useState } from "react";
 import { View } from "@tarojs/components";
 import PageCustom from "@/components/page-custom/index";
 import NavBarNormal from "@/components/nav-bar-normal/index";
-import EmptyData from "@/components/empty-data/index";
 
-import LinkPick from '../editor-link/components/LinkPicker'
+import KnowledgePicker from '@/components/KnowledgePicker'
 import Taro, { useUnload } from "@tarojs/taro";
 import { uploadImage } from "@/utils/http";
 import { useComponentStore } from "@/store/componentStore";
@@ -135,7 +134,7 @@ export default function Index({ editMode }: Props) {
         <View className="text-primary" onClick={showKnowlegePopup}>知识库导入</View>
         <UploaderGrid onNewUpload={handleChooseMedia}  list = {mediaValue} onChange={()=> {}} onDelete={handleDeleteMedia} />
       </View>
-      <LinkPick types={[EKnowlegeTypes.image]} multi onPicked={onPicked} setShow={setShowPopup} show={showPopup}></LinkPick>
+      <KnowledgePicker types={[EKnowlegeTypes.image]} multi onPicked={onPicked} setShow={setShowPopup} show={showPopup}></KnowledgePicker>
       <BottomBar>
           <View className="button-rounded button-primary flex-1" onClick={handleSubmit}>保存</View>
         </BottomBar>

+ 11 - 8
src/service/storage.ts

@@ -7,8 +7,6 @@ import Taro from '@tarojs/taro'
 
 import {FileTypes} from '@/consts'
 
-import { EVoiceType, TGetMyVoicesParams, TPaginatedVoiceResponse, TVoiceItem } from '@/types/storage'
-import { EGender } from '@/types'
 
 export type TAvatarItem = {
   "avatarId": number,
@@ -17,10 +15,11 @@ export type TAvatarItem = {
 }
 // 上传形象--并生成微视频
 export type TUploadAvatarResponse = {
-  "avatars": TAvatarItem[],
-  "failedReason": string,
-  "status": string,
-  "taskId": string
+  data: TAvatarItem[],
+  message: string, // 任务状态描述 失败原因 ,
+  status: string, // 任务状态 processing 处理中/ success 处理成功/ process_fail 处理失败/not_found 未找到 ,
+  userId: string,
+  taskId: string
 }
 export const uploadAvatar = (data: {
   "aiGenerated": boolean,
@@ -36,10 +35,14 @@ export const getUploadedAvatarStatus = (taskId: string) => {
 }
 
 // 获取个人形象库
-export const getMyAvatars = (taskId: string) => {
-  return request.get<TAvatarItem[]>(`${bluebookAiAgent}api/v1/my/avatar/task/${taskId}`)
+export const fetchMyAvatars = () => {
+  return request.get<TAvatarItem[]>(`${bluebookAiAgent}api/v1/my/avatars`, {params: {
+    pageSize: 10,
+    pageIndex: 1
+  }})
 }
 
+
 // 删除指定的形象记录
 export const deleteAvatar = (avatarId: string) => {
   return request.delete(`${bluebookAiAgent}api/v1/my/avatar/${avatarId}`)