Profile.vue 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213
  1. <template>
  2. <div id="profile">
  3. <!--登录弹窗-->
  4. <el-dialog
  5. title="用户登录"
  6. append-to-body
  7. :visible.sync="dialogVisible"
  8. width="85%"
  9. center
  10. >
  11. <el-input v-model="username" placeholder="请输入登录账号" clearable />
  12. <br>
  13. <br>
  14. <el-input
  15. v-model="password"
  16. placeholder="请输入密码"
  17. show-password
  18. />
  19. <br>
  20. <br>
  21. <span
  22. class="register"
  23. >没有账号?<a
  24. href="javascript:void(0)"
  25. @click="dialogVisible2 = true"
  26. >点击注册</a></span>
  27. <span slot="footer" class="dialog-footer">
  28. <el-button
  29. type="primary"
  30. :loading="isLoading"
  31. @click.native="loginBtn"
  32. >登 录</el-button>
  33. </span>
  34. </el-dialog>
  35. <!--注册弹窗-->
  36. <el-dialog
  37. title="用户注册"
  38. append-to-body
  39. :visible.sync="dialogVisible2"
  40. width="85%"
  41. center
  42. >
  43. <el-col class="avatar-name" style="padding-bottom: 10px">
  44. <img :src="imageUrl" class="avatar"><br>
  45. <el-upload
  46. ref="uploadImg"
  47. class="avatar-uploader"
  48. :auto-upload="false"
  49. :action="baseURL + '/upload'"
  50. :show-file-list="false"
  51. :on-change="imgChange"
  52. :on-success="handleAvatarSuccess"
  53. :before-upload="beforeAvatarUpload"
  54. >
  55. <el-button
  56. type="primary"
  57. size="medium"
  58. class="el-icon-plus avatar-uploader-icon"
  59. >上传头像</el-button>
  60. </el-upload>
  61. </el-col>
  62. <el-input
  63. v-model="nickname"
  64. placeholder="请输入您的昵称"
  65. clearable
  66. @blur="nickNameBlur"
  67. />
  68. <br>
  69. <br>
  70. <el-input
  71. v-model="phone"
  72. placeholder="请输入手机号码"
  73. clearable
  74. @blur="phoneBlur"
  75. />
  76. <br>
  77. <br>
  78. <el-input
  79. v-model="password"
  80. placeholder="请输入密码"
  81. show-password
  82. />
  83. <br>
  84. <br>
  85. <el-input
  86. v-model="repassword"
  87. placeholder="确认密码"
  88. show-password
  89. />
  90. <br>
  91. <br>
  92. <el-input
  93. v-model="rcode"
  94. placeholder="请输入验证码"
  95. style="width: 45%; padding-right: 2px"
  96. />
  97. <el-button type="primary" :disabled="isBtn" @click="fetchVerifyCode">{{ code }}</el-button>
  98. <span slot="footer" class="dialog-footer">
  99. <el-button
  100. type="primary"
  101. :loading="isLoading"
  102. @click.native="register"
  103. >注 册</el-button>
  104. </span>
  105. </el-dialog>
  106. <el-row justify="center">
  107. <el-col class="avatar-name">
  108. <img v-if="user" :src="user.avatarurl" class="avatar">
  109. <img v-else src="@/assets/img/icon/avatar.png" class="avatar"><br>
  110. <el-button
  111. v-if="!user"
  112. type="danger"
  113. size="small"
  114. @click="dialogVisible = true"
  115. >登录/注册</el-button>
  116. <span v-else>{{ user.nickname }}</span>
  117. </el-col>
  118. </el-row>
  119. <div class="graySpace" />
  120. <el-row :gutter="3">
  121. <el-col
  122. v-for="(item, index) in items"
  123. :key="index"
  124. :span="8"
  125. class="item"
  126. @click.native="itemClick(item.item)"
  127. >
  128. <img :src="item.img" alt="" class="icon-img">
  129. <div class="detail">{{ item.item }}</div>
  130. </el-col>
  131. </el-row>
  132. </div>
  133. </template>
  134. <script>
  135. import { userMixin } from 'assets/js/mixin'
  136. export default {
  137. name: 'Profile',
  138. mixins: [userMixin],
  139. data() {
  140. return {
  141. items: [
  142. { img: require('assets/img/icon/history.png'), item: '历史记录' },
  143. { img: require('assets/img/icon/mylike.png'), item: '我的收藏' },
  144. { img: require('assets/img/icon/profile.png'), item: '个人资料' },
  145. { img: require('assets/img/icon/exit.png'), item: '退出登录' }
  146. ]
  147. }
  148. },
  149. methods: {
  150. itemClick(item) {
  151. if (this.user === null) {
  152. this.$message({
  153. message: '尚未登录!',
  154. type: 'warning'
  155. })
  156. } else {
  157. if (item === '我的收藏') {
  158. this.goToCollection()
  159. } else if (item === '历史记录') {
  160. this.goToHistory()
  161. } else if (item === '个人资料') {
  162. // todo
  163. } else {
  164. this.exitLogin()
  165. }
  166. }
  167. }
  168. }
  169. }
  170. </script>
  171. <style scoped>
  172. #profile {
  173. padding-top: 10px;
  174. /*background-color: #9acfea;*/
  175. }
  176. .graySpace {
  177. background: #eee;
  178. height: 20px;
  179. }
  180. .avatar-name {
  181. text-align: center;
  182. }
  183. .avatar {
  184. width: 70px;
  185. height: 70px;
  186. border-radius: 50%;
  187. }
  188. .item {
  189. margin-top: 5px;
  190. cursor: pointer;
  191. text-align: center;
  192. }
  193. .detail {
  194. font-size: 15px;
  195. }
  196. .icon-img {
  197. width: 50%;
  198. }
  199. </style>