综合办公系统
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

UserFormatter.vue 1.5KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. <!-- components/UserFormatter.vue -->
  2. <template>
  3. <view>
  4. <!-- 显示格式化后的用户名 -->
  5. <text v-if="userName">{{ userName }}</text>
  6. <text v-else>加载中...</text>
  7. </view>
  8. </template>
  9. <script>
  10. import {getUser} from '@/api/system/user.js'
  11. export default {
  12. name: 'UserFormatter',
  13. props: {
  14. userId: {
  15. required: true
  16. },
  17. userMap: {
  18. type: Object,
  19. default: () => ({})
  20. }
  21. },
  22. data() {
  23. return {
  24. userName: ''
  25. };
  26. },
  27. watch: {
  28. // 监听 userId 变化
  29. userId: {
  30. immediate: true,
  31. handler: 'fetchUserName'
  32. },
  33. // 监听 userMap 变化
  34. userMap: {
  35. immediate: true,
  36. handler: 'fetchUserName'
  37. }
  38. },
  39. methods: {
  40. // 获取用户名
  41. async fetchUserName() {
  42. if (this.userMap[this.userId]) {
  43. // 如果 userMap 中有缓存,直接使用
  44. this.userName = this.userMap[this.userId];
  45. } else {
  46. // 否则从接口获取
  47. try {
  48. if(!this.userId) return
  49. const res = await getUser(this.userId);
  50. const userInfo = res.data;
  51. this.userName = userInfo.nickName;
  52. // 更新 userMap
  53. this.$emit('update:userMap', {
  54. ...this.userMap,
  55. [this.userId]: userInfo.userId
  56. });
  57. } catch (error) {
  58. console.error('获取用户信息失败:', error);
  59. this.userName = '未知用户';
  60. }
  61. }
  62. }
  63. }
  64. };
  65. </script>
  66. <style scoped>
  67. /* 可根据需要添加样式 */
  68. </style>