ProfileSetting.tsx 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  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, MainColorType } from "@/context/themes/color";
  17. import { checkAuthorized } from "@/utils/check_authorized";
  18. import NewButton, { NewButtonType } from "@/_health/base/new_button";
  19. import { rpxToPx } from "@/utils/tools";
  20. let useNavigation;
  21. if (process.env.TARO_ENV == 'rn') {
  22. useNavigation = require("@react-navigation/native").useNavigation
  23. }
  24. export default function Page() {
  25. const dispatch = useDispatch();
  26. const router = useRouter();
  27. const user = useSelector((state: any) => state.user);
  28. const [name, setName] = useState(user.nickname)
  29. const [header, setHeader] = useState(user.avatar)
  30. const { t } = useTranslation()
  31. let navigation;
  32. if (useNavigation) {
  33. navigation = useNavigation()
  34. }
  35. useEffect(() => {
  36. Taro.setNavigationBarTitle({
  37. title: t('page.user_profile.title')
  38. })
  39. if (process.env.TARO_ENV == 'rn') {
  40. navigation.setOptions({ title: t('page.user_profile.title') ?? '' });
  41. }
  42. }, [])
  43. function editNickname() {
  44. if (router.params.newuser == '1') {
  45. jumpPage('/pages/account/EditPage?name=' + (name == user.nickname ? '' : user.nickname), 'EditPage', navigation, {
  46. name: name == user.nickname ? '' : user.nickname
  47. })
  48. }
  49. else {
  50. jumpPage('/pages/account/EditPage?name=' + user.nickname, 'EditPage', navigation, {
  51. name: user.nickname
  52. })
  53. }
  54. }
  55. function choose() {
  56. if (process.env.TARO_ENV == 'rn') {
  57. Taro.chooseImage({
  58. count: 1, // 默认9
  59. sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有
  60. sourceType: ['album'], // 可以指定来源是相册还是相机,默认二者都有,在H5浏览器端支持使用 `user` 和 `environment`分别指定为前后摄像头
  61. success: function (res) {
  62. // 返回选定照片的本地文件路径列表,tempFilePath可以作为img标签的src属性显示图片
  63. var tempFilePaths = res.tempFilePaths
  64. console.log(tempFilePaths)
  65. operate(tempFilePaths[0])
  66. checkAuthorized()
  67. },
  68. fail(res) {
  69. checkAuthorized()
  70. },
  71. })
  72. }
  73. }
  74. function chooseAvatar(e) {
  75. const { avatarUrl } = e.detail
  76. operate(avatarUrl)
  77. }
  78. function operate(avatarUrl) {
  79. var dot = avatarUrl.lastIndexOf('.')
  80. var fileExt = dot > 0 ? avatarUrl.substring(dot) : ''
  81. // console.log(avatarUrl)
  82. Taro.request({
  83. method: 'GET',
  84. url: `${baseUrl}/api/thirdparty/aliyun/oss-form-upload`,
  85. header: {
  86. 'Authorization': 'bearer ' + global.token
  87. },
  88. data: {
  89. type: 'AVATAR',
  90. file_ext: fileExt
  91. },
  92. success: (rsp) => {
  93. Taro.uploadFile({
  94. url: rsp.data.upload_url,
  95. filePath: avatarUrl,
  96. name: 'file',
  97. formData: rsp.data.fields,
  98. success: rlt => {
  99. console.log(rlt)
  100. uploadAvatar(rsp.data.view_url)
  101. // _this.changeAvatar(rsp.data.view_url);
  102. },
  103. fail: rlt => {
  104. Taro.showModal({
  105. content: rlt.errMsg
  106. })
  107. }
  108. })
  109. }
  110. })
  111. }
  112. function uploadAvatar(url) {
  113. update({ avatar: url }).then(res => {
  114. dispatch(updateSuccess({ avatar: url }));
  115. Taro.showToast({
  116. title: t('feature.common.toast.update_success'),
  117. icon: 'none'
  118. })
  119. })
  120. }
  121. function tapDone() {
  122. if (process.env.TARO_ENV == 'weapp') {
  123. // Taro.navigateBack()
  124. // console.log('profile setting navi back')
  125. if (router.params.newuser == '1'){
  126. // jumpPage('')
  127. Taro.redirectTo({
  128. url:'/_health/pages/guide_begin'
  129. })
  130. }
  131. else {
  132. Taro.navigateBack()
  133. }
  134. }
  135. else {
  136. navigation.goBack()
  137. }
  138. }
  139. return <View className="container" style={{ flex: 1 }}>
  140. <View className="avatar_row">
  141. <View className="avatar_bg">
  142. {
  143. router.params.newuser == '1' && user.avatar == header ?
  144. <Image src={require('@assets/images/avatar_empty.png')} className="avatar" mode="aspectFill" /> :
  145. <Image src={user.avatar} className="avatar" mode="aspectFill" />
  146. }
  147. <View className="camera_bg">
  148. <Image className="camera" src={require('@assets/images/camera.png')} />
  149. </View>
  150. <Button className="btn" openType="chooseAvatar" onChooseAvatar={chooseAvatar} ></Button>
  151. {
  152. process.env.TARO_ENV == 'rn' && <View style={{ opacity: 0, position: 'absolute', left: 0, top: 0, right: 0, bottom: 0 }} onClick={choose} />
  153. }
  154. </View>
  155. </View>
  156. <View onClick={editNickname}>
  157. <TableCell onClick={editNickname} title={t('page.user_profile.nickname')} showArrow={true} showMarginBottom={true}>
  158. <Text style={{ opacity: 0.8, color: MainColorType.g01 }}>{router.params.newuser == '1' ? (user.nickname == name ? '取个名字' : user.nickname) : user.nickname}</Text>
  159. </TableCell>
  160. </View>
  161. <View style={{ flex: 1 }} />
  162. <View className="main_footer">
  163. <NewButton
  164. color={MainColorType.blue}
  165. type={NewButtonType.fill}
  166. title={t('feature.common.picker_confirm_btn')}
  167. width={rpxToPx(646)}
  168. height={rpxToPx(96)}
  169. disable={router.params.newuser == '1' && (user.avatar == header || user.nickname == name)}
  170. bold={true}
  171. onClick={() => tapDone()} />
  172. </View>
  173. {/* <Footer>
  174. <ChooseScenarioBtn disable={router.params.newuser == '1' && (user.avatar == header || user.nickname == name)} title={t('feature.common.picker_confirm_btn')} onClick={() => {
  175. if (process.env.TARO_ENV == 'weapp') {
  176. Taro.navigateBack()
  177. console.log('profile setting navi back')
  178. }
  179. else {
  180. navigation.goBack()
  181. }
  182. }} background={ColorType.fast} />
  183. </Footer>
  184. <View style={{ height: 40 }} /> */}
  185. </View>
  186. }