index.vue 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. <template>
  2. <view class="personal_wrap">
  3. <u-navbar placeholder :autoBack="true" title="编辑个人资料" @rightClick="handleNavSaveClick">
  4. <view class="u-nav-slot" slot="right">
  5. 保存
  6. </view>
  7. </u-navbar>
  8. <view class="personal_container_wrap" v-if="user.dept">
  9. <u-cell-group class="avater_cell">
  10. <u-upload @afterRead="afterRead" name="avatar" class="avatar_upload_wrap">
  11. <u-cell title="" size="large" value="修改头像" center isLink>
  12. <view slot="icon" class="u-slot-icon">
  13. <u-avatar :src="$avatar(user.avatar)" size="88rpx"></u-avatar>
  14. </view>
  15. </u-cell>
  16. </u-upload>
  17. </u-cell-group>
  18. <u-cell-group class="userInfo_wrap">
  19. <u-cell size="large">
  20. <text slot="title" class="required">姓名</text>
  21. <view slot="value" class="u-slot-value">
  22. <u--input v-model="user.nickName" disabledColor="#ffffff" border="none"></u--input>
  23. </view>
  24. </u-cell>
  25. <u-cell title="工号" size="large" :value='user.workNumber ? user.workNumber : "-"'></u-cell>
  26. <u-cell title="账号" size="large" :value="user.userName"></u-cell>
  27. <u-cell title="部门" size="large" :value="user.dept.deptName + '/' + postGroup"></u-cell>
  28. <u-cell title="系统-角色" size="large">
  29. <text slot="value" class="roleGroup_value">
  30. {{roleGroup}}
  31. </text>
  32. </u-cell>
  33. </u-cell-group>
  34. <u-cell-group class="form_wrap">
  35. <u-cell size="large" @click="showSex = true;" isLink>
  36. <text slot="title" class="required">性别</text>
  37. <view slot="value" class="u-slot-value">
  38. <u--input :value="userSexFormat(user.sex)" disabledColor="#ffffff" disabled border="none">
  39. </u--input>
  40. </view>
  41. </u-cell>
  42. <u-cell size="large">
  43. <text slot="title" class="required">邮箱</text>
  44. <view slot="value" class="u-slot-value">
  45. <u--input v-model="user.email" disabledColor="#ffffff" border="none"></u--input>
  46. </view>
  47. </u-cell>
  48. <u-cell size="large">
  49. <text slot="title" class="required">手机</text>
  50. <view slot="value" class="u-slot-value">
  51. <u--input v-model="user.phonenumber" disabledColor="#ffffff" border="none"></u--input>
  52. </view>
  53. </u-cell>
  54. </u-cell-group>
  55. </view>
  56. <u-action-sheet :show="showSex" :actions="sexActions" title="请确认关系" @close="showSex = false"
  57. @select="handleSexSelect">
  58. </u-action-sheet>
  59. </view>
  60. </template>
  61. <script>
  62. export default {
  63. data() {
  64. return {
  65. postGroup: "",
  66. roleGroup: "",
  67. user: {},
  68. showSex: false,
  69. sexActions: [{
  70. name: "男",
  71. value: "0"
  72. },
  73. {
  74. name: "女",
  75. value: "1"
  76. }
  77. ],
  78. };
  79. },
  80. methods: {
  81. afterRead(event) {
  82. uni.$u.api.uploadAvatar(event.file.url).then(()=>{
  83. this.getUser();
  84. uni.$u.toast("修改头像成功");
  85. this.$store.dispatch("user/getUserInfo");
  86. }).catch(()=>{
  87. uni.$u.toast("上传头像失败");
  88. })
  89. },
  90. onPullDownRefresh() {
  91. this.getUser().then(() => {
  92. uni.stopPullDownRefresh();
  93. })
  94. },
  95. userSexFormat(sex) {
  96. const sexDict = this.sexActions.find(v => v.value == sex);
  97. if(sexDict){
  98. return sexDict.name;
  99. }
  100. },
  101. handleSexSelect(e) {
  102. this.user.sex = e.value;
  103. },
  104. async handleNavSaveClick() {
  105. const {
  106. nickName,
  107. email,
  108. phonenumber,
  109. sex
  110. } = this.user;
  111. if (!nickName || !email || !phonenumber || !sex) {
  112. uni.$u.toast("请补充数据");
  113. return;
  114. };
  115. await uni.$u.api.updateUserProfile(this.user);
  116. this.$store.dispatch("user/getUserInfo");
  117. uni.$u.toast("保存成功");
  118. },
  119. async getUser() {
  120. const {
  121. data,
  122. postGroup,
  123. roleGroup
  124. } = await uni.$u.api.getUserProfile();
  125. Object.assign(this, {
  126. user: data,
  127. postGroup,
  128. roleGroup
  129. });
  130. Promise.resolve();
  131. },
  132. },
  133. created() {
  134. this.getUser();
  135. },
  136. }
  137. </script>
  138. <style lang="scss">
  139. .personal_wrap {
  140. .u-slot-value{
  141. width: 500rpx;
  142. }
  143. .personal_container_wrap {
  144. .avatar_upload_wrap {
  145. ::v-deep .u-upload__wrap {
  146. &>uni-view {
  147. width: 100%;
  148. }
  149. }
  150. }
  151. ::v-deep .uni-input-input {
  152. text-align: right !important;
  153. color: #999999;
  154. }
  155. .avater_cell {
  156. margin-top: 20rpx;
  157. margin-bottom: 20rpx;
  158. }
  159. .userInfo_wrap {
  160. margin-bottom: 20rpx;
  161. }
  162. .u-cell {
  163. background-color: #fff;
  164. }
  165. .u-slot-icon {
  166. image {
  167. width: 88rpx;
  168. height: 88rpx;
  169. }
  170. }
  171. .roleGroup_value {
  172. width: 500rpx;
  173. overflow: hidden;
  174. text-overflow: ellipsis;
  175. white-space: nowrap;
  176. color: #999999;
  177. text-align: right;
  178. }
  179. }
  180. }
  181. </style>