cd-personselector 1.0.8 → 1.0.9

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.
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- (function(f,e){typeof exports=="object"&&typeof module<"u"?e(exports,require("vue")):typeof define=="function"&&define.amd?define(["exports","vue"],e):(f=typeof globalThis<"u"?globalThis:f||self,e(f.CdPersonSelector={},f.Vue))})(this,function(f,e){"use strict";const H={class:"cd-ps-container"},Q={key:0,class:"cd-ps-tips"},X={key:1,class:"cd-ps-search"},Y={key:0,class:"cd-ps-org-select"},Z={class:"cd-ps-search-input"},K={class:"cd-ps-content"},v={class:"cd-ps-left"},ee={key:0,class:"cd-ps-search-results"},te={class:"cd-ps-search-header"},oe={key:0,class:"cd-ps-loading"},le={key:1,class:"cd-ps-empty"},ne={key:2,class:"cd-ps-result-list"},ae=["onClick"],se={class:"cd-ps-avatar"},ce={class:"cd-ps-info"},de={class:"cd-ps-name"},re={class:"cd-ps-meta"},ie={key:0},pe={key:1},me={key:2},fe={class:"cd-ps-tree"},ke={key:0,class:"cd-ps-count"},he={key:1,class:"cd-ps-empty"},_e={class:"cd-ps-right"},ye={class:"cd-ps-right-header"},Ne={class:"cd-ps-num"},Ve={class:"cd-ps-right-list"},ge={key:0,class:"cd-ps-empty"},Ce={key:1,class:"cd-ps-selected-list"},Be={class:"cd-ps-item-info"},ue={class:"cd-ps-info"},Ee={class:"cd-ps-name"},Se={class:"cd-ps-meta"},xe={key:0},be={key:1},we={key:2},Ue={key:3},R=((V,T)=>{const U=V.__vccOpts||V;for(const[s,k]of T)U[s]=k;return U})(e.defineComponent({__name:"PersonSelector",props:{visible:{type:Boolean,default:!1},tabs:{default:()=>[]},organizations:{default:()=>[]},modelValue:{default:()=>[]},dialogWidth:{default:"900px"},tips:{default:""},showSearch:{type:Boolean,default:!0}},emits:["update:visible","update:modelValue","confirm","load-users","search","org-change"],setup(V,{expose:T,emit:U}){var q,A;const s=V,k=U,g=e.ref(s.visible),h=e.ref(((A=(q=s.tabs)==null?void 0:q[0])==null?void 0:A.key)||""),_=e.ref(null),C=e.ref(""),r=e.ref([]),E=e.ref(new Map),z=e.ref({}),P=e.ref(!1),D=e.ref(!1),S=e.ref([]),Ie=e.computed(()=>s.tabs||[]),L=e.computed(()=>s.organizations||[]),F=e.computed(()=>s.tips||""),Te=e.computed(()=>s.showSearch),ze=e.computed(()=>s.dialogWidth),y=e.ref({});e.watch(()=>s.tabs,l=>{if(l&&l.length>0){const t={};l.forEach(n=>{t[n.key]=JSON.parse(JSON.stringify(n.tree))}),y.value=t,(!h.value||!l.find(n=>n.key===h.value))&&(h.value=l[0].key)}},{immediate:!0,deep:!0}),e.watch(()=>s.visible,l=>{g.value=l,l&&(r.value=s.modelValue?[...s.modelValue]:[],E.value.clear(),s.organizations.length>0&&!_.value&&(_.value=s.organizations[0].id))}),e.watch(g,l=>{k("update:visible",l)});function Pe(l,t){t&&(z.value[l]=t)}function W(l,t){for(const n of l){if(n.id===t)return n;if(n.children){const a=W(n.children,t);if(a)return a}}return null}const x=e.computed(()=>r.value.map(l=>E.value.get(l)).filter(Boolean));function $(l,t){r.value.includes(l)||r.value.push(l),E.value.set(l,t)}function M(l){r.value=r.value.filter(t=>t!==l),E.value.delete(l)}const Me=()=>{C.value=""},Oe=l=>{const t={};s.tabs.forEach(n=>{t[n.key]=[]}),y.value=t,k("org-change",l)};let B=null;const Re=()=>{if(B&&clearTimeout(B),!C.value.trim()){O();return}P.value=!0,D.value=!0,B=setTimeout(()=>Le(),300)},Le=()=>{S.value=[];const l=t=>{S.value=t.map(n=>({...n,isUser:!0})),D.value=!1};k("search",{keyword:C.value,orgId:_.value||void 0,callback:l})},O=()=>{B&&(clearTimeout(B),B=null),P.value=!1,C.value="",S.value=[],D.value=!1},Fe=l=>{r.value.indexOf(l.id)>-1?M(l.id):$(l.id,{...l,isUser:!0,typeName:"搜索结果",orgId:_.value})};function We(l){const t=[],n=a=>{for(const p of a)t.push(p.id),p.children&&n(p.children)};return n(l),t}const $e=(l,t)=>{var c;const n=t==null?void 0:t.node;if(n){const d=n.value??((c=n.data)==null?void 0:c.id);if(d!==void 0){if(n.checked){const u=s.tabs.find(w=>w.key===h.value),b=u?u.name.replace(/^按/,""):"";$(d,{...n.data,typeName:b,orgId:_.value})}else M(d);return}}const a=y.value[h.value]||[],p=We(a),m=r.value.filter(d=>!p.includes(d));r.value=[...m,...l]};function j(l,t,n){for(const a of l){if(a.id===t)return a.children=a.children||[],a.children.push(...n),a.loaded=!0,!0;if(a.children&&j(a.children,t,n))return!0}return!1}async function je(l,t){const n=l.value,a=z.value[t];k("load-users",{tabKey:t,nodeId:n,node:l,callback:async m=>{if(m.length>0){const c=m.map(N=>{const{id:u,name:b,...w}=N;return{...w,id:u,name:N.displayName||b,isUser:!0}}),d=y.value[t];if(d&&j(d,n,c),a){a.appendTo(n,c),l.data.loaded=!0,await e.nextTick();try{a.setItem(n,{expanded:!0})}catch{}}}else{l.data.loaded=!0;const c=y.value[t];if(c){const d=W(c,n);d&&(d.loaded=!0)}}}})}const Je=l=>{M(l)},J=()=>{r.value=[],E.value.clear()},qe=()=>{k("update:modelValue",r.value),k("confirm",x.value),g.value=!1},Ae=()=>{g.value=!1};return T({clearSelection:J,appendUsers:(l,t,n)=>{const a=z.value[l];if(a&&n.length>0){const p=n.map(m=>{const{id:c,name:d,...N}=m;return{...N,id:c,name:m.displayName||d,isUser:!0}});a.appendTo(t,p)}}}),(l,t)=>{const n=e.resolveComponent("t-icon"),a=e.resolveComponent("t-option"),p=e.resolveComponent("t-select"),m=e.resolveComponent("t-input"),c=e.resolveComponent("t-button"),d=e.resolveComponent("t-loading"),N=e.resolveComponent("t-checkbox"),u=e.resolveComponent("t-tree"),b=e.resolveComponent("t-tab-panel"),w=e.resolveComponent("t-tabs"),Ge=e.resolveComponent("t-dialog");return e.openBlock(),e.createBlock(Ge,{visible:g.value,"onUpdate:visible":t[4]||(t[4]=o=>g.value=o),header:"选择人员",width:ze.value,footer:!0,placement:"center","destroy-on-close":"",onConfirm:qe,onClose:Ae},{default:e.withCtx(()=>[e.createElementVNode("div",H,[F.value?(e.openBlock(),e.createElementBlock("div",Q,[e.createVNode(n,{name:"info-circle"}),e.createElementVNode("span",null,e.toDisplayString(F.value),1)])):e.createCommentVNode("",!0),Te.value?(e.openBlock(),e.createElementBlock("div",X,[L.value.length>0?(e.openBlock(),e.createElementBlock("div",Y,[e.createVNode(p,{modelValue:_.value,"onUpdate:modelValue":t[0]||(t[0]=o=>_.value=o),placeholder:"选择组织",style:{width:"200px"},onChange:Oe},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(L.value,o=>(e.openBlock(),e.createBlock(a,{key:o.id,value:o.id,label:o.displayName||o.name},null,8,["value","label"]))),128))]),_:1},8,["modelValue"])])):e.createCommentVNode("",!0),e.createElementVNode("div",Z,[e.createVNode(m,{modelValue:C.value,"onUpdate:modelValue":t[1]||(t[1]=o=>C.value=o),placeholder:"输入手机号/工号/姓名/部门/职位搜索",clearable:"",onInput:Re,onClear:O},{"prefix-icon":e.withCtx(()=>[e.createVNode(n,{name:"search"})]),_:1},8,["modelValue"])])])):e.createCommentVNode("",!0),e.createElementVNode("div",K,[e.createElementVNode("div",v,[P.value?(e.openBlock(),e.createElementBlock("div",ee,[e.createElementVNode("div",te,[t[6]||(t[6]=e.createElementVNode("span",null,"搜索结果",-1)),e.createVNode(c,{size:"small",variant:"text",onClick:O},{default:e.withCtx(()=>[...t[5]||(t[5]=[e.createTextVNode("返回",-1)])]),_:1})]),D.value?(e.openBlock(),e.createElementBlock("div",oe,[e.createVNode(d),t[7]||(t[7]=e.createElementVNode("span",null,"搜索中...",-1))])):S.value.length===0?(e.openBlock(),e.createElementBlock("div",le,[e.createVNode(n,{name:"search",size:"48px",style:{color:"#ddd"}}),t[8]||(t[8]=e.createElementVNode("p",null,"未找到匹配的人员",-1))])):(e.openBlock(),e.createElementBlock("div",ne,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(S.value,o=>(e.openBlock(),e.createElementBlock("div",{key:o.id,class:e.normalizeClass(["cd-ps-result-item",{"cd-ps-selected":r.value.includes(o.id)}]),onClick:I=>Fe(o)},[e.createVNode(N,{checked:r.value.includes(o.id),onClick:t[2]||(t[2]=e.withModifiers(()=>{},["stop"]))},null,8,["checked"]),e.createElementVNode("div",se,[e.createVNode(n,{name:"user"})]),e.createElementVNode("div",ce,[e.createElementVNode("div",de,e.toDisplayString(o.displayName||o.name),1),e.createElementVNode("div",re,[o.position?(e.openBlock(),e.createElementBlock("span",ie,e.toDisplayString(o.position),1)):e.createCommentVNode("",!0),o.department?(e.openBlock(),e.createElementBlock("span",pe,e.toDisplayString(o.department),1)):e.createCommentVNode("",!0),o.phone?(e.openBlock(),e.createElementBlock("span",me,e.toDisplayString(o.phone),1)):e.createCommentVNode("",!0)])])],10,ae))),128))]))])):(e.openBlock(),e.createBlock(w,{key:1,modelValue:h.value,"onUpdate:modelValue":t[3]||(t[3]=o=>h.value=o),onChange:Me},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(Ie.value,o=>(e.openBlock(),e.createBlock(b,{key:o.key,value:o.key,label:o.name},{default:e.withCtx(()=>{var I;return[e.createElementVNode("div",fe,[((I=y.value[o.key])==null?void 0:I.length)>0?(e.openBlock(),e.createBlock(u,{key:0,ref_for:!0,ref:i=>Pe(o.key,i),data:y.value[o.key],keys:{value:"id",label:"name",children:"children"},hover:"",checkable:"","expand-all":!1,value:r.value,onChange:$e},{label:e.withCtx(({node:i})=>{var G;return[e.createElementVNode("div",{class:e.normalizeClass(["cd-ps-node",{"cd-ps-node-user":i.data.isUser}])},[e.createVNode(n,{name:i.data.isUser?"user":o.icon||"folder"},null,8,["name"]),e.createElementVNode("span",null,e.toDisplayString(i.label),1),i.data.userCount&&!i.data.isUser?(e.openBlock(),e.createElementBlock("span",ke,"("+e.toDisplayString(i.data.userCount)+")",1)):e.createCommentVNode("",!0),!i.data.isUser&&!((G=i.data.children)!=null&&G.length)&&!i.data.loaded?(e.openBlock(),e.createBlock(c,{key:1,size:"small",variant:"text",class:"cd-ps-load-btn",onClick:e.withModifiers(Xe=>je(i,o.key),["stop"])},{default:e.withCtx(()=>[...t[9]||(t[9]=[e.createTextVNode("显示人员",-1)])]),_:1},8,["onClick"])):e.createCommentVNode("",!0)],2)]}),_:2},1032,["data","value"])):(e.openBlock(),e.createElementBlock("div",he,[e.createVNode(n,{name:o.icon||"folder-open",size:"48px",style:{color:"#ddd"}},null,8,["name"]),t[10]||(t[10]=e.createElementVNode("p",null,"暂无数据",-1))]))])]}),_:2},1032,["value","label"]))),128))]),_:1},8,["modelValue"]))]),e.createElementVNode("div",_e,[e.createElementVNode("div",ye,[t[12]||(t[12]=e.createElementVNode("span",{class:"cd-ps-title"},"已选择",-1)),e.createElementVNode("span",Ne,e.toDisplayString(x.value.length)+" 项",1),x.value.length>0?(e.openBlock(),e.createBlock(c,{key:0,size:"small",variant:"text",onClick:J},{default:e.withCtx(()=>[...t[11]||(t[11]=[e.createTextVNode("清空",-1)])]),_:1})):e.createCommentVNode("",!0)]),e.createElementVNode("div",Ve,[x.value.length===0?(e.openBlock(),e.createElementBlock("div",ge,[e.createVNode(n,{name:"user-checked",size:"64px",style:{color:"#ddd"}}),t[13]||(t[13]=e.createElementVNode("p",null,"暂无选择",-1))])):(e.openBlock(),e.createElementBlock("div",Ce,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(x.value,o=>(e.openBlock(),e.createElementBlock("div",{key:o.id,class:e.normalizeClass(["cd-ps-selected-item",{"cd-ps-dept-item":!o.isUser}])},[e.createElementVNode("div",Be,[e.createElementVNode("div",{class:e.normalizeClass(["cd-ps-avatar",{"cd-ps-avatar-dept":!o.isUser}])},[e.createVNode(n,{name:o.isUser?"user":"folder"},null,8,["name"])],2),e.createElementVNode("div",ue,[e.createElementVNode("div",Ee,e.toDisplayString(o.displayName||o.name),1),e.createElementVNode("div",Se,[o.isUser&&o.position?(e.openBlock(),e.createElementBlock("span",xe,e.toDisplayString(o.position),1)):e.createCommentVNode("",!0),o.isUser&&o.department?(e.openBlock(),e.createElementBlock("span",be,e.toDisplayString(o.department),1)):e.createCommentVNode("",!0),o.isUser?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("span",we,e.toDisplayString(o.typeName||"部门"),1)),!o.isUser&&o.userCount?(e.openBlock(),e.createElementBlock("span",Ue,e.toDisplayString(o.userCount)+"人",1)):e.createCommentVNode("",!0)])])]),e.createVNode(c,{size:"small",variant:"text",shape:"circle",onClick:I=>Je(o.id)},{icon:e.withCtx(()=>[e.createVNode(n,{name:"close"})]),_:1},8,["onClick"])],2))),128))]))])])])])]),_:1},8,["visible","width"])}}}),[["__scopeId","data-v-0a6760cf"]]),De={install(V){V.component("PersonSelector",R)}};f.PersonSelector=R,f.default=De,Object.defineProperties(f,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
1
+ (function(f,e){typeof exports=="object"&&typeof module<"u"?e(exports,require("vue")):typeof define=="function"&&define.amd?define(["exports","vue"],e):(f=typeof globalThis<"u"?globalThis:f||self,e(f.CdPersonSelector={},f.Vue))})(this,function(f,e){"use strict";const H={class:"cd-ps-container"},Q={key:0,class:"cd-ps-tips"},X={key:1,class:"cd-ps-search"},Y={key:0,class:"cd-ps-org-select"},Z={class:"cd-ps-search-input"},K={class:"cd-ps-content"},v={class:"cd-ps-left"},ee={key:0,class:"cd-ps-search-results"},te={class:"cd-ps-search-header"},oe={key:0,class:"cd-ps-loading"},le={key:1,class:"cd-ps-empty"},ne={key:2,class:"cd-ps-result-list"},ae=["onClick"],se={class:"cd-ps-avatar"},ce={class:"cd-ps-info"},de={class:"cd-ps-name"},re={class:"cd-ps-meta"},ie={key:0},pe={key:1},me={key:2},fe={class:"cd-ps-tree"},he={key:0,class:"cd-ps-count"},ke={key:1,class:"cd-ps-empty"},_e={class:"cd-ps-right"},ye={class:"cd-ps-right-header"},Ve={class:"cd-ps-num"},Ne={class:"cd-ps-right-list"},ue={key:0,class:"cd-ps-empty"},ge={key:1,class:"cd-ps-selected-list"},Ce={class:"cd-ps-item-info"},Be={class:"cd-ps-info"},Ee={class:"cd-ps-name"},Se={class:"cd-ps-meta"},xe={key:0},be={key:1},we={key:2},Ue={key:3},R=((u,T)=>{const U=u.__vccOpts||u;for(const[s,h]of T)U[s]=h;return U})(e.defineComponent({__name:"PersonSelector",props:{visible:{type:Boolean,default:!1},tabs:{default:()=>[]},organizations:{default:()=>[]},modelValue:{default:()=>[]},dialogWidth:{default:"900px"},tips:{default:""},showSearch:{type:Boolean,default:!0}},emits:["update:visible","update:modelValue","confirm","load-users","search","org-change"],setup(u,{expose:T,emit:U}){var q,A;const s=u,h=U,g=e.ref(s.visible),_=e.ref(((A=(q=s.tabs)==null?void 0:q[0])==null?void 0:A.key)||""),y=e.ref(null),C=e.ref(""),c=e.ref([]),k=e.ref(new Map),z=e.ref({}),P=e.ref(!1),I=e.ref(!1),S=e.ref([]),De=e.computed(()=>s.tabs||[]),L=e.computed(()=>s.organizations||[]),F=e.computed(()=>s.tips||""),Te=e.computed(()=>s.showSearch),ze=e.computed(()=>s.dialogWidth),V=e.ref({});e.watch(()=>s.tabs,n=>{if(n&&n.length>0){const t={};n.forEach(l=>{t[l.key]=JSON.parse(JSON.stringify(l.tree))}),V.value=t,(!_.value||!n.find(l=>l.key===_.value))&&(_.value=n[0].key)}},{immediate:!0,deep:!0}),e.watch(()=>s.visible,n=>{if(g.value=n,n){if(s.modelValue&&s.modelValue.length>0){const t=s.modelValue[0];typeof t=="object"&&t!==null&&"id"in t?(c.value=s.modelValue.map(l=>l.id),k.value.clear(),s.modelValue.forEach(l=>{k.value.set(l.id,l)})):(c.value=[...s.modelValue],k.value.clear())}else c.value=[],k.value.clear();s.organizations.length>0&&!y.value&&(y.value=s.organizations[0].id)}}),e.watch(g,n=>{h("update:visible",n)});function Pe(n,t){t&&(z.value[n]=t)}function j(n,t){for(const l of n){if(l.id===t)return l;if(l.children){const a=j(l.children,t);if(a)return a}}return null}const x=e.computed(()=>c.value.map(n=>k.value.get(n)).filter(Boolean));function W(n,t){c.value.includes(n)||c.value.push(n),k.value.set(n,t)}function M(n){c.value=c.value.filter(t=>t!==n),k.value.delete(n)}const Me=()=>{C.value=""},Oe=n=>{const t={};s.tabs.forEach(l=>{t[l.key]=[]}),V.value=t,h("org-change",n)};let B=null;const Re=()=>{if(B&&clearTimeout(B),!C.value.trim()){O();return}P.value=!0,I.value=!0,B=setTimeout(()=>Le(),300)},Le=()=>{S.value=[];const n=t=>{S.value=t.map(l=>({...l,isUser:!0})),I.value=!1};h("search",{keyword:C.value,orgId:y.value||void 0,callback:n})},O=()=>{B&&(clearTimeout(B),B=null),P.value=!1,C.value="",S.value=[],I.value=!1},Fe=n=>{c.value.indexOf(n.id)>-1?M(n.id):W(n.id,{...n,isUser:!0,typeName:"搜索结果",orgId:y.value})};function je(n){const t=[],l=a=>{for(const p of a)t.push(p.id),p.children&&l(p.children)};return l(n),t}const We=(n,t)=>{var d;const l=t==null?void 0:t.node;if(l){const r=l.value??((d=l.data)==null?void 0:d.id);if(r!==void 0){if(l.checked){const E=s.tabs.find(w=>w.key===_.value),b=E?E.name.replace(/^按/,""):"";W(r,{...l.data,typeName:b,orgId:y.value})}else M(r);return}}const a=V.value[_.value]||[],p=je(a),m=c.value.filter(r=>!p.includes(r));c.value=[...m,...n]};function $(n,t,l){for(const a of n){if(a.id===t)return a.children=a.children||[],a.children.push(...l),a.loaded=!0,!0;if(a.children&&$(a.children,t,l))return!0}return!1}async function $e(n,t){const l=n.value,a=z.value[t];h("load-users",{tabKey:t,nodeId:l,node:n,callback:async m=>{if(m.length>0){const d=m.map(N=>{const{id:E,name:b,...w}=N;return{...w,id:E,name:N.displayName||b,isUser:!0}}),r=V.value[t];if(r&&$(r,l,d),a){a.appendTo(l,d),n.data.loaded=!0,await e.nextTick();try{a.setItem(l,{expanded:!0})}catch{}}}else{n.data.loaded=!0;const d=V.value[t];if(d){const r=j(d,l);r&&(r.loaded=!0)}}}})}const Je=n=>{M(n)},J=()=>{c.value=[],k.value.clear()},qe=()=>{h("update:modelValue",c.value),h("confirm",x.value),g.value=!1},Ae=()=>{g.value=!1};return T({clearSelection:J,appendUsers:(n,t,l)=>{const a=z.value[n];if(a&&l.length>0){const p=l.map(m=>{const{id:d,name:r,...N}=m;return{...N,id:d,name:m.displayName||r,isUser:!0}});a.appendTo(t,p)}}}),(n,t)=>{const l=e.resolveComponent("t-icon"),a=e.resolveComponent("t-option"),p=e.resolveComponent("t-select"),m=e.resolveComponent("t-input"),d=e.resolveComponent("t-button"),r=e.resolveComponent("t-loading"),N=e.resolveComponent("t-checkbox"),E=e.resolveComponent("t-tree"),b=e.resolveComponent("t-tab-panel"),w=e.resolveComponent("t-tabs"),Ge=e.resolveComponent("t-dialog");return e.openBlock(),e.createBlock(Ge,{visible:g.value,"onUpdate:visible":t[4]||(t[4]=o=>g.value=o),header:"选择人员",width:ze.value,footer:!0,placement:"center","destroy-on-close":"",onConfirm:qe,onClose:Ae},{default:e.withCtx(()=>[e.createElementVNode("div",H,[F.value?(e.openBlock(),e.createElementBlock("div",Q,[e.createVNode(l,{name:"info-circle"}),e.createElementVNode("span",null,e.toDisplayString(F.value),1)])):e.createCommentVNode("",!0),Te.value?(e.openBlock(),e.createElementBlock("div",X,[L.value.length>0?(e.openBlock(),e.createElementBlock("div",Y,[e.createVNode(p,{modelValue:y.value,"onUpdate:modelValue":t[0]||(t[0]=o=>y.value=o),placeholder:"选择组织",style:{width:"200px"},onChange:Oe},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(L.value,o=>(e.openBlock(),e.createBlock(a,{key:o.id,value:o.id,label:o.displayName||o.name},null,8,["value","label"]))),128))]),_:1},8,["modelValue"])])):e.createCommentVNode("",!0),e.createElementVNode("div",Z,[e.createVNode(m,{modelValue:C.value,"onUpdate:modelValue":t[1]||(t[1]=o=>C.value=o),placeholder:"输入手机号/工号/姓名/部门/职位搜索",clearable:"",onInput:Re,onClear:O},{"prefix-icon":e.withCtx(()=>[e.createVNode(l,{name:"search"})]),_:1},8,["modelValue"])])])):e.createCommentVNode("",!0),e.createElementVNode("div",K,[e.createElementVNode("div",v,[P.value?(e.openBlock(),e.createElementBlock("div",ee,[e.createElementVNode("div",te,[t[6]||(t[6]=e.createElementVNode("span",null,"搜索结果",-1)),e.createVNode(d,{size:"small",variant:"text",onClick:O},{default:e.withCtx(()=>[...t[5]||(t[5]=[e.createTextVNode("返回",-1)])]),_:1})]),I.value?(e.openBlock(),e.createElementBlock("div",oe,[e.createVNode(r),t[7]||(t[7]=e.createElementVNode("span",null,"搜索中...",-1))])):S.value.length===0?(e.openBlock(),e.createElementBlock("div",le,[e.createVNode(l,{name:"search",size:"48px",style:{color:"#ddd"}}),t[8]||(t[8]=e.createElementVNode("p",null,"未找到匹配的人员",-1))])):(e.openBlock(),e.createElementBlock("div",ne,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(S.value,o=>(e.openBlock(),e.createElementBlock("div",{key:o.id,class:e.normalizeClass(["cd-ps-result-item",{"cd-ps-selected":c.value.includes(o.id)}]),onClick:D=>Fe(o)},[e.createVNode(N,{checked:c.value.includes(o.id),onClick:t[2]||(t[2]=e.withModifiers(()=>{},["stop"]))},null,8,["checked"]),e.createElementVNode("div",se,[e.createVNode(l,{name:"user"})]),e.createElementVNode("div",ce,[e.createElementVNode("div",de,e.toDisplayString(o.displayName||o.name),1),e.createElementVNode("div",re,[o.position?(e.openBlock(),e.createElementBlock("span",ie,e.toDisplayString(o.position),1)):e.createCommentVNode("",!0),o.department?(e.openBlock(),e.createElementBlock("span",pe,e.toDisplayString(o.department),1)):e.createCommentVNode("",!0),o.phone?(e.openBlock(),e.createElementBlock("span",me,e.toDisplayString(o.phone),1)):e.createCommentVNode("",!0)])])],10,ae))),128))]))])):(e.openBlock(),e.createBlock(w,{key:1,modelValue:_.value,"onUpdate:modelValue":t[3]||(t[3]=o=>_.value=o),onChange:Me},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(De.value,o=>(e.openBlock(),e.createBlock(b,{key:o.key,value:o.key,label:o.name},{default:e.withCtx(()=>{var D;return[e.createElementVNode("div",fe,[((D=V.value[o.key])==null?void 0:D.length)>0?(e.openBlock(),e.createBlock(E,{key:0,ref_for:!0,ref:i=>Pe(o.key,i),data:V.value[o.key],keys:{value:"id",label:"name",children:"children"},hover:"",checkable:"","expand-all":!1,value:c.value,onChange:We},{label:e.withCtx(({node:i})=>{var G;return[e.createElementVNode("div",{class:e.normalizeClass(["cd-ps-node",{"cd-ps-node-user":i.data.isUser}])},[e.createVNode(l,{name:i.data.isUser?"user":o.icon||"folder"},null,8,["name"]),e.createElementVNode("span",null,e.toDisplayString(i.label),1),i.data.userCount&&!i.data.isUser?(e.openBlock(),e.createElementBlock("span",he,"("+e.toDisplayString(i.data.userCount)+")",1)):e.createCommentVNode("",!0),!i.data.isUser&&!((G=i.data.children)!=null&&G.length)&&!i.data.loaded?(e.openBlock(),e.createBlock(d,{key:1,size:"small",variant:"text",class:"cd-ps-load-btn",onClick:e.withModifiers(Xe=>$e(i,o.key),["stop"])},{default:e.withCtx(()=>[...t[9]||(t[9]=[e.createTextVNode("显示人员",-1)])]),_:1},8,["onClick"])):e.createCommentVNode("",!0)],2)]}),_:2},1032,["data","value"])):(e.openBlock(),e.createElementBlock("div",ke,[e.createVNode(l,{name:o.icon||"folder-open",size:"48px",style:{color:"#ddd"}},null,8,["name"]),t[10]||(t[10]=e.createElementVNode("p",null,"暂无数据",-1))]))])]}),_:2},1032,["value","label"]))),128))]),_:1},8,["modelValue"]))]),e.createElementVNode("div",_e,[e.createElementVNode("div",ye,[t[12]||(t[12]=e.createElementVNode("span",{class:"cd-ps-title"},"已选择",-1)),e.createElementVNode("span",Ve,e.toDisplayString(x.value.length)+" 项",1),x.value.length>0?(e.openBlock(),e.createBlock(d,{key:0,size:"small",variant:"text",onClick:J},{default:e.withCtx(()=>[...t[11]||(t[11]=[e.createTextVNode("清空",-1)])]),_:1})):e.createCommentVNode("",!0)]),e.createElementVNode("div",Ne,[x.value.length===0?(e.openBlock(),e.createElementBlock("div",ue,[e.createVNode(l,{name:"user-checked",size:"64px",style:{color:"#ddd"}}),t[13]||(t[13]=e.createElementVNode("p",null,"暂无选择",-1))])):(e.openBlock(),e.createElementBlock("div",ge,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(x.value,o=>(e.openBlock(),e.createElementBlock("div",{key:o.id,class:e.normalizeClass(["cd-ps-selected-item",{"cd-ps-dept-item":!o.isUser}])},[e.createElementVNode("div",Ce,[e.createElementVNode("div",{class:e.normalizeClass(["cd-ps-avatar",{"cd-ps-avatar-dept":!o.isUser}])},[e.createVNode(l,{name:o.isUser?"user":"folder"},null,8,["name"])],2),e.createElementVNode("div",Be,[e.createElementVNode("div",Ee,e.toDisplayString(o.displayName||o.name),1),e.createElementVNode("div",Se,[o.isUser&&o.position?(e.openBlock(),e.createElementBlock("span",xe,e.toDisplayString(o.position),1)):e.createCommentVNode("",!0),o.isUser&&o.department?(e.openBlock(),e.createElementBlock("span",be,e.toDisplayString(o.department),1)):e.createCommentVNode("",!0),o.isUser?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("span",we,e.toDisplayString(o.typeName||"部门"),1)),!o.isUser&&o.userCount?(e.openBlock(),e.createElementBlock("span",Ue,e.toDisplayString(o.userCount)+"人",1)):e.createCommentVNode("",!0)])])]),e.createVNode(d,{size:"small",variant:"text",shape:"circle",onClick:D=>Je(o.id)},{icon:e.withCtx(()=>[e.createVNode(l,{name:"close"})]),_:1},8,["onClick"])],2))),128))]))])])])])]),_:1},8,["visible","width"])}}}),[["__scopeId","data-v-e9913ad1"]]),Ie={install(u){u.component("PersonSelector",R)}};f.PersonSelector=R,f.default=Ie,Object.defineProperties(f,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
package/dist/index.mjs CHANGED
@@ -1,11 +1,11 @@
1
- import { defineComponent as Ne, ref as _, computed as B, watch as Q, resolveComponent as m, createBlock as S, openBlock as a, withCtx as y, createElementVNode as n, createElementBlock as o, createCommentVNode as v, createVNode as u, toDisplayString as h, Fragment as $, renderList as J, createTextVNode as X, normalizeClass as A, withModifiers as oe, nextTick as Ue } from "vue";
2
- const xe = { class: "cd-ps-container" }, Se = {
1
+ import { defineComponent as Ve, ref as m, computed as D, watch as Q, resolveComponent as _, createBlock as I, openBlock as a, withCtx as y, createElementVNode as n, createElementBlock as o, createCommentVNode as v, createVNode as p, toDisplayString as h, Fragment as $, renderList as J, createTextVNode as X, normalizeClass as j, withModifiers as oe, nextTick as Ne } from "vue";
2
+ const Ue = { class: "cd-ps-container" }, xe = {
3
3
  key: 0,
4
4
  class: "cd-ps-tips"
5
5
  }, Ie = {
6
6
  key: 1,
7
7
  class: "cd-ps-search"
8
- }, Ve = {
8
+ }, Se = {
9
9
  key: 0,
10
10
  class: "cd-ps-org-select"
11
11
  }, ze = { class: "cd-ps-search-input" }, Te = { class: "cd-ps-content" }, we = { class: "cd-ps-left" }, Be = {
@@ -17,10 +17,10 @@ const xe = { class: "cd-ps-container" }, Se = {
17
17
  }, Oe = {
18
18
  key: 1,
19
19
  class: "cd-ps-empty"
20
- }, Pe = {
20
+ }, Ee = {
21
21
  key: 2,
22
22
  class: "cd-ps-result-list"
23
- }, Ee = ["onClick"], Me = { class: "cd-ps-avatar" }, Le = { class: "cd-ps-info" }, We = { class: "cd-ps-name" }, $e = { class: "cd-ps-meta" }, Je = { key: 0 }, Ae = { key: 1 }, Fe = { key: 2 }, je = { class: "cd-ps-tree" }, qe = {
23
+ }, Pe = ["onClick"], Me = { class: "cd-ps-avatar" }, Le = { class: "cd-ps-info" }, We = { class: "cd-ps-name" }, $e = { class: "cd-ps-meta" }, Je = { key: 0 }, je = { key: 1 }, Ae = { key: 2 }, Fe = { class: "cd-ps-tree" }, qe = {
24
24
  key: 0,
25
25
  class: "cd-ps-count"
26
26
  }, Ge = {
@@ -32,7 +32,7 @@ const xe = { class: "cd-ps-container" }, Se = {
32
32
  }, Ke = {
33
33
  key: 1,
34
34
  class: "cd-ps-selected-list"
35
- }, et = { class: "cd-ps-item-info" }, tt = { class: "cd-ps-info" }, st = { class: "cd-ps-name" }, lt = { class: "cd-ps-meta" }, at = { key: 0 }, nt = { key: 1 }, ot = { key: 2 }, dt = { key: 3 }, ct = /* @__PURE__ */ Ne({
35
+ }, et = { class: "cd-ps-item-info" }, tt = { class: "cd-ps-info" }, st = { class: "cd-ps-name" }, lt = { class: "cd-ps-meta" }, at = { key: 0 }, nt = { key: 1 }, ot = { key: 2 }, dt = { key: 3 }, ct = /* @__PURE__ */ Ve({
36
36
  __name: "PersonSelector",
37
37
  props: {
38
38
  visible: { type: Boolean, default: !1 },
@@ -44,151 +44,160 @@ const xe = { class: "cd-ps-container" }, Se = {
44
44
  showSearch: { type: Boolean, default: !0 }
45
45
  },
46
46
  emits: ["update:visible", "update:modelValue", "confirm", "load-users", "search", "org-change"],
47
- setup(I, { expose: F, emit: M }) {
47
+ setup(S, { expose: A, emit: M }) {
48
48
  var le, ae;
49
- const c = I, C = M, V = _(c.visible), b = _(((ae = (le = c.tabs) == null ? void 0 : le[0]) == null ? void 0 : ae.key) || ""), N = _(null), z = _(""), p = _([]), D = _(/* @__PURE__ */ new Map()), j = _({}), q = _(!1), L = _(!1), R = _([]), de = B(() => c.tabs || []), Y = B(() => c.organizations || []), Z = B(() => c.tips || ""), ce = B(() => c.showSearch), ie = B(() => c.dialogWidth), U = _({});
50
- Q(() => c.tabs, (s) => {
51
- if (s && s.length > 0) {
49
+ const c = S, C = M, z = m(c.visible), V = m(((ae = (le = c.tabs) == null ? void 0 : le[0]) == null ? void 0 : ae.key) || ""), N = m(null), T = m(""), i = m([]), b = m(/* @__PURE__ */ new Map()), F = m({}), q = m(!1), L = m(!1), R = m([]), de = D(() => c.tabs || []), Y = D(() => c.organizations || []), Z = D(() => c.tips || ""), ce = D(() => c.showSearch), ie = D(() => c.dialogWidth), U = m({});
50
+ Q(() => c.tabs, (l) => {
51
+ if (l && l.length > 0) {
52
52
  const e = {};
53
- s.forEach((l) => {
54
- e[l.key] = JSON.parse(JSON.stringify(l.tree));
55
- }), U.value = e, (!b.value || !s.find((l) => l.key === b.value)) && (b.value = s[0].key);
53
+ l.forEach((s) => {
54
+ e[s.key] = JSON.parse(JSON.stringify(s.tree));
55
+ }), U.value = e, (!V.value || !l.find((s) => s.key === V.value)) && (V.value = l[0].key);
56
56
  }
57
- }, { immediate: !0, deep: !0 }), Q(() => c.visible, (s) => {
58
- V.value = s, s && (p.value = c.modelValue ? [...c.modelValue] : [], D.value.clear(), c.organizations.length > 0 && !N.value && (N.value = c.organizations[0].id));
59
- }), Q(V, (s) => {
60
- C("update:visible", s);
57
+ }, { immediate: !0, deep: !0 }), Q(() => c.visible, (l) => {
58
+ if (z.value = l, l) {
59
+ if (c.modelValue && c.modelValue.length > 0) {
60
+ const e = c.modelValue[0];
61
+ typeof e == "object" && e !== null && "id" in e ? (i.value = c.modelValue.map((s) => s.id), b.value.clear(), c.modelValue.forEach((s) => {
62
+ b.value.set(s.id, s);
63
+ })) : (i.value = [...c.modelValue], b.value.clear());
64
+ } else
65
+ i.value = [], b.value.clear();
66
+ c.organizations.length > 0 && !N.value && (N.value = c.organizations[0].id);
67
+ }
68
+ }), Q(z, (l) => {
69
+ C("update:visible", l);
61
70
  });
62
- function re(s, e) {
63
- e && (j.value[s] = e);
71
+ function re(l, e) {
72
+ e && (F.value[l] = e);
64
73
  }
65
- function K(s, e) {
66
- for (const l of s) {
67
- if (l.id === e) return l;
68
- if (l.children) {
69
- const d = K(l.children, e);
74
+ function K(l, e) {
75
+ for (const s of l) {
76
+ if (s.id === e) return s;
77
+ if (s.children) {
78
+ const d = K(s.children, e);
70
79
  if (d) return d;
71
80
  }
72
81
  }
73
82
  return null;
74
83
  }
75
- const O = B(() => p.value.map((s) => D.value.get(s)).filter(Boolean));
76
- function ee(s, e) {
77
- p.value.includes(s) || p.value.push(s), D.value.set(s, e);
84
+ const O = D(() => i.value.map((l) => b.value.get(l)).filter(Boolean));
85
+ function ee(l, e) {
86
+ i.value.includes(l) || i.value.push(l), b.value.set(l, e);
78
87
  }
79
- function G(s) {
80
- p.value = p.value.filter((e) => e !== s), D.value.delete(s);
88
+ function G(l) {
89
+ i.value = i.value.filter((e) => e !== l), b.value.delete(l);
81
90
  }
82
91
  const ue = () => {
83
- z.value = "";
84
- }, pe = (s) => {
92
+ T.value = "";
93
+ }, pe = (l) => {
85
94
  const e = {};
86
- c.tabs.forEach((l) => {
87
- e[l.key] = [];
88
- }), U.value = e, C("org-change", s);
95
+ c.tabs.forEach((s) => {
96
+ e[s.key] = [];
97
+ }), U.value = e, C("org-change", l);
89
98
  };
90
- let T = null;
99
+ let w = null;
91
100
  const ve = () => {
92
- if (T && clearTimeout(T), !z.value.trim()) {
101
+ if (w && clearTimeout(w), !T.value.trim()) {
93
102
  H();
94
103
  return;
95
104
  }
96
- q.value = !0, L.value = !0, T = setTimeout(() => he(), 300);
105
+ q.value = !0, L.value = !0, w = setTimeout(() => he(), 300);
97
106
  }, he = () => {
98
107
  R.value = [];
99
- const s = (e) => {
100
- R.value = e.map((l) => ({ ...l, isUser: !0 })), L.value = !1;
108
+ const l = (e) => {
109
+ R.value = e.map((s) => ({ ...s, isUser: !0 })), L.value = !1;
101
110
  };
102
- C("search", { keyword: z.value, orgId: N.value || void 0, callback: s });
111
+ C("search", { keyword: T.value, orgId: N.value || void 0, callback: l });
103
112
  }, H = () => {
104
- T && (clearTimeout(T), T = null), q.value = !1, z.value = "", R.value = [], L.value = !1;
105
- }, fe = (s) => {
106
- p.value.indexOf(s.id) > -1 ? G(s.id) : ee(s.id, { ...s, isUser: !0, typeName: "搜索结果", orgId: N.value });
113
+ w && (clearTimeout(w), w = null), q.value = !1, T.value = "", R.value = [], L.value = !1;
114
+ }, fe = (l) => {
115
+ i.value.indexOf(l.id) > -1 ? G(l.id) : ee(l.id, { ...l, isUser: !0, typeName: "搜索结果", orgId: N.value });
107
116
  };
108
- function _e(s) {
109
- const e = [], l = (d) => {
117
+ function me(l) {
118
+ const e = [], s = (d) => {
110
119
  for (const k of d)
111
- e.push(k.id), k.children && l(k.children);
120
+ e.push(k.id), k.children && s(k.children);
112
121
  };
113
- return l(s), e;
122
+ return s(l), e;
114
123
  }
115
- const me = (s, e) => {
116
- var i;
117
- const l = e == null ? void 0 : e.node;
118
- if (l) {
119
- const r = l.value ?? ((i = l.data) == null ? void 0 : i.id);
120
- if (r !== void 0) {
121
- if (l.checked) {
122
- const w = c.tabs.find((E) => E.key === b.value), P = w ? w.name.replace(/^按/, "") : "";
123
- ee(r, { ...l.data, typeName: P, orgId: N.value });
124
+ const _e = (l, e) => {
125
+ var r;
126
+ const s = e == null ? void 0 : e.node;
127
+ if (s) {
128
+ const u = s.value ?? ((r = s.data) == null ? void 0 : r.id);
129
+ if (u !== void 0) {
130
+ if (s.checked) {
131
+ const B = c.tabs.find((P) => P.key === V.value), E = B ? B.name.replace(/^按/, "") : "";
132
+ ee(u, { ...s.data, typeName: E, orgId: N.value });
124
133
  } else
125
- G(r);
134
+ G(u);
126
135
  return;
127
136
  }
128
137
  }
129
- const d = U.value[b.value] || [], k = _e(d), g = p.value.filter((r) => !k.includes(r));
130
- p.value = [...g, ...s];
138
+ const d = U.value[V.value] || [], k = me(d), g = i.value.filter((u) => !k.includes(u));
139
+ i.value = [...g, ...l];
131
140
  };
132
- function te(s, e, l) {
133
- for (const d of s) {
141
+ function te(l, e, s) {
142
+ for (const d of l) {
134
143
  if (d.id === e)
135
- return d.children = d.children || [], d.children.push(...l), d.loaded = !0, !0;
136
- if (d.children && te(d.children, e, l))
144
+ return d.children = d.children || [], d.children.push(...s), d.loaded = !0, !0;
145
+ if (d.children && te(d.children, e, s))
137
146
  return !0;
138
147
  }
139
148
  return !1;
140
149
  }
141
- async function ke(s, e) {
142
- const l = s.value, d = j.value[e];
143
- C("load-users", { tabKey: e, nodeId: l, node: s, callback: async (g) => {
150
+ async function ke(l, e) {
151
+ const s = l.value, d = F.value[e];
152
+ C("load-users", { tabKey: e, nodeId: s, node: l, callback: async (g) => {
144
153
  if (g.length > 0) {
145
- const i = g.map((x) => {
146
- const { id: w, name: P, ...E } = x;
147
- return { ...E, id: w, name: x.displayName || P, isUser: !0 };
148
- }), r = U.value[e];
149
- if (r && te(r, l, i), d) {
150
- d.appendTo(l, i), s.data.loaded = !0, await Ue();
154
+ const r = g.map((x) => {
155
+ const { id: B, name: E, ...P } = x;
156
+ return { ...P, id: B, name: x.displayName || E, isUser: !0 };
157
+ }), u = U.value[e];
158
+ if (u && te(u, s, r), d) {
159
+ d.appendTo(s, r), l.data.loaded = !0, await Ne();
151
160
  try {
152
- d.setItem(l, { expanded: !0 });
161
+ d.setItem(s, { expanded: !0 });
153
162
  } catch {
154
163
  }
155
164
  }
156
165
  } else {
157
- s.data.loaded = !0;
158
- const i = U.value[e];
159
- if (i) {
160
- const r = K(i, l);
161
- r && (r.loaded = !0);
166
+ l.data.loaded = !0;
167
+ const r = U.value[e];
168
+ if (r) {
169
+ const u = K(r, s);
170
+ u && (u.loaded = !0);
162
171
  }
163
172
  }
164
173
  } });
165
174
  }
166
- const ye = (s) => {
167
- G(s);
175
+ const ye = (l) => {
176
+ G(l);
168
177
  }, se = () => {
169
- p.value = [], D.value.clear();
178
+ i.value = [], b.value.clear();
170
179
  }, ge = () => {
171
- C("update:modelValue", p.value), C("confirm", O.value), V.value = !1;
180
+ C("update:modelValue", i.value), C("confirm", O.value), z.value = !1;
172
181
  }, Ce = () => {
173
- V.value = !1;
182
+ z.value = !1;
174
183
  };
175
- return F({
184
+ return A({
176
185
  clearSelection: se,
177
- appendUsers: (s, e, l) => {
178
- const d = j.value[s];
179
- if (d && l.length > 0) {
180
- const k = l.map((g) => {
181
- const { id: i, name: r, ...x } = g;
182
- return { ...x, id: i, name: g.displayName || r, isUser: !0 };
186
+ appendUsers: (l, e, s) => {
187
+ const d = F.value[l];
188
+ if (d && s.length > 0) {
189
+ const k = s.map((g) => {
190
+ const { id: r, name: u, ...x } = g;
191
+ return { ...x, id: r, name: g.displayName || u, isUser: !0 };
183
192
  });
184
193
  d.appendTo(e, k);
185
194
  }
186
195
  }
187
- }), (s, e) => {
188
- const l = m("t-icon"), d = m("t-option"), k = m("t-select"), g = m("t-input"), i = m("t-button"), r = m("t-loading"), x = m("t-checkbox"), w = m("t-tree"), P = m("t-tab-panel"), E = m("t-tabs"), be = m("t-dialog");
189
- return a(), S(be, {
190
- visible: V.value,
191
- "onUpdate:visible": e[4] || (e[4] = (t) => V.value = t),
196
+ }), (l, e) => {
197
+ const s = _("t-icon"), d = _("t-option"), k = _("t-select"), g = _("t-input"), r = _("t-button"), u = _("t-loading"), x = _("t-checkbox"), B = _("t-tree"), E = _("t-tab-panel"), P = _("t-tabs"), be = _("t-dialog");
198
+ return a(), I(be, {
199
+ visible: z.value,
200
+ "onUpdate:visible": e[4] || (e[4] = (t) => z.value = t),
192
201
  header: "选择人员",
193
202
  width: ie.value,
194
203
  footer: !0,
@@ -198,14 +207,14 @@ const xe = { class: "cd-ps-container" }, Se = {
198
207
  onClose: Ce
199
208
  }, {
200
209
  default: y(() => [
201
- n("div", xe, [
202
- Z.value ? (a(), o("div", Se, [
203
- u(l, { name: "info-circle" }),
210
+ n("div", Ue, [
211
+ Z.value ? (a(), o("div", xe, [
212
+ p(s, { name: "info-circle" }),
204
213
  n("span", null, h(Z.value), 1)
205
214
  ])) : v("", !0),
206
215
  ce.value ? (a(), o("div", Ie, [
207
- Y.value.length > 0 ? (a(), o("div", Ve, [
208
- u(k, {
216
+ Y.value.length > 0 ? (a(), o("div", Se, [
217
+ p(k, {
209
218
  modelValue: N.value,
210
219
  "onUpdate:modelValue": e[0] || (e[0] = (t) => N.value = t),
211
220
  placeholder: "选择组织",
@@ -213,7 +222,7 @@ const xe = { class: "cd-ps-container" }, Se = {
213
222
  onChange: pe
214
223
  }, {
215
224
  default: y(() => [
216
- (a(!0), o($, null, J(Y.value, (t) => (a(), S(d, {
225
+ (a(!0), o($, null, J(Y.value, (t) => (a(), I(d, {
217
226
  key: t.id,
218
227
  value: t.id,
219
228
  label: t.displayName || t.name
@@ -223,16 +232,16 @@ const xe = { class: "cd-ps-container" }, Se = {
223
232
  }, 8, ["modelValue"])
224
233
  ])) : v("", !0),
225
234
  n("div", ze, [
226
- u(g, {
227
- modelValue: z.value,
228
- "onUpdate:modelValue": e[1] || (e[1] = (t) => z.value = t),
235
+ p(g, {
236
+ modelValue: T.value,
237
+ "onUpdate:modelValue": e[1] || (e[1] = (t) => T.value = t),
229
238
  placeholder: "输入手机号/工号/姓名/部门/职位搜索",
230
239
  clearable: "",
231
240
  onInput: ve,
232
241
  onClear: H
233
242
  }, {
234
243
  "prefix-icon": y(() => [
235
- u(l, { name: "search" })
244
+ p(s, { name: "search" })
236
245
  ]),
237
246
  _: 1
238
247
  }, 8, ["modelValue"])
@@ -243,7 +252,7 @@ const xe = { class: "cd-ps-container" }, Se = {
243
252
  q.value ? (a(), o("div", Be, [
244
253
  n("div", De, [
245
254
  e[6] || (e[6] = n("span", null, "搜索结果", -1)),
246
- u(i, {
255
+ p(r, {
247
256
  size: "small",
248
257
  variant: "text",
249
258
  onClick: H
@@ -255,47 +264,47 @@ const xe = { class: "cd-ps-container" }, Se = {
255
264
  })
256
265
  ]),
257
266
  L.value ? (a(), o("div", Re, [
258
- u(r),
267
+ p(u),
259
268
  e[7] || (e[7] = n("span", null, "搜索中...", -1))
260
269
  ])) : R.value.length === 0 ? (a(), o("div", Oe, [
261
- u(l, {
270
+ p(s, {
262
271
  name: "search",
263
272
  size: "48px",
264
273
  style: { color: "#ddd" }
265
274
  }),
266
275
  e[8] || (e[8] = n("p", null, "未找到匹配的人员", -1))
267
- ])) : (a(), o("div", Pe, [
276
+ ])) : (a(), o("div", Ee, [
268
277
  (a(!0), o($, null, J(R.value, (t) => (a(), o("div", {
269
278
  key: t.id,
270
- class: A(["cd-ps-result-item", { "cd-ps-selected": p.value.includes(t.id) }]),
279
+ class: j(["cd-ps-result-item", { "cd-ps-selected": i.value.includes(t.id) }]),
271
280
  onClick: (W) => fe(t)
272
281
  }, [
273
- u(x, {
274
- checked: p.value.includes(t.id),
282
+ p(x, {
283
+ checked: i.value.includes(t.id),
275
284
  onClick: e[2] || (e[2] = oe(() => {
276
285
  }, ["stop"]))
277
286
  }, null, 8, ["checked"]),
278
287
  n("div", Me, [
279
- u(l, { name: "user" })
288
+ p(s, { name: "user" })
280
289
  ]),
281
290
  n("div", Le, [
282
291
  n("div", We, h(t.displayName || t.name), 1),
283
292
  n("div", $e, [
284
293
  t.position ? (a(), o("span", Je, h(t.position), 1)) : v("", !0),
285
- t.department ? (a(), o("span", Ae, h(t.department), 1)) : v("", !0),
286
- t.phone ? (a(), o("span", Fe, h(t.phone), 1)) : v("", !0)
294
+ t.department ? (a(), o("span", je, h(t.department), 1)) : v("", !0),
295
+ t.phone ? (a(), o("span", Ae, h(t.phone), 1)) : v("", !0)
287
296
  ])
288
297
  ])
289
- ], 10, Ee))), 128))
298
+ ], 10, Pe))), 128))
290
299
  ]))
291
- ])) : (a(), S(E, {
300
+ ])) : (a(), I(P, {
292
301
  key: 1,
293
- modelValue: b.value,
294
- "onUpdate:modelValue": e[3] || (e[3] = (t) => b.value = t),
302
+ modelValue: V.value,
303
+ "onUpdate:modelValue": e[3] || (e[3] = (t) => V.value = t),
295
304
  onChange: ue
296
305
  }, {
297
306
  default: y(() => [
298
- (a(!0), o($, null, J(de.value, (t) => (a(), S(P, {
307
+ (a(!0), o($, null, J(de.value, (t) => (a(), I(E, {
299
308
  key: t.key,
300
309
  value: t.key,
301
310
  label: t.name
@@ -303,8 +312,8 @@ const xe = { class: "cd-ps-container" }, Se = {
303
312
  default: y(() => {
304
313
  var W;
305
314
  return [
306
- n("div", je, [
307
- ((W = U.value[t.key]) == null ? void 0 : W.length) > 0 ? (a(), S(w, {
315
+ n("div", Fe, [
316
+ ((W = U.value[t.key]) == null ? void 0 : W.length) > 0 ? (a(), I(B, {
308
317
  key: 0,
309
318
  ref_for: !0,
310
319
  ref: (f) => re(t.key, f),
@@ -313,21 +322,21 @@ const xe = { class: "cd-ps-container" }, Se = {
313
322
  hover: "",
314
323
  checkable: "",
315
324
  "expand-all": !1,
316
- value: p.value,
317
- onChange: me
325
+ value: i.value,
326
+ onChange: _e
318
327
  }, {
319
328
  label: y(({ node: f }) => {
320
329
  var ne;
321
330
  return [
322
331
  n("div", {
323
- class: A(["cd-ps-node", { "cd-ps-node-user": f.data.isUser }])
332
+ class: j(["cd-ps-node", { "cd-ps-node-user": f.data.isUser }])
324
333
  }, [
325
- u(l, {
334
+ p(s, {
326
335
  name: f.data.isUser ? "user" : t.icon || "folder"
327
336
  }, null, 8, ["name"]),
328
337
  n("span", null, h(f.label), 1),
329
338
  f.data.userCount && !f.data.isUser ? (a(), o("span", qe, "(" + h(f.data.userCount) + ")", 1)) : v("", !0),
330
- !f.data.isUser && !((ne = f.data.children) != null && ne.length) && !f.data.loaded ? (a(), S(i, {
339
+ !f.data.isUser && !((ne = f.data.children) != null && ne.length) && !f.data.loaded ? (a(), I(r, {
331
340
  key: 1,
332
341
  size: "small",
333
342
  variant: "text",
@@ -344,7 +353,7 @@ const xe = { class: "cd-ps-container" }, Se = {
344
353
  }),
345
354
  _: 2
346
355
  }, 1032, ["data", "value"])) : (a(), o("div", Ge, [
347
- u(l, {
356
+ p(s, {
348
357
  name: t.icon || "folder-open",
349
358
  size: "48px",
350
359
  style: { color: "#ddd" }
@@ -364,7 +373,7 @@ const xe = { class: "cd-ps-container" }, Se = {
364
373
  n("div", Qe, [
365
374
  e[12] || (e[12] = n("span", { class: "cd-ps-title" }, "已选择", -1)),
366
375
  n("span", Xe, h(O.value.length) + " 项", 1),
367
- O.value.length > 0 ? (a(), S(i, {
376
+ O.value.length > 0 ? (a(), I(r, {
368
377
  key: 0,
369
378
  size: "small",
370
379
  variant: "text",
@@ -378,7 +387,7 @@ const xe = { class: "cd-ps-container" }, Se = {
378
387
  ]),
379
388
  n("div", Ye, [
380
389
  O.value.length === 0 ? (a(), o("div", Ze, [
381
- u(l, {
390
+ p(s, {
382
391
  name: "user-checked",
383
392
  size: "64px",
384
393
  style: { color: "#ddd" }
@@ -387,13 +396,13 @@ const xe = { class: "cd-ps-container" }, Se = {
387
396
  ])) : (a(), o("div", Ke, [
388
397
  (a(!0), o($, null, J(O.value, (t) => (a(), o("div", {
389
398
  key: t.id,
390
- class: A(["cd-ps-selected-item", { "cd-ps-dept-item": !t.isUser }])
399
+ class: j(["cd-ps-selected-item", { "cd-ps-dept-item": !t.isUser }])
391
400
  }, [
392
401
  n("div", et, [
393
402
  n("div", {
394
- class: A(["cd-ps-avatar", { "cd-ps-avatar-dept": !t.isUser }])
403
+ class: j(["cd-ps-avatar", { "cd-ps-avatar-dept": !t.isUser }])
395
404
  }, [
396
- u(l, {
405
+ p(s, {
397
406
  name: t.isUser ? "user" : "folder"
398
407
  }, null, 8, ["name"])
399
408
  ], 2),
@@ -407,14 +416,14 @@ const xe = { class: "cd-ps-container" }, Se = {
407
416
  ])
408
417
  ])
409
418
  ]),
410
- u(i, {
419
+ p(r, {
411
420
  size: "small",
412
421
  variant: "text",
413
422
  shape: "circle",
414
423
  onClick: (W) => ye(t.id)
415
424
  }, {
416
425
  icon: y(() => [
417
- u(l, { name: "close" })
426
+ p(s, { name: "close" })
418
427
  ]),
419
428
  _: 1
420
429
  }, 8, ["onClick"])
@@ -429,14 +438,14 @@ const xe = { class: "cd-ps-container" }, Se = {
429
438
  }, 8, ["visible", "width"]);
430
439
  };
431
440
  }
432
- }), it = (I, F) => {
433
- const M = I.__vccOpts || I;
434
- for (const [c, C] of F)
441
+ }), it = (S, A) => {
442
+ const M = S.__vccOpts || S;
443
+ for (const [c, C] of A)
435
444
  M[c] = C;
436
445
  return M;
437
- }, rt = /* @__PURE__ */ it(ct, [["__scopeId", "data-v-0a6760cf"]]), vt = {
438
- install(I) {
439
- I.component("PersonSelector", rt);
446
+ }, rt = /* @__PURE__ */ it(ct, [["__scopeId", "data-v-e9913ad1"]]), vt = {
447
+ install(S) {
448
+ S.component("PersonSelector", rt);
440
449
  }
441
450
  };
442
451
  export {
package/dist/style.css CHANGED
@@ -1 +1 @@
1
- .cd-ps-container[data-v-0a6760cf]{display:flex;flex-direction:column;gap:16px;min-height:500px}.cd-ps-tips[data-v-0a6760cf]{display:flex;align-items:center;gap:8px;padding:12px;background-color:#e8f4ff;border-radius:4px;font-size:13px;color:#0052d9}.cd-ps-search[data-v-0a6760cf]{display:flex;gap:12px;align-items:center}.cd-ps-org-select[data-v-0a6760cf]{flex-shrink:0}.cd-ps-search-input[data-v-0a6760cf]{flex:1}.cd-ps-content[data-v-0a6760cf]{display:flex;gap:0;height:450px;border:1px solid #dfe1e6;border-radius:4px;overflow:hidden}.cd-ps-left[data-v-0a6760cf]{width:480px;flex-shrink:0;border-right:1px solid #dfe1e6;display:flex;flex-direction:column;background-color:#fafafa}.cd-ps-left[data-v-0a6760cf] .t-tabs__nav-container{padding:0 8px;background-color:#fff}.cd-ps-left[data-v-0a6760cf] .t-tabs__content{flex:1;overflow:hidden}.cd-ps-tree[data-v-0a6760cf]{height:100%;overflow-y:auto;padding:8px}.cd-ps-tree[data-v-0a6760cf]::-webkit-scrollbar{width:6px}.cd-ps-tree[data-v-0a6760cf]::-webkit-scrollbar-track{background:#f1f1f1}.cd-ps-tree[data-v-0a6760cf]::-webkit-scrollbar-thumb{background:#c1c1c1;border-radius:3px}.cd-ps-node[data-v-0a6760cf]{display:flex;align-items:center;gap:6px;font-size:14px;width:100%}[data-v-0a6760cf] .t-tree__label{flex:1}[data-v-0a6760cf] .t-checkbox__label{width:100%}.cd-ps-node-user[data-v-0a6760cf]{font-size:13px;color:#666}.cd-ps-count[data-v-0a6760cf]{color:#999;font-size:12px}.cd-ps-load-btn[data-v-0a6760cf]{margin-left:auto;color:#0052d9;font-size:12px;flex-shrink:0}.cd-ps-empty[data-v-0a6760cf]{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px 20px;color:#999}.cd-ps-empty p[data-v-0a6760cf]{margin-top:16px;font-size:14px}.cd-ps-search-results[data-v-0a6760cf]{display:flex;flex-direction:column;height:100%}.cd-ps-search-header[data-v-0a6760cf]{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;background:#fff;border-bottom:1px solid #dfe1e6;font-weight:500}.cd-ps-loading[data-v-0a6760cf]{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px 20px;gap:12px;color:#999}.cd-ps-result-list[data-v-0a6760cf]{flex:1;overflow-y:auto;padding:8px}.cd-ps-result-item[data-v-0a6760cf]{display:flex;align-items:center;gap:10px;padding:10px 12px;background:#fff;border-radius:4px;border:1px solid #e5e7eb;margin-bottom:8px;cursor:pointer;transition:all .2s}.cd-ps-result-item[data-v-0a6760cf]:hover{border-color:#0052d9;background:#f0f5ff}.cd-ps-result-item.cd-ps-selected[data-v-0a6760cf]{border-color:#0052d9;background:#e8f4ff}.cd-ps-avatar[data-v-0a6760cf]{width:32px;height:32px;border-radius:50%;background:#667eea;display:flex;align-items:center;justify-content:center;color:#fff;font-size:16px;flex-shrink:0}.cd-ps-result-item .cd-ps-avatar[data-v-0a6760cf]{width:36px;height:36px}.cd-ps-avatar-dept[data-v-0a6760cf]{background:linear-gradient(135deg,#f5af19,#f12711)}.cd-ps-info[data-v-0a6760cf]{flex:1;min-width:0}.cd-ps-name[data-v-0a6760cf]{font-size:13px;font-weight:500;color:#333;margin-bottom:4px}.cd-ps-result-item .cd-ps-name[data-v-0a6760cf]{font-size:14px}.cd-ps-meta[data-v-0a6760cf]{display:flex;flex-wrap:wrap;gap:6px;font-size:11px;color:#999}.cd-ps-result-item .cd-ps-meta[data-v-0a6760cf]{font-size:12px}.cd-ps-meta span[data-v-0a6760cf]:before{content:"•";margin-right:4px}.cd-ps-meta span[data-v-0a6760cf]:first-child:before{display:none}.cd-ps-right[data-v-0a6760cf]{flex:1;display:flex;flex-direction:column;overflow:hidden;background-color:#fafafa}.cd-ps-right-header[data-v-0a6760cf]{display:flex;align-items:center;padding:12px 16px;border-bottom:1px solid #dfe1e6;background-color:#fff}.cd-ps-title[data-v-0a6760cf]{font-weight:500;font-size:14px;color:#333}.cd-ps-num[data-v-0a6760cf]{font-size:13px;color:#0052d9;font-weight:600;margin-left:8px;flex:1}.cd-ps-right-list[data-v-0a6760cf]{flex:1;overflow-y:auto;padding:8px}.cd-ps-right-list[data-v-0a6760cf]::-webkit-scrollbar{width:6px}.cd-ps-right-list[data-v-0a6760cf]::-webkit-scrollbar-track{background:#f1f1f1}.cd-ps-right-list[data-v-0a6760cf]::-webkit-scrollbar-thumb{background:#c1c1c1;border-radius:3px}.cd-ps-selected-list[data-v-0a6760cf]{display:flex;flex-direction:column;gap:8px}.cd-ps-selected-item[data-v-0a6760cf]{display:flex;align-items:center;justify-content:space-between;padding:10px 12px;background:#fff;border-radius:4px;border:1px solid #e5e7eb;transition:all .2s}.cd-ps-selected-item[data-v-0a6760cf]:hover{border-color:#0052d9;box-shadow:0 2px 4px #0052d91a}.cd-ps-dept-item[data-v-0a6760cf]{border-color:#f5af19}.cd-ps-item-info[data-v-0a6760cf]{flex:1;min-width:0;display:flex;align-items:center;gap:10px}
1
+ .cd-ps-container[data-v-e9913ad1]{display:flex;flex-direction:column;gap:16px;min-height:500px}.cd-ps-tips[data-v-e9913ad1]{display:flex;align-items:center;gap:8px;padding:12px;background-color:#e8f4ff;border-radius:4px;font-size:13px;color:#0052d9}.cd-ps-search[data-v-e9913ad1]{display:flex;gap:12px;align-items:center}.cd-ps-org-select[data-v-e9913ad1]{flex-shrink:0}.cd-ps-search-input[data-v-e9913ad1]{flex:1}.cd-ps-content[data-v-e9913ad1]{display:flex;gap:0;height:450px;border:1px solid #dfe1e6;border-radius:4px;overflow:hidden}.cd-ps-left[data-v-e9913ad1]{width:480px;flex-shrink:0;border-right:1px solid #dfe1e6;display:flex;flex-direction:column;background-color:#fafafa}.cd-ps-left[data-v-e9913ad1] .t-tabs__nav-container{padding:0 8px;background-color:#fff}.cd-ps-left[data-v-e9913ad1] .t-tabs__content{flex:1;overflow:hidden}.cd-ps-tree[data-v-e9913ad1]{height:100%;overflow-y:auto;padding:8px}.cd-ps-tree[data-v-e9913ad1]::-webkit-scrollbar{width:6px}.cd-ps-tree[data-v-e9913ad1]::-webkit-scrollbar-track{background:#f1f1f1}.cd-ps-tree[data-v-e9913ad1]::-webkit-scrollbar-thumb{background:#c1c1c1;border-radius:3px}.cd-ps-node[data-v-e9913ad1]{display:flex;align-items:center;gap:6px;font-size:14px;width:100%}[data-v-e9913ad1] .t-tree__label{flex:1}[data-v-e9913ad1] .t-checkbox__label{width:100%}.cd-ps-node-user[data-v-e9913ad1]{font-size:13px;color:#666}.cd-ps-count[data-v-e9913ad1]{color:#999;font-size:12px}.cd-ps-load-btn[data-v-e9913ad1]{margin-left:auto;color:#0052d9;font-size:12px;flex-shrink:0}.cd-ps-empty[data-v-e9913ad1]{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px 20px;color:#999}.cd-ps-empty p[data-v-e9913ad1]{margin-top:16px;font-size:14px}.cd-ps-search-results[data-v-e9913ad1]{display:flex;flex-direction:column;height:100%}.cd-ps-search-header[data-v-e9913ad1]{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;background:#fff;border-bottom:1px solid #dfe1e6;font-weight:500}.cd-ps-loading[data-v-e9913ad1]{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px 20px;gap:12px;color:#999}.cd-ps-result-list[data-v-e9913ad1]{flex:1;overflow-y:auto;padding:8px}.cd-ps-result-item[data-v-e9913ad1]{display:flex;align-items:center;gap:10px;padding:10px 12px;background:#fff;border-radius:4px;border:1px solid #e5e7eb;margin-bottom:8px;cursor:pointer;transition:all .2s}.cd-ps-result-item[data-v-e9913ad1]:hover{border-color:#0052d9;background:#f0f5ff}.cd-ps-result-item.cd-ps-selected[data-v-e9913ad1]{border-color:#0052d9;background:#e8f4ff}.cd-ps-avatar[data-v-e9913ad1]{width:32px;height:32px;border-radius:50%;background:#667eea;display:flex;align-items:center;justify-content:center;color:#fff;font-size:16px;flex-shrink:0}.cd-ps-result-item .cd-ps-avatar[data-v-e9913ad1]{width:36px;height:36px}.cd-ps-avatar-dept[data-v-e9913ad1]{background:linear-gradient(135deg,#f5af19,#f12711)}.cd-ps-info[data-v-e9913ad1]{flex:1;min-width:0}.cd-ps-name[data-v-e9913ad1]{font-size:13px;font-weight:500;color:#333;margin-bottom:4px}.cd-ps-result-item .cd-ps-name[data-v-e9913ad1]{font-size:14px}.cd-ps-meta[data-v-e9913ad1]{display:flex;flex-wrap:wrap;gap:6px;font-size:11px;color:#999}.cd-ps-result-item .cd-ps-meta[data-v-e9913ad1]{font-size:12px}.cd-ps-meta span[data-v-e9913ad1]:before{content:"•";margin-right:4px}.cd-ps-meta span[data-v-e9913ad1]:first-child:before{display:none}.cd-ps-right[data-v-e9913ad1]{flex:1;display:flex;flex-direction:column;overflow:hidden;background-color:#fafafa}.cd-ps-right-header[data-v-e9913ad1]{display:flex;align-items:center;padding:12px 16px;border-bottom:1px solid #dfe1e6;background-color:#fff}.cd-ps-title[data-v-e9913ad1]{font-weight:500;font-size:14px;color:#333}.cd-ps-num[data-v-e9913ad1]{font-size:13px;color:#0052d9;font-weight:600;margin-left:8px;flex:1}.cd-ps-right-list[data-v-e9913ad1]{flex:1;overflow-y:auto;padding:8px}.cd-ps-right-list[data-v-e9913ad1]::-webkit-scrollbar{width:6px}.cd-ps-right-list[data-v-e9913ad1]::-webkit-scrollbar-track{background:#f1f1f1}.cd-ps-right-list[data-v-e9913ad1]::-webkit-scrollbar-thumb{background:#c1c1c1;border-radius:3px}.cd-ps-selected-list[data-v-e9913ad1]{display:flex;flex-direction:column;gap:8px}.cd-ps-selected-item[data-v-e9913ad1]{display:flex;align-items:center;justify-content:space-between;padding:10px 12px;background:#fff;border-radius:4px;border:1px solid #e5e7eb;transition:all .2s}.cd-ps-selected-item[data-v-e9913ad1]:hover{border-color:#0052d9;box-shadow:0 2px 4px #0052d91a}.cd-ps-dept-item[data-v-e9913ad1]{border-color:#f5af19}.cd-ps-item-info[data-v-e9913ad1]{flex:1;min-width:0;display:flex;align-items:center;gap:10px}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cd-personselector",
3
- "version": "1.0.8",
3
+ "version": "1.0.9",
4
4
  "description": "人员选择器组件 - 支持多Tab、树形结构、搜索、懒加载",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",
@@ -205,9 +205,27 @@ watch(() => props.tabs, (newTabs) => {
205
205
  watch(() => props.visible, (newVal) => {
206
206
  dialogVisible.value = newVal;
207
207
  if (newVal) {
208
- selectedIds.value = props.modelValue ? [...props.modelValue] : [];
209
- // 清空缓存,重新初始化
210
- selectedItemsMap.value.clear();
208
+ // 支持两种格式的 modelValue
209
+ // 1. ID 数组:[1, 2, 3]
210
+ // 2. 对象数组:[{ id: 1, name: 'xxx', ... }, ...]
211
+ if (props.modelValue && props.modelValue.length > 0) {
212
+ const firstItem = props.modelValue[0];
213
+ if (typeof firstItem === 'object' && firstItem !== null && 'id' in firstItem) {
214
+ // 对象数组格式,提取 ID 并缓存完整信息
215
+ selectedIds.value = props.modelValue.map((item: any) => item.id);
216
+ selectedItemsMap.value.clear();
217
+ props.modelValue.forEach((item: any) => {
218
+ selectedItemsMap.value.set(item.id, item);
219
+ });
220
+ } else {
221
+ // ID 数组格式
222
+ selectedIds.value = [...props.modelValue] as (number | string)[];
223
+ selectedItemsMap.value.clear();
224
+ }
225
+ } else {
226
+ selectedIds.value = [];
227
+ selectedItemsMap.value.clear();
228
+ }
211
229
  if (props.organizations.length > 0 && !selectedOrgId.value) {
212
230
  selectedOrgId.value = props.organizations[0].id;
213
231
  }