mirror of
https://github.com/Wei-Shaw/claude-relay-service.git
synced 2026-01-22 16:43:35 +00:00
2 lines
7.5 KiB
JavaScript
2 lines
7.5 KiB
JavaScript
import{r as f,c as F,q as O,Z as W,x as s,y as l,z as u,I as H,L,C as v,P as z,R as N,J as T,B,Q as q,ac as I,T as M,a5 as P,D as G,Y as D}from"./vue-vendor-R8HMg95E.js";import{_ as J}from"./index-S7cfD3ib.js";const Q={class:"relative"},U={class:"select-none whitespace-nowrap text-sm font-medium text-gray-700 dark:text-gray-200"},Y={class:"max-h-60 overflow-y-auto py-1"},Z=["onClick"],K={key:1,class:"fas fa-check ml-auto pl-3 text-xs text-blue-600 dark:text-blue-400"},X={__name:"CustomDropdown",props:{modelValue:{type:[String,Number,Array],default:""},options:{type:Array,required:!0},placeholder:{type:String,default:"请选择"},icon:{type:String,default:""},iconColor:{type:String,default:"text-gray-500"},multiple:{type:Boolean,default:!1}},emits:["update:modelValue","change"],setup(g,{emit:A}){const n=g,o=A,a=f(!1),i=f(null),y=f(null),E=f({}),b=e=>n.multiple?Array.isArray(n.modelValue)&&n.modelValue.includes(e):n.modelValue===e,R=F(()=>{if(n.multiple){const r=Array.isArray(n.modelValue)?n.modelValue.length:0;return r>0?`已选 ${r} 个`:""}const e=n.options.find(r=>r.value===n.modelValue);return e?e.label:""}),S=async()=>{a.value=!a.value,a.value&&(await G(),h())},d=()=>{a.value=!1},$=e=>{if(n.multiple){const r=Array.isArray(n.modelValue)?[...n.modelValue]:[],t=r.indexOf(e.value);t>=0?r.splice(t,1):r.push(e.value),o("update:modelValue",r),o("change",r)}else o("update:modelValue",e.value),o("change",e.value),d()},h=()=>{if(!i.value||!a.value)return;const e=i.value.getBoundingClientRect(),r=250,t=window.innerHeight-e.bottom,c=e.top;let m,p;t>=r||t>=c?m=e.bottom+8:m=e.top-r-8,p=e.left;const V=200;p+V>window.innerWidth&&(p=window.innerWidth-V-10),p<10&&(p=10),E.value={top:`${m}px`,left:`${p}px`,minWidth:`${e.width}px`}},x=()=>{a.value&&h()},k=()=>{a.value&&d()},_=e=>{!i.value||!a.value||i.value.contains(e.target)||(y.value&&!y.value.contains(e.target)?d():y.value||d())};return O(()=>{window.addEventListener("scroll",x,!0),window.addEventListener("resize",k),document.addEventListener("click",_)}),W(()=>{window.removeEventListener("scroll",x,!0),window.removeEventListener("resize",k),document.removeEventListener("click",_)}),(e,r)=>(l(),s("div",Q,[u("div",{ref_key:"triggerRef",ref:i,class:v(["relative flex cursor-pointer items-center gap-2 rounded-lg border border-gray-200 bg-white px-3 py-2 shadow-sm transition-all duration-200 hover:shadow-md dark:border-gray-600 dark:bg-gray-800",[a.value&&"border-blue-400 shadow-md"]]),onClick:S},[g.icon?(l(),s("i",{key:0,class:v(["fas",g.icon,"text-sm",g.iconColor])},null,2)):L("",!0),u("span",U,z(R.value||g.placeholder),1),u("i",{class:v(["fas fa-chevron-down ml-auto text-xs text-gray-400 transition-transform duration-200 dark:text-gray-500",a.value&&"rotate-180"])},null,2)],2),(l(),H(P,{to:"body"},[N(M,{"enter-active-class":"transition duration-200 ease-out","enter-from-class":"transform scale-95 opacity-0","enter-to-class":"transform scale-100 opacity-100","leave-active-class":"transition duration-150 ease-in","leave-from-class":"transform scale-100 opacity-100","leave-to-class":"transform scale-95 opacity-0"},{default:T(()=>[a.value?(l(),s("div",{key:0,ref_key:"dropdownRef",ref:y,class:"fixed z-[9999] min-w-max overflow-hidden rounded-lg border border-gray-200 bg-white shadow-lg dark:border-gray-600 dark:bg-gray-800",style:B(E.value)},[u("div",Y,[(l(!0),s(q,null,I(g.options,t=>(l(),s("div",{key:t.value,class:v(["flex cursor-pointer items-center gap-2 whitespace-nowrap py-2 text-sm transition-colors duration-150",[b(t.value)?"bg-blue-50 font-medium text-blue-700 dark:bg-blue-900/30 dark:text-blue-400":t.isGroup?"bg-gray-50 font-semibold text-gray-800 dark:bg-gray-700/50 dark:text-gray-200":"text-gray-700 hover:bg-gray-50 dark:text-gray-300 dark:hover:bg-gray-700"]]),style:B({paddingLeft:t.indent?`${12+t.indent*16}px`:"12px",paddingRight:"12px"}),onClick:c=>$(t)},[t.icon?(l(),s("i",{key:0,class:v(["fas",t.icon,"text-xs"])},null,2)):L("",!0),u("span",null,z(t.label),1),b(t.value)?(l(),s("i",K)):L("",!0)],14,Z))),128))])],4)):L("",!0)]),_:1})]))]))}},oe=J(X,[["__scopeId","data-v-8ae1c2f4"]]),ee={class:"relative"},te=["onClick"],ne={__name:"ActionDropdown",props:{actions:{type:Array,required:!0}},emits:["action"],setup(g,{emit:A}){const n=A,o=f(!1),a=f(null),i=f(null),y=f({}),E=e=>{const r={purple:"text-purple-600 hover:bg-purple-50 dark:text-purple-400 dark:hover:bg-purple-900/20",indigo:"text-indigo-600 hover:bg-indigo-50 dark:text-indigo-400 dark:hover:bg-indigo-900/20",blue:"text-blue-600 hover:bg-blue-50 dark:text-blue-400 dark:hover:bg-blue-900/20",green:"text-green-600 hover:bg-green-50 dark:text-green-400 dark:hover:bg-green-900/20",orange:"text-orange-600 hover:bg-orange-50 dark:text-orange-400 dark:hover:bg-orange-900/20",red:"text-red-600 hover:bg-red-50 dark:text-red-400 dark:hover:bg-red-900/20",gray:"text-gray-600 hover:bg-gray-50 dark:text-gray-400 dark:hover:bg-gray-700"};return r[e.color]||r.gray},b=Symbol("action-dropdown"),R=e=>{var r;((r=e==null?void 0:e.detail)==null?void 0:r.id)!==b&&d()},S=async()=>{o.value||window.dispatchEvent(new CustomEvent("action-dropdown-open",{detail:{id:b}})),o.value=!o.value,o.value&&(await G(),h())},d=()=>{o.value=!1},$=e=>{d(),e.handler&&e.handler(),n("action",e.key)},h=()=>{if(!a.value||!o.value)return;const e=a.value.getBoundingClientRect(),r=200,t=180,c=8,m=window.innerHeight-e.bottom,p=e.top,V=window.innerWidth-e.right,j=e.left;let C,w;m>=r||m>=p?C=e.bottom+c:C=e.top-r-c,V>=t+c?w=e.right+c:j>=t+c?w=e.left-t-c+e.width:w=window.innerWidth-t-10,w<10&&(w=10),C<10&&(C=10),y.value={top:`${C}px`,left:`${w}px`}},x=()=>{o.value&&h()},k=()=>{o.value&&d()},_=e=>{!a.value||!o.value||a.value.contains(e.target)||(i.value&&!i.value.contains(e.target)?d():i.value||d())};return O(()=>{window.addEventListener("scroll",x,!0),window.addEventListener("resize",k),document.addEventListener("click",_),window.addEventListener("action-dropdown-open",R)}),W(()=>{window.removeEventListener("scroll",x,!0),window.removeEventListener("resize",k),document.removeEventListener("click",_),window.removeEventListener("action-dropdown-open",R)}),(e,r)=>(l(),s("div",ee,[u("button",{ref_key:"triggerRef",ref:a,class:v(["flex h-8 w-8 items-center justify-center rounded-lg border border-gray-200 bg-white text-gray-600 transition-all duration-200 hover:border-gray-300 hover:bg-gray-50 hover:text-gray-900 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-400 dark:hover:border-gray-500 dark:hover:bg-gray-700 dark:hover:text-gray-200",[o.value&&"border-blue-400 bg-blue-50 text-blue-600 dark:border-blue-500 dark:bg-blue-900/30 dark:text-blue-400"]]),title:"更多操作",onClick:D(S,["stop"])},r[0]||(r[0]=[u("i",{class:"fas fa-ellipsis-v text-sm"},null,-1)]),2),(l(),H(P,{to:"body"},[N(M,{"enter-active-class":"transition duration-200 ease-out","enter-from-class":"transform scale-95 opacity-0","enter-to-class":"transform scale-100 opacity-100","leave-active-class":"transition duration-150 ease-in","leave-from-class":"transform scale-100 opacity-100","leave-to-class":"transform scale-95 opacity-0"},{default:T(()=>[o.value?(l(),s("div",{key:0,ref_key:"dropdownRef",ref:i,class:"fixed z-[9999] min-w-[140px] overflow-hidden rounded-lg border border-gray-200 bg-white py-1 shadow-lg dark:border-gray-600 dark:bg-gray-800",style:B(y.value)},[(l(!0),s(q,null,I(g.actions,t=>(l(),s("button",{key:t.key,class:v(["flex w-full items-center gap-2 whitespace-nowrap px-3 py-2 text-left text-sm transition-colors duration-150",E(t)]),onClick:D(c=>$(t),["stop"])},[u("i",{class:v(["fas",t.icon,"w-4 text-center text-xs"])},null,2),u("span",null,z(t.label),1)],10,te))),128))],4)):L("",!0)]),_:1})]))]))}};export{oe as C,ne as _};
|