index.tsx 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. import { defineComponent } from 'vue'
  2. import iconTeacher from '@/common/images/icon_teacher.png'
  3. import { ElButton, ElDialog, ElTag } from 'element-plus'
  4. import { state } from '@/state'
  5. import { getUserType } from '@/helpers/utils'
  6. import styles from './index.module.less'
  7. import OpenMember from '@/views/user-info/components/open-member'
  8. export const getAssetsHomeFile = (fileName: string) => {
  9. const path = `../../../user-info/images/${fileName}`
  10. const modules = import.meta.globEager('../../../user-info/images/*')
  11. return modules[path].default
  12. }
  13. export default defineComponent({
  14. name: 'users',
  15. computed: {
  16. userInfo() {
  17. return state.user.data
  18. }
  19. },
  20. data() {
  21. return {
  22. memberStatus: false
  23. }
  24. },
  25. render() {
  26. return (
  27. <div class={['text-center pb-8 relative overflow-hidden', styles.users]}>
  28. <div class="bg-[#FFE7CF] absolute left-6 top-0 text-[#AB5400] text-xs py-0.5 px-2 rounded-[10px]">
  29. 学生
  30. </div>
  31. <img
  32. src={this.userInfo.heardUrl || iconTeacher}
  33. class="w-[68px] h-[68px] rounded-full border-2 border-[#2DC7AA] border-solid mt-6 mx-auto object-cover"
  34. />
  35. <p class="text-[#333] text-lg font-medium pt-4 flex items-center justify-center">
  36. {this.userInfo.username}
  37. <img
  38. src={
  39. this.userInfo.isVip
  40. ? getAssetsHomeFile('icon_vip.png')
  41. : getAssetsHomeFile('icon_vip_default.png')
  42. }
  43. class="h-[26px]"
  44. />
  45. </p>
  46. <div class={this.userInfo.isVip !== 1 ? 'mt-5' : ''}>
  47. {this.userInfo.isVip !== 1 && (
  48. <ElButton
  49. round
  50. type="primary"
  51. size="large"
  52. class="!px-4"
  53. onClick={() => {
  54. this.memberStatus = true
  55. }}
  56. >
  57. 开通会员
  58. </ElButton>
  59. )}
  60. </div>
  61. <div class="text-base text-[#999] mx-[25px] mt-9 flex items-center justify-center pt-10 border-t border-solid border-[#E7E6E6]">
  62. <span
  63. class="flex items-center justify-center flex-col leading-6 cursor-pointer flex-1"
  64. onClick={() => {
  65. if (getUserType() === 'STUDENT') {
  66. this.$router.push('/studentInfo/myFollow')
  67. }
  68. }}
  69. >
  70. <b class="text-[#333333] text-[28px] pl-1 pb-1">
  71. {this.userInfo.starTeacherNum || 0}
  72. </b>
  73. 关注
  74. </span>
  75. </div>
  76. <ElDialog
  77. modelValue={this.memberStatus}
  78. onUpdate:modelValue={val => (this.memberStatus = val)}
  79. closeOnClickModal={false}
  80. closeOnPressEscape={false}
  81. >
  82. <OpenMember />
  83. </ElDialog>
  84. </div>
  85. )
  86. }
  87. })