personal.vue 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270
  1. <template>
  2. <view>
  3. <view class="container">
  4. <view class="item">
  5. <view class="avatar" @tap.stop="changeAvatar">
  6. <text class="aside-left">头像</text>
  7. <image
  8. class="image_radius"
  9. :src="userInfo.avatar || 'https://sdk-web-1252463788.cos.ap-hongkong.myqcloud.com/component/TUIKit/assets/avatar_21.png'"
  10. ></image>
  11. <image class="listimage" src="/static/static/assets/detail.svg"></image>
  12. </view>
  13. </view>
  14. <view class="item">
  15. <view class="nickname" @tap="handleEditToggle">
  16. <text class="aside-left">昵称</text>
  17. <text class="aside-right">{{ userInfo.nick ? userInfo.nick : '提莫' }}</text>
  18. <image class="listimage" src="/static/static/assets/detail.svg"></image>
  19. </view>
  20. </view>
  21. </view>
  22. <view class="popup-mask" v-if="popupToggle" @tap.stop="handleEditToggle">
  23. <view class="popup-main" @tap.stop="handleCatchTap">
  24. <view class="popup-main-header">
  25. <label class="popup-main-header-title">修改昵称</label>
  26. <button class="button" @tap.stop="handleEditSubmit" :disabled="!infoNick">确认</button>
  27. </view>
  28. <input class="popup-main-input" type="text" :value="infoNick" @input="bindEditInput" />
  29. <label class="text">仅限中文、字母、数字和下划线,2-20个字</label>
  30. </view>
  31. </view>
  32. <view class="popup-mask-avatar" v-if="popupToggleAvatar" @tap.stop="handleEditToggleAvatar">
  33. <view class="popup-main-avatar" @tap.stop="handleCatchTap">
  34. <view class="pop-main-header-avatar" :data-item="item">
  35. <label class="popup-main-header-title-avatar">设置头像</label>
  36. <label class="button-avatar" @tap.stop="handleEditSubmitAvatar">确认</label>
  37. <view class="image-list">
  38. <image
  39. v-for="(item, index) in avatarList"
  40. :key="index"
  41. :class="'image-avatar ' + (item.URL === avatar && 'image-avatar-active')"
  42. :src="item.URL"
  43. :data-value="item"
  44. @tap="click"
  45. ></image>
  46. </view>
  47. </view>
  48. </view>
  49. </view>
  50. </view>
  51. </template>
  52. <script>
  53. // miniprogram/pages/TUI-personal/personal.js'
  54. const app = getApp();
  55. export default {
  56. data() {
  57. return {
  58. userInfo: {
  59. nick: '',
  60. avatarUrl: '',
  61. avatar: ''
  62. },
  63. config: {
  64. avatar: '',
  65. nick: '',
  66. phone: '',
  67. token: '',
  68. userId: '',
  69. userSig: ''
  70. },
  71. infoNick: '',
  72. avatar: '',
  73. avatarList: [
  74. {
  75. avatarname: '头像1',
  76. URL: 'https://web.sdk.qcloud.com/component/TUIKit/assets/avatar_01.png'
  77. },
  78. {
  79. avatarname: '头像2',
  80. URL: 'https://web.sdk.qcloud.com/component/TUIKit/assets/avatar_02.png'
  81. },
  82. {
  83. avatarname: '头像3',
  84. URL: 'https://web.sdk.qcloud.com/component/TUIKit/assets/avatar_03.png'
  85. },
  86. {
  87. avatarname: '头像4',
  88. URL: 'https://web.sdk.qcloud.com/component/TUIKit/assets/avatar_04.png'
  89. },
  90. {
  91. avatarname: '头像5',
  92. URL: 'https://web.sdk.qcloud.com/component/TUIKit/assets/avatar_05.png'
  93. },
  94. {
  95. avatarname: '头像6',
  96. URL: 'https://web.sdk.qcloud.com/component/TUIKit/assets/avatar_06.png'
  97. },
  98. {
  99. avatarname: '头像7',
  100. URL: 'https://web.sdk.qcloud.com/component/TUIKit/assets/avatar_07.png'
  101. },
  102. {
  103. avatarname: '头像8',
  104. URL: 'https://web.sdk.qcloud.com/component/TUIKit/assets/avatar_08.png'
  105. },
  106. {
  107. avatarname: '头像9',
  108. URL: 'https://web.sdk.qcloud.com/component/TUIKit/assets/avatar_09.png'
  109. },
  110. {
  111. avatarname: '头像10',
  112. URL: 'https://web.sdk.qcloud.com/component/TUIKit/assets/avatar_10.png'
  113. },
  114. {
  115. avatarname: '头像11',
  116. URL: 'https://web.sdk.qcloud.com/component/TUIKit/assets/avatar_11.png'
  117. },
  118. {
  119. avatarname: '头像12',
  120. URL: 'https://web.sdk.qcloud.com/component/TUIKit/assets/avatar_12.png'
  121. },
  122. {
  123. avatarname: '头像13',
  124. URL: 'https://web.sdk.qcloud.com/component/TUIKit/assets/avatar_13.png'
  125. },
  126. {
  127. avatarname: '头像14',
  128. URL: 'https://web.sdk.qcloud.com/component/TUIKit/assets/avatar_14.png'
  129. },
  130. {
  131. avatarname: '头像15',
  132. URL: 'https://web.sdk.qcloud.com/component/TUIKit/assets/avatar_15.png'
  133. },
  134. {
  135. avatarname: '头像16',
  136. URL: 'https://web.sdk.qcloud.com/component/TUIKit/assets/avatar_16.png'
  137. },
  138. {
  139. avatarname: '头像17',
  140. URL: 'https://web.sdk.qcloud.com/component/TUIKit/assets/avatar_17.png'
  141. },
  142. {
  143. avatarname: '头像18',
  144. URL: 'https://web.sdk.qcloud.com/component/TUIKit/assets/avatar_18.png'
  145. },
  146. {
  147. avatarname: '头像19',
  148. URL: 'https://web.sdk.qcloud.com/component/TUIKit/assets/avatar_19.png'
  149. },
  150. {
  151. avatarname: '头像20',
  152. URL: 'https://web.sdk.qcloud.com/component/TUIKit/assets/avatar_20.png'
  153. }
  154. ],
  155. popupToggle: false,
  156. popupToggleAvatar: false,
  157. imageSelected: false,
  158. imageTitle: '点击操作'
  159. };
  160. },
  161. components: {},
  162. props: {},
  163. /**
  164. * 生命周期函数--监听页面加载
  165. */
  166. onLoad() {
  167. this.setData({
  168. userInfo: app.globalData.userProfile
  169. });
  170. uni.setNavigationBarTitle({
  171. title: '个人中心'
  172. });
  173. },
  174. methods: {
  175. bindEditInput(e) {
  176. const val = e.detail.value;
  177. this.setData({
  178. infoNick: val ? val : ''
  179. });
  180. },
  181. // 修改昵称确认
  182. handleEditSubmit() {
  183. if (this.infoNick === app.globalData.userProfile.nick) {
  184. return;
  185. }
  186. this.setData({
  187. popupToggle: false
  188. });
  189. const promise = uni.$TUIKit.updateMyProfile({
  190. nick: this.infoNick
  191. });
  192. promise
  193. .then(imResponse => {
  194. this.setData({
  195. userInfo: imResponse.data,
  196. popupToggle: false
  197. });
  198. })
  199. .catch(imError => {
  200. this.setData({
  201. popupToggle: false
  202. });
  203. console.warn('updateMyProfile error:', imError); // 更新资料失败的相关信息
  204. });
  205. },
  206. handleEditToggle() {
  207. this.setData({
  208. popupToggle: !this.popupToggle,
  209. infoNick: this.userInfo.nick
  210. });
  211. console.log(this.infoNick, '999');
  212. },
  213. // 修改昵称 禁止冒泡
  214. handleCatchTap() {
  215. return;
  216. },
  217. // 修改头像
  218. changeAvatar() {
  219. this.setData({
  220. popupToggleAvatar: true
  221. });
  222. },
  223. click(e) {
  224. console.log(e.currentTarget.dataset.value);
  225. this.setData({
  226. avatar: e.currentTarget.dataset.value.URL
  227. });
  228. },
  229. // 修改头像确认
  230. handleEditSubmitAvatar() {
  231. uni.$TUIKit
  232. .updateMyProfile({
  233. avatar: this.avatar
  234. })
  235. .then(imResponse => {
  236. this.setData({
  237. userInfo: imResponse.data,
  238. popupToggleAvatar: !this.popupToggleAvatar
  239. });
  240. })
  241. .catch(() => {
  242. this.setData({
  243. popupToggleAvatar: !this.popupToggleAvatar
  244. });
  245. });
  246. },
  247. handleEditToggleAvatar() {
  248. this.setData({
  249. popupToggleAvatar: !this.popupToggleAvatar,
  250. avatar: this.avatar
  251. });
  252. }
  253. }
  254. };
  255. </script>
  256. <style>
  257. @import './personal.css';
  258. </style>