ProfileSetting.tsx 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211
  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('/_account/pages/EditPage?name=' + (name == user.nickname ? '' : user.nickname), 'EditPage', navigation, {
  46. name: name == user.nickname ? '' : user.nickname
  47. })
  48. }
  49. else {
  50. jumpPage('/_account/pages/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. debugger
  94. Taro.uploadFile({
  95. url: rsp.data.upload_url,
  96. filePath: avatarUrl,
  97. name: 'file',
  98. formData: rsp.data.fields,
  99. success: rlt => {
  100. debugger
  101. console.log(rlt)
  102. uploadAvatar(rsp.data.view_url)
  103. // _this.changeAvatar(rsp.data.view_url);
  104. },
  105. fail: rlt => {
  106. debugger
  107. Taro.showModal({
  108. content: rlt.errMsg
  109. })
  110. }
  111. })
  112. }
  113. })
  114. }
  115. function uploadAvatar(url) {
  116. update({ avatar: url }).then(res => {
  117. dispatch(updateSuccess({ avatar: url }));
  118. Taro.showToast({
  119. title: t('feature.common.toast.update_success'),
  120. icon: 'none'
  121. })
  122. })
  123. }
  124. function tapDone() {
  125. if (process.env.TARO_ENV == 'weapp') {
  126. // Taro.navigateBack()
  127. // console.log('profile setting navi back')
  128. if (router.params.newuser == '1'){
  129. // jumpPage('')
  130. Taro.redirectTo({
  131. url:'/_health/pages/guide_begin'
  132. })
  133. }
  134. else {
  135. Taro.navigateBack()
  136. }
  137. }
  138. else {
  139. navigation.goBack()
  140. }
  141. }
  142. return <View className="container" style={{ flex: 1 }}>
  143. <View className="avatar_row">
  144. <View className="avatar_bg">
  145. {
  146. router.params.newuser == '1' && user.avatar == header ?
  147. <Image src={require('@assets/images/avatar_empty.png')} className="avatar" mode="aspectFill" /> :
  148. <Image src={user.avatar} className="avatar" mode="aspectFill" />
  149. }
  150. <View className="camera_bg">
  151. <Image className="camera" src={require('@assets/images/camera.png')} />
  152. </View>
  153. <Button className="btn" openType="chooseAvatar" onChooseAvatar={chooseAvatar} ></Button>
  154. {
  155. process.env.TARO_ENV == 'rn' && <View style={{ opacity: 0, position: 'absolute', left: 0, top: 0, right: 0, bottom: 0 }} onClick={choose} />
  156. }
  157. </View>
  158. </View>
  159. <View onClick={editNickname}>
  160. <TableCell onClick={editNickname} title={t('page.user_profile.nickname')} showArrow={true} showMarginBottom={true}>
  161. <Text style={{ opacity: 0.8, color: MainColorType.g01 }}>{router.params.newuser == '1' ? (user.nickname == name ? t('health.enter_my_name') : user.nickname) : user.nickname}</Text>
  162. </TableCell>
  163. </View>
  164. <View style={{ flex: 1 }} />
  165. <View className="main_footer">
  166. <NewButton
  167. color={MainColorType.blue}
  168. type={NewButtonType.fill}
  169. title={t('feature.common.picker_confirm_btn')}
  170. width={rpxToPx(646)}
  171. height={rpxToPx(96)}
  172. disable={router.params.newuser == '1' && (user.avatar == header || user.nickname == name)}
  173. bold={true}
  174. onClick={() => tapDone()} />
  175. </View>
  176. {/* <Footer>
  177. <ChooseScenarioBtn disable={router.params.newuser == '1' && (user.avatar == header || user.nickname == name)} title={t('feature.common.picker_confirm_btn')} onClick={() => {
  178. if (process.env.TARO_ENV == 'weapp') {
  179. Taro.navigateBack()
  180. console.log('profile setting navi back')
  181. }
  182. else {
  183. navigation.goBack()
  184. }
  185. }} background={ColorType.fast} />
  186. </Footer>
  187. <View style={{ height: 40 }} /> */}
  188. </View>
  189. }