@blueking/bk-user-selector 0.1.0 → 0.1.1-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -3,7 +3,7 @@
3
3
  })(this, function(exports2, vue, bkuiVue) {
4
4
  "use strict";
5
5
  var __vite_style__ = document.createElement("style");
6
- __vite_style__.textContent = ".me-tag[data-v-4f251ce1] {\n position: absolute;\n top: 50%;\n right: 8px;\n z-index: 1;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\n padding: 0 8px;\n font-size: 12px;\n color: #4d4f56;\n white-space: nowrap;\n cursor: pointer;\n background-color: #e1ecff;\n border-radius: 50%;\n transform: translateY(-50%);\n}\n.me-tag[data-v-4f251ce1]:hover {\n color: #3a84ff;\n background-color: #cddffe;\n}\n.me-tag.disabled[data-v-4f251ce1] {\n color: #c4c6cc;\n cursor: not-allowed;\n background-color: #f0f1f5;\n}.dropdown-content[data-v-024fc663] {\n min-height: 40px;\n max-height: 300px;\n padding: 5px 0;\n overflow-y: auto;\n}\n.dropdown-content .no-data[data-v-024fc663] {\n padding: 10px;\n color: #979ba5;\n text-align: center;\n}\n.dropdown-content .user-group .group-header[data-v-024fc663] {\n display: flex;\n align-items: center;\n padding: 8px 12px;\n color: #979ba5;\n}\n.dropdown-content .user-group .group-header .group-count[data-v-024fc663] {\n margin-left: 4px;\n}\n.dropdown-content .user-option[data-v-024fc663] {\n display: flex;\n align-items: center;\n height: 32px;\n padding: 8px 12px;\n cursor: pointer;\n}\n.dropdown-content .user-option[data-v-024fc663]:hover {\n background-color: #f5f7fa;\n}.user-tag[data-v-48ac8fc1] {\n margin-right: 4px;\n margin-left: 0;\n}\n.user-tag.draggable[data-v-48ac8fc1] {\n cursor: move;\n}\n.user-tag.active[data-v-48ac8fc1] {\n background-color: #e1ecff;\n border-color: #3a84ff;\n}\n.user-tag.is-custom[data-v-48ac8fc1] {\n color: #ea3636;\n background-color: #feebea;\n border-color: rgba(234, 53, 54, 0.3019607843);\n}\n.user-tag.is-custom[data-v-48ac8fc1]:hover {\n background-color: #fedddc;\n}\n.user-tag .tag-content .user-name[data-v-48ac8fc1] {\n overflow: hidden;\n text-overflow: ellipsis;\n font-size: 12px;\n white-space: nowrap;\n}.bk-user-selector[data-v-65e61c1c] {\n position: relative;\n width: 100%;\n height: 32px;\n font-size: 12px;\n}\n.bk-user-selector.is-disabled[data-v-65e61c1c] {\n pointer-events: none;\n cursor: not-allowed;\n background-color: #dcdee5;\n}\n.bk-user-selector .tags-container[data-v-65e61c1c] {\n position: relative;\n min-height: 32px;\n padding: 1px 10px 1px 8px;\n background-color: #fff;\n border: 1px solid #c4c6cc;\n border-radius: 2px;\n transition: all 0.2s ease;\n}\n.bk-user-selector .tags-container.focused[data-v-65e61c1c] {\n border-color: #3a84ff;\n box-shadow: 0 0 0 2px rgba(58, 132, 255, 0.1);\n}\n.bk-user-selector .tags-container.tags-container-collapsed[data-v-65e61c1c] {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n}\n.bk-user-selector .tag-list[data-v-65e61c1c] {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n}\n.bk-user-selector .tag-wrapper[data-v-65e61c1c] {\n display: inline-flex;\n align-items: center;\n max-width: 100%;\n}\n.bk-user-selector .search-input[data-v-65e61c1c] {\n min-width: 20px;\n height: 28px;\n outline: none;\n background: transparent;\n border: none;\n}\n.bk-user-selector .search-input[data-v-65e61c1c]::placeholder {\n color: #c4c6cc;\n}\n.bk-user-selector .search-input.input-inline[data-v-65e61c1c] {\n min-width: 20px;\n}\n.bk-user-selector .search-input.input-last[data-v-65e61c1c], .bk-user-selector .search-input.search-input-collapsed[data-v-65e61c1c] {\n flex: 1;\n}\n.hidden-users[data-v-65e61c1c] {\n padding: 6px 10px;\n}.bk-user-selector-popover {\n padding: 0 !important;\n}";
6
+ __vite_style__.textContent = ".me-tag[data-v-4f251ce1] {\n position: absolute;\n top: 50%;\n right: 8px;\n z-index: 1;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\n padding: 0 8px;\n font-size: 12px;\n color: #4d4f56;\n white-space: nowrap;\n cursor: pointer;\n background-color: #e1ecff;\n border-radius: 50%;\n transform: translateY(-50%);\n}\n.me-tag[data-v-4f251ce1]:hover {\n color: #3a84ff;\n background-color: #cddffe;\n}\n.me-tag.disabled[data-v-4f251ce1] {\n color: #c4c6cc;\n cursor: not-allowed;\n background-color: #f0f1f5;\n}.dropdown-content[data-v-d5a338f0] {\n min-height: 40px;\n max-height: 300px;\n padding: 5px 0;\n overflow-y: auto;\n}\n.dropdown-content .no-data[data-v-d5a338f0] {\n padding: 10px;\n color: #979ba5;\n text-align: center;\n}\n.dropdown-content .user-group .group-header[data-v-d5a338f0] {\n display: flex;\n align-items: center;\n padding: 8px 12px;\n color: #979ba5;\n}\n.dropdown-content .user-group .group-header .group-count[data-v-d5a338f0] {\n margin-left: 4px;\n}\n.dropdown-content .user-option[data-v-d5a338f0] {\n display: flex;\n align-items: center;\n height: 32px;\n padding: 8px 12px;\n cursor: pointer;\n}\n.dropdown-content .user-option[data-v-d5a338f0]:hover {\n background-color: #f5f7fa;\n}.user-tag[data-v-1f2e0737] {\n margin-right: 4px;\n margin-left: 0;\n}\n.user-tag.draggable[data-v-1f2e0737] {\n cursor: move;\n}\n.user-tag.active[data-v-1f2e0737] {\n background-color: #e1ecff;\n border-color: #3a84ff;\n}\n.user-tag.is-custom[data-v-1f2e0737] {\n color: #ea3636;\n background-color: #feebea;\n border-color: rgba(234, 53, 54, 0.3019607843);\n}\n.user-tag.is-custom[data-v-1f2e0737]:hover {\n background-color: #fedddc;\n}\n.user-tag .tag-content .user-name[data-v-1f2e0737] {\n overflow: hidden;\n text-overflow: ellipsis;\n font-size: 12px;\n white-space: nowrap;\n}.bk-user-selector[data-v-9975c7e1] {\n position: relative;\n width: 100%;\n height: 32px;\n font-size: 12px;\n}\n.bk-user-selector.is-disabled[data-v-9975c7e1] {\n pointer-events: none;\n cursor: not-allowed;\n background-color: #dcdee5;\n}\n.bk-user-selector .tags-container[data-v-9975c7e1] {\n position: relative;\n min-height: 32px;\n padding: 1px 10px 1px 8px;\n background-color: #fff;\n border: 1px solid #c4c6cc;\n border-radius: 2px;\n transition: all 0.2s ease;\n}\n.bk-user-selector .tags-container.focused[data-v-9975c7e1] {\n border-color: #3a84ff;\n box-shadow: 0 0 0 2px rgba(58, 132, 255, 0.1);\n}\n.bk-user-selector .tags-container.tags-container-collapsed[data-v-9975c7e1] {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n}\n.bk-user-selector .tag-list[data-v-9975c7e1] {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n}\n.bk-user-selector .tag-wrapper[data-v-9975c7e1] {\n display: inline-flex;\n align-items: center;\n max-width: 100%;\n}\n.bk-user-selector .search-input[data-v-9975c7e1] {\n min-width: 20px;\n height: 28px;\n outline: none;\n background: transparent;\n border: none;\n}\n.bk-user-selector .search-input[data-v-9975c7e1]::placeholder {\n color: #c4c6cc;\n}\n.bk-user-selector .search-input.input-inline[data-v-9975c7e1] {\n min-width: 20px;\n}\n.bk-user-selector .search-input.input-last[data-v-9975c7e1], .bk-user-selector .search-input.search-input-collapsed[data-v-9975c7e1] {\n flex: 1;\n}\n.hidden-users[data-v-9975c7e1] {\n padding: 6px 10px;\n}.bk-user-selector-popover {\n padding: 0 !important;\n}";
7
7
  document.head.appendChild(__vite_style__);
8
8
  var commonjsGlobal = typeof globalThis !== "undefined" ? globalThis : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : {};
9
9
  function getDefaultExportFromCjs(x) {
@@ -2913,7 +2913,7 @@
2913
2913
  };
2914
2914
  const lookupUsers = async (params) => {
2915
2915
  const { apiBaseUrl, tenantId, exactSearchKey = "bk_username", usersList = [], enableMultiTenantMode = true } = params;
2916
- const users = usersList.filter(Boolean).map((user) => user.trim());
2916
+ const users = usersList.filter(Boolean).map((user) => typeof user === "string" ? user.trim() : String(user).trim());
2917
2917
  if (!enableMultiTenantMode) {
2918
2918
  try {
2919
2919
  const userList = await getUserList(apiBaseUrl, { userIds: users });
@@ -2951,12 +2951,14 @@
2951
2951
  ...user,
2952
2952
  id: user.username,
2953
2953
  name: `${user.display_name}(${user.username})`,
2954
+ type: user.data_source_type,
2954
2955
  tenantId: user.owner_tenant_id
2955
2956
  }));
2956
2957
  }
2957
2958
  return users.map((user) => ({
2958
2959
  id: user.bk_username,
2959
2960
  name: user.display_name,
2961
+ type: user.data_source_type,
2960
2962
  tenantId: user.owner_tenant_id,
2961
2963
  ...user
2962
2964
  }));
@@ -3129,7 +3131,8 @@
3129
3131
  "zh-CN": zhCN
3130
3132
  };
