mine.vue 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234
  1. <template>
  2. <view class="wrap">
  3. <view class="user-view">
  4. <view class="b-avatar">
  5. <image :src="userInfo.avatar_url || '/static/imgs/user.png'" mode="aspectFill"></image>
  6. </view>
  7. <view class="b-info">
  8. <!-- #ifdef MP-WEIXIN -->
  9. <button class="s-edit iconfont icon-edit open-data-btn" open-type="chooseAvatar" @chooseavatar="onChooseAvatar"></button>
  10. <!-- #endif -->
  11. <!-- #ifdef H5 -->
  12. <view class="s-edit iconfont icon-edit" @click="onUploadAvatar"></view>
  13. <!-- #endif -->
  14. </view>
  15. </view>
  16. <view class="user-info">
  17. <view class="b-item">
  18. <text class="s-tit">成员姓名</text>
  19. <text class="s-tip">{{ userInfo.name }}</text>
  20. </view>
  21. <view class="b-item">
  22. <text class="s-tit">成员编号</text>
  23. <text class="s-tip">{{ userInfo.number }}</text>
  24. </view>
  25. <view class="b-item">
  26. <text class="s-tit">手机号</text>
  27. <text class="s-tip">{{ userInfo.phone }}</text>
  28. </view>
  29. <view class="b-item">
  30. <text class="s-tit">所在分组</text>
  31. <text class="s-tip">{{ userInfo.group_name }}</text>
  32. </view>
  33. <!-- #ifdef MP-WEIXIN -->
  34. <view class="b-item" v-if="loginMethods.indexOf('phone_captcha') !== -1 || loginMethods.indexOf('wechat_phone') !== -1" @click="onChangePhone">
  35. <text class="s-tit">修改手机号</text>
  36. <text class="s-tip"></text>
  37. <text class="s-more iconfont icon-more"></text>
  38. </view>
  39. <!-- #endif -->
  40. <!-- #ifdef H5 -->
  41. <view class="b-item" v-if="loginMethods.indexOf('phone_captcha') !== -1" @click="onChangePhone">
  42. <text class="s-tit">修改手机号</text>
  43. <text class="s-tip"></text>
  44. <text class="s-more iconfont icon-more"></text>
  45. </view>
  46. <!-- #endif -->
  47. <view class="b-item" v-if="loginMethods.indexOf('name_code') !== -1 || loginMethods.indexOf('number_code') !== -1" @click="onChangeCode">
  48. <text class="s-tit">修改登录码</text>
  49. <text class="s-tip"></text>
  50. <text class="s-more iconfont icon-more"></text>
  51. </view>
  52. </view>
  53. <view class="btn-logout" @click="onLogout">退出登录</view>
  54. </view>
  55. </template>
  56. <script>
  57. import { getUserInfo, updateUserInfo, logout } from '@/service/api/user.js';
  58. import { uploadImage } from '@/service/api/common.js';
  59. import mixinsCommon from '@/mixins/common.js';
  60. import mixinsAuth from '@/mixins/auth.js';
  61. export default {
  62. mixins: [mixinsCommon, mixinsAuth],
  63. data() {
  64. return {
  65. userInfo: {}
  66. };
  67. },
  68. onLoad() {
  69. getUserInfo().then(([err, res]) => {
  70. console.log('getUserInfo', err, res);
  71. if (!err) {
  72. this.userInfo = res;
  73. }
  74. });
  75. },
  76. computed: {
  77. loginMethods() {
  78. return this.$store.getters.globalConfig.login_methods || [];
  79. }
  80. },
  81. methods: {
  82. onChangePhone() {
  83. uni.navigateTo({
  84. url: '/answer_pages/user/changePhone'
  85. });
  86. },
  87. onChangeCode() {
  88. uni.navigateTo({
  89. url: '/answer_pages/user/changeCode'
  90. });
  91. },
  92. onLogout() {
  93. logout().then(([err, res]) => {
  94. console.log('logout', err, res);
  95. this.$store.commit('delAccessToken');
  96. uni.reLaunch({
  97. url: '/answer_pages/user/login'
  98. });
  99. });
  100. },
  101. onChooseAvatar(e) {
  102. console.log('onChooseAvatar', e);
  103. let imageUrl = e.detail.avatarUrl;
  104. uploadImage(imageUrl).then(([err, res]) => {
  105. console.log('uploadImage', err, res);
  106. if (!err) {
  107. updateUserInfo(res.path).then(([err, res]) => {
  108. console.log('updateUserInfo', err, res);
  109. if (!err) {
  110. this.userInfo.avatar_url = imageUrl;
  111. this.$logic.showToast('修改成功');
  112. }
  113. });
  114. }
  115. });
  116. },
  117. onUploadAvatar(e) {
  118. console.log('onUploadAvatar', e);
  119. uni.chooseImage({
  120. count: 1, // 1张
  121. sizeType: ['compressed'] // 压缩图
  122. }).then(([err, res]) => {
  123. console.log('chooseImage', err, res);
  124. if (!err) {
  125. let imageUrl = res.tempFilePaths[0];
  126. uploadImage(imageUrl).then(([err, res]) => {
  127. console.log('uploadImage', err, res);
  128. if (!err) {
  129. updateUserInfo(res.path).then(([err, res]) => {
  130. console.log('updateUserInfo', err, res);
  131. if (!err) {
  132. this.userInfo.avatar_url = imageUrl;
  133. this.$logic.showToast('修改成功');
  134. }
  135. });
  136. }
  137. });
  138. }
  139. });
  140. }
  141. }
  142. };
  143. </script>
  144. <style lang="scss">
  145. page {
  146. padding-bottom: env(safe-area-inset-bottom);
  147. background: $pq-bg-color;
  148. }
  149. .wrap {
  150. padding: 0 40upx 100upx 40upx;
  151. }
  152. .user-view {
  153. margin-top: 50upx;
  154. display: flex;
  155. align-items: center;
  156. flex-direction: column;
  157. z-index: 1;
  158. .b-avatar {
  159. width: 180upx;
  160. height: 180upx;
  161. image {
  162. width: 180upx;
  163. height: 180upx;
  164. border: 5upx solid #fff;
  165. border-radius: 50%;
  166. }
  167. }
  168. .b-info {
  169. margin-top: 10upx;
  170. .s-nickname {
  171. font-weight: bold;
  172. }
  173. .s-edit {
  174. margin-top: 20upx;
  175. font-size: 32upx;
  176. color: #bbb;
  177. }
  178. }
  179. }
  180. .user-info {
  181. margin-top: 50upx;
  182. background: #fff;
  183. border-radius: 20upx;
  184. .b-item {
  185. padding: 0 40upx;
  186. border-bottom: 1upx solid $pq-bg-color;
  187. height: 100upx;
  188. display: flex;
  189. align-items: center;
  190. position: relative;
  191. font-size: 26upx;
  192. .s-tit {
  193. color: #000;
  194. }
  195. .s-tip {
  196. flex: 1;
  197. color: #808080;
  198. text-align: right;
  199. }
  200. .s-more {
  201. margin-left: 10upx;
  202. color: #808080;
  203. }
  204. }
  205. }
  206. .btn-logout {
  207. margin-top: 60upx;
  208. height: 80upx;
  209. line-height: 80upx;
  210. text-align: center;
  211. color: #da5650;
  212. background: #ffffff;
  213. font-size: 32upx;
  214. border: 1px solid #da5650;
  215. border-radius: 40upx;
  216. letter-spacing: 10upx;
  217. }
  218. </style>