UNPKG

@blueking/bk-user-display-name

Version:

多租户环境用于显示用户名称的组件

1 lines 2.4 kB
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});class BkUserDisplayName extends HTMLElement{static configure(e){e.apiBaseUrl&&(BkUserDisplayName.apiBaseUrl=e.apiBaseUrl),e.tenantId&&(BkUserDisplayName.tenantId=e.tenantId),"number"==typeof e.cacheDuration&&(BkUserDisplayName.cacheDuration=e.cacheDuration),void 0!==e.emptyText&&(BkUserDisplayName.emptyText=e.emptyText)}constructor(){super()}async fetchUser(e){const a=BkUserDisplayName.pendingRequests.get(e);if(a)return a;const t={credentials:"include",headers:{"X-Bk-Tenant-Id":BkUserDisplayName.tenantId}},s=fetch(`${BkUserDisplayName.apiBaseUrl}/api/v3/open-web/tenant/users/${e}/display_info/`,t).then((e=>e.json())).finally((()=>{BkUserDisplayName.pendingRequests.delete(e)}));return BkUserDisplayName.pendingRequests.set(e,s),s}async fetchUsers(e){const a={credentials:"include",headers:{"X-Bk-Tenant-Id":BkUserDisplayName.tenantId}};return fetch(`${BkUserDisplayName.apiBaseUrl}/api/v3/open-web/tenant/users/-/display_info/?bk_usernames=${e.join(",")}`,a).then((e=>e.json()))}attributeChangedCallback(e,a,t){"user-id"===e&&a!==t&&this.updateDisplay()}async updateDisplay(){this.getAttribute("user-id")?(this.textContent="...",this.textContent=await this.getDisplayName()):this.textContent=BkUserDisplayName.emptyText}async getDisplayName(){var e,a;const t=null===(e=this.getAttribute("user-id"))||void 0===e?void 0:e.trim();if(!t)return"";const s=t.split(/[,,;]/).map((e=>e.trim())).filter((e=>e));try{if(1===s.length){let e;const s=BkUserDisplayName.userCache.get(t);return s&&Date.now()-s.timestamp<BkUserDisplayName.cacheDuration?e=s.data:(e=await this.fetchUser(t),BkUserDisplayName.userCache.set(t,{data:e,timestamp:Date.now()})),(null===(a=e.data)||void 0===a?void 0:a.display_name)||t}{const e=await this.fetchUsers(s),a=s.map((a=>{var t;const s=null===(t=e.data)||void 0===t?void 0:t.find((e=>e.bk_username===a));return(null==s?void 0:s.display_name)||a}));return a.join(",")}}catch(e){return console.error("DisplayName 获取用户数据失败:",e),t}}}BkUserDisplayName.userCache=new Map,BkUserDisplayName.cacheDuration=3e5,BkUserDisplayName.pendingRequests=new Map,BkUserDisplayName.apiBaseUrl="",BkUserDisplayName.tenantId="",BkUserDisplayName.emptyText="--",BkUserDisplayName.observedAttributes=["user-id"],customElements.define("bk-user-display-name",BkUserDisplayName),exports.default=BkUserDisplayName;