3131
3133
  const getPath = (obj, path, variables) => {
3132
- const pathStack = /^\w/.test(path) ? path.split(".") : [path];
3134
+ const safePath = typeof path === "string" ? path : String(path ?? "");
3135
+ const pathStack = /^\w/.test(safePath) ? safePath.split(".") : [safePath];
3133
3136
  const { length } = pathStack;
3134
3137
  let target = obj;
3135
3138
  let i = 0;
@@ -3139,9 +3142,11 @@
3139
3142
  }
3140
3143
  if (variables) {
3141
3144
  target = target[pathStack[i]];
3142
- Object.keys(variables).forEach((key) => {
3143
- target = target.replace(`{${key}}`, variables[key]);
3144
- });
3145
+ if (typeof target === "string") {
3146
+ Object.keys(variables).forEach((key) => {
3147
+ target = target.replace(`{${key}}`, variables[key]);
3148
+ });
3149
+ }
3145
3150
  } else {
3146
3151
  target = target[pathStack[i]];
3147
3152
  }
@@ -3373,10 +3378,12 @@
3373
3378
  const performSearch = async (keyword) => {
3374
3379
  if (!(keyword == null ? void 0 : keyword.length)) {
3375
3380
  searchResults.value = [];
3381
+ loading.value = false;
3376
3382
  return;
3377
3383
  }
3378
3384
  if (enableMultiTenantMode && (!apiBaseUrl || !tenantId)) {
3379
3385
  console.warn("执行用户搜索需要提供有效的API基础URL和租户ID");
3386
+ loading.value = false;
3380
3387
  return;
3381
3388
  }
3382
3389
  loading.value = true;
@@ -3398,7 +3405,7 @@
3398
3405
  const debouncedSearch = debounce(performSearch, SEARCH_DEBOUNCE_DELAY);
3399
3406
  const handleSearchInput = (value) => {
3400
3407
  loading.value = true;
3401
- searchQuery.value = value.trim();
3408
+ searchQuery.value = typeof value === "string" ? value.trim() : String(value ?? "").trim();
3402
3409
  debouncedSearch(searchQuery.value);
3403
3410
  };
3404
3411
  const clearSearch = () => {
@@ -3499,6 +3506,9 @@
3499
3506
  return target;
3500
3507
  };
3501
3508
  const MeTag = /* @__PURE__ */ _export_sfc(_sfc_main$3, [["__scopeId", "data-v-4f251ce1"]]);
3509
+ const UserGroupAvatar = "data:image/svg+xml,%3csvg%20viewBox='0%200%201024%201024'%20version='1.1'%20xmlns='http://www.w3.org/2000/svg'%20style='fill:%20%23A3C5FD;'%3e%3cpath%20fill-rule='evenodd'%20d='M405.7858816%20162.66256256C416.4461344%20160.6535248%20439.8986944%20159.44810208%20457.3815104%20160.25171712%20484.2453504%20161.05533248%20494.052784%20163.4661776%20516.226112%20174.7167888%20567.8217376%20200.43247136%20597.670448%20242.22045568%20606.6250624%20301.28616416%20617.711728%20374.415136%20593.4063488%20443.5260352%20535.8409792%20500.180896%20509.8299584%20525.8965792%20505.565856%20537.5489984%20514.0940608%20557.237568%20521.3430336%20572.9080608%20546.0748224%20586.5695168%20629.2248%20620.3213504%20691.054272%20645.2334208%20760.985536%20687.4232096%20767.8080992%20703.8973216%20774.6306624%20720.3714304%20784.8645056%20752.114224%20791.6870688%20777.4280992%20799.7888608%20807.1618592%20793.3927072%20818.8142784%20761.8383584%20832.4757344%20720.4765728%20850.155264%20669.3073536%20857.3878016%20546.9276416%20862.2094912%20392.9935776%20868.2366048%20227.12002944%20858.5932224%20162.30568672%20840.1100768%20134.5890272%20832.4757344%20108.15159776%20815.1980096%20100.47621504%20799.5275136%2093.6536528%20786.2678656%2094.08006304%20784.2588288%20105.59313696%20746.4889184%20116.67980096%20709.924432%20119.23826176%20705.5045504%20141.41158944%20685.4141728%20143.84821888%20683.2001312%20146.05397248%20681.2036448%20148.2232096%20679.3252416L152.13038144%20676.0501632C159.5946992%20670.0236288%20167.98497088%20664.6722176%20184.94031712%20656.0863296L191.29263904%20652.915344C215.97973152%20640.7492736%20256.51622304%20622.3959904%20329.458464%20589.3821696%20359.7335872%20575.3189056%20371.2466592%20563.6664896%20375.084352%20542.772496%20377.2164032%20530.316464%20374.6579424%20526.7001952%20345.2356416%20496.9664352%20295.34565344%20446.338688%20274.02514592%20396.9163584%20273.59873568%20331.0199232%20273.59873568%20291.24097568%20282.12693888%20265.52529312%20307.71154784%20228.15719168%20332.8697472%20191.19089792%20365.703328%20169.49329056%20405.7858816%20162.66256256ZM668.7713728%20226.60405184C756.683056%20211.50282816%20820.4190272%20263.09867616%20827.0124032%20354.9644544%20831.8475456%20416.6277856%20815.1443264%20461.931456%20770.3093664%20510.1714752%20752.287472%20529.4674848%20747.891888%20536.5986176%20748.3314464%20548.344016%20748.7710048%20555.8946272%20751.4083552%20565.123152%20754.485264%20568.8984576%20757.5621728%20572.2542848%20788.331264%20588.1944672%20823.0563776%20604.1346464%20944.3745024%20659.92528%20966.791984%20682.996592%20958.4403712%20744.6599232%20954.923904%20771.9260224%20956.6821376%20771.0870656%20890.308816%20787.0272448%20867.4517792%20792.8999456%20845.0343008%20798.3531648%20841.0782752%20799.6116%20835.3640128%20801.2895136%20833.1662208%20797.9336864%20830.5288704%20781.5740256%20824.3750528%20739.6261824%20812.0674176%20710.6821696%20790.0894976%20687.6108576%20752.287472%20647.3409248%20703.9360448%20619.6553504%20624.3759712%20593.6476864%20597.5629088%20584.4191616%20560.64%20550.8608864%20560.64%20534.920704%20560.64%20527.7895712%20569.8707264%20514.7857408%20589.6508544%20494.6507744%20620.859504%20461.931456%20639.7605152%20429.631616%20648.5516832%20394.8149056%20655.5846208%20366.7098496%20652.0681504%20283.23364096%20642.837424%20254.7091072%20635.3649312%20231.63779328%20634.4858144%20232.47675008%20668.7713728%20226.60405184Z'%3e%3c/path%3e%3c/svg%3e";
3510
+ const UserAvatar = "data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'?%3e%3csvg%20width='32px'%20height='32px'%20viewBox='0%200%2032%2032'%20version='1.1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%3e%3ctitle%3eIcon/用户%3c/title%3e%3cg%20id='Icon/用户'%20stroke='none'%20stroke-width='1'%20fill='none'%20fill-rule='evenodd'%3e%3cg%20id='user-(1)'%20transform='translate(3,%202)'%20fill='%23A3C5FD'%20fill-rule='nonzero'%3e%3cpath%20d='M13.0077612,27.9989067%20C10.3002732,27.9989067%207.59285518,28.0018792%204.88515705,27.997455%20C3.95018807,27.9959342%203.05044678,27.8282323%202.22816433,27.3628696%20C0.998627601,26.6672451%200.29953695,25.6114692%200.0864200465,24.2387462%20C-0.0656962495,23.259079%200.0147040645,22.4675755%200.0874005263,21.4879775%20C0.187970957,20.13461%200.423078914,19.3321844%200.863249688,18.0430358%20C1.22365046,16.9873982%201.73014453,16.0067633%202.49702917,15.175719%20C3.42254341,14.1726178%204.6014447,13.7297906%205.9255989,13.6440041%20C6.33292322,13.6073668%206.66741099,13.712025%206.9979768,13.9263185%20C7.58886318,14.3094892%208.17393665,14.7060014%208.79220674,15.0421658%20C10.1097776,15.758321%2011.5447274,16.1099698%2013.0616182,16.0930337%20C14.6806203,16.0750607%2016.2142496,15.63963%2017.592821,14.8169502%20C18.0555431,14.5407189%2018.5150436,14.256538%2018.9569652,13.9491996%20C19.3610679,13.6681294%2019.7808585,13.5749462%2020.274326,13.6337733%20C21.462472,13.7340074%2022.3872158,14.1103345%2023.2340106,14.8851094%20C23.902636,15.496952%2024.3685096,16.2520257%2024.7518119,17.0611566%20C25.272453,18.1598604%2025.5462904,18.7976948%2025.7441396,19.9861253%20C25.9499728,21.2233595%2026.0256808,22.2792045%2025.9924842,23.5308171%20C25.9627193,24.6543374%2025.6405577,25.6840525%2024.8535729,26.5307194%20C24.1686994,27.2671979%2023.3129402,27.7090574%2022.3211027,27.8808379%20C21.9232331,27.9495501%2021.5154185,27.9922014%2021.1120162,27.9935148%20C18.4104811,28.0036073%2015.7090862,27.9989067%2013.0077612,27.9989067%20L13.0077612,27.9989067%20Z%20M5.91775495,6.98479749%20C5.84814002,3.25685016%209.08684454,-0.00255470186%2013.0162355,1.5025268e-06%20C16.9117994,0.00256071584%2020.1304739,3.23452217%2020.1095656,7.04113598%20C20.0884528,10.8082092%2016.8998935,14.015354%2013.0058002,14.0149393%20C9.10134181,14.0145245%205.83322254,10.7695672%205.91775495,6.98479749%20Z'%20id='形状'%3e%3c/path%3e%3c/g%3e%3c/g%3e%3c/svg%3e";
3511
+ const VirtualAvatar = "data:image/svg+xml,%3c?xml%20version='1.0'%20encoding='UTF-8'?%3e%3csvg%20width='32px'%20height='32px'%20viewBox='0%200%2032%2032'%20version='1.1'%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%3e%3ctitle%3eIcon/虚拟icon%3c/title%3e%3cg%20id='Icon/虚拟icon'%20stroke='none'%20stroke-width='1'%20fill='none'%20fill-rule='evenodd'%3e%3cpath%20d='M27.4705882,3%20C28.315259,3%2029,3.68474098%2029,4.52941178%20L29,22.4623054%20C29,23.3069762%2028.315259,23.9917172%2027.4705882,23.9917172%20L20.5882353,23.9917172%20L20.5882353,27.0244081%20L24.0294118,27.0244081%20C24.2405794,27.0244081%2024.4117647,27.1955933%2024.4117647,27.406761%20L24.4117647,28.617647%20C24.4117647,28.8288148%2024.2405795,29%2024.0294118,29%20L7.97058824,29%20C7.75942054,29%207.58823529,28.8288148%207.58823529,28.617647%20L7.58823529,27.406761%20C7.58823531,27.1955933%207.75942055,27.0244081%207.97058824,27.0244081%20L11.4117647,27.0244081%20L11.4117647,23.9917172%20L4.52941178,23.9917172%20C3.68474098,23.9917172%203,23.3069762%203,22.4623054%20L3,4.52941178%20C3,3.68474098%203.68474098,3%204.52941178,3%20L27.4705882,3%20Z%20M19,24%20L13,24%20L13,27%20L19,27%20L19,24%20Z%20M23.4117647,7%20L8.58823529,7%20C8.03595054,7%207.58823529,7.44771525%207.58823529,8%20L7.58823529,19%20C7.58823529,19.5522847%208.03595054,20%208.58823529,20%20L23.4117647,20%20C23.9640495,20%2024.4117647,19.5522847%2024.4117647,19%20L24.4117647,8%20C24.4117647,7.44771525%2023.9640495,7%2023.4117647,7%20Z%20M12,10%20C12.5522847,10%2013,10.4477153%2013,11%20L13,13%20C13,13.5522847%2012.5522847,14%2012,14%20C11.4477153,14%2011,13.5522847%2011,13%20L11,11%20C11,10.4477153%2011.4477153,10%2012,10%20Z%20M20,10%20C20.5522847,10%2021,10.4477153%2021,11%20L21,13%20C21,13.5522847%2020.5522847,14%2020,14%20C19.4477153,14%2019,13.5522847%2019,13%20L19,11%20C19,10.4477153%2019.4477153,10%2020,10%20Z%20M26,5%20C25.4477153,5%2025,5.44771525%2025,6%20C25,6.55228475%2025.4477153,7%2026,7%20C26.5522847,7%2027,6.55228475%2027,6%20C27,5.44771525%2026.5522847,5%2026,5%20Z'%20id='蒙版'%20fill='%23A3C5FD'%20fill-rule='nonzero'%3e%3c/path%3e%3c/g%3e%3c/svg%3e";
3502
3512
  const UserRender = vue.defineComponent({
3503
3513
  name: "UserRender",
3504
3514
  props: {
@@ -3517,23 +3527,63 @@
3517
3527
  render: {
3518
3528
  type: Function,
3519
3529
  required: false
3530
+ },
3531
+ hasAvatar: {
3532
+ type: Boolean,
3533
+ default: false
3534
+ },
3535
+ avatarBaseUrl: {
3536
+ type: String,
3537
+ default: ""
3520
3538
  }
3521
3539
  },
3522
3540
  setup(props) {
3541
+ const getAvatarUrl = (user) => {
3542
+ if (user.type === "virtual") {
3543
+ return VirtualAvatar;
3544
+ }
3545
+ if (user.type === "userGroup") {
3546
+ return UserGroupAvatar;
3547
+ }
3548
+ if (!props.avatarBaseUrl) {
3549
+ return UserAvatar;
3550
+ }
3551
+ const loginName = user.login_name || user.bk_username || user.id;
3552
+ return `${props.avatarBaseUrl}${loginName}.png?default_when_absent=true`;
3553
+ };
3523
3554
  const defaultRender = (h2, props2) => {
3524
- return h2("div", [
3525
- h2("span", props2.user.name),
3526
- props2.user.tenantId !== props2.tenantId && props2.user.tenantId ? h2(
3527
- "span",
3528
- {
3555
+ return h2(
3556
+ "div",
3557
+ {
3558
+ style: {
3559
+ display: "flex",
3560
+ alignItems: "center"
3561
+ }
3562
+ },
3563
+ [
3564
+ props2.hasAvatar ? h2("img", {
3565
+ src: getAvatarUrl(props2.user),
3529
3566
  style: {
3530
- color: "#f59500",
3531
- marginLeft: "4px"
3567
+ width: "20px",
3568
+ height: "20px",
3569
+ borderRadius: "50%",
3570
+ marginRight: "6px",
3571
+ flexShrink: 0
3532
3572
  }
3533
- },
3534
- `@${props2.tenants[props2.user.tenantId] || props2.user.tenantId}`
3535
- ) : null
3536
- ]);
3573
+ }) : null,
3574
+ h2("span", props2.user.name),
3575
+ props2.user.tenantId !== props2.tenantId && props2.user.tenantId ? h2(
3576
+ "span",
3577
+ {
3578
+ style: {
3579
+ color: "#f59500",
3580
+ marginLeft: "4px"
3581
+ }
3582
+ },
3583
+ `@${props2.tenants[props2.user.tenantId] || props2.user.tenantId}`
3584
+ ) : null
3585
+ ]
3586
+ );
3537
3587
  };
3538
3588
  return () => {
3539
3589
  try {
@@ -3558,8 +3608,10 @@
3558
3608
  },
3559
3609
  __name: "selection-popover",
3560
3610
  props: {
3611
+ avatarBaseUrl: { default: "" },
3561
3612
  containerWidth: { default: "auto" },
3562
3613
  emptyText: { default: "" },
3614
+ hasAvatar: { type: Boolean, default: false },
3563
3615
  isShow: { type: Boolean, default: false },
3564
3616
  loading: { type: Boolean, default: false },
3565
3617
  options: { default: () => [] },
@@ -3685,11 +3737,13 @@
3685
3737
  }, ["prevent"]))
3686
3738
  }, [
3687
3739
  vue.createVNode(vue.unref(UserRender), {
3740
+ "avatar-base-url": _ctx.avatarBaseUrl,
3741
+ "has-avatar": _ctx.hasAvatar,
3688
3742
  render: _ctx.renderListItem,
3689
3743
  "tenant-id": _ctx.tenantId,
3690
3744
  tenants: _ctx.tenants,
3691
3745
  user
3692
- }, null, 8, ["render", "tenant-id", "tenants", "user"])
3746
+ }, null, 8, ["avatar-base-url", "has-avatar", "render", "tenant-id", "tenants", "user"])
3693
3747
  ], 40, _hoisted_4);
