StepStart.tsx 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. import { View,Text, Image } from "@tarojs/components";
  2. import React, { useState, useCallback, useEffect } from "react";
  3. import style from './index.module.less'
  4. import IconChange from "@/components/icon/icon-change";
  5. import IconStar from "@/components/icon/icon-star";
  6. import WemetaTextarea from "@/components/wemeta-textarea/index";
  7. import Taro, { useRouter } from "@tarojs/taro";
  8. import { uploadAvatar } from '@/service/storage'
  9. import { isSuccess } from "@/utils";
  10. import { getNewAvatarPic } from "@/utils/avatar";
  11. interface IProps {
  12. next: () =>void
  13. setTaskId: (value:any)=> void
  14. }
  15. export default React.memo(function StepStart({ next, setTaskId }: IProps) {
  16. const router = useRouter();
  17. const { avatarUrl } = router.params
  18. const uploadedAvatarUrl = decodeURIComponent(avatarUrl ?? '')
  19. const [currentAvatarUrl, setCurrentAvatarUrl] = useState(uploadedAvatarUrl)
  20. const [value, setValue] = useState('');
  21. const [loading, setLoading] = useState(false)
  22. const handleChange = () => {
  23. setLoading(true)
  24. getNewAvatarPic((picUrl)=> {
  25. picUrl && setCurrentAvatarUrl(picUrl)
  26. setLoading(false)
  27. })
  28. }
  29. const handleInput = (value: string) => {
  30. setValue(value);
  31. }
  32. const handleClick = async () => {
  33. if(loading){
  34. return;
  35. }
  36. if(!currentAvatarUrl.length){
  37. return
  38. }
  39. Taro.showLoading();
  40. console.log({
  41. aiGenerated: true,
  42. avatarUrl: currentAvatarUrl,
  43. description: value,
  44. })
  45. const response = await uploadAvatar({
  46. aiGenerated: true,
  47. avatarUrl: currentAvatarUrl,
  48. description: '',
  49. })
  50. Taro.hideLoading();
  51. if(isSuccess(response.status)){
  52. setTaskId(response.data.taskId)
  53. setTimeout(()=> next(), 200)
  54. }
  55. };
  56. return (
  57. <View>
  58. <View className={style.startContainer}>
  59. <View className={style.startCard}>
  60. <View className={style.startIconChange} onClick={handleChange}>
  61. <IconChange />
  62. </View>
  63. <Image className={style.startCardImage} src={currentAvatarUrl} mode="widthFix"></Image>
  64. </View>
  65. </View>
  66. {/* <View className="mb-24">
  67. <View className="text-14 font-medium text-black mb-10">创意描述<Text className="text-12 text-gray-45">(非必填)</Text></View>
  68. <WemetaTextarea
  69. value={value}
  70. onInput={handleInput}
  71. placeholder="描述你想要生成的画面和动作。例如:职场精英在点头微笑"
  72. />
  73. </View> */}
  74. <View className="bottom-bar">
  75. <View className="px-20 py-12">
  76. <View className={`button-rounded-big gap-4 ${style.startGenButton}`} onClick={handleClick}>
  77. <IconStar />
  78. <View>生成AI形象</View>
  79. </View>
  80. </View>
  81. </View>
  82. </View>
  83. );
  84. });