avatar.vue 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. <template>
  2. <view class="hui-avatar">
  3. <image v-if="user.portrait" class="avatar-image" :src="user.portrait" mode="aspectFill"></image>
  4. <view class="avatar-image" v-else>
  5. <view :style="'font-size:'+size+'rpx;line-height:'+lineHeight+'rpx'">{{name}}</view>
  6. </view>
  7. </view>
  8. </template>
  9. <script>
  10. export default {
  11. name: 'avatar',
  12. props: {
  13. user: {
  14. type: Object,
  15. default: () => {
  16. return {
  17. name: ''
  18. }
  19. }
  20. },
  21. size: {
  22. type: Number,
  23. default: 28
  24. }
  25. },
  26. data() {
  27. return {
  28. lineHeight: 30
  29. }
  30. },
  31. computed: {
  32. name() {
  33. if (!this.user.name) return '';
  34. let name = this.user.name.substring(0, 1);
  35. let strCode = name.charCodeAt();
  36. if (strCode >= 97 && strCode <= 122) {
  37. this.lineHeight = this.size + 2
  38. } else {
  39. this.lineHeight = this.size;
  40. }
  41. return name
  42. }
  43. },
  44. }
  45. </script>
  46. <style lang="scss">
  47. .hui-avatar {
  48. width: 100%;
  49. height: 100%;
  50. .avatar-image {
  51. width: 100%;
  52. height: 100%;
  53. display: block;
  54. background: $uni-primary;
  55. display: flex;
  56. flex-direction: column;
  57. justify-content: center;
  58. align-items: center;
  59. color: #fff;
  60. }
  61. }
  62. </style>