3694
3748
  }),
3695
3749
  128
@@ -3729,7 +3783,7 @@
3729
3783
  };
3730
3784
  }
3731
3785
  });
3732
- const SelectionPopover = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["__scopeId", "data-v-024fc663"]]);
3786
+ const SelectionPopover = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["__scopeId", "data-v-d5a338f0"]]);
3733
3787
  const _sfc_main$1 = /* @__PURE__ */ vue.defineComponent({
3734
3788
  ...{
3735
3789
  name: "UserTag"
@@ -3737,8 +3791,10 @@
3737
3791
  __name: "user-tag",
3738
3792
  props: {
3739
3793
  active: { type: Boolean },
3794
+ avatarBaseUrl: {},
3740
3795
  currentTenantId: {},
3741
3796
  draggable: { type: Boolean },
3797
+ hasAvatar: { type: Boolean },
3742
3798
  renderTag: { type: Function },
3743
3799
  showTenant: { type: Boolean },
3744
3800
  tenants: {},
@@ -3763,11 +3819,13 @@
3763
3819
  }, {
3764
3820
  default: vue.withCtx(() => [
3765
3821
  vue.createVNode(vue.unref(UserRender), {
3822
+ "avatar-base-url": _ctx.avatarBaseUrl,
3823
+ "has-avatar": _ctx.hasAvatar,
3766
3824
  render: _ctx.renderTag,
3767
3825
  "tenant-id": _ctx.currentTenantId,
3768
3826
  tenants: _ctx.tenants,
3769
3827
  user: _ctx.user
3770
- }, null, 8, ["render", "tenant-id", "tenants", "user"])
3828
+ }, null, 8, ["avatar-base-url", "has-avatar", "render", "tenant-id", "tenants", "user"])
3771
3829
  ]),
3772
3830
  _: 1
3773
3831
  /* STABLE */
@@ -3775,7 +3833,7 @@
3775
3833
  };
3776
3834
  }
