ProfileSetting.tsx 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. import Buttons from "@/components/basic/Buttons";
  2. import { clear, logout, update } from "@/services/user";
  3. import { View, Text, Image, Button } from "@tarojs/components";
  4. import { useDispatch, useSelector } from "react-redux";
  5. import './ProfileSetting.scss'
  6. import Box from "@/components/layout/Box";
  7. import Taro, { useRouter } from "@tarojs/taro";
  8. import { useEffect, useState } from "react";
  9. import { useTranslation } from "react-i18next";
  10. import { baseUrl } from "@/services/http/api";
  11. import { updateSuccess } from "@/store/user";
  12. import TableCell from "@/components/layout/TableCell";
  13. import { jumpPage } from "@/features/trackTimeDuration/hooks/Common";
  14. import Footer from "@/components/layout/Footer";
  15. import { ChooseScenarioBtn } from "@/features/common/SpecBtns";
  16. import { ColorType } from "@/context/themes/color";
  17. export default function Page() {
  18. const dispatch = useDispatch();
  19. const router = useRouter();
  20. const user = useSelector((state: any) => state.user);
  21. const [name, setName] = useState(user.nickname)
  22. const [header, setHeader] = useState(user.avatar)
  23. const { t } = useTranslation()
  24. useEffect(() => {
  25. Taro.setNavigationBarTitle({
  26. title: t('page.user_profile.title')
  27. })
  28. }, [])
  29. function editNickname() {
  30. if (router.params.newuser == '1') {
  31. jumpPage('/pages/account/EditPage?name='+(name==user.nickname?'':user.nickname))
  32. }
  33. else {
  34. jumpPage('/pages/account/EditPage?name='+user.nickname)
  35. }
  36. }
  37. function chooseAvatar(e) {
  38. const { avatarUrl } = e.detail
  39. var dot = avatarUrl.lastIndexOf('.')
  40. var fileExt = dot > 0 ? avatarUrl.substring(dot) : ''
  41. // console.log(avatarUrl)
  42. Taro.request({
  43. method: 'GET',
  44. url: `${baseUrl}/api/thirdparty/aliyun/oss-form-upload`,
  45. header: {
  46. 'Authorization': 'bearer ' + global.token
  47. },
  48. data: {
  49. type: 'AVATAR',
  50. file_ext: fileExt
  51. },
  52. success: (rsp) => {
  53. debugger
  54. Taro.uploadFile({
  55. url: rsp.data.upload_url,
  56. filePath: avatarUrl,
  57. name: 'file',
  58. formData: rsp.data.fields,
  59. success: rlt => {
  60. console.log(rlt)
  61. uploadAvatar(rsp.data.view_url)
  62. // _this.changeAvatar(rsp.data.view_url);
  63. },
  64. fail: rlt => {
  65. Taro.showModal({
  66. content: rlt.errMsg
  67. })
  68. }
  69. })
  70. }
  71. })
  72. }
  73. function uploadAvatar(url) {
  74. update({ avatar: url }).then(res => {
  75. dispatch(updateSuccess({ avatar: url }));
  76. Taro.showToast({
  77. title: t('feature.common.toast.update_success'),
  78. icon: 'none'
  79. })
  80. })
  81. }
  82. return <View className="container">
  83. <View className="avatar_row">
  84. <View className="avatar_bg">
  85. {
  86. router.params.newuser == '1' && user.avatar == header ?
  87. <Image src={require('@assets/images/avatar_empty.png')} className="avatar" mode="aspectFill" /> :
  88. <Image src={user.avatar} className="avatar" mode="aspectFill" />
  89. }
  90. <View className="camera_bg">
  91. <Image className="camera" src={require('@assets/images/camera.png')} />
  92. </View>
  93. <Button className="btn" openType="chooseAvatar" onChooseAvatar={chooseAvatar}></Button>
  94. </View>
  95. </View>
  96. <View onClick={editNickname}>
  97. <TableCell title={t('page.user_profile.nickname')} showArrow={true} showMarginBottom={true}>
  98. <Text style={{ opacity: 0.8 }}>{router.params.newuser == '1' ? (user.nickname == name ? '取个名字' : user.nickname) : user.nickname}</Text>
  99. </TableCell>
  100. </View>
  101. <Footer>
  102. <ChooseScenarioBtn disable={router.params.newuser == '1' && (user.avatar == header || user.nickname == name)} title='确定' onClick={() => {
  103. Taro.navigateBack()
  104. }} background={ColorType.fast} />
  105. </Footer>
  106. </View>
  107. }