StepStart.tsx 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  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. interface IProps {
  11. next: () =>void
  12. setTaskId: (value:any)=> void
  13. }
  14. export default React.memo(function StepStart({ next, setTaskId }: IProps) {
  15. const router = useRouter();
  16. const { avatarUrl } = router.params
  17. const uploadedAvatarUrl = decodeURIComponent(avatarUrl ?? '')
  18. const [value, setValue] = useState("职场精英,频频点头微笑,且桀骜不驯");
  19. console.log('StepStart render', { value });
  20. useEffect(() => {
  21. console.log('StepStart mounted/updated');
  22. });
  23. const handleInput = useCallback((value: string) => {
  24. setValue(value);
  25. }, []);
  26. const handleClick = useCallback(async () => {
  27. if(!uploadedAvatarUrl){
  28. return
  29. }
  30. Taro.showLoading();
  31. const response = await uploadAvatar({
  32. aiGenerated: true,
  33. avatarUrl: uploadedAvatarUrl,
  34. description: value,
  35. })
  36. Taro.hideLoading();
  37. console.log(response,1111)
  38. if(isSuccess(response.status)){
  39. setTaskId(response.data.taskId)
  40. next();
  41. }
  42. }, [next]);
  43. return (
  44. <View>
  45. <View className={style.startContainer}>
  46. <View className={style.startCard}>
  47. <View className={style.startIconChange}>
  48. <IconChange />
  49. </View>
  50. <Image className={style.startCard} src={uploadedAvatarUrl} mode="widthFix"></Image>
  51. </View>
  52. </View>
  53. <View className="mb-24">
  54. <View className="text-14 font-medium text-black mb-10">创意描述<Text className="text-12 text-gray-45">(非必填)</Text></View>
  55. <WemetaTextarea
  56. value={value}
  57. onInput={handleInput}
  58. placeholder="描述你想要生成的画面和动作。例如:职场精英在点头微笑"
  59. />
  60. </View>
  61. <View className="bottom-bar">
  62. <View className="px-20 py-12">
  63. <View className={`button-rounded-big gap-4 ${style.startGenButton}`} onClick={handleClick}>
  64. <IconStar />
  65. <View>生成微视频</View>
  66. </View>
  67. </View>
  68. </View>
  69. </View>
  70. );
  71. });