3777
3835
  });
3778
- const UserTag = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["__scopeId", "data-v-48ac8fc1"]]);
3836
+ const UserTag = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["__scopeId", "data-v-1f2e0737"]]);
3779
3837
  const _hoisted_1 = ["placeholder"];
3780
3838
  const _hoisted_2 = { class: "hidden-users" };
3781
3839
  const _hoisted_3 = ["placeholder"];
@@ -3791,6 +3849,7 @@
3791
3849
  multiple: { type: Boolean, default: false },
3792
3850
  allowCreate: { type: Boolean, default: false },
3793
3851
  apiBaseUrl: { default: "" },
3852
+ avatarBaseUrl: { default: "" },
3794
3853
  currentUserId: { default: "" },
3795
3854
  disabled: { type: Boolean, default: false },
3796
3855
  emptyText: { default: "" },
@@ -3798,6 +3857,7 @@
3798
3857
  exactSearchKey: { default: DEFAULT_EXACT_SEARCH_KEY },
3799
3858
  excludeUserIds: { default: () => [] },
3800
3859
  freePaste: { type: Boolean, default: false },
3860
+ hasAvatar: { type: Boolean, default: false },
3801
3861
  placeholder: { default: "" },
3802
3862
  renderListItem: {},
3803
3863
  renderTag: {},
