sa-user-profile.js 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. const SaUserProfile = {
  2. template: `
  3. <div class="sa-user-profile" :class="type != 'oper' ? 'mode-'+mode : ''">
  4. <template v-if="type != 'oper'">
  5. <template v-if="userData">
  6. <template v-if="ishover">
  7. <el-popover placement="top" trigger="hover" popper-class="profile-popover sa-user-profile sa-popper">
  8. <div class="sa-flex">
  9. <div class="avatar">
  10. <sa-image v-if="userData.avatar" :url="userData.avatar"></sa-image>
  11. <img v-else class="default-avatar" src="/assets/addons/shopro/img/default-avatar.png" />
  12. <!-- 0未知 1男 -->
  13. <img v-if="userData && (userData.gender || userData.gender==0)" class="gender"
  14. :src="'/assets/addons/shopro/img/gender-'+userData.gender+'.png'">
  15. </div>
  16. <div>
  17. <div class="text-name sa-table-line-1">
  18. {{ userData.nickname }}
  19. </div>
  20. <div class="sa-flex">
  21. <div class="id" @click="onOpenUserDetail(id)">#{{ id }}</div>
  22. <div class="text-desc">
  23. {{ userData.username || userData.account }}
  24. </div>
  25. </div>
  26. </div>
  27. </div>
  28. <template #reference>
  29. <div class="wrap">
  30. <div v-if="isavatar" class="avatar">
  31. <sa-image v-if="userData.avatar" :url="userData.avatar"></sa-image>
  32. <img v-else class="default-avatar" src="/assets/addons/shopro/img/default-avatar.png" />
  33. </div>
  34. <div class="text-name is-hover sa-table-line-1">
  35. {{ userData.nickname }}
  36. </div>
  37. </div>
  38. </template>
  39. </el-popover>
  40. </template>
  41. <div v-else class="wrap">
  42. <div v-if="isavatar" class="avatar">
  43. <sa-image v-if="userData.avatar" :url="userData.avatar"></sa-image>
  44. <img v-else class="default-avatar" src="/assets/addons/shopro/img/default-avatar.png" />
  45. </div>
  46. <div class="text-name sa-table-line-1">
  47. {{ userData.nickname }}
  48. </div>
  49. </div>
  50. </template>
  51. <template v-else>
  52. <template v-if="type == 'agent'">
  53. {{ id ? '未找到用户' : id == 0 ? '平台直推' : '暂无推荐人' }}
  54. </template>
  55. </template>
  56. </template>
  57. <template v-if="type == 'oper'">
  58. <div class="wrap">
  59. <div class="avatar mr-2">
  60. <sa-image v-if="userData.type != 'system' && userData.avatar" :url="userData.avatar"></sa-image>
  61. <img v-else class="default-avatar" src="/assets/addons/shopro/img/default-avatar.png" />
  62. </div>
  63. <div>
  64. <template v-if="userData.type != 'system'">
  65. <div class="text-name sa-table-line-1">
  66. {{ userData.name || '未找到用户' }}
  67. </div>
  68. <div class="sa-flex">
  69. <div class="id">#{{ id }}</div>
  70. <div class="text-desc">
  71. {{ userData.type_text }}
  72. </div>
  73. </div>
  74. </template>
  75. <template v-else>{{ userData.type_text }}</template>
  76. </div>
  77. </div>
  78. </template>
  79. </div>`,
  80. props: {
  81. user: Object,
  82. id: [Number, String],
  83. type: {
  84. type: String,
  85. default: 'user',
  86. },
  87. mode: {
  88. type: String,
  89. default: 'row',
  90. },
  91. isavatar: {
  92. type: Boolean,
  93. default: true,
  94. },
  95. ishover: {
  96. type: Boolean,
  97. default: true,
  98. },
  99. },
  100. setup(props) {
  101. const { ref, computed } = Vue
  102. const userData = computed(() => {
  103. let obj = props.user;
  104. if (props.type == 'user' && !props.user) {
  105. obj = {
  106. avatar: '',
  107. nickname: '未找到用户',
  108. username: '',
  109. };
  110. }
  111. if (props.type == 'admin' && !props.user) {
  112. obj = {
  113. avatar: '',
  114. nickname: '未找到用户',
  115. account: '',
  116. };
  117. }
  118. return obj;
  119. });
  120. function onOpenUserDetail(id) {
  121. Fast.api.open(`shopro/user/user/detail?id=${id}`, "会员详情")
  122. }
  123. return {
  124. Fast,
  125. userData,
  126. onOpenUserDetail,
  127. }
  128. }
  129. }