@@ -3860,7 +3920,9 @@
3860
3920
  () => isMaxCountReached.value || !!props.currentUserId && selectedUsers.value.some((user) => user[props.exactSearchKey] === props.currentUserId)
3861
3921
  );
3862
3922
  const userTagCommonProps = vue.computed(() => ({
3923
+ avatarBaseUrl: props.avatarBaseUrl,
3863
3924
  currentTenantId: props.tenantId,
3925
+ hasAvatar: props.hasAvatar,
3864
3926
  renderTag: props.renderTag,
3865
3927
  tenants
3866
3928
  }));
@@ -4165,8 +4227,10 @@
4165
4227
  [
4166
4228
  vue.createCommentVNode(" 下拉选项列表 "),
4167
4229
  vue.createVNode(SelectionPopover, {
4230
+ "avatar-base-url": _ctx.avatarBaseUrl,
4168
4231
  "container-width": containerRef.value ? containerRef.value.offsetWidth : "auto",
4169
4232
  "empty-text": computedEmptyText.value,
4233
+ "has-avatar": _ctx.hasAvatar,
4170
4234
  "is-show": showDropdown.value,
4171
4235
  loading: vue.unref(searchLoading),
4172
4236
  options: displayOptions.value,
@@ -4312,10 +4376,12 @@
4312
4376
  vue.renderList(selectedUsers.value.slice(visibleUsers.value.length), (user) => {
4313
4377
  return vue.openBlock(), vue.createBlock(vue.unref(UserRender), {
4314
4378
  key: user.id,
4379
+ "avatar-base-url": _ctx.avatarBaseUrl,
4380
+ "has-avatar": _ctx.hasAvatar,
4315
4381
  "tenant-id": _ctx.tenantId,
4316
4382
  tenants: vue.unref(tenants),
4317
4383
  user
4318
- }, null, 8, ["tenant-id", "tenants", "user"]);
4384
+ }, null, 8, ["avatar-base-url", "has-avatar", "tenant-id", "tenants", "user"]);
4319
4385
  }),
4320
4386
  128
4321
4387
  /* KEYED_FRAGMENT */
@@ -4362,7 +4428,7 @@
4362
4428
  ]),
4363
4429
  _: 1
4364
4430
  /* STABLE */
4365
- }, 8, ["container-width", "empty-text", "is-show", "loading", "options", "render-list-item", "search-query", "tenant-id", "tenants", "user-group", "user-group-name"])
4431
+ }, 8, ["avatar-base-url", "container-width", "empty-text", "has-avatar", "is-show", "loading", "options", "render-list-item", "search-query", "tenant-id", "tenants", "user-group", "user-group-name"])
4366
4432
  ],
4367
4433
  2
4368
4434
  /* CLASS */
@@ -4370,7 +4436,7 @@
4370
4436
  };
4371
4437
  }
4372
4438
  });
4373
- const BkUserSelector = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-65e61c1c"]]);
4439
+ const BkUserSelector = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-9975c7e1"]]);
4374
4440
  exports2.BkUserSelector = BkUserSelector;
4375
4441
  exports2.default = BkUserSelector;
4376
4442
  Object.defineProperties(exports2, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
package/vue3/vue3.css CHANGED
@@ -25,71 +25,71 @@
25
25
  color: #c4c6cc;
26
26
  cursor: not-allowed;
27
27
  background-color: #f0f1f5;
28
- }.dropdown-content[data-v-024fc663] {
28
+ }.dropdown-content[data-v-d5a338f0] {
29
29
  min-height: 40px;
30
30
  max-height: 300px;
31
31
  padding: 5px 0;
32
32
  overflow-y: auto;
33
33
  }
34
- .dropdown-content .no-data[data-v-024fc663] {
34
+ .dropdown-content .no-data[data-v-d5a338f0] {
35
35
  padding: 10px;
36
36
  color: #979ba5;
37
37
  text-align: center;
38
38
  }
39
- .dropdown-content .user-group .group-header[data-v-024fc663] {
39
+ .dropdown-content .user-group .group-header[data-v-d5a338f0] {
40
40
  display: flex;
41
41
  align-items: center;
42
42
  padding: 8px 12px;
43
43
  color: #979ba5;
44
44
  }
45
- .dropdown-content .user-group .group-header .group-count[data-v-024fc663] {
45
+ .dropdown-content .user-group .group-header .group-count[data-v-d5a338f0] {
46
46
  margin-left: 4px;
47
47
  }
48
- .dropdown-content .user-option[data-v-024fc663] {
48
+ .dropdown-content .user-option[data-v-d5a338f0] {
49
49
  display: flex;
50
50
  align-items: center;
51
51
  height: 32px;
52
52
  padding: 8px 12px;
53
53
  cursor: pointer;
54
54
  }
55
- .dropdown-content .user-option[data-v-024fc663]:hover {
55
+ .dropdown-content .user-option[data-v-d5a338f0]:hover {
56
56
  background-color: #f5f7fa;
57
- }.user-tag[data-v-48ac8fc1] {
57
+ }.user-tag[data-v-1f2e0737] {
58
58
  margin-right: 4px;
59
59
  margin-left: 0;
60
60
  }
61
- .user-tag.draggable[data-v-48ac8fc1] {
61
+ .user-tag.draggable[data-v-1f2e0737] {
62
62
  cursor: move;
63
63
  }
64
- .user-tag.active[data-v-48ac8fc1] {
64
+ .user-tag.active[data-v-1f2e0737] {
65
65
  background-color: #e1ecff;
66
66
  border-color: #3a84ff;
67
67
  }
68
- .user-tag.is-custom[data-v-48ac8fc1] {
68
+ .user-tag.is-custom[data-v-1f2e0737] {
69
69
  color: #ea3636;
70
70
  background-color: #feebea;
71
71
  border-color: rgba(234, 53, 54, 0.3019607843);
72
72
  }
73
- .user-tag.is-custom[data-v-48ac8fc1]:hover {
73
+ .user-tag.is-custom[data-v-1f2e0737]:hover {
74
74
  background-color: #fedddc;
75
75
  }
76
- .user-tag .tag-content .user-name[data-v-48ac8fc1] {
76
+ .user-tag .tag-content .user-name[data-v-1f2e0737] {
77
77
  overflow: hidden;
78
78
  text-overflow: ellipsis;
79
79
  font-size: 12px;
80
80
  white-space: nowrap;
81
- }.bk-user-selector[data-v-65e61c1c] {
81
+ }.bk-user-selector[data-v-9975c7e1] {
82
82
  position: relative;
83
83
  width: 100%;
84
84
  height: 32px;
85
85
  font-size: 12px;
86
86
  }
87
- .bk-user-selector.is-disabled[data-v-65e61c1c] {
87
+ .bk-user-selector.is-disabled[data-v-9975c7e1] {
88
88
  pointer-events: none;
89
89
  cursor: not-allowed;
90
90
  background-color: #dcdee5;
91
91
  }
92
- .bk-user-selector .tags-container[data-v-65e61c1c] {
92
+ .bk-user-selector .tags-container[data-v-9975c7e1] {
93
93
  position: relative;
94
94
  min-height: 32px;
95
95
  padding: 1px 10px 1px 8px;
@@ -98,42 +98,42 @@
98
98
  border-radius: 2px;
99
99
  transition: all 0.2s ease;
100
100
  }
101
- .bk-user-selector .tags-container.focused[data-v-65e61c1c] {
101
+ .bk-user-selector .tags-container.focused[data-v-9975c7e1] {
102
102
  border-color: #3a84ff;
103
103
  box-shadow: 0 0 0 2px rgba(58, 132, 255, 0.1);
104
104
  }
105
- .bk-user-selector .tags-container.tags-container-collapsed[data-v-65e61c1c] {
105
+ .bk-user-selector .tags-container.tags-container-collapsed[data-v-9975c7e1] {
106
106
  display: flex;
107
107
  flex-wrap: wrap;
108
108
  align-items: center;
109
109
  }
110
- .bk-user-selector .tag-list[data-v-65e61c1c] {
110
+ .bk-user-selector .tag-list[data-v-9975c7e1] {
111
111
  display: flex;
112
112
  flex-wrap: wrap;
113
113
  align-items: center;
114
114
  }
115
- .bk-user-selector .tag-wrapper[data-v-65e61c1c] {
115
+ .bk-user-selector .tag-wrapper[data-v-9975c7e1] {
116
116
  display: inline-flex;
117
117
  align-items: center;
118
118
  max-width: 100%;
119
119
  }
120
- .bk-user-selector .search-input[data-v-65e61c1c] {
120
+ .bk-user-selector .search-input[data-v-9975c7e1] {
121
121
  min-width: 20px;
122
122
  height: 28px;
123
123
  outline: none;
124
124
  background: transparent;
125
125
  border: none;
126
126
  }
127
- .bk-user-selector .search-input[data-v-65e61c1c]::placeholder {
127
+ .bk-user-selector .search-input[data-v-9975c7e1]::placeholder {
128
128
  color: #c4c6cc;
129
129
  }
130
- .bk-user-selector .search-input.input-inline[data-v-65e61c1c] {
130
+ .bk-user-selector .search-input.input-inline[data-v-9975c7e1] {
131
131
  min-width: 20px;
132
132
  }
133
- .bk-user-selector .search-input.input-last[data-v-65e61c1c], .bk-user-selector .search-input.search-input-collapsed[data-v-65e61c1c] {
133
+ .bk-user-selector .search-input.input-last[data-v-9975c7e1], .bk-user-selector .search-input.search-input-collapsed[data-v-9975c7e1] {
134
134
  flex: 1;
135
135
  }
136
- .hidden-users[data-v-65e61c1c] {
136
+ .hidden-users[data-v-9975c7e1] {
137
137
  padding: 6px 10px;
138
138
  }.bk-user-selector-popover {
139
139
  padding: 0